diff --git a/.textlintrc.json b/.textlintrc.json
index 914366e2bd9b..f63d815c5509 100644
--- a/.textlintrc.json
+++ b/.textlintrc.json
@@ -28,7 +28,6 @@
"Alarm.com",
"AlarmDecoder",
"Alexa",
- "Almond",
"Alpha Vantage",
"Amazon Alexa",
"Amazon Polly",
@@ -142,6 +141,7 @@
"IP",
"iPad",
"iPhone",
+ "ISY",
"ISY994",
"iTunes",
"JSON-RPC",
diff --git a/CODEOWNERS b/CODEOWNERS
index b00510ac5090..709df8de59f2 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -32,7 +32,6 @@ source/_integrations/alarm_control_panel.markdown @home-assistant/core
source/_integrations/alert.markdown @home-assistant/core @frenck
source/_integrations/alexa.markdown @home-assistant/cloud @ochlocracy @jbouwh
source/_integrations/alexa.smart_home.markdown @home-assistant/cloud @ochlocracy
-source/_integrations/almond.markdown @gcampax @balloob
source/_integrations/amberelectric.markdown @madpilot
source/_integrations/ambiclimate.markdown @danielhiversen
source/_integrations/ambient_station.markdown @bachya
@@ -42,6 +41,7 @@ source/_integrations/analytics.markdown @home-assistant/core @ludeeus
source/_integrations/android_ip_webcam.markdown @engrbm87
source/_integrations/androidtv.markdown @JeffLIrion @ollo69
source/_integrations/anthemav.markdown @hyralex
+source/_integrations/anwb_energie.markdown @klaasnicolaas
source/_integrations/apache_kafka.markdown @bachya
source/_integrations/apcupsd.markdown @yuxincs
source/_integrations/api.markdown @home-assistant/core
@@ -85,6 +85,7 @@ source/_integrations/bluemaestro.markdown @bdraco
source/_integrations/blueprint.markdown @home-assistant/core
source/_integrations/bluesound.markdown @thrawnarn
source/_integrations/bluetooth.markdown @bdraco
+source/_integrations/bluetooth_adapters.markdown @bdraco
source/_integrations/bmw_connected_drive.markdown @gerard33 @rikroe
source/_integrations/bond.markdown @bdraco @prystupa @joshs85 @marciogranzotto
source/_integrations/bosch_shc.markdown @tschamm
@@ -153,6 +154,7 @@ source/_integrations/digital_ocean.markdown @fabaff
source/_integrations/discogs.markdown @thibmaek
source/_integrations/discord.markdown @tkdrob
source/_integrations/discovery.markdown @home-assistant/core
+source/_integrations/dlink.markdown @tkdrob
source/_integrations/dlna_dmr.markdown @StevenLooman @chishm
source/_integrations/dlna_dms.markdown @chishm
source/_integrations/dnsip.markdown @gjohansson-ST
@@ -179,7 +181,9 @@ source/_integrations/emoncms.markdown @borpin
source/_integrations/emonitor.markdown @bdraco
source/_integrations/emulated_hue.markdown @bdraco
source/_integrations/emulated_kasa.markdown @kbickar
+source/_integrations/energie_vanons.markdown @klaasnicolaas
source/_integrations/energy.markdown @home-assistant/core
+source/_integrations/energyzero.markdown @klaasnicolaas
source/_integrations/enigma2.markdown @fbradyirl
source/_integrations/enocean.markdown @bdurrer
source/_integrations/enphase_envoy.markdown @gtdiehl
@@ -192,6 +196,7 @@ source/_integrations/epsonworkforce.markdown @ThaStealth
source/_integrations/eq3btsmart.markdown @rytilahti
source/_integrations/escea.markdown @lazdavila
source/_integrations/esphome.markdown @OttoWinter @jesserockz
+source/_integrations/eufylife_ble.markdown @bdr99
source/_integrations/evil_genius_labs.markdown @balloob
source/_integrations/evohome.markdown @zxdavb
source/_integrations/ezviz.markdown @RenierM26 @baqs
@@ -203,6 +208,7 @@ source/_integrations/file.markdown @fabaff
source/_integrations/file_upload.markdown @home-assistant/core
source/_integrations/filesize.markdown @gjohansson-ST
source/_integrations/filter.markdown @dgomes
+source/_integrations/fire_tv.markdown @JeffLIrion @ollo69
source/_integrations/fireservicerota.markdown @cyberjunky
source/_integrations/firmata.markdown @DaAwesomeP
source/_integrations/fivem.markdown @Sander0542
@@ -248,6 +254,7 @@ source/_integrations/google.markdown @allenporter
source/_integrations/google_assistant.markdown @home-assistant/cloud
source/_integrations/google_assistant_sdk.markdown @tronikos
source/_integrations/google_cloud.markdown @lufton
+source/_integrations/google_mail.markdown @tkdrob
source/_integrations/google_sheets.markdown @tkdrob
source/_integrations/google_travel_time.markdown @eifinger
source/_integrations/govee_ble.markdown @bdraco @PierreAronnax
@@ -284,7 +291,7 @@ source/_integrations/homekit.markdown @bdraco
source/_integrations/homekit_controller.markdown @Jc2k @bdraco
source/_integrations/homematic.markdown @pvizeli @danielperna84
source/_integrations/homewizard.markdown @DCSBL
-source/_integrations/honeywell.markdown @rdfurman
+source/_integrations/honeywell.markdown @rdfurman @mkmer
source/_integrations/http.markdown @home-assistant/core
source/_integrations/huawei_lte.markdown @scop @fphammerle
source/_integrations/hue.markdown @balloob @marcelveldt
@@ -303,6 +310,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/incomfort.markdown @zxdavb
source/_integrations/influxdb.markdown @mdegat01
source/_integrations/inkbird.markdown @bdraco
@@ -340,6 +348,7 @@ source/_integrations/kef.markdown @basnijholt
source/_integrations/kegtron.markdown @Ernst79
source/_integrations/keyboard_remote.markdown @bendavid @lanrat
source/_integrations/keymitt_ble.markdown @spycle
+source/_integrations/kitchen_sink.markdown @home-assistant/core
source/_integrations/kmtronic.markdown @dgomes
source/_integrations/knx.markdown @Julius2342 @farmio @marvin-w
source/_integrations/kodi.markdown @OnFreund @cgtobi
@@ -353,6 +362,7 @@ source/_integrations/landisgyr_heat_meter.markdown @vpathuis
source/_integrations/launch_library.markdown @ludeeus @DurgNomis-drol
source/_integrations/laundrify.markdown @xLarry
source/_integrations/lcn.markdown @alengwenus
+source/_integrations/ld2410_ble.markdown @930913
source/_integrations/led_ble.markdown @bdraco
source/_integrations/legrand.markdown @cgtobi
source/_integrations/leviton_z_wave.markdown @home-assistant/z-wave
@@ -382,7 +392,6 @@ source/_integrations/lyric.markdown @timmo001
source/_integrations/marantz.markdown @ol-iver @starkillerOG
source/_integrations/martec.markdown @starkillerOG
source/_integrations/mastodon.markdown @fabaff
-source/_integrations/matrix.markdown @tinloaf
source/_integrations/mazda.markdown @bdr99
source/_integrations/meater.markdown @Sotolotl @emontnemery
source/_integrations/media_player.markdown @home-assistant/core
@@ -397,6 +406,7 @@ source/_integrations/meteo_france.markdown @hacf-fr @oncleben31 @Quentame
source/_integrations/meteoalarm.markdown @rolfberkenbosch
source/_integrations/meteoclimatic.markdown @adrianmo
source/_integrations/metoffice.markdown @MrHarcombe @avee87
+source/_integrations/mijndomein_energie.markdown @klaasnicolaas
source/_integrations/mikrotik.markdown @engrbm87
source/_integrations/mill.markdown @danielhiversen
source/_integrations/min_max.markdown @gjohansson-ST
@@ -410,6 +420,7 @@ source/_integrations/modern_forms.markdown @wonderslug
source/_integrations/moehlenhoff_alpha2.markdown @j-a-n
source/_integrations/monoprice.markdown @etsinko @OnFreund
source/_integrations/moon.markdown @fabaff @frenck
+source/_integrations/mopeka.markdown @bdraco
source/_integrations/motion_blinds.markdown @starkillerOG
source/_integrations/motioneye.markdown @dermotduffy
source/_integrations/mqtt.markdown @emontnemery @jbouwh
@@ -468,6 +479,7 @@ source/_integrations/ondilo_ico.markdown @JeromeHXP
source/_integrations/onewire.markdown @garbled1 @epenet
source/_integrations/onvif.markdown @hunterjm
source/_integrations/open_meteo.markdown @frenck
+source/_integrations/openai_conversation.markdown @balloob
source/_integrations/openerz.markdown @misialq
source/_integrations/openexchangerates.markdown @MartinHjelmare
source/_integrations/opengarage.markdown @danielhiversen
@@ -476,8 +488,9 @@ source/_integrations/opentherm_gw.markdown @mvn23
source/_integrations/openuv.markdown @bachya
source/_integrations/openweathermap.markdown @fabaff @freekode @nzapponi
source/_integrations/opnsense.markdown @mtreinish
-source/_integrations/oralb.markdown @bdraco
+source/_integrations/oralb.markdown @bdraco @Lash-L
source/_integrations/oru.markdown @bvlaicu
+source/_integrations/otbr.markdown @home-assistant/core
source/_integrations/overkiz.markdown @imicknl @vlebourl @tetienne @nyroDev
source/_integrations/ovo_energy.markdown @timmo001
source/_integrations/p1_monitor.markdown @klaasnicolaas
@@ -496,7 +509,7 @@ source/_integrations/plugwise.markdown @CoMPaTech @bouwew @brefra @frenck
source/_integrations/plum_lightpad.markdown @ColinHarrington @prystupa
source/_integrations/point.markdown @fredrike
source/_integrations/poolsense.markdown @haemishkyd
-source/_integrations/powerwall.markdown @bdraco @jrester
+source/_integrations/powerwall.markdown @bdraco @jrester @daniel-simpson
source/_integrations/profiler.markdown @bdraco
source/_integrations/progettihwsw.markdown @ardaseremet
source/_integrations/prometheus.markdown @knyar
@@ -534,6 +547,7 @@ source/_integrations/recorder.markdown @home-assistant/core
source/_integrations/rejseplanen.markdown @DarkFox
source/_integrations/remote.markdown @home-assistant/core
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/rexel.markdown @imicknl @vlebourl @tetienne @nyroDev
@@ -552,7 +566,9 @@ source/_integrations/rpi_power.markdown @shenxn @swetoast
source/_integrations/rss_feed_template.markdown @home-assistant/core
source/_integrations/rtsp_to_webrtc.markdown @allenporter
source/_integrations/ruckus_unleashed.markdown @gabe565
+source/_integrations/ruuvi_gateway.markdown @akx
source/_integrations/ruuvitag_ble.markdown @akx
+source/_integrations/rympro.markdown @OnFreund
source/_integrations/sabnzbd.markdown @shaiu
source/_integrations/safe_mode.markdown @home-assistant/core
source/_integrations/saj.markdown @fredericvl
@@ -579,6 +595,7 @@ source/_integrations/sentry.markdown @dcramer @frenck
source/_integrations/senz.markdown @milanmeu
source/_integrations/serial.markdown @fabaff
source/_integrations/seven_segments.markdown @fabaff
+source/_integrations/sfr_box.markdown @epenet
source/_integrations/sharkiq.markdown @JeffResc @funkybunch @AritroSaha10
source/_integrations/shell_command.markdown @home-assistant/core
source/_integrations/shelly.markdown @balloob @bieniu @thecode @chemelli74 @bdraco
@@ -630,11 +647,13 @@ source/_integrations/sql.markdown @dgomes @gjohansson-ST
source/_integrations/squeezebox.markdown @rajlaud
source/_integrations/srp_energy.markdown @briglx
source/_integrations/starline.markdown @anonym-tsk
+source/_integrations/starlink.markdown @boswelja
source/_integrations/statistics.markdown @fabaff @ThomDietrich
source/_integrations/steam_online.markdown @tkdrob
source/_integrations/steamist.markdown @bdraco
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/subaru.markdown @G-Two
@@ -672,6 +691,7 @@ source/_integrations/thermobeacon.markdown @bdraco
source/_integrations/thermoplus.markdown @bdraco
source/_integrations/thermopro.markdown @bdraco
source/_integrations/thethingsnetwork.markdown @fabaff
+source/_integrations/thread.markdown @home-assistant/core
source/_integrations/threshold.markdown @fabaff
source/_integrations/tibber.markdown @danielhiversen
source/_integrations/tile.markdown @bachya
@@ -735,10 +755,10 @@ source/_integrations/watttime.markdown @bachya
source/_integrations/waze_travel_time.markdown @eifinger
source/_integrations/weather.markdown @home-assistant/core
source/_integrations/webhook.markdown @home-assistant/core
-source/_integrations/webostv.markdown @bendavid @thecode
+source/_integrations/webostv.markdown @thecode
source/_integrations/websocket_api.markdown @home-assistant/core
source/_integrations/wemo.markdown @esev
-source/_integrations/whirlpool.markdown @abmantis
+source/_integrations/whirlpool.markdown @abmantis @mkmer
source/_integrations/whois.markdown @frenck
source/_integrations/wiffi.markdown @mampfes
source/_integrations/wilight.markdown @leofig-rj
@@ -770,9 +790,10 @@ source/_integrations/zamg.markdown @killer0071234
source/_integrations/zengge.markdown @emontnemery
source/_integrations/zeroconf.markdown @bdraco
source/_integrations/zerproc.markdown @emlove
+source/_integrations/zeversolar.markdown @kvanzuijlen
source/_integrations/zha.markdown @dmulcahey @adminiuga @puddly
source/_integrations/zodiac.markdown @JulienTant
source/_integrations/zone.markdown @home-assistant/core
source/_integrations/zoneminder.markdown @rohankapoorcom
source/_integrations/zwave_js.markdown @home-assistant/z-wave
-source/_integrations/zwave_me.markdown @lawfulchaos @Z-Wave-Me
+source/_integrations/zwave_me.markdown @lawfulchaos @Z-Wave-Me @PoltoS
diff --git a/Gemfile.lock b/Gemfile.lock
index 5767bda7d27f..111a0781846b 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -90,14 +90,14 @@ GEM
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.5)
- rouge (4.0.1)
+ rouge (4.1.0)
ruby2_keywords (0.0.5)
safe_yaml (1.0.5)
sass (3.4.25)
- sass-embedded (1.57.1)
+ sass-embedded (1.58.0)
google-protobuf (~> 3.21)
rake (>= 10.0.0)
- sass-embedded (1.57.1-x64-mingw32)
+ sass-embedded (1.58.0-x64-mingw32)
google-protobuf (~> 3.21)
sass-globbing (1.1.5)
sass (>= 3.1)
@@ -119,6 +119,7 @@ GEM
tzinfo-data (1.2022.7)
tzinfo (>= 1.0.0)
unicode-display_width (2.4.2)
+ wdm (0.1.1)
webrick (1.8.1)
PLATFORMS
@@ -140,6 +141,7 @@ DEPENDENCIES
stringex (= 2.8.5)
tzinfo (~> 2.0)
tzinfo-data
+ wdm (~> 0.1.0)
RUBY VERSION
ruby 2.6.2p47
diff --git a/_config.yml b/_config.yml
index 8ffe790fcf50..fb99431e0bfe 100644
--- a/_config.yml
+++ b/_config.yml
@@ -109,9 +109,9 @@ social:
# Home Assistant release details
current_major_version: 2023
-current_minor_version: 1
-current_patch_version: 7
-date_released: 2023-01-22
+current_minor_version: 2
+current_patch_version: 3
+date_released: 2023-02-07
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.
diff --git a/package-lock.json b/package-lock.json
index dc24fd24a4ab..f10a83274cf4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,7 +14,7 @@
"remark-lint-fenced-code-flag": "^3.1.1",
"remark-lint-no-shell-dollars": "^3.1.1",
"remark-stringify": "^10.0.2",
- "textlint": "^13.1.0",
+ "textlint": "^13.3.0",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^3.0.4"
@@ -228,59 +228,59 @@
"dev": true
},
"node_modules/@textlint/ast-node-types": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-13.1.0.tgz",
- "integrity": "sha512-Lees6mOme6qP8vDcsM/VskiPeHi+z8Tb6LKBb3F0Y/0UBsFo6X7+njDIjtXvO4T48R57srxpa1hyNnjHop4Uog==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-13.3.0.tgz",
+ "integrity": "sha512-5PGZhAxOJ987c311SayvjGNkcVuX/Dr3k+H/FJDmS/wDcgZ0lEAdJzjCKn9USXXf2r+i14kZCbhzg8V01KSyKg==",
"dev": true
},
"node_modules/@textlint/ast-tester": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-13.1.0.tgz",
- "integrity": "sha512-4xkKQpBC1MyHz4B1YgQfYIdxJLZhpfXgdgIYc9WDC2AESnhM75I7LUElY3bDUDMGhP99E4H1Ix5C+CftYqvIHA==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-13.3.0.tgz",
+ "integrity": "sha512-LwGd7JjHNXekgCA4BmE39S9fQrgDHJLk2MSf5+uPdUWQM2ojL/RQiyucghxwGdKib+1DutcPrbJSM4SdT1HWSQ==",
"dev": true,
"dependencies": {
- "@textlint/ast-node-types": "^13.1.0",
+ "@textlint/ast-node-types": "^13.3.0",
"debug": "^4.3.4"
}
},
"node_modules/@textlint/ast-traverse": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-13.1.0.tgz",
- "integrity": "sha512-253DKapEjr6L9kx2npNvhaJTmoOJBw38w0D2cvUuHAZv9sx7U5G1aej9ScnIIyIcSotIcDFAVt3B+afA5KMCTA==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-13.3.0.tgz",
+ "integrity": "sha512-bF0OeKlOtE8f9pNKRlgXqCdApZPYCj7n2Ty3DHvGbumC+rC5tapQuIioxwKKC11deQY1nsYTf2gaYV52SdFS6Q==",
"dev": true,
"dependencies": {
- "@textlint/ast-node-types": "^13.1.0"
+ "@textlint/ast-node-types": "^13.3.0"
}
},
"node_modules/@textlint/config-loader": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-13.1.0.tgz",
- "integrity": "sha512-hQmGt9H9ozeLo2PGETTNrvEYGsA7c+svtldpUT2fBQ9uclWruUK1h8+BPOIqzH0YjTyvMTTajtGhibbu1bZ3/A==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-13.3.0.tgz",
+ "integrity": "sha512-CZ088hUWjY360MOGDIZkVw2Ln8zLc/3BlMCE4FDsPX1ojKXcJX2vL+9YRVK5gDZYL3+W4mFHGJUkvEmTnroG9g==",
"dev": true,
"dependencies": {
- "@textlint/kernel": "^13.1.0",
- "@textlint/module-interop": "^13.1.0",
- "@textlint/types": "^13.1.0",
- "@textlint/utils": "^13.1.0",
+ "@textlint/kernel": "^13.3.0",
+ "@textlint/module-interop": "^13.3.0",
+ "@textlint/types": "^13.3.0",
+ "@textlint/utils": "^13.3.0",
"debug": "^4.3.4",
"rc-config-loader": "^4.1.2",
"try-resolve": "^1.0.1"
}
},
"node_modules/@textlint/feature-flag": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-13.1.0.tgz",
- "integrity": "sha512-YolfMMWZ+8bJWVFl7gu+SgiZT/b9Q+QS6HyAco6o2zDE09GbDofu/MLGNmYqTst4YBPkuyEJ5oGlv395CT23FQ==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-13.3.0.tgz",
+ "integrity": "sha512-GhMH0UiwQPPjyngvmybw637g6GHdwFVnZj0XpQBKG6W+bQO5ubsc/jsox2E+PgNwRYwlaSOf/hR69BuHtCZyZg==",
"dev": true
},
"node_modules/@textlint/fixer-formatter": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-13.1.0.tgz",
- "integrity": "sha512-gb+GPnddmniGpJPC8dQI2iqOciiseQBjHbpmqc1vzrDa+BGsRglcFP6MD24Jak6xwDhsDJtyjvCSRTTvSvkV8g==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-13.3.0.tgz",
+ "integrity": "sha512-zVZHjnUVCL1yuW7dBwGwPJmyM1xZXBzkC3ADvB9n0Sz9EYSF0903bg0cXy3oZtdbllIXDxuMkUHbhfJReZOYeA==",
"dev": true,
"dependencies": {
- "@textlint/module-interop": "^13.1.0",
- "@textlint/types": "^13.1.0",
+ "@textlint/module-interop": "^13.3.0",
+ "@textlint/types": "^13.3.0",
"chalk": "^4.1.2",
"debug": "^4.3.4",
"diff": "^4.0.2",
@@ -292,18 +292,18 @@
}
},
"node_modules/@textlint/kernel": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-13.1.0.tgz",
- "integrity": "sha512-t/imOABHI6SicIBvGqMONjRustBoCJtuZgD8fYdelsxdcaO07ukbv/puYSYwNQepQ9KXcWSfeTLy+7zgbFW/hg==",
- "dev": true,
- "dependencies": {
- "@textlint/ast-node-types": "^13.1.0",
- "@textlint/ast-tester": "^13.1.0",
- "@textlint/ast-traverse": "^13.1.0",
- "@textlint/feature-flag": "^13.1.0",
- "@textlint/source-code-fixer": "^13.1.0",
- "@textlint/types": "^13.1.0",
- "@textlint/utils": "^13.1.0",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-13.3.0.tgz",
+ "integrity": "sha512-vrFpvuNlqDxA9uNvkw43FZs9DKRRWejCzo3iIL7QGIqXoEVa2yQyKgi4rjsfkUQlU7NW8McPL0lUEKkwH0XD2w==",
+ "dev": true,
+ "dependencies": {
+ "@textlint/ast-node-types": "^13.3.0",
+ "@textlint/ast-tester": "^13.3.0",
+ "@textlint/ast-traverse": "^13.3.0",
+ "@textlint/feature-flag": "^13.3.0",
+ "@textlint/source-code-fixer": "^13.3.0",
+ "@textlint/types": "^13.3.0",
+ "@textlint/utils": "^13.3.0",
"debug": "^4.3.4",
"fast-equals": "^4.0.3",
"structured-source": "^4.0.0"
@@ -325,15 +325,15 @@
}
},
"node_modules/@textlint/linter-formatter": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-13.1.0.tgz",
- "integrity": "sha512-JaAUTsuPDoMmFUravEDP2pCyB8npr8q0bjbrYJWVZqTDHAPRWxdU0HFtOhc6cprb6DOkSkbioq/ojj2DjYx3gQ==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-13.3.0.tgz",
+ "integrity": "sha512-ngf17z3ugKpnZ5oGcvVACrM/LZi/Mgj6iZl3ZdzyR91bIayBA1wzi9aty2XO+M0TVpOnKyBAfNg1VY4iO33pdQ==",
"dev": true,
"dependencies": {
"@azu/format-text": "^1.0.1",
"@azu/style-format": "^1.0.0",
- "@textlint/module-interop": "^13.1.0",
- "@textlint/types": "^13.1.0",
+ "@textlint/module-interop": "^13.3.0",
+ "@textlint/types": "^13.3.0",
"chalk": "^4.1.2",
"debug": "^4.3.4",
"is-file": "^1.0.0",
@@ -349,12 +349,12 @@
}
},
"node_modules/@textlint/markdown-to-ast": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-13.1.0.tgz",
- "integrity": "sha512-pPzxLuAOv0luOh4uUG/H/dq77/C5SiLiUx2qMAEaOZrfF6dl46bIDXUSbtryFBV8Nrpj3kUE3s4al9vPTOUFWA==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-13.3.0.tgz",
+ "integrity": "sha512-TCw8HN9vwVuo7oXb9NSwSjnCfM2TB0IgLxF75CU90R4MrsQYZ7HZTJxPXhYqQFzAYxFyHZrzEhxodYCry2EChw==",
"dev": true,
"dependencies": {
- "@textlint/ast-node-types": "^13.1.0",
+ "@textlint/ast-node-types": "^13.3.0",
"debug": "^4.3.4",
"mdast-util-gfm-autolink-literal": "^0.1.3",
"remark-footnotes": "^3.0.0",
@@ -684,61 +684,61 @@
}
},
"node_modules/@textlint/module-interop": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-13.1.0.tgz",
- "integrity": "sha512-j3nJZ5rU6U+mxjAWXLAdGJyVuLs0RpHFQKVXapeKVt0JNhix+VDXTCGPw3eSRlno1BPSoxgmQhEHdal3/PeH9w==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-13.3.0.tgz",
+ "integrity": "sha512-3u5gZR8NL3yKHCh7QDttTNYmKMyfx55NmRfS1HalGFTIgaHwAFCz95KX7JA3WhpIa9Hu7zKlaxA1WGUnJDHLyA==",
"dev": true
},
"node_modules/@textlint/source-code-fixer": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-13.1.0.tgz",
- "integrity": "sha512-zMDPhouqnp2ey8bGKbMaK3+kNsLa0r6eA41w+8LBKbDUY+vhuw6cQ99BeZfAD9tehMuAuI/kQLIgVvwPchU6qw==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-13.3.0.tgz",
+ "integrity": "sha512-zLTmp8XyuksW90u0Y24wNALKd2xuieI/Vc40RKAYMEJL+sYyL0O2gYllnjcgQtLMz1wzy7rEXHMxvp/dvPX6/w==",
"dev": true,
"dependencies": {
- "@textlint/types": "^13.1.0",
+ "@textlint/types": "^13.3.0",
"debug": "^4.3.4"
}
},
"node_modules/@textlint/text-to-ast": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-13.1.0.tgz",
- "integrity": "sha512-5Gzg0CCl5F2ckyhbyRYf2yyBuXZEA7P3UVvRS0Zc/Tr6I/jtOROAZPTlsDrG1HwNd7iR+NqT3PtfKmL5gLt/AA==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-13.3.0.tgz",
+ "integrity": "sha512-d8eN3WDWC27Pd8DpREMIWGEAp4GNiIzDQRezL4az3OLwS4yUsqUh3g2Q9cj7Vm7l3kmrs/0LFl+yxEaklk64Kw==",
"dev": true,
"dependencies": {
- "@textlint/ast-node-types": "^13.1.0"
+ "@textlint/ast-node-types": "^13.3.0"
}
},
"node_modules/@textlint/textlint-plugin-markdown": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-13.1.0.tgz",
- "integrity": "sha512-CqqOORpmxdFkN6ZguQV+sMJ/uFOIVAps9IbeF3zkygQcHzD3/scojBdIM5GEDG1gdRZvdNeAfbcZNVyUEIK3Rg==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-13.3.0.tgz",
+ "integrity": "sha512-p6+dOuLKo05ZvujnhQcQc95PIPevF8gqvzb2/7iNsJH1BhH2IjJXVZzEalIMBNnP8ieOb8Fhee51OBkzI0gEGw==",
"dev": true,
"dependencies": {
- "@textlint/markdown-to-ast": "^13.1.0"
+ "@textlint/markdown-to-ast": "^13.3.0"
}
},
"node_modules/@textlint/textlint-plugin-text": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-13.1.0.tgz",
- "integrity": "sha512-TPxF8rvg/VE9qnNKznNRDc0NV+vVKP25q1tI8WfmkYPH3SRFGqg9UaCnIe0hSXeZKXUpBJfor8uDHcfd6e7T9w==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-13.3.0.tgz",
+ "integrity": "sha512-j/I+g4IRBbeswRN4H4swQosEQUQUp1D9PBYE0amya9qthP7LviJKWgN8eGjvGFsNMLZIdxsG+DUiN5qlyrRY0g==",
"dev": true,
"dependencies": {
- "@textlint/text-to-ast": "^13.1.0"
+ "@textlint/text-to-ast": "^13.3.0"
}
},
"node_modules/@textlint/types": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/types/-/types-13.1.0.tgz",
- "integrity": "sha512-H0oETFHYayeXwFHxlr5wFtwVpOcodZcFp5X3AZDCE6XbCY195exrnKlZsAfj+oEjRnjffahEZ6P5oOIh8Dt65w==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/types/-/types-13.3.0.tgz",
+ "integrity": "sha512-Xr3BBKbCClux2GDFvXDNMDXo4Q/weo0JaRaqUq6dPp2wYQ5UmZA3XhFdIY69hZPiaUIP6mAycZK8VHro9AMp+g==",
"dev": true,
"dependencies": {
- "@textlint/ast-node-types": "^13.1.0"
+ "@textlint/ast-node-types": "^13.3.0"
}
},
"node_modules/@textlint/utils": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-13.1.0.tgz",
- "integrity": "sha512-DJxYdyH00uWLzYK1IB6UYum3H6Gx/uDcLzAsr+2WhhkO3voosPqig1zd00zrY5RPyaVqYVkucN+Ulp8HqGjyXw==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-13.3.0.tgz",
+ "integrity": "sha512-hJ57KmY6C4LTWPoi1VkSJczIVm6Gc1lo0caK9rEy19AsYoKrqjZY4yh5i/9wUZ1CruGfuomI4TDlM1OT5aKELg==",
"dev": true
},
"node_modules/@types/concat-stream": {
@@ -5183,23 +5183,23 @@
"dev": true
},
"node_modules/textlint": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/textlint/-/textlint-13.1.0.tgz",
- "integrity": "sha512-QXOT4rVH6j71f9sMO66bRdO6T/K75+hcPkxEjRueScdSTdy9rqMGSNLhj5R14I76mjtGuE+le+wKp6msHkMXAw==",
- "dev": true,
- "dependencies": {
- "@textlint/ast-node-types": "^13.1.0",
- "@textlint/ast-traverse": "^13.1.0",
- "@textlint/config-loader": "^13.1.0",
- "@textlint/feature-flag": "^13.1.0",
- "@textlint/fixer-formatter": "^13.1.0",
- "@textlint/kernel": "^13.1.0",
- "@textlint/linter-formatter": "^13.1.0",
- "@textlint/module-interop": "^13.1.0",
- "@textlint/textlint-plugin-markdown": "^13.1.0",
- "@textlint/textlint-plugin-text": "^13.1.0",
- "@textlint/types": "^13.1.0",
- "@textlint/utils": "^13.1.0",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/textlint/-/textlint-13.3.0.tgz",
+ "integrity": "sha512-1JFbDHWBZiqM/NaA875IlX3GuHk7pt6L4ApFFZHiFIqDnj77XzqhG+tPiitnBC/vhngZiGVXclIM9klLGmfoFg==",
+ "dev": true,
+ "dependencies": {
+ "@textlint/ast-node-types": "^13.3.0",
+ "@textlint/ast-traverse": "^13.3.0",
+ "@textlint/config-loader": "^13.3.0",
+ "@textlint/feature-flag": "^13.3.0",
+ "@textlint/fixer-formatter": "^13.3.0",
+ "@textlint/kernel": "^13.3.0",
+ "@textlint/linter-formatter": "^13.3.0",
+ "@textlint/module-interop": "^13.3.0",
+ "@textlint/textlint-plugin-markdown": "^13.3.0",
+ "@textlint/textlint-plugin-text": "^13.3.0",
+ "@textlint/types": "^13.3.0",
+ "@textlint/utils": "^13.3.0",
"debug": "^4.3.4",
"file-entry-cache": "^5.0.1",
"get-stdin": "^5.0.1",
@@ -5220,7 +5220,7 @@
"textlint": "bin/textlint.js"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">=16.0.0"
}
},
"node_modules/textlint-filter-rule-comments": {
@@ -6281,59 +6281,59 @@
"dev": true
},
"@textlint/ast-node-types": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-13.1.0.tgz",
- "integrity": "sha512-Lees6mOme6qP8vDcsM/VskiPeHi+z8Tb6LKBb3F0Y/0UBsFo6X7+njDIjtXvO4T48R57srxpa1hyNnjHop4Uog==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-13.3.0.tgz",
+ "integrity": "sha512-5PGZhAxOJ987c311SayvjGNkcVuX/Dr3k+H/FJDmS/wDcgZ0lEAdJzjCKn9USXXf2r+i14kZCbhzg8V01KSyKg==",
"dev": true
},
"@textlint/ast-tester": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-13.1.0.tgz",
- "integrity": "sha512-4xkKQpBC1MyHz4B1YgQfYIdxJLZhpfXgdgIYc9WDC2AESnhM75I7LUElY3bDUDMGhP99E4H1Ix5C+CftYqvIHA==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-13.3.0.tgz",
+ "integrity": "sha512-LwGd7JjHNXekgCA4BmE39S9fQrgDHJLk2MSf5+uPdUWQM2ojL/RQiyucghxwGdKib+1DutcPrbJSM4SdT1HWSQ==",
"dev": true,
"requires": {
- "@textlint/ast-node-types": "^13.1.0",
+ "@textlint/ast-node-types": "^13.3.0",
"debug": "^4.3.4"
}
},
"@textlint/ast-traverse": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-13.1.0.tgz",
- "integrity": "sha512-253DKapEjr6L9kx2npNvhaJTmoOJBw38w0D2cvUuHAZv9sx7U5G1aej9ScnIIyIcSotIcDFAVt3B+afA5KMCTA==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-13.3.0.tgz",
+ "integrity": "sha512-bF0OeKlOtE8f9pNKRlgXqCdApZPYCj7n2Ty3DHvGbumC+rC5tapQuIioxwKKC11deQY1nsYTf2gaYV52SdFS6Q==",
"dev": true,
"requires": {
- "@textlint/ast-node-types": "^13.1.0"
+ "@textlint/ast-node-types": "^13.3.0"
}
},
"@textlint/config-loader": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-13.1.0.tgz",
- "integrity": "sha512-hQmGt9H9ozeLo2PGETTNrvEYGsA7c+svtldpUT2fBQ9uclWruUK1h8+BPOIqzH0YjTyvMTTajtGhibbu1bZ3/A==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-13.3.0.tgz",
+ "integrity": "sha512-CZ088hUWjY360MOGDIZkVw2Ln8zLc/3BlMCE4FDsPX1ojKXcJX2vL+9YRVK5gDZYL3+W4mFHGJUkvEmTnroG9g==",
"dev": true,
"requires": {
- "@textlint/kernel": "^13.1.0",
- "@textlint/module-interop": "^13.1.0",
- "@textlint/types": "^13.1.0",
- "@textlint/utils": "^13.1.0",
+ "@textlint/kernel": "^13.3.0",
+ "@textlint/module-interop": "^13.3.0",
+ "@textlint/types": "^13.3.0",
+ "@textlint/utils": "^13.3.0",
"debug": "^4.3.4",
"rc-config-loader": "^4.1.2",
"try-resolve": "^1.0.1"
}
},
"@textlint/feature-flag": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-13.1.0.tgz",
- "integrity": "sha512-YolfMMWZ+8bJWVFl7gu+SgiZT/b9Q+QS6HyAco6o2zDE09GbDofu/MLGNmYqTst4YBPkuyEJ5oGlv395CT23FQ==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-13.3.0.tgz",
+ "integrity": "sha512-GhMH0UiwQPPjyngvmybw637g6GHdwFVnZj0XpQBKG6W+bQO5ubsc/jsox2E+PgNwRYwlaSOf/hR69BuHtCZyZg==",
"dev": true
},
"@textlint/fixer-formatter": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-13.1.0.tgz",
- "integrity": "sha512-gb+GPnddmniGpJPC8dQI2iqOciiseQBjHbpmqc1vzrDa+BGsRglcFP6MD24Jak6xwDhsDJtyjvCSRTTvSvkV8g==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-13.3.0.tgz",
+ "integrity": "sha512-zVZHjnUVCL1yuW7dBwGwPJmyM1xZXBzkC3ADvB9n0Sz9EYSF0903bg0cXy3oZtdbllIXDxuMkUHbhfJReZOYeA==",
"dev": true,
"requires": {
- "@textlint/module-interop": "^13.1.0",
- "@textlint/types": "^13.1.0",
+ "@textlint/module-interop": "^13.3.0",
+ "@textlint/types": "^13.3.0",
"chalk": "^4.1.2",
"debug": "^4.3.4",
"diff": "^4.0.2",
@@ -6345,18 +6345,18 @@
}
},
"@textlint/kernel": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-13.1.0.tgz",
- "integrity": "sha512-t/imOABHI6SicIBvGqMONjRustBoCJtuZgD8fYdelsxdcaO07ukbv/puYSYwNQepQ9KXcWSfeTLy+7zgbFW/hg==",
- "dev": true,
- "requires": {
- "@textlint/ast-node-types": "^13.1.0",
- "@textlint/ast-tester": "^13.1.0",
- "@textlint/ast-traverse": "^13.1.0",
- "@textlint/feature-flag": "^13.1.0",
- "@textlint/source-code-fixer": "^13.1.0",
- "@textlint/types": "^13.1.0",
- "@textlint/utils": "^13.1.0",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-13.3.0.tgz",
+ "integrity": "sha512-vrFpvuNlqDxA9uNvkw43FZs9DKRRWejCzo3iIL7QGIqXoEVa2yQyKgi4rjsfkUQlU7NW8McPL0lUEKkwH0XD2w==",
+ "dev": true,
+ "requires": {
+ "@textlint/ast-node-types": "^13.3.0",
+ "@textlint/ast-tester": "^13.3.0",
+ "@textlint/ast-traverse": "^13.3.0",
+ "@textlint/feature-flag": "^13.3.0",
+ "@textlint/source-code-fixer": "^13.3.0",
+ "@textlint/types": "^13.3.0",
+ "@textlint/utils": "^13.3.0",
"debug": "^4.3.4",
"fast-equals": "^4.0.3",
"structured-source": "^4.0.0"
@@ -6380,15 +6380,15 @@
}
},
"@textlint/linter-formatter": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-13.1.0.tgz",
- "integrity": "sha512-JaAUTsuPDoMmFUravEDP2pCyB8npr8q0bjbrYJWVZqTDHAPRWxdU0HFtOhc6cprb6DOkSkbioq/ojj2DjYx3gQ==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-13.3.0.tgz",
+ "integrity": "sha512-ngf17z3ugKpnZ5oGcvVACrM/LZi/Mgj6iZl3ZdzyR91bIayBA1wzi9aty2XO+M0TVpOnKyBAfNg1VY4iO33pdQ==",
"dev": true,
"requires": {
"@azu/format-text": "^1.0.1",
"@azu/style-format": "^1.0.0",
- "@textlint/module-interop": "^13.1.0",
- "@textlint/types": "^13.1.0",
+ "@textlint/module-interop": "^13.3.0",
+ "@textlint/types": "^13.3.0",
"chalk": "^4.1.2",
"debug": "^4.3.4",
"is-file": "^1.0.0",
@@ -6404,12 +6404,12 @@
}
},
"@textlint/markdown-to-ast": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-13.1.0.tgz",
- "integrity": "sha512-pPzxLuAOv0luOh4uUG/H/dq77/C5SiLiUx2qMAEaOZrfF6dl46bIDXUSbtryFBV8Nrpj3kUE3s4al9vPTOUFWA==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-13.3.0.tgz",
+ "integrity": "sha512-TCw8HN9vwVuo7oXb9NSwSjnCfM2TB0IgLxF75CU90R4MrsQYZ7HZTJxPXhYqQFzAYxFyHZrzEhxodYCry2EChw==",
"dev": true,
"requires": {
- "@textlint/ast-node-types": "^13.1.0",
+ "@textlint/ast-node-types": "^13.3.0",
"debug": "^4.3.4",
"mdast-util-gfm-autolink-literal": "^0.1.3",
"remark-footnotes": "^3.0.0",
@@ -6627,61 +6627,61 @@
}
},
"@textlint/module-interop": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-13.1.0.tgz",
- "integrity": "sha512-j3nJZ5rU6U+mxjAWXLAdGJyVuLs0RpHFQKVXapeKVt0JNhix+VDXTCGPw3eSRlno1BPSoxgmQhEHdal3/PeH9w==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-13.3.0.tgz",
+ "integrity": "sha512-3u5gZR8NL3yKHCh7QDttTNYmKMyfx55NmRfS1HalGFTIgaHwAFCz95KX7JA3WhpIa9Hu7zKlaxA1WGUnJDHLyA==",
"dev": true
},
"@textlint/source-code-fixer": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-13.1.0.tgz",
- "integrity": "sha512-zMDPhouqnp2ey8bGKbMaK3+kNsLa0r6eA41w+8LBKbDUY+vhuw6cQ99BeZfAD9tehMuAuI/kQLIgVvwPchU6qw==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-13.3.0.tgz",
+ "integrity": "sha512-zLTmp8XyuksW90u0Y24wNALKd2xuieI/Vc40RKAYMEJL+sYyL0O2gYllnjcgQtLMz1wzy7rEXHMxvp/dvPX6/w==",
"dev": true,
"requires": {
- "@textlint/types": "^13.1.0",
+ "@textlint/types": "^13.3.0",
"debug": "^4.3.4"
}
},
"@textlint/text-to-ast": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-13.1.0.tgz",
- "integrity": "sha512-5Gzg0CCl5F2ckyhbyRYf2yyBuXZEA7P3UVvRS0Zc/Tr6I/jtOROAZPTlsDrG1HwNd7iR+NqT3PtfKmL5gLt/AA==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-13.3.0.tgz",
+ "integrity": "sha512-d8eN3WDWC27Pd8DpREMIWGEAp4GNiIzDQRezL4az3OLwS4yUsqUh3g2Q9cj7Vm7l3kmrs/0LFl+yxEaklk64Kw==",
"dev": true,
"requires": {
- "@textlint/ast-node-types": "^13.1.0"
+ "@textlint/ast-node-types": "^13.3.0"
}
},
"@textlint/textlint-plugin-markdown": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-13.1.0.tgz",
- "integrity": "sha512-CqqOORpmxdFkN6ZguQV+sMJ/uFOIVAps9IbeF3zkygQcHzD3/scojBdIM5GEDG1gdRZvdNeAfbcZNVyUEIK3Rg==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-13.3.0.tgz",
+ "integrity": "sha512-p6+dOuLKo05ZvujnhQcQc95PIPevF8gqvzb2/7iNsJH1BhH2IjJXVZzEalIMBNnP8ieOb8Fhee51OBkzI0gEGw==",
"dev": true,
"requires": {
- "@textlint/markdown-to-ast": "^13.1.0"
+ "@textlint/markdown-to-ast": "^13.3.0"
}
},
"@textlint/textlint-plugin-text": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-13.1.0.tgz",
- "integrity": "sha512-TPxF8rvg/VE9qnNKznNRDc0NV+vVKP25q1tI8WfmkYPH3SRFGqg9UaCnIe0hSXeZKXUpBJfor8uDHcfd6e7T9w==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-13.3.0.tgz",
+ "integrity": "sha512-j/I+g4IRBbeswRN4H4swQosEQUQUp1D9PBYE0amya9qthP7LviJKWgN8eGjvGFsNMLZIdxsG+DUiN5qlyrRY0g==",
"dev": true,
"requires": {
- "@textlint/text-to-ast": "^13.1.0"
+ "@textlint/text-to-ast": "^13.3.0"
}
},
"@textlint/types": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/types/-/types-13.1.0.tgz",
- "integrity": "sha512-H0oETFHYayeXwFHxlr5wFtwVpOcodZcFp5X3AZDCE6XbCY195exrnKlZsAfj+oEjRnjffahEZ6P5oOIh8Dt65w==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/types/-/types-13.3.0.tgz",
+ "integrity": "sha512-Xr3BBKbCClux2GDFvXDNMDXo4Q/weo0JaRaqUq6dPp2wYQ5UmZA3XhFdIY69hZPiaUIP6mAycZK8VHro9AMp+g==",
"dev": true,
"requires": {
- "@textlint/ast-node-types": "^13.1.0"
+ "@textlint/ast-node-types": "^13.3.0"
}
},
"@textlint/utils": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-13.1.0.tgz",
- "integrity": "sha512-DJxYdyH00uWLzYK1IB6UYum3H6Gx/uDcLzAsr+2WhhkO3voosPqig1zd00zrY5RPyaVqYVkucN+Ulp8HqGjyXw==",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-13.3.0.tgz",
+ "integrity": "sha512-hJ57KmY6C4LTWPoi1VkSJczIVm6Gc1lo0caK9rEy19AsYoKrqjZY4yh5i/9wUZ1CruGfuomI4TDlM1OT5aKELg==",
"dev": true
},
"@types/concat-stream": {
@@ -9841,23 +9841,23 @@
"dev": true
},
"textlint": {
- "version": "13.1.0",
- "resolved": "https://registry.npmjs.org/textlint/-/textlint-13.1.0.tgz",
- "integrity": "sha512-QXOT4rVH6j71f9sMO66bRdO6T/K75+hcPkxEjRueScdSTdy9rqMGSNLhj5R14I76mjtGuE+le+wKp6msHkMXAw==",
- "dev": true,
- "requires": {
- "@textlint/ast-node-types": "^13.1.0",
- "@textlint/ast-traverse": "^13.1.0",
- "@textlint/config-loader": "^13.1.0",
- "@textlint/feature-flag": "^13.1.0",
- "@textlint/fixer-formatter": "^13.1.0",
- "@textlint/kernel": "^13.1.0",
- "@textlint/linter-formatter": "^13.1.0",
- "@textlint/module-interop": "^13.1.0",
- "@textlint/textlint-plugin-markdown": "^13.1.0",
- "@textlint/textlint-plugin-text": "^13.1.0",
- "@textlint/types": "^13.1.0",
- "@textlint/utils": "^13.1.0",
+ "version": "13.3.0",
+ "resolved": "https://registry.npmjs.org/textlint/-/textlint-13.3.0.tgz",
+ "integrity": "sha512-1JFbDHWBZiqM/NaA875IlX3GuHk7pt6L4ApFFZHiFIqDnj77XzqhG+tPiitnBC/vhngZiGVXclIM9klLGmfoFg==",
+ "dev": true,
+ "requires": {
+ "@textlint/ast-node-types": "^13.3.0",
+ "@textlint/ast-traverse": "^13.3.0",
+ "@textlint/config-loader": "^13.3.0",
+ "@textlint/feature-flag": "^13.3.0",
+ "@textlint/fixer-formatter": "^13.3.0",
+ "@textlint/kernel": "^13.3.0",
+ "@textlint/linter-formatter": "^13.3.0",
+ "@textlint/module-interop": "^13.3.0",
+ "@textlint/textlint-plugin-markdown": "^13.3.0",
+ "@textlint/textlint-plugin-text": "^13.3.0",
+ "@textlint/types": "^13.3.0",
+ "@textlint/utils": "^13.3.0",
"debug": "^4.3.4",
"file-entry-cache": "^5.0.1",
"get-stdin": "^5.0.1",
diff --git a/package.json b/package.json
index 2e85ea57dc3d..c1707b531754 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
"remark-lint-fenced-code-flag": "^3.1.1",
"remark-lint-no-shell-dollars": "^3.1.1",
"remark-stringify": "^10.0.2",
- "textlint": "^13.1.0",
+ "textlint": "^13.3.0",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^3.0.4"
diff --git a/source/_dashboards/iframe.markdown b/source/_dashboards/iframe.markdown
index 5e3e27d54d48..60869ab9e990 100644
--- a/source/_dashboards/iframe.markdown
+++ b/source/_dashboards/iframe.markdown
@@ -38,6 +38,11 @@ aspect_ratio:
description: 'Forces the height of the image to be a ratio of the width. Valid formats: Height percentage value (`23%`) or ratio expressed with colon or "x" separator (`16:9` or `16x9`). For a ratio, the second element can be omitted and will default to "1" (`1.78` equals `1.78:1`).'
type: string
default: "50%"
+allow_open_top_navigation:
+ required: false
+ description: 'Allow the user to open iframe content links by opening the default browser in the Home Assistant mobile app. It is false by default because it adds allow-top-navigation-by-user-activation on the iframe sandbox attribute which is less secure. So set it to true if you need it and are confident with the iframe content.'
+ type: boolean
+ default: false
title:
required: false
description: The card title.
diff --git a/source/_dashboards/picture-elements.markdown b/source/_dashboards/picture-elements.markdown
index 25be07e6f3df..fa7e49903f9f 100644
--- a/source/_dashboards/picture-elements.markdown
+++ b/source/_dashboards/picture-elements.markdown
@@ -413,8 +413,6 @@ style:
# Positioning of the element
left: 50%
top: 50%
- # Overwrite color for icons
- "--paper-item-icon-color": pink
```
### How to use state_image
diff --git a/source/_dashboards/picture.markdown b/source/_dashboards/picture.markdown
index c66fbe8d851e..b7e84d23940c 100644
--- a/source/_dashboards/picture.markdown
+++ b/source/_dashboards/picture.markdown
@@ -27,6 +27,10 @@ image:
required: true
description: "The URL of an image. When you want to store images in your Home Assistant installation use the [hosting files documentation](/integrations/http/#hosting-files). After storing your files, use the `/local` path, for example, `/local/filename.jpg`."
type: string
+alt_text:
+ required: false
+ description: Alternative text for the image. This is necessary for users of assistive technology. The [W3C images tutorial](https://www.w3.org/WAI/tutorials/images/) provides simple guidance for writing alternative text.
+ type: string
theme:
required: false
description: Override the used theme for this card with any loaded theme. For more information about themes, see the [frontend documentation](/integrations/frontend/).
diff --git a/source/_dashboards/tile.markdown b/source/_dashboards/tile.markdown
index 06fd17563916..20d2711589e1 100644
--- a/source/_dashboards/tile.markdown
+++ b/source/_dashboards/tile.markdown
@@ -41,6 +41,11 @@ show_entity_picture:
description: If your entity has a picture, it will replace the icon.
type: boolean
default: false
+vertical:
+ required: false
+ description: Displays the icon above the name and state.
+ type: boolean
+ default: false
tap_action:
required: false
description: Action taken on card tap. See [action documentation](/dashboards/actions/#tap-action). By default, it will show the "more-info" dialog.
@@ -77,6 +82,12 @@ entity: person.anne_therese
show_entity_picture: true
```
+```yaml
+type: tile
+entity: person.anne_therese
+vertical: true
+```
+
```yaml
type: tile
entity: vacuum.ground_floor
diff --git a/source/_docs/automation/troubleshooting.markdown b/source/_docs/automation/troubleshooting.markdown
index c03c13aca1bb..8d2301c7ffe3 100644
--- a/source/_docs/automation/troubleshooting.markdown
+++ b/source/_docs/automation/troubleshooting.markdown
@@ -24,7 +24,7 @@ trace:
stored_traces: 1
```
-[template]: /topics/templating/
+[template]: /docs/configuration/templating/
## Testing your automation
diff --git a/source/_docs/automation/yaml.markdown b/source/_docs/automation/yaml.markdown
index a47f9921dfb8..8d62662467a9 100644
--- a/source/_docs/automation/yaml.markdown
+++ b/source/_docs/automation/yaml.markdown
@@ -3,7 +3,7 @@ title: "Automation YAML"
description: "How to use the automation integration with YAML."
---
-Automations are created in Home Assistant via the UI, but are stored in a YAML format. If you want to edit the YAML of an automation, go to edit the automation, click on the menu button in the top right and turn on YAML mode.
+Automations are created in Home Assistant via the UI, but are stored in a YAML format. If you want to edit the YAML of an automation, select the automation, click on the menu button in the top right then on **Edit in YAML**.
The UI will write your automations to `automations.yaml`. This file is managed by the UI and should not be edited manually.
diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown
index b5f75ac2d8d9..e4f0b6a9c124 100644
--- a/source/_docs/blueprint/selectors.markdown
+++ b/source/_docs/blueprint/selectors.markdown
@@ -802,6 +802,15 @@ mode:
will use a `dropdown` input.
type: string
required: false
+translation_key:
+ description: >
+ Allows translations provided by an integration where `translation_key`
+ is the translation key that is providing the selector option strings
+ translation. See the documentation on
+ [Backend Localization](https://developers.home-assistant.io/docs/internationalization/core/#selectors)
+ for more information.
+ type: string
+ required: false
{% endconfiguration %}
Alternatively, a mapping can be used for the options. When you want to return
diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown
index 9c4fffd7ec4d..72236982e9b0 100644
--- a/source/_docs/configuration/templating.markdown
+++ b/source/_docs/configuration/templating.markdown
@@ -11,7 +11,7 @@ This is an advanced feature of Home Assistant. You'll need a basic understanding
Templating is a powerful feature that allows you to control information going into and out of the system. It is used for:
- Formatting outgoing messages in, for example, the [notify](/integrations/notify/) platforms and [Alexa](/integrations/alexa/) component.
-- Process incoming data from sources that provide raw data, like [MQTT](/integrations/mqtt/), [`rest` sensor](/integrations/rest/) or the [`command_line` sensor](/integrations/sensor.command_line/).
+- Process incoming data from sources that provide raw data, like [MQTT](/docs/configuration/templating/#using-templates-with-the-mqtt-integration), [`rest` sensor](/integrations/rest/) or the [`command_line` sensor](/integrations/sensor.command_line/).
- [Automation Templating](/docs/automation/templating/).
## Building templates
@@ -154,7 +154,7 @@ Other state examples:
{{ states('sensor.expires') | as_datetime }}
# Make a list of states
-{{ ['light.kitchen', 'light.dinig_room'] | map('states') | list }}
+{{ ['light.kitchen', 'light.dining_room'] | map('states') | list }}
```
{% endraw %}
@@ -239,7 +239,7 @@ The same thing can also be expressed as a filter:
{% raw %}
```text
-{{ expand(['device_tracker.paulus', 'group.child_trackers'])
+{{ expand(['device_tracker.paulus', 'group.child_trackers'])
| selectattr("attributes.battery", 'defined')
| join(', ', attribute="attributes.battery") }}
```
@@ -262,7 +262,7 @@ The same thing can also be expressed as a test:
{% raw %}
```text
-{{ expand('group.energy_sensors')
+{{ expand('group.energy_sensors')
| selectattr("state", 'is_number') | join(', ') }}
```
@@ -450,7 +450,7 @@ For example, if you wanted to select a field from `trigger` in an automation bas
```yaml
# Is the current time past 10:15?
- {{ now() > today_at("10:15") }}
+ {{ now() > today_at("10:15") }}
```
{% endraw %}
@@ -465,8 +465,8 @@ For example, if you wanted to select a field from `trigger` in an automation bas
{% raw %}
```yaml
- # 77 minutes before current time.
- {{ now() - timedelta( hours = 1, minutes = 17 ) }}
+ # 77 minutes before current time.
+ {{ now() - timedelta( hours = 1, minutes = 17 ) }}
```
{% endraw %}
@@ -476,15 +476,15 @@ For example, if you wanted to select a field from `trigger` in an automation bas
{% raw %}
```yaml
- # Renders to "00:10:00"
- {{ as_timedelta("PT10M") }}
+ # Renders to "00:10:00"
+ {{ as_timedelta("PT10M") }}
```
{% endraw %}
- Filter `timestamp_local(default)` converts a UNIX timestamp to the ISO format string representation as date/time in your local timezone. If that fails, returns the `default` value, or if omitted raises an error. If a custom string format is needed in the string, use `timestamp_custom` instead.
- Filter `timestamp_utc(default)` converts a UNIX timestamp to the ISO format string representation representation as date/time in UTC timezone. If that fails, returns the `default` value, or if omitted raises an error. If a custom string format is needed in the string, use `timestamp_custom` instead.
-- Filter `timestamp_custom(format_string, local=True, default)` converts an UNIX timestamp to its string representation based on a custom format, the use of a local timezone is the default. If that fails, returns the `default` value, or if omitted raises an error. Supports the standard [Python time formatting options](https://docs.python.org/3/library/time.html#time.strftime).
+- Filter `timestamp_custom(format_string, local=True, default)` converts an UNIX timestamp to its string representation based on a custom format, the use of a local timezone is the default. If that fails, returns the `default` value, or if omitted raises an error. Supports the standard [Python time formatting options](https://docs.python.org/3/library/time.html#time.strftime).
@@ -681,11 +681,11 @@ The last argument of the closest function has an implicit `expand`, and can take
{% raw %}
```text
-Closest out of given entities:
+Closest out of given entities:
{{ closest(['group.children', states.device_tracker]) }}
-Closest to a coordinate:
+Closest to a coordinate:
{{ closest(23.456, 23.456, ['group.children', states.device_tracker]) }}
-Closest to some entity:
+Closest to some entity:
{{ closest(states.zone.school, ['group.children', states.device_tracker]) }}
```
@@ -696,16 +696,42 @@ It will also work as a filter over an iterable group of entities or groups:
{% raw %}
```text
-Closest out of given entities:
+Closest out of given entities:
{{ ['group.children', states.device_tracker] | closest }}
-Closest to a coordinate:
+Closest to a coordinate:
{{ ['group.children', states.device_tracker] | closest(23.456, 23.456) }}
-Closest to some entity:
+Closest to some entity:
{{ ['group.children', states.device_tracker] | closest(states.zone.school) }}
```
{% endraw %}
+### Contains
+
+Jinja provides by default a [`in` operator](https://jinja.palletsprojects.com/en/latest/templates/#other-operators) how return `True` when one element is `in` a provided list.
+The `contains` test and filter allow you to do the exact opposite and test for a list containing an element. This is particularly useful in `select` or `selectattr` filter, as well as to check if a device has a specific attribute, a `supported_color_modes`, a specific light effect.
+
+Some examples:
+{% raw %}
+
+- `{{ state_attr('light.dining_room', 'effect_list') | contains('rainbow') }}` will return `true` if the light has a `rainbow` effect.
+- `{{ expand('light.office') | selectattr("attributes.supported_color_modes", 'contains', 'color_temp') | list }}` will return all light that support color_temp in the office group.
+- ```text
+ {% set current_month = now().month %}
+ {% set extra_ambiance = [
+ {'name':'Halloween', 'month': [10,11]},
+ {'name':'Noel', 'month': [1,11,12]}
+ ]%}
+ {% set to_add = extra_ambiance | selectattr('month', 'contains', current_month ) | map(attribute='name') | list %}
+ {% set to_remove = extra_ambiance | map(attribute='name') | reject('in', to_add) | list %}
+ {{ (state_attr('input_select.light_theme', 'options') + to_add ) | unique | reject('in', to_remove) | list }}
+ ```
+ This more complex example uses the `contains` filter to match the current month with a list. In this case, it's used to generate a list of light theme to give to the `Input select: Set options` service.
+
+
+{% endraw %}
+
+
### Numeric functions and filters
Some of these functions can also be used in a [filter](https://jinja.palletsprojects.com/en/latest/templates/#id11). This means they can act as a normal function like this `sqrt(2)`, or as part of a filter like this `2|sqrt`.
@@ -863,7 +889,7 @@ The following overview contains a couple of options to get the needed values:
# Incoming value:
{"primes": [2, 3, 5, 7, 11, 13]}
-# Extract first prime number
+# Extract first prime number
{{ value_json.primes[0] }}
# Format output
diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown
index b45a3ae4087b..c2fbf1c03226 100644
--- a/source/_docs/scripts/conditions.markdown
+++ b/source/_docs/scripts/conditions.markdown
@@ -514,7 +514,7 @@ It's also supported in script or automation `condition` actions:
{% endraw %}
-[template]: /topics/templating/
+[template]: /docs/configuration/templating/
[automation-templating]: /getting-started/automation-templating/
## Time condition
@@ -681,7 +681,7 @@ Every individual condition can be disabled, without removing it.
To do so, add `enabled: false` to the condition configuration.
This can be useful if you want to temporarily disable a condition, for example,
-for testing. A disabled condition will always pass.
+for testing. A disabled condition will behave as if it were removed.
For example:
diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown
index d2312056b28a..9db2bc754dee 100644
--- a/source/_docs/scripts/service-calls.markdown
+++ b/source/_docs/scripts/service-calls.markdown
@@ -136,7 +136,7 @@ There are four `homeassistant` services that aren't tied to any single domain, t
Complete service details and examples can be found on the [Home Assistant integration][homeassistant-integration-services] page.
-[templating]: /topics/templating/
+[templating]: /docs/configuration/templating/
[google travel time]: /integrations/google_travel_time/
[template sensor]: /integrations/template/
[light]: /integrations/light/
diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html
index c70bc53be070..dbf972094bfe 100644
--- a/source/_includes/asides/docs_navigation.html
+++ b/source/_includes/asides/docs_navigation.html
@@ -40,9 +40,17 @@
Topics
- Home Energy Management
+ {% active_link /docs/assist/ Assist %}
+
+
{% active_link /docs/assist/android/ Assist for Android Wear %}
+
{% active_link /docs/assist/apple/ Assist for Apple devices %}
diff --git a/source/_integrations/airzone.markdown b/source/_integrations/airzone.markdown
index 49a1d6d17bed..a0e0644de48b 100644
--- a/source/_integrations/airzone.markdown
+++ b/source/_integrations/airzone.markdown
@@ -5,6 +5,7 @@ ha_release: 2022.4
ha_category:
- Binary Sensor
- Climate
+ - Select
- Sensor
ha_iot_class: Local Polling
ha_config_flow: true
@@ -13,6 +14,7 @@ ha_platforms:
- binary_sensor
- climate
- diagnostics
+ - select
- sensor
ha_codeowners:
- '@Noltari'
@@ -60,7 +62,17 @@ For each Airzone zone (Thermostat) a *climate entity* is created.
**HVAC mode can only be changed on a *parent zone*.**
-*Slave zones* can only enable/disable the current HVAC mode selected on the corresponding *parent zone*. Attempting to change the HVAC mode on a *child zone* will result on a Home Assistant error.
+*Child zones* can only enable/disable the current HVAC mode selected on the corresponding *parent zone*. Attempting to change the HVAC mode on a *child zone* will result on a Home Assistant error.
+
+## Select
+
+For each Airzone zone (Thermostat), the following *selects* are created:
+
+| Condition | Description |
+| :------------------ | :--------------------------------- |
+| Cold Angle | Grille angle for cooling. |
+| Heat Angle | Grille angle for heating. |
+| Sleep | Minutes for auto sleep. |
## Sensors
diff --git a/source/_integrations/alexa.flash_briefings.markdown b/source/_integrations/alexa.flash_briefings.markdown
index 146cc641ef14..faf76f281ced 100644
--- a/source/_integrations/alexa.flash_briefings.markdown
+++ b/source/_integrations/alexa.flash_briefings.markdown
@@ -84,7 +84,7 @@ Please refer to the [Amazon documentation][flash-briefing-api-docs] for more inf
[flash-briefing-api-docs]: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/flash-briefing-skill-api-feed-reference
[large-icon]: /images/integrations/alexa/alexa-512x512.png
[small-icon]: /images/integrations/alexa/alexa-108x108.png
-[templates]: /topics/templating/
+[templates]: /docs/configuration/templating/
[zero-three-one]: /blog/2016/10/22/flash-briefing-updater-hacktoberfest/
[alexa-settings-site]: https://alexa.amazon.com/
[emulated-hue-component]: /integrations/emulated_hue/
diff --git a/source/_integrations/alexa.intent.markdown b/source/_integrations/alexa.intent.markdown
index 0fedaf2a4966..3fa8b049d11b 100644
--- a/source/_integrations/alexa.intent.markdown
+++ b/source/_integrations/alexa.intent.markdown
@@ -70,7 +70,7 @@ Next you need to create a Lambda function.
- Click your Lambda Function icon in the middle of the diagram and scroll down, you will see a `Function code` window.
- Clear the example code and copy the Python script from this [GitHub Gist](https://gist.github.com/lpomfrey/97381cf4316553b03622c665ae3a47da).
- Click the `Deploy` button of the `Function code` window.
-- Scroll down again and you will find `Environment variables`, click on `Edit` button and add the following environment variables as needed:
+- Scroll down again and pick the `Configuration' tab, select it and on the left you will now find `Environment variables`, click on `Edit` button and add the following environment variables as needed:
- BASE_URL *(required)*: your Home Assistant instance's Internet accessible URL with port if needed. *Do not include the trailing `/`*.
- NOT_VERIFY_SSL *(optional)*: set to *True* to ignore the SSL issue, if you don't have a valid SSL certificate or you are using self-signed certificate.
- DEBUG *(optional)*: set to *True* to log debugging messages.
@@ -394,5 +394,5 @@ Alexa will now respond with a random phrase each time. You can use the include f
[amazon-dev-console]: https://developer.amazon.com
[large-icon]: /images/integrations/alexa/alexa-512x512.png
[small-icon]: /images/integrations/alexa/alexa-108x108.png
-[templates]: /topics/templating/
+[templates]: /docs/configuration/templating/
[generate-long-lived-access-token]: https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token
diff --git a/source/_integrations/alexa.smart_home.markdown b/source/_integrations/alexa.smart_home.markdown
index adb09ade66aa..6494b979379e 100644
--- a/source/_integrations/alexa.smart_home.markdown
+++ b/source/_integrations/alexa.smart_home.markdown
@@ -70,7 +70,7 @@ Steps to Integrate an Amazon Alexa Smart Home Skill with Home Assistant:
- [Humidifier Mode](#humidifier-mode)
- [Image Processing](#image-processing)
- [Presence Detection Notification](#presence-detection-notification)
- - [Input Number](#input-number)
+ - [Input Number and Number](#input-number-and-number)
- [Light](#light)
- [Brightness](#brightness)
- [Color Temperature](#color-temperature)
@@ -83,7 +83,6 @@ Steps to Integrate an Amazon Alexa Smart Home Skill with Home Assistant:
- [Equalizer Mode](#equalizer-mode)
- [Inputs](#inputs)
- [Playback State](#playback-state)
- - [Seek](#seek)
- [Scene](#scene)
- [Script](#script)
- [Sensor](#sensor)
@@ -488,7 +487,7 @@ The following integrations are currently supported:
- [Humidifier Mode](#humidifier-mode)
- [Image Processing](#image-processing)
- [Presence Detection Notification](#presence-detection-notification)
- - [Input Number](#input-number)
+ - [Input Number and Number](#input-number-and-number)
- [Light](#light)
- [Brightness](#brightness)
- [Color Temperature](#color-temperature)
@@ -501,7 +500,6 @@ The following integrations are currently supported:
- [Equalizer Mode](#equalizer-mode)
- [Inputs](#inputs)
- [Playback State](#playback-state)
- - [Seek](#seek)
- [Scene](#scene)
- [Script](#script)
- [Sensor](#sensor)
@@ -852,15 +850,15 @@ Display category will default to `CAMERA` to enable presence detected notificati
-### Input Number
+### Input Number and Number
-Control an `input_number` entity with Alexa. Configures Alexa with the `min`, `max`, `step`, and `unit_of_measurement` attributes for the entity.
+Control an `input_number` or `number` entity with Alexa. Configures Alexa with the `min`, `max`, `step`, and `unit_of_measurement` attributes for the entity.
- _"Alexa, set [entity name] to forty five [unit of measurement]."_
- _"Alexa, increase the [entity name] by two."_
- _"Alexa, set the [entity name] to maximum."_
-The following table lists the possible friendly name synonyms available for a Input Number with `min: -90, max: 90, step: 45, unit_of_measurement: degrees`.
+The following table lists the possible friendly name synonyms available for a Input Number or Number with `min: -90, max: 90, step: 45, unit_of_measurement: degrees`.
| Fan Range | Friendly Name Synonyms |
| --------- | ----------------------------------------- |
@@ -870,6 +868,10 @@ The following table lists the possible friendly name synonyms available for a In
| 45 | _"forty five"_ |
| 90 | _"ninety"_, _"maximum"_, _"max"_ |
+The `unit_of_measurement` will be used to select a supported unit label from the [Global Alexa catalog](https://developer.amazon.com/en-US/docs/alexa/device-apis/resources-and-assets.html#global-alexa-catalog). If there is no match it will be assigned a preset controller.
+
+The following units are supported: °C, °F, K, m, km, mi, yd, in, kg, g, oz, lb, L, ft³, m³, gal and %
+
### Light
Control lights with _"turn on"_ and _"turn off"_ utterances, adjust brightness, color, and temperature.
@@ -975,10 +977,9 @@ Home Assistant will attempt to translate the `media_player` `source_list` into a
Requires [Proactive Events](#proactive-events) enabled.
-#### Seek
-
-- _"Alexa, skip 30 seconds on device."_
-- _"Alexa, go back 10 seconds on device."_
+
+Intents to seek forwards (skip) or to rewind (go back) are not supported at the moment.
+
### Scene
diff --git a/source/_integrations/almond.markdown b/source/_integrations/almond.markdown
deleted file mode 100644
index d9aa73d9c530..000000000000
--- a/source/_integrations/almond.markdown
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: Almond
-description: Instructions on how to setup Almond within Home Assistant.
-ha_category:
- - Voice
-ha_iot_class: Local Polling
-ha_release: '0.102'
-ha_config_flow: true
-ha_codeowners:
- - '@gcampax'
- - '@balloob'
-ha_domain: almond
-ha_integration_type: integration
----
-
-[Almond](https://almond.stanford.edu/) is an open, privacy-preserving virtual assistant by [Stanford Open Virtual Assistant Lab](https://oval.cs.stanford.edu/). It allows you, among other things, to control Home Assistant using natural language. Once installed, it will be available in the user interface via the microphone icon in the top right.
-
-Almond consists of three parts:
-
-- Almond Server: Knows about Home Assistant and your data. Executes your sentences.
-- LUInet: Neural network that converts your sentences into Thingtalk programs.
-- Thingpedia: Skills that provide the building blocks for Thingtalk programs.
-
-
-
-## Installation
-
-### Home Assistant add-on installation
-
-To install Almond Server, go to the Home Assistant add-on store, search for Genie and click on Install. Once started, it will initiate a configuration flow to finish set up in Home Assistant. You can find it on the integrations page in the configuration panel.
-
-### Manual installation
-
-You can install Almond Server by following [the instructions in their README](https://github.com/stanford-oval/almond-server#running-almond-server).
-
-Before linking it to Home Assistant, you will need to visit the Almond UI once to create a password. It is by default available on port 3000.
-
-Once installed, configure Almond like this:
-
-```yaml
-# Example configuration.yaml entry
-almond:
- type: local
- host: http://127.0.0.1:3000
-```
-
-The Almond integration does not update configuration entries yet. If you make a change to configuration.yaml, you will need to remove the configuration entry and then restart Home Assistant.
-
-### Almond Web
-
-Stanford offers a hosted version of Almond Server called Almond Web. To use this, go to the integrations page and add Almond using the add integration flow.
-
-Your Home Assistant installation needs to be externally accessible if you want Almond Web to be able to control Home Assistant.
-
-### Almond Web - Manual installation
-
-It is possible to set up Almond Web manually. You will need to create your own client ID and secret in the web interface.
-
-```yaml
-# Example configuration.yaml entry
-almond:
- type: oauth2
- client_id: AAAAAAAAAAAAA
- client_secret: BBBBBBBBBBBBBBBBB
-```
-
-You can now go to the integrations page and start the configuration flow.
-
-## Language Support
-
-Almond is currently limited to the English language. This is not a technical limitation but requires specialized engineering effort. Almond has currently no public timeline for adding other languages.
-
-## Device Support
-
-Almond is constantly improving. It does not currently support all devices, but we're working with Almond on improving this.
diff --git a/source/_integrations/anwb_energie.markdown b/source/_integrations/anwb_energie.markdown
new file mode 100644
index 000000000000..626f1b905aae
--- /dev/null
+++ b/source/_integrations/anwb_energie.markdown
@@ -0,0 +1,20 @@
+---
+title: ANWB Energie
+description: Connect and control your ANWB Energie devices using the EnergyZero integration
+ha_category:
+ - Energy
+ha_domain: anwb_energie
+ha_release: 2023.2
+ha_integration_type: virtual
+ha_supporting_domain: energyzero
+ha_supporting_integration: EnergyZero
+ha_codeowners:
+ - '@klaasnicolaas'
+ha_config_flow: true
+ha_platforms:
+ - diagnostics
+ - sensor
+ha_iot_class: Cloud Polling
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/aquostv.markdown b/source/_integrations/aquostv.markdown
index 3eee746c185e..ee429c7e12fb 100644
--- a/source/_integrations/aquostv.markdown
+++ b/source/_integrations/aquostv.markdown
@@ -81,5 +81,6 @@ Also, with **power_on_enabled** as True, the Aquos logo on your TV will stay on
- LC-50US40 (no volume control, not fully tested)
- LC-70LE650U
- LC-70LE747E (no volume control)
+- LC-60LE650U
If your model is not on the list, give it a test. If everything works correctly, then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.io/blob/current/source/_integrations/aquostv.markdown).
diff --git a/source/_integrations/bluetooth_adapters.markdown b/source/_integrations/bluetooth_adapters.markdown
new file mode 100644
index 000000000000..3ab04c4b2130
--- /dev/null
+++ b/source/_integrations/bluetooth_adapters.markdown
@@ -0,0 +1,19 @@
+---
+title: Bluetooth Adapters
+description: Bluetooth Adapters provides access to local and remote Bluetooth Adapters
+ha_release: 2023.2
+ha_category:
+ - Other
+ha_codeowners:
+ - '@bdraco'
+ha_domain: bluetooth_adapters
+ha_integration_type: system
+ha_quality_scale: internal
+ha_iot_class: Local Push
+---
+
+Bluetooth Adapters provides access to local and remote Bluetooth Adapters to integrations that use Bluetooth.
+
+## Configuration
+
+This integration is not user configurable.
diff --git a/source/_integrations/bmw_connected_drive.markdown b/source/_integrations/bmw_connected_drive.markdown
index c5d9a32266b3..200d5ef6d5c8 100644
--- a/source/_integrations/bmw_connected_drive.markdown
+++ b/source/_integrations/bmw_connected_drive.markdown
@@ -20,6 +20,7 @@ ha_platforms:
- binary_sensor
- button
- device_tracker
+ - diagnostics
- lock
- notify
- sensor
diff --git a/source/_integrations/braviatv.markdown b/source/_integrations/braviatv.markdown
index bde701d0c4bc..7ec2b1107c45 100644
--- a/source/_integrations/braviatv.markdown
+++ b/source/_integrations/braviatv.markdown
@@ -44,6 +44,52 @@ If you have previously set up your TV with any Home Assistant instances via PIN
- On your TV, go to: **Settings** -> **Network** -> **Remote device settings** -> **Deregister remote device**. Disable and re-enable the **Control remotely** after. Menu titles may differ slightly between models. If needed, refer to your specific model's [manual](https://www.sony.com/electronics/support/manuals) for additional guidance.
- Reset your TV to factory condition.
+## Media Browser
+
+Using the Media Browser, you can view a list of all installed applications and TV channels and launch them.
+
+## Play Media service
+
+The `play_media` service can be used in a automation or script to switch to a specified application or TV channel. It selects the best matching application or channel according to the `media_content_id`:
+
+ 1. Channel number *(i.e., '1' or '6')*
+ 2. Exact app or channel name *(i.e., 'Google Play' or 'CNN')*
+ 3. Substring in app or channel name *(i.e., 'BFM' in 'BFM TV')*
+ 4. URI-string of app or channel *(i.e., 'tv:dvbt?trip=9999.441.41104&srvName=BBC HD')*
+
+**Example to open YouTube app:**
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.bravia_tv
+data:
+ media_content_id: "YouTube"
+ media_content_type: "app"
+```
+
+**Example to switch to channel number 11:**
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.bravia_tv
+data:
+ media_content_id: 11
+ media_content_type: "channel"
+```
+
+**Example to switch to channel including 'news' in its name:**
+
+```yaml
+service: media_player.play_media
+target:
+ entity_id: media_player.bravia_tv
+data:
+ media_content_id: "news"
+ media_content_type: "channel"
+```
+
## Remote
The integration supports `remote` platform. The remote allows you to send key commands to your TV with the `remote.send_command` service.
@@ -77,13 +123,19 @@ The commands that can be sent to the TV depends on the model of your TV. To disp
{% enddetails %}
-## Buttons
+**Example to send `Down` key command:**
-The integration supports `button` platform and allows you to reboot the device or terminate all running applications.
+```yaml
+service: remote.send_command
+target:
+ entity_id: media_player.bravia_tv
+data:
+ command: "Down"
+```
-{% include integrations/option_flow.md %}
+## Buttons
-The integration allows you to customize the list of ignored sources.
+The integration supports `button` platform and allows you to reboot the device or terminate all running applications.
## For TVs older than 2013
diff --git a/source/_integrations/bswitch.markdown b/source/_integrations/bswitch.markdown
index cab36d9ac620..e03e7672aae1 100644
--- a/source/_integrations/bswitch.markdown
+++ b/source/_integrations/bswitch.markdown
@@ -21,7 +21,7 @@ ha_platforms:
- cover
- light
- switch
-ha_iot_class: Local Polling
+ha_iot_class: Local Push
---
{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/calendar.markdown b/source/_integrations/calendar.markdown
index ecafdee30801..fe98688f1918 100644
--- a/source/_integrations/calendar.markdown
+++ b/source/_integrations/calendar.markdown
@@ -38,6 +38,8 @@ Some calendar integrations allow Home Assistant to manage your calendars
directly from Home Assistant. In this case, you can add new events by clicking
the “Add event” button in the lower right corner of the calendar dashboard.
+Also see [Services](#services) below.
+
## Automation
Calendar [Triggers](/docs/automation/trigger) enable automation based on an
@@ -139,3 +141,41 @@ automation:
{% endraw %}
{% enddetails %}
+
+## Services
+
+Some calendar integrations allow Home Assistant to manage your calendars
+directly using services. The services provided by some calendar entities are described below or you can read more about [Service Calls](/docs/scripts/service-calls/).
+
+### Service `calendar.create_event`
+
+Add a new calendar event. A calendar `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector) and the `data` payload supports the following fields:
+
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ----------- | --------|
+| `summary` | no | Acts as the title of the event. | Bowling
+| `description` | yes | The description of the event. | Birthday bowling
+| `start_date_time` | yes | The date and time the event should start. | 2019-03-10 20:00:00
+| `end_date_time` | yes | The date and time the event should end. | 2019-03-10 23:00:00
+| `start_date` | yes | The date the whole day event should start. | 2019-03-10
+| `end_date` | yes | The date the whole day event should end. | 2019-03-11
+| `in` | yes | Days or weeks that you want to create the event in. | "days": 2
+
+
+
+
+You either use `start_date_time` and `end_date_time`, or `start_date` and `end_date`, or `in`.
+
+
+
+This is a full example of service call in YAML:
+
+```yaml
+service: calendar.create_event
+target:
+ entity_id: calendar.device_automation_schedules
+data:
+ summary: "Example"
+ start_date: "2022-10-01"
+ end_date: "2022-10-02"
+```
diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown
index 4754c3a4c06c..cea20bb49a7e 100644
--- a/source/_integrations/climate.mqtt.markdown
+++ b/source/_integrations/climate.mqtt.markdown
@@ -83,6 +83,14 @@ availability_topic:
description: The MQTT topic subscribed to receive availability (online/offline) updates. Must not be used together with `availability`.
required: false
type: string
+current_humidity_template:
+ description: A template with which the value received on `current_humidity_topic` will be rendered.
+ required: false
+ type: template
+current_humidity_topic:
+ description: The MQTT topic on which to listen for the current humidity.
+ required: false
+ type: string
current_temperature_template:
description: A template with which the value received on `current_temperature_topic` will be rendered.
required: false
@@ -189,10 +197,20 @@ json_attributes_topic:
description: The MQTT topic subscribed to receive a JSON dictionary payload and then set as sensor attributes. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-topic-configuration) documentation.
required: false
type: string
+max_humidity:
+ description: The minimum target humidity percentage that can be set.
+ required: false
+ type: integer
+ default: 99
max_temp:
description: Maximum set point available.
type: float
required: false
+min_humidity:
+ description: The maximum target humidity percentage that can be set.
+ required: false
+ type: integer
+ default: 30
min_temp:
description: Minimum set point available.
type: float
@@ -202,7 +220,7 @@ mode_command_template:
required: false
type: template
mode_command_topic:
- description: The MQTT topic to publish commands to change the HVAC operation mode.
+ description: The MQTT topic to publish commands to change the HVAC operation mode. Use with `mode_command_template` if you only want to publish the power state.
required: false
type: string
mode_state_template:
@@ -227,6 +245,11 @@ object_id:
description: Used instead of `name` for automatic generation of `entity_id`
required: false
type: string
+optimistic:
+ description: Flag that defines if the climate works in optimistic mode
+ required: false
+ type: boolean
+ default: "`true` if no state topic defined, else `false`."
payload_available:
description: The payload that represents the available state.
required: false
@@ -247,10 +270,6 @@ payload_on:
required: false
type: string
default: "ON"
-power_command_topic:
- description: The MQTT topic to publish commands to change the power state. This is useful if your device has a separate power toggle in addition to mode.
- required: false
- type: string
precision:
description: The desired precision for this device. Can be used to match your actual thermostat's precision. Supported values are `0.1`, `0.5` and `1.0`.
required: false
@@ -308,6 +327,22 @@ swing_modes:
required: false
default: ['on', 'off']
type: list
+target_humidity_command_template:
+ description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `target_humidity_command_topic`.
+ required: false
+ type: template
+target_humidity_command_topic:
+ description: The MQTT topic to publish commands to change the target humidity.
+ required: false
+ type: string
+target_humidity_state_topic:
+ description: The MQTT topic subscribed to receive the target humidity. If this is not set, the target humidity works in optimistic mode (see below).
+ required: false
+ type: string
+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
temperature_command_template:
description: A template to render the value sent to the `temperature_command_topic` with.
required: false
@@ -377,7 +412,7 @@ value_template:
## Optimistic mode
-If a property works in *optimistic mode* (when the corresponding state topic is not set), Home Assistant will assume that any state changes published to the command topics did work and change the internal state of the entity immediately after publishing to the command topic. If it does not work in optimistic mode, the internal state of the entity is only updated when the requested update is confirmed by the device through the state topic.
+If a property works in *optimistic mode* (when the corresponding state topic is not set), Home Assistant will assume that any state changes published to the command topics did work and change the internal state of the entity immediately after publishing to the command topic. If it does not work in optimistic mode, the internal state of the entity is only updated when the requested update is confirmed by the device through the state topic. You can enforce optimistic mode by setting the `optimistic` option to `true`. When set, the internal state will always be updated, even when a state topic is defined.
## Using Templates
@@ -410,6 +445,8 @@ Similarly for `*_command_topic`s, a template can be specified to render the outg
A full configuration example looks like the one below.
+{% raw %}
+
```yaml
# Full example configuration.yaml entry
mqtt:
@@ -430,11 +467,13 @@ mqtt:
- "eco"
- "sleep"
- "activity"
- power_command_topic: "study/ac/power/set"
preset_mode_command_topic: "study/ac/preset_mode/set"
mode_command_topic: "study/ac/mode/set"
+ mode_command_template: "{{ value if value=="off" else "on" }}"
temperature_command_topic: "study/ac/temperature/set"
fan_mode_command_topic: "study/ac/fan/set"
swing_mode_command_topic: "study/ac/swing/set"
precision: 1.0
```
+
+{% endraw %}
\ No newline at end of file
diff --git a/source/_integrations/conversation.markdown b/source/_integrations/conversation.markdown
index f1038151e184..111a0cb45cb8 100644
--- a/source/_integrations/conversation.markdown
+++ b/source/_integrations/conversation.markdown
@@ -24,79 +24,146 @@ The conversation integration allows you to converse with Home Assistant. You can
conversation:
```
-{% configuration %}
-intents:
- description: Intents that the conversation integration should understand.
- required: false
- type: map
- keys:
- '``':
- description: Sentences that should trigger this intent.
- required: true
- type: list
-{% endconfiguration %}
+## Default sentences
+
+By default, a collection of [community contributed sentences](https://github.com/home-assistant/intents/) are supported in a growing [list of languages](https://developers.home-assistant.io/docs/voice/intent-recognition/supported-languages).
+
+In English, you can say things like "turn on kitchen lights" or "turn off lights in the bedroom" if you have an area named "bedroom".
## Adding custom sentences
-By default, it will support turning devices on and off. You can say things like "turn on kitchen lights" or "turn the living room lights off". You can also configure your own sentences to be processed. This works by mapping sentences to intents and then configure the [intent script integration](/integrations/intent_script/) to handle these intents.
+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/).
-Here is a simple example to be able to ask what the temperature in the living room is.
+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.
+
+For an English example, create the file `config/custom_sentences/en/temperature.yaml` and add:
{% raw %}
```yaml
-# Example configuration.yaml entry
-conversation:
- intents:
- LivingRoomTemperature:
- - What is the temperature in the living room
+# Example temperature.yaml entry
+language: "en"
+intents:
+ CustomOutsideHumidity:
+ data:
+ - sentences:
+ - "What is the humidity outside"
+```
+
+{% endraw %}
+
+To teach Home Assistant how to handle the custom `CustomOutsideHumidity` intent, create an `intent_script` entry in your `configuration.yaml` file:
+{% raw %}
+
+```yaml
+# Example configuration.yaml entry
intent_script:
- LivingRoomTemperature:
+ CustomOutsideHumidity:
speech:
- text: It is currently {{ states.sensor.temperature }} degrees in the living room.
+ text: "It is currently {{ states("sensor.outside_humidity") }} percent humidity outside."
```
{% endraw %}
-## Adding advanced custom sentences
+More complex [actions](/docs/scripts/) can be done in `intent_script`, such as calling services and firing events.
-Sentences can contain slots (marked with curly braces: `{name}`) and optional words (marked with square brackets: `[the]`). The values of slots will be passed on to the intent and are available inside the templates.
-The following configuration can handle the following sentences:
+## Extending built-in intents
-- Change the lights to red
-- Change the lights to green
-- Change the lights to blue
-- Change the lights to the color red
-- Change the lights to the color green
-- Change the lights to the color blue
+Extending the built-in 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:
{% raw %}
```yaml
-# Example configuration.yaml entry
-conversation:
- intents:
- ColorLight:
- - Change the lights to [the color] {color}
-intent_script:
- ColorLight:
- speech:
- text: Changed the lights to {{ color }}.
- action:
- service: light.turn_on
- data:
- rgb_color:
- - "{% if color == 'red' %}255{% else %}0{% endif %}"
- - "{% if color == 'green' %}255{% else %}0{% endif %}"
- - "{% if color == 'blue' %}255{% else %}0{% endif %}"
+# Example on_off.yaml entry
+language: "en"
+intents:
+ HassTurnOn:
+ data:
+ - sentences:
+ - "engage [the] kitchen lights"
+ slots:
+ name: "kitchen lights"
+ HassTurnOff:
+ data:
+ - sentences:
+ - "disengage [the] kitchen lights"
+ slots:
+ name: "kitchen lights"
+```
+
+{% endraw %}
+
+Now when you say "engage the kitchen lights", it will turn on a light named "kitchen lights". Saying "disengage kitchen lights" will turn it off.
+
+Let's generalize this to other entities. The built-in `{name}` and `{area}` lists contain the names of your Home Assistant entities and areas.
+
+Adding `{name}` to `config/custom_sentences/en/on_off.yaml`:
+
+{% raw %}
+
+```yaml
+# Example on_off.yaml entry
+language: "en"
+intents:
+ HassTurnOn:
+ data:
+ - sentences:
+ - "engage [the] {name}"
+ HassTurnOff:
+ data:
+ - sentences:
+ - "disengage [the] {name}"
```
{% endraw %}
+You can now "engage" or "disengage" any entity.
+
+Lastly, let's add sentences for turning lights on and off in specific areas:
+
+{% raw %}
+
+```yaml
+# Example on_off.yaml entry
+language: "en"
+intents:
+ HassTurnOn:
+ data:
+ - sentences:
+ - "engage [the] {name}"
+ - sentences:
+ - "engage [all] lights in [the] {area}"
+ slots:
+ name: "all"
+ domain: "light"
+ HassTurnOff:
+ data:
+ - sentences:
+ - "disengage [the] {name}"
+ - sentences:
+ - "disengage [all] lights in [the] {area}"
+ slots:
+ name: "all"
+ domain: "light"
+```
+
+{% endraw %}
+
+It's now possible to say "engage all lights in the bedroom", which will turn on every light in the area named "bedroom".
+
+
## Service `conversation.process`
-| Service data attribute | Optional | Description |
-|------------------------|----------|--------------------------------------------------|
-| `text` | yes | Transcribed text |
+| Service data attribute | Optional | Description |
+|------------------------|----------|------------------|
+| `text` | yes | Transcribed text |
+
+## Service `conversation.reload`
+
+| Service data attribute | Optional | Description |
+|------------------------|----------|--------------------------------------------------------------------------|
+| `language` | yes | Language to clear intent cache for. Defaults to Home Assistant language. |
diff --git a/source/_integrations/coolmaster.markdown b/source/_integrations/coolmaster.markdown
index beea19ed093e..7c5456f9fc6a 100644
--- a/source/_integrations/coolmaster.markdown
+++ b/source/_integrations/coolmaster.markdown
@@ -10,7 +10,10 @@ ha_codeowners:
- '@OnFreund'
ha_domain: coolmaster
ha_platforms:
+ - binary_sensor
+ - button
- climate
+ - sensor
ha_integration_type: integration
---
diff --git a/source/_integrations/cpuspeed.markdown b/source/_integrations/cpuspeed.markdown
index d0afb00ffa3b..6e0ed8992558 100644
--- a/source/_integrations/cpuspeed.markdown
+++ b/source/_integrations/cpuspeed.markdown
@@ -23,4 +23,4 @@ The CPU Speed integration allows you to monitor the current CPU speed.
## Known issues and limitations
Not all CPUs are supported. For example, some [ARM CPUs](https://github.com/workhorsy/py-cpuinfo/#cpu-support)
-are known not to work with this integration.
\ No newline at end of file
+are known not to work with this integration.
diff --git a/source/_integrations/default_config.markdown b/source/_integrations/default_config.markdown
index a075a1f87bdb..a14035a942aa 100644
--- a/source/_integrations/default_config.markdown
+++ b/source/_integrations/default_config.markdown
@@ -17,6 +17,7 @@ This integration is a meta-component and configures a default set of integration
- [Backup](/integrations/backup/) (`backup`)
- [Bluetooth](/integrations/bluetooth/) (`bluetooth`)
- [Configuration](/integrations/config/) (`config`)
+- [Conversation](/integrations/conversation/) (`conversation`)
- [Counter](/integrations/counter/) (`counter`)
- [DHCP Discovery](/integrations/dhcp/) (`dhcp`)
- [Energy](/integrations/energy/) (`energy`)
diff --git a/source/_integrations/denonavr.markdown b/source/_integrations/denonavr.markdown
index 8f794e6e4e15..671fe94ffef7 100644
--- a/source/_integrations/denonavr.markdown
+++ b/source/_integrations/denonavr.markdown
@@ -83,8 +83,10 @@ Known supported devices:
- Marantz SR8015
- Marantz NR1504
- Marantz NR1506
+- Marantz NR1509
- Marantz NR1510
- Marantz NR1602
+- Marantz NR1603
- Marantz NR1604
- Marantz NR1606
- Marantz NR1607
diff --git a/source/_integrations/devolo_home_network.markdown b/source/_integrations/devolo_home_network.markdown
index d08b5aad986e..eec59bdbd291 100755
--- a/source/_integrations/devolo_home_network.markdown
+++ b/source/_integrations/devolo_home_network.markdown
@@ -5,6 +5,7 @@ ha_category:
- Binary Sensor
- Presence Detection
- Sensor
+ - Switch
ha_release: '2021.12'
ha_iot_class: Local Polling
ha_config_flow: true
@@ -16,7 +17,9 @@ ha_quality_scale: platinum
ha_platforms:
- binary_sensor
- device_tracker
+ - diagnostics
- sensor
+ - switch
ha_zeroconf: true
ha_integration_type: device
---
@@ -53,14 +56,25 @@ Currently the following device types within Home Assistant are supported.
* Updates every 5 minutes
* Is disabled by default because it typically rarely changes
+### Switch
+
+* Turn on/off guest wifi
+ * Is enabled by default
+* Turn on/off the device LEDs
+ * Is enabled by default
+
## Supported devolo Devices
The list of supported devolo devices depends on the device firmware and the device features. The following devices were tested running firmware 5.6.0:
+* Magic 2 WiFi 6
* Magic 2 WiFi next
* Magic 2 WiFi 2-1
* Magic 1 WiFi mini
* Magic 1 WiFi 2-1
+* WiFi 6 Repeater 5400
+* WiFi 6 Repeater 3000
+* WiFi Repeater+ ac
* dLAN 1200+ WiFi ac
* dLAN 550+ Wifi
* dLAN 550 WiFi
diff --git a/source/_integrations/directv.markdown b/source/_integrations/directv.markdown
index c66b8e1d9bbf..c69177a701bd 100644
--- a/source/_integrations/directv.markdown
+++ b/source/_integrations/directv.markdown
@@ -8,7 +8,7 @@ ha_release: 0.25
ha_iot_class: Local Polling
ha_domain: directv
ha_config_flow: true
-ha_quality_scale: gold
+ha_quality_scale: silver
ha_ssdp: true
ha_platforms:
- media_player
diff --git a/source/_integrations/dlink.markdown b/source/_integrations/dlink.markdown
index e604a87b619f..9f36c0b88b67 100644
--- a/source/_integrations/dlink.markdown
+++ b/source/_integrations/dlink.markdown
@@ -5,53 +5,25 @@ ha_category:
- Switch
ha_iot_class: Local Polling
ha_release: 0.14
+ha_config_flow: true
+ha_dhcp: true
ha_domain: dlink
ha_platforms:
- switch
-ha_integration_type: integration
+ha_codeowners:
+ - '@tkdrob'
+ha_integration_type: device
---
-The `dlink` switch platform allows you to control the state of your [D-Link Wi-Fi Smart Plugs](https://us.dlink.com/en/consumer/smart-home).
+The D-Link Wi-Fi Smart Plugs integration allows you to control the state of your [D-Link Wi-Fi Smart Plugs](https://us.dlink.com/en/consumer/smart-home).
+
+{% include integrations/config_flow.md %}
Supported devices (tested):
- DSP-W215
- DSP-W110
-To use your D-Link smart plugs in your installation, add the following to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-switch:
- - platform: dlink
- host: IP_ADRRESS
- username: YOUR_USERNAME
- password: YOUR_PASSWORD
-```
+Password: The default password is the PIN included on the configuration card or on the back of the unit.
-{% configuration %}
-host:
- description: "The IP address of your D-Link plug, e.g., 192.168.1.32."
- required: true
- type: string
-name:
- description: The name to use when displaying this switch.
- required: false
- default: D-link Smart Plug W215
- type: string
-username:
- description: The username for your plug.
- required: true
- default: admin
- type: string
-password:
- description: The password for your plug.
- required: true
- default: The default password is the `PIN` included on the configuration card.
- type: string
-use_legacy_protocol:
- description: Enable limited support for legacy firmware protocols (Tested with v1.24, v1.26).
- required: false
- default: false
- type: boolean
-{% endconfiguration %}
+Use the legacy protocol in case the integration does not work. This enables limited support for legacy firmware protocols (Tested with v1.24, v1.26). Data such as power consumption will not be available. The temperature will also show a freezing level.
diff --git a/source/_integrations/energie_vanons.markdown b/source/_integrations/energie_vanons.markdown
new file mode 100644
index 000000000000..a9a2304c3e5c
--- /dev/null
+++ b/source/_integrations/energie_vanons.markdown
@@ -0,0 +1,20 @@
+---
+title: Energie VanOns
+description: Connect and control your Energie VanOns devices using the EnergyZero integration
+ha_category:
+ - Energy
+ha_domain: energie_vanons
+ha_release: 2023.2
+ha_integration_type: virtual
+ha_supporting_domain: energyzero
+ha_supporting_integration: EnergyZero
+ha_codeowners:
+ - '@klaasnicolaas'
+ha_config_flow: true
+ha_platforms:
+ - diagnostics
+ - sensor
+ha_iot_class: Cloud Polling
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/energyzero.markdown b/source/_integrations/energyzero.markdown
new file mode 100644
index 000000000000..687f0179a703
--- /dev/null
+++ b/source/_integrations/energyzero.markdown
@@ -0,0 +1,54 @@
+---
+title: EnergyZero
+description: Instructions on how to integrate EnergyZero within Home Assistant.
+ha_category:
+ - Energy
+ha_release: 2023.2
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@klaasnicolaas'
+ha_domain: energyzero
+ha_platforms:
+ - diagnostics
+ - sensor
+ha_quality_scale: platinum
+ha_integration_type: integration
+---
+
+The EnergyZero integration integrates the [EnergyZero](https://www.energyzero.nl/) API platform with Home Assistant.
+
+The integration makes it possible to retrieve the dynamic energy/gas prices
+from EnergyZero in order to gain insight into the price trend of the day and
+to adjust your consumption accordingly.
+
+Partners who purchase their energy through EnergyZero:
+
+- [ANWB Energie](https://www.anwb.nl/huis/energie/anwb-energie)
+- [Mijndomein Energie](https://www.mijndomein.nl/energie)
+- [Energie van Ons](https://www.energie.vanons.org)
+- [GroeneStroomLokaal](https://www.groenestroomlokaal.nl)
+
+{% include integrations/config_flow.md %}
+
+## Sensors
+
+The EnergyZero integration creates a number of sensor entities for both gas and electricity prices.
+
+### Energy market price
+
+Every day around **14:00 UTC time**, the new prices are published for the following day.
+
+- The `current` and `next hour` electricity market price
+- Average electricity price of the day
+- Lowest energy price
+- Highest energy price
+- 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
+
+### Gas market price
+
+For the dynamic gas prices, only entities are created that display the
+`current` and `next hour` price because the price is always fixed for
+24 hours; new prices are published every morning at **05:00 UTC time**.
diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown
index c06a41e91c78..68c0c3b1fd58 100644
--- a/source/_integrations/enphase_envoy.markdown
+++ b/source/_integrations/enphase_envoy.markdown
@@ -24,4 +24,4 @@ A sensor platform for the [Enphase Envoy](https://enphase.com/en-us/products-and
For newer models, the username `envoy` without a password will grant access to the device. For older models, the password for the `installer` user can be obtained with this: [tool](https://thecomputerperson.wordpress.com/2016/08/28/reverse-engineering-the-enphase-installer-toolkit/).
-In some cases, you need to use the username `envoy` with the last 6 digits of the unit's serial number as password. See [the enphase documentation](https://www4.enphase.com/en-us/support/faq/what-username-and-password-administration-page-envoy-local-interface) for more details on other units.
+In some cases, you need to use the username `envoy` with the last 6 digits of the unit's serial number as password. See [the enphase documentation](https://support.enphase.com/s/article/What-is-the-Username-and-Password-for-the-Administration-page-of-the-Envoy-local-interface) for more details on other units.
diff --git a/source/_integrations/esphome.markdown b/source/_integrations/esphome.markdown
index f61d37e7aba7..533fac13554e 100644
--- a/source/_integrations/esphome.markdown
+++ b/source/_integrations/esphome.markdown
@@ -4,6 +4,7 @@ description: Support for ESPHome devices using the native ESPHome API.
featured: true
ha_category:
- DIY
+ - Update
ha_release: 0.85
ha_iot_class: Local Push
ha_config_flow: true
@@ -27,6 +28,7 @@ ha_platforms:
- select
- sensor
- switch
+ - update
ha_integration_type: device
ha_dhcp: true
works_with:
diff --git a/source/_integrations/eufy.markdown b/source/_integrations/eufy.markdown
index 71984a4a5f7c..77a3059d6745 100644
--- a/source/_integrations/eufy.markdown
+++ b/source/_integrations/eufy.markdown
@@ -1,6 +1,6 @@
---
-title: eufy
-description: Instructions on how to integrate Eufy devices into Home Assistant.
+title: EufyHome
+description: Instructions on how to integrate EufyHome devices into Home Assistant.
ha_category:
- Hub
- Light
@@ -14,14 +14,14 @@ ha_platforms:
ha_integration_type: integration
---
-The `eufy` integration is the main integration to integrate various [eufy](https://www.eufylife.com/) devices with Home Assistant.
+The EufyHome integration is the main integration to integrate [eufy](https://eufy.com/) devices sold under the EufyHome product line with Home Assistant.
There is currently support for the following device types within Home Assistant:
- Light
- Switch
-Supported devices will be discovered after the `eufy` integration is configured:
+Supported devices will be discovered after the EufyHome integration is configured:
```yaml
# Example configuration.yaml entry
@@ -30,7 +30,7 @@ eufy:
password: PASSWORD
```
-where username and password are the ones configured in the EufyHome app. Alternately, Eufy devices that are not discoverable can be statically configured.
+where username and password are the ones configured in the EufyHome app. Alternately, EufyHome devices that are not discoverable can be statically configured.
```yaml
eufy:
@@ -45,7 +45,7 @@ eufy:
name: Smart Switch
```
-`access_token can be obtained by running:
+`access_token` can be obtained by running:
```bash
$ curl -H "Content-Type: application/json" \
@@ -53,7 +53,7 @@ $ curl -H "Content-Type: application/json" \
https://home-api.eufylife.com/v1/user/email/login
```
-replacing USERNAME and PASSWORD with the Eufy username and password. This will give an `access_token`. Then run:
+replacing USERNAME and PASSWORD with the EufyHome username and password. This will give an `access_token`. Then run:
```bash
$ curl -H token:TOKEN -H category:Home \
diff --git a/source/_integrations/eufylife_ble.markdown b/source/_integrations/eufylife_ble.markdown
new file mode 100644
index 000000000000..423046303536
--- /dev/null
+++ b/source/_integrations/eufylife_ble.markdown
@@ -0,0 +1,41 @@
+---
+title: EufyLife
+description: Instructions on how to integrate your EufyLife Bluetooth device with Home Assistant.
+ha_release: '2023.2'
+ha_category:
+ - Sensor
+ha_iot_class: Local Push
+ha_config_flow: true
+ha_codeowners:
+ - '@bdr99'
+ha_domain: eufylife_ble
+ha_platforms:
+ - sensor
+ha_integration_type: device
+---
+
+The EufyLife integration allows you to integrate Eufy smart scales with Home Assistant.
+
+## Supported devices
+
+- [Smart Scale (T9140)](https://www.eufy.com/products/t9140)
+- [Smart Scale C1 (T9146)](https://www.eufy.com/products/t9146)
+- [Smart Scale P1 (T9147)](https://www.eufy.com/products/t9147)
+- [Smart Scale P2 (T9148)](https://www.eufy.com/products/t9148)
+- [Smart Scale P2 Pro (T9149)](https://www.eufy.com/products/t9149111)
+
+
+
+This integration does not support the Wi-Fi capabilities of the P2 and P2 Pro. It can only connect to your smart scale via Bluetooth.
+
+
+
+## Features
+
+All smart scale models provide a weight sensor entity and a real-time weight sensor entity. The real-time weight entity updates in real time while the scale is taking a weight measurement. The weight entity updates with the final weight value only when the scale is finished taking a weight measurement.
+
+The Smart Scale P2 Pro additionally provides a heart rate sensor entity that will display the most recent heart rate measurement taken by the scale.
+
+The EufyLife integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. Alternatively, follow the steps below to add the integration manually.
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/fire_tv.markdown b/source/_integrations/fire_tv.markdown
new file mode 100644
index 000000000000..9243c6a73caa
--- /dev/null
+++ b/source/_integrations/fire_tv.markdown
@@ -0,0 +1,21 @@
+---
+title: Amazon Fire TV
+description: Connect and control your Amazon Fire TV devices using the Android TV integration
+ha_category:
+ - Media Player
+ha_domain: fire_tv
+ha_integration_type: virtual
+ha_supporting_domain: androidtv
+ha_supporting_integration: Android TV
+ha_release: 0.7.6
+ha_codeowners:
+ - '@JeffLIrion'
+ - '@ollo69'
+ha_config_flow: true
+ha_platforms:
+ - diagnostics
+ - media_player
+ha_iot_class: Local Polling
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/frontend.markdown b/source/_integrations/frontend.markdown
index f4ea78e709ec..867d96ad78d1 100644
--- a/source/_integrations/frontend.markdown
+++ b/source/_integrations/frontend.markdown
@@ -51,7 +51,7 @@ frontend:
### Theme format
-The frontend integration allows you to create custom themes to influence the look and feel of the user interface. Note that we only officially support the `primary-color` and `accent-color` properties. Although we do our best to keep things working, the behavior of other properties can change between releases.
+The frontend integration allows you to create custom themes to influence the look and feel of the user interface.
```yaml
# Example configuration.yaml entry
@@ -59,13 +59,50 @@ frontend:
themes:
happy:
primary-color: pink
- text-primary-color: purple
- mdc-theme-primary: plum
+ accent-color: orange
sad:
primary-color: steelblue
+ accent-color: darkred
```
-The example above defines two themes named `happy` and `sad`. For each theme, you can set values for CSS variables. If you want to provide hex color values, wrap those in apostrophes, since otherwise, YAML would consider them a comment (`primary-color: '#123456'`). For a partial list of variables used by the main frontend see [ha-style.ts](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/resources/ha-style.ts).
+The example above defines two themes named `happy` and `sad`. For each theme, you can set values for CSS variables. If you want to provide hex color values, wrap those in apostrophes, since otherwise, YAML would consider them a comment (`primary-color: "#123456"`).
+
+### Supported theme variables
+
+#### Primary and accent color
+
+Primary and accent colors are the main colors of the application.
+They can be changed it using `primary-color` and `accent-color` variables.
+
+#### State color
+
+Each entity has its own color, based on `domain`, `device_class`, and `state`, to be easily recognizable. Theses colors are used in [dashboards](/dashboards/) and [history](/integrations/history/). Home Assistant has default color rules that fit most use cases.
+
+Here is a list of domains that support colors: `alarm_control_panel`, `alert`, `automation`, `binary_sensor`, `calendar`, `camera`, `climate`, `cover`, `device_tracker`, `fan`, `group`, `humidifier`, `input_boolean`, `light`, `lock`, `media_player`, `person`, `plant`, `remote`, `schedule`, `script`, `siren`, `sun`, `switch`, `timer`, `update`, and `vacuum`.
+
+The color rules can be customized using theme variables:
+
+1. `state-{domain}-{device_class}-{state}-color`
+2. `state-{domain}-{state}-color`
+3. `state-{domain}-(active|inactive)-color`
+4. `state-(active|inactive)-color`
+
+Note that the variables will be used in the listed order, so if multiple match your entity, the first matching variable (= most specific one) will be used.
+
+```yaml
+# Example configuration.yaml entry
+frontend:
+ themes:
+ my_theme:
+ state-cover-garage_door-open-color: "#ff0000"
+ state-media_player-inactive-color: "#795548"
+```
+
+The example above defines red color for open garage doors and brown color for inactive media players.
+
+### Unsupported theme variables
+
+Although we do our best to keep things working, the behavior of other theme variables can change between releases. For a partial list of variables used by the main frontend see [ha-style.ts](https://github.com/home-assistant/frontend/blob/master/src/resources/ha-style.ts).
### Dark mode support
@@ -82,7 +119,6 @@ frontend:
happy:
primary-color: pink
text-primary-color: purple
- mdc-theme-primary: plum
sad:
primary-color: steelblue
modes:
diff --git a/source/_integrations/generic.markdown b/source/_integrations/generic.markdown
index fe87c49dce21..d4a4dfe70bf6 100644
--- a/source/_integrations/generic.markdown
+++ b/source/_integrations/generic.markdown
@@ -24,13 +24,13 @@ Home Assistant will serve the images via its server, making it possible to view
You must enter a URL in at least one of the fields **Still Image URL** or **Stream Source URL**, the others are optional.
-[Templates](/topics/templating/) are allowed in the URL fields, which can be used to select different images or parameterize the URL depending on the status of sensors. Template validity and network access are checked during the configuration steps.
+[Templates](/docs/configuration/templating/) are allowed in the URL fields, which can be used to select different images or parameterize the URL depending on the status of sensors. Template validity and network access are checked during the configuration steps.
{% configuration_basic %}
Still Image URL:
- description: "The URL your camera serves the image on, e.g., `http://192.168.1.21:2112/`. Can be a [template](/topics/templating/). Usernames and passwords are allowed in the URL, but if none are provided, the `Username` and `Password` settings will be used during authentication. At least one of still_image_url or stream_source must be provided."
+ description: "The URL your camera serves the image on, e.g., `http://192.168.1.21:2112/`. Can be a [template](/docs/configuration/templating/). Usernames and passwords are allowed in the URL, but if none are provided, the `Username` and `Password` settings will be used during authentication. At least one of still_image_url or stream_source must be provided."
Stream Source:
- description: "The URL your camera serves the live stream on, e.g., `rtsp://192.168.1.21:554/`. Can be a [template](/topics/templating/). Usernames and passwords are allowed in the URL, but if none are provided, the `Username` and `Password` settings will be used during authentication. At least one of still_image_url or stream_source must be provided. Note that a stream_source without a still_image_url can only be used if the [stream integration](/integrations/stream/) is configured."
+ description: "The URL your camera serves the live stream on, e.g., `rtsp://192.168.1.21:554/`. Can be a [template](/docs/configuration/templating/). Usernames and passwords are allowed in the URL, but if none are provided, the `Username` and `Password` settings will be used during authentication. At least one of still_image_url or stream_source must be provided. Note that a stream_source without a still_image_url can only be used if the [stream integration](/integrations/stream/) is configured."
Username:
description: The username for accessing your camera. Note that this applies to both still_image_url and stream_source.
Password:
diff --git a/source/_integrations/google.markdown b/source/_integrations/google.markdown
index 733802270cb7..17c0a7cbb138 100644
--- a/source/_integrations/google.markdown
+++ b/source/_integrations/google.markdown
@@ -40,7 +40,7 @@ This section explains how to generate a Client ID and Client Secret on
13. Click **Credentials** in the menu on the left hand side of the screen, then click **Create credentials** (at the top of the screen), then select *OAuth client ID*.
14. Set the Application type to *TV and Limited Input* and give this credential set a name (like "Home Assistant Credentials") then click **Create**.
15. You will then be presented with a pop-up saying *OAuth client created* showing *Your Client ID* and *Your Client Secret*. Make a note of these (for example, copy and paste them into a text editor) as you will need these shortly. Once you have noted these strings, click **OK**. If you need to find these credentials again at any point then simply navigate to *APIs & Services > Credentials* and you will see *Home Assistant Credentials* (or whatever you named them in the previous step) under *OAuth 2.0 Client IDs*. To view both the *Client ID* and *Client secret*, click on the pencil icon, this will take you to the settings page for these credentials and the information will be on the right hand side of the page.
-16. Double check that the *Google Calendar API* has been automatically enabled. To do this, select **Library** from the menu, then search for *Google Calendar API*. If it is enabled, you will see *API Enabled* with a green tick next to it. If it is not enabled, then enable it.
+16. You must also enable the *Google Calendar API*. To do this, select **Library** from the menu, then search for *Google Calendar API*. If it is enabled, you will see *API Enabled* with a green tick next to it. If it is not enabled, then enable it.
{% enddetails %}
diff --git a/source/_integrations/google_assistant_sdk.markdown b/source/_integrations/google_assistant_sdk.markdown
index e2f10af023e2..96dfa3ac802c 100644
--- a/source/_integrations/google_assistant_sdk.markdown
+++ b/source/_integrations/google_assistant_sdk.markdown
@@ -29,6 +29,12 @@ This integration allows:
- Someone is at the front door
- Smoke detected in the master bedroom
- Water leak detected in the master bathroom
+- Playback Google Assistant audio response for any query on any media player. Examples:
+ - Tell me a joke
+ - Say the ABC
+ - Sing happy birthday
+ - What does the elephant say?
+- Having a conversation with Google Assistant using the [conversation](/integrations/conversation/) integration via text or voice.
@@ -48,18 +54,18 @@ This section explains how to generate a Client ID and Client Secret on
3. Click to enable this API.
4. Click on the field on the left of the screen, **OAuth Consent Screen**.
5. Select **External** and **Create**.
-6. Set the *App Name* (the name of the application asking for consent) to anything you want e.g. *Home Assistant*.
-7. You then need to select a *Support email*. To do this, simply click the drop down box and select your email address.
-8. You finally need to complete the section: *Developer contact information*. To do this, simply enter your email address (same as above is fine).
+6. Set the _App Name_ (the name of the application asking for consent) to anything you want e.g. _Home Assistant_.
+7. You then need to select a _Support email_. To do this, simply click the drop down box and select your email address.
+8. You finally need to complete the section: _Developer contact information_. To do this, simply enter your email address (same as above is fine).
9. Scroll to the bottom and click **Save and Continue**. Don't have to fill out anything else or it may enable additional review.
10. You will then be automatically taken to the Scopes page. You do not need to add any scopes here so click Save and Continue to move to the Optional info page. You do not need to add anything to the Optional info page so click Save and Continue which will take you to the Summary page. Click Back to Dashboard.
-11. Click **OAuth consent screen** again and set *Publish Status* to **Production** otherwise your credentials will expire every 7 days.
+11. Click **OAuth consent screen** again and set _Publish Status_ to **Production** otherwise your credentials will expire every 7 days.
12. Make sure **Publishing status** is set to production.
-13. Click **Credentials** in the menu on the left hand side of the screen, then click **Create credentials** (at the top of the screen), then select *OAuth client ID*.
-14. Set the Application type to *Web application* and give this credential set a name (like "Home Assistant Credentials").
-15. Add https://my.home-assistant.io/redirect/oauth to *Authorized redirect URIs* then click **Create**.
-16. You will then be presented with a pop-up saying *OAuth client created* showing *Your Client ID* and *Your Client Secret*. Make a note of these (for example, copy and paste them into a text editor) as you will need these shortly. Once you have noted these strings, click **OK**. If you need to find these credentials again at any point then simply navigate to *APIs & Services > Credentials* and you will see *Home Assistant Credentials* (or whatever you named them in the previous step) under *OAuth 2.0 Client IDs*. To view both the *Client ID* and *Client secret*, click on the pencil icon, this will take you to the settings page for these credentials and the information will be on the right hand side of the page.
-17. Double check that the *Google Assistant API* has been automatically enabled. To do this, select **Library** from the menu, then search for *Google Assistant API*. If it is enabled you will see *API Enabled* with a green tick next to it. If it is not enabled, then enable it.
+13. Click **Credentials** in the menu on the left hand side of the screen, then click **Create credentials** (at the top of the screen), then select _OAuth client ID_.
+14. Set the Application type to _Web application_ and give this credential set a name (like "Home Assistant Credentials").
+15. Add https://my.home-assistant.io/redirect/oauth to _Authorized redirect URIs_ then click **Create**.
+16. You will then be presented with a pop-up saying _OAuth client created_ showing _Your Client ID_ and _Your Client Secret_. Make a note of these (for example, copy and paste them into a text editor) as you will need these shortly. Once you have noted these strings, click **OK**. If you need to find these credentials again at any point then simply navigate to _APIs & Services > Credentials_ and you will see _Home Assistant Credentials_ (or whatever you named them in the previous step) under _OAuth 2.0 Client IDs_. To view both the _Client ID_ and _Client secret_, click on the pencil icon, this will take you to the settings page for these credentials and the information will be on the right hand side of the page.
+17. Double check that the _Google Assistant API_ has been automatically enabled. To do this, select **Library** from the menu, then search for _Google Assistant API_. If it is enabled you will see _API Enabled_ with a green tick next to it. If it is not enabled, then enable it.
{% enddetails %}
@@ -75,9 +81,9 @@ The integration setup will next give you instructions to enter the [Application
3. You can now see the details of what you are authorizing Home Assistant to access with two options at the bottom. Click **Continue**.
-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. 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**.
-5. You may close the window, and return back to Home Assistant where you should see a *Success!* message from Home Assistant.
+5. You may close the window, and return back to Home Assistant where you should see a _Success!_ message from Home Assistant.
{% enddetails %}
@@ -107,24 +113,43 @@ You can use the service `google_assistant_sdk.send_text_command` to send command
| Service data attribute | Optional | Description | Example |
| ---------------------- | -------- | ----------- | --------|
-| `command` | no | Command to send to Google Assistant. | turn off kitchen TV |
+| `command` | no | Command(s) to send to Google Assistant. | turn off kitchen TV |
+| `media_player` | yes | Name(s) of media player entities to play response on | media_player.living_room_speaker |
-Example:
+Examples:
```yaml
service: google_assistant_sdk.send_text_command
data:
- command: turn off kitchen TV
+ command: "turn off kitchen TV"
+```
+
+```yaml
+# Say a joke on the living room speaker
+service: google_assistant_sdk.send_text_command
+data:
+ command: "tell me a joke"
+ media_player: media_player.living_room_speaker
+```
+
+You can also send multiple commands in the same conversation context which is useful to unlock doors or open covers that need a PIN. Example:
+
+```yaml
+service: google_assistant_sdk.send_text_command
+data:
+ command:
+ - "open the garage door"
+ - "1234"
```
### Service `notify.google_assistant_sdk`
You can use the service `notify.google_assistant_sdk` to broadcast messages to Google Assistant speakers and displays without interrupting music/video playback.
-| Service data attribute | Optional | Description | Example |
-| ---------------------- | -------- | ----------- | --------|
-| `message` | no | Message to broadcast. | someone is at the front door |
-| `target` | yes | Rooms (in Google Assistant) | bedroom |
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | --------------------------- | ---------------------------- |
+| `message` | no | Message to broadcast. | someone is at the front door |
+| `target` | yes | Rooms (in Google Assistant) | bedroom |
Example to broadcast to all speakers:
@@ -144,3 +169,19 @@ data:
- bedroom
- basement
```
+
+## Conversation agent
+
+In the configure options of the integration, enable the conversation agent and then you can converse with Google Assistant by tapping the Assist icon at the top right of your dashboard:
+
+
+
+Or by calling the `conversation.process` service with the transcribed text:
+
+```yaml
+service: conversation.process
+data:
+ text: "Dim the family room lights"
+```
+
+Note: due to a bug in the Google Assistant API, not all responses contain text, especially for home control commands, like turn on the lights. These will be shown as ``. For those, Google Assistant responds with HTML and Home Assistant integrations are [not allowed](https://github.com/home-assistant/architecture/blob/master/adr/0004-webscraping.md) to parse HTML.
diff --git a/source/_integrations/google_mail.markdown b/source/_integrations/google_mail.markdown
new file mode 100644
index 000000000000..e3ab58a9733c
--- /dev/null
+++ b/source/_integrations/google_mail.markdown
@@ -0,0 +1,123 @@
+---
+title: Google Mail
+description: Instructions on how to use Google Mail in Home Assistant.
+ha_category:
+ - Notifications
+ha_iot_class: Cloud Polling
+ha_release: '2023.2'
+ha_config_flow: true
+ha_domain: google_mail
+ha_platforms:
+ - notify
+ - sensor
+ha_codeowners:
+ - '@tkdrob'
+ha_integration_type: service
+---
+
+The Google Mail integration allows you to connect your [Google Mail](https://mail.google.com) to Home Assistant. The integration adds a service to allow you to set an email auto-response for when you go on vacation. A `notify` service is also added, allowing you to draft or send emails in plain text.
+
+## Prerequisites
+
+You need to configure developer credentials to allow Home Assistant to access your Google Account.
+These credentials are the same as the ones for [Nest](/integrations/nest) and [Google Sheets](/integrations/google_sheets).
+If you have already set up credentials, you can do step 1 and then skip to step 13 on the below instructions.
+
+{% details "Generate Client ID and Client Secret" %}
+
+This section explains how to generate a Client ID and Client Secret on
+[Google Developers Console](https://console.cloud.google.com/apis/library/gmail.googleapis.com?project=home-assistant-17698).
+
+1. First, go to the Google Developers Console to enable [Gmail API](https://console.cloud.google.com/apis/library/gmail.googleapis.com?project=home-assistant-17698)
+2. The wizard will ask you to choose a project to manage your application. Select a project and click continue.
+3. Verify that your Gmail API was enabled and click 'Go to credentials'
+4. Navigate to APIs & Services (left sidebar) > [Credentials](https://console.cloud.google.com/apis/credentials)
+5. Click on the field on the left of the screen, **OAuth Consent Screen**.
+6. Select **External** and **Create**.
+7. Set the *App Name* (the name of the application asking for consent) to anything you want, e.g., *Home Assistant*.
+8. You then need to select a *Support email*. To do this, click the drop-down box and select your email address.
+9. You finally need to complete the section: *Developer contact information*. To do this, enter your email address (the same as above is fine).
+10. Scroll to the bottom and click **Save and Continue**. You don't have to fill out anything else, or it may enable additional review.
+11. You will then be automatically taken to the Scopes page. You do not need to add any scopes here, so click Save and Continue to move to the Optional info page. You do not need to add anything to the Optional info page, so click Save and Continue, which will take you to the Summary page. Click Back to Dashboard.
+12. Click **OAuth consent screen** again and set *Publish Status* to **Production** otherwise your credentials will expire every 7 days.
+13. Make sure **Publishing status** is set to production.
+14. Click **Credentials** in the menu on the left-hand side of the screen, then click **Create credentials** (at the top of the screen), then select *OAuth client ID*.
+15. Set the Application type to *Web application* and give this credential set a name (like "Home Assistant Credentials").
+16. Add https://my.home-assistant.io/redirect/oauth to *Authorized redirect URIs* then click **Create**.
+17. You will then be presented with a pop-up saying *OAuth client created* showing *Your Client ID* and *Your Client Secret*. Make a note of these (for example, copy and paste them into a text editor), as you will need these shortly. Once you have noted these strings, click **OK**. If you need to find these credentials again at any point, then navigate to *APIs & Services > Credentials*, and you will see *Home Assistant Credentials* (or whatever you named them in the previous step) under *OAuth 2.0 Client IDs*. To view both the *Client ID* and *Client secret*, click on the pencil icon; this will take you to the settings page for these credentials, and the information will be on the right-hand side of the page.
+18. Double-check that the *Gmail API* has been automatically enabled. To do this, select **Library** from the menu, then search for *Gmail API*. If it is enabled you will see *API Enabled* with a green tick next to it. If it is not enabled, then enable it.
+
+{% enddetails %}
+
+{% include integrations/config_flow.md %}
+
+The integration setup will next give you instructions to enter the [Application Credentials](/integrations/application_credentials/) (OAuth Client ID and Client Secret) and authorize Home Assistant to access your Google Mail.
+
+{% details "OAuth and Device Authorization steps" %}
+
+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.
+
+3. You can now see the details of what you are authorizing Home Assistant to access with two options at the bottom. Click **Continue**.
+
+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**.
+
+5. You may close the window, and return back to Home Assistant where you should see a *Success!* message from Home Assistant.
+
+{% enddetails %}
+
+## Troubleshooting
+
+If you have an error with your credentials you can delete them in the [Application Credentials](/integrations/application_credentials/) user interface.
+
+### Service `google_mail.set_vacation`
+
+You can use the service `google_mail.set_vacation` to set vacation options.
+
+{% details "Create Event Service details" %}
+
+| Service data attribute | Optional | Description | Example |
+| ---------------------- | -------- | ----------- | --------|
+| `enabled` | yes | Turn this off to end vacation responses. | True
+| `title` | | no | The subject for the email. | Vacation
+| `message` | yes | Body of the email. | I am on vacation.
+| `plain_text` | no | Choose to send message in plain text or HTML. | True
+| `restrict_contacts` | no | Restrict automatic reply to contacts. | True
+| `restrict_domain` | no | Restrict automatic reply to domain. This only affects GSuite accounts. | False
+| `start` | no | First day of the vacation. | 11-20-2022
+| `end` | no | Last day of the vacation. | 11-26-2022
+
+{% enddetails %}
+
+The added `notify` service will be named after the email address you chose on the consent screen. For example, an email address named "example@gmail.com" wil display as `notify.example_gmail_com`.
+
+### Google Mail Notify Service Data
+
+The following attributes can be placed inside the `data` key of the service call for extended functionality:
+
+| Attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `cc` | yes | List of recipients to be carbon copied.
+| `bcc` | yes | List of recipients to be back carbon copied.
+| `from` | yes | Default is current authenticated user. Typically only applies to GSuite accounts where the user has delegate access to a shared mailbox.
+| `send` | yes | Default is true. Set this to false to create a draft instead. Recipients are not required in this instance.
+
+### Examples
+
+This is the full service call to send an email:
+
+```yaml
+service: notify.example_gmail_com
+data:
+ message: "test"
+ title: "test email"
+ target:
+ - "example2@gmail.com"
+ data:
+ cc:
+ - "example3@gmail.com"
+ bcc:
+ - "example4@gmail.com"
+ from: "example@gmail.com"
+```
diff --git a/source/_integrations/gpsd.markdown b/source/_integrations/gpsd.markdown
index 9d928042c6e0..d2bed43001c4 100644
--- a/source/_integrations/gpsd.markdown
+++ b/source/_integrations/gpsd.markdown
@@ -13,7 +13,7 @@ ha_platforms:
ha_integration_type: integration
---
-The `gpsd` integration is using the GPS information collected by [gpsd](http://catb.org/gpsd/) and a GPS receiver.
+The `gpsd` integration is using the GPS information collected by [gpsd](https://gpsd.gitlab.io/gpsd/index.html) and a GPS receiver.
## Setup
diff --git a/source/_integrations/group.markdown b/source/_integrations/group.markdown
index 6e256132c3cb..210322595da1 100644
--- a/source/_integrations/group.markdown
+++ b/source/_integrations/group.markdown
@@ -11,6 +11,7 @@ ha_category:
- Media Player
- Notifications
- Organization
+ - Sensor
- Switch
ha_release: pre 0.7
ha_iot_class: Calculated
@@ -27,6 +28,7 @@ ha_platforms:
- lock
- media_player
- notify
+ - sensor
- switch
ha_integration_type: helper
---
@@ -98,6 +100,13 @@ In short, when any group member entity is `unlocked`, the group will also be `un
- Otherwise, the group state is `on` if at least one group member is not `off`, `unavailable` or `unknown`.
- Otherwise, the group state is `off`.
+### Sensor groups
+
+- The group state is combined / calculated based on `type` selected to determine the minimum, maximum, latest (last), mean, median, range or sum of the collected states.
+- Members can be any `sensor`, `number` or `input_number` holding numeric states.
+- The group state is `unavailable` if all group members are `unavailable`.
+- If `ignore_non_numeric` is `false` then group state will be `unavailable` if one member is `unavailable` or does not have a numeric state.
+
## Managing groups
To edit a group, **{% my helpers title="Settings -> Devices & Services -> Helpers" %}**. Find and select the group from the list.
@@ -190,6 +199,18 @@ media_player:
- media_player.living_room_tv
```
+Example YAML configuration of a sensor group:
+
+```yaml
+# Example configuration.yaml entry
+sensor:
+ - platform: group
+ type: mean
+ entities:
+ - sensor.temperature_kitchen
+ - sensor.temperature_hallway
+```
+
Example YAML configuration of a switch group:
```yaml
@@ -219,6 +240,27 @@ all:
required: false
type: boolean
default: false
+type:
+ description: "Only available for `sensor` group. The type of sensor: `min`, `max`, `last`, `mean`, `median`, `range`, or `sum`."
+ type: string
+ required: true
+ignore_non_numeric:
+ description: Only available for `sensor` group. Set this to `true` if the group state should ignore sensors with non numeric values.
+ type: boolean
+ required: false
+ default: false
+unit_of_measurement:
+ description: Only available for `sensor` group. Set the unit of measurement for the sensor.
+ type: string
+ required: false
+device_class:
+ description: Only available for `sensor` group. Set the device class for the sensor according to [available options](/integrations/sensor/#device-class).
+ type: string
+ required: false
+state_class:
+ description: Only available for `sensor` group. Set the state class for the sensor according to [available options](https://developers.home-assistant.io/docs/core/entity/sensor/#available-state-classes).
+ type: string
+ required: false
{% endconfiguration %}
## Notify Groups
@@ -359,6 +401,7 @@ This integration provides the following services to modify groups and a service
| | `Icon` | Name of the icon for the group.
| | `Entities` | List of all members in the group. Not compatible with **delta**.
| | `Add Entities` | List of members that will change on group listening.
+| | `Remove Entities` | List of members that will be removed from group listening.
| | `All` | Enable this option if the group should only turn on when all entities are on.
| `remove` | `Object ID` | Group id and part of entity id.
| `reload` | `Object ID` | Group id and part of entity id.
diff --git a/source/_integrations/history.markdown b/source/_integrations/history.markdown
index 6025e7555fba..efffd6a9c5ff 100644
--- a/source/_integrations/history.markdown
+++ b/source/_integrations/history.markdown
@@ -133,20 +133,6 @@ history:
- sensor.date
```
-If you'd like the order of display of the sensors to follow the way they are
-listed in the included entity list,
-you can set the flag `use_include_order` to true.
-
-```yaml
-# Example configuration.yaml entry using specified entity display order
-history:
- use_include_order: true
- include:
- entities:
- - sun.sun
- - light.front_porch
-```
-
{% include common-tasks/filters.md %}
#### Implementation details
diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown
index ed398a281c59..cf8c3fff578d 100644
--- a/source/_integrations/history_stats.markdown
+++ b/source/_integrations/history_stats.markdown
@@ -80,7 +80,7 @@ duration:
You have to provide **exactly 2** of `start`, `end` and `duration`.
- You can use [template extensions](/topics/templating/#home-assistant-template-extensions) such as `now()` or `as_timestamp()` to handle dynamic dates, as shown in the examples below.
+ You can use [template extensions](/docs/configuration/templating/#home-assistant-template-extensions) such as `now()` or `as_timestamp()` to handle dynamic dates, as shown in the examples below.
diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown
index 877ec429bff2..5515d65328ff 100644
--- a/source/_integrations/homematicip_cloud.markdown
+++ b/source/_integrations/homematicip_cloud.markdown
@@ -14,7 +14,7 @@ ha_category:
ha_iot_class: Cloud Push
ha_release: 0.66
ha_config_flow: true
-ha_quality_scale: platinum
+ha_quality_scale: silver
ha_domain: homematicip_cloud
ha_platforms:
- alarm_control_panel
diff --git a/source/_integrations/homewizard.markdown b/source/_integrations/homewizard.markdown
index 3a8bf47edb54..29a2be1a7224 100644
--- a/source/_integrations/homewizard.markdown
+++ b/source/_integrations/homewizard.markdown
@@ -17,20 +17,21 @@ ha_platforms:
- switch
ha_zeroconf: true
ha_integration_type: integration
+ha_quality_scale: platinum
---
Integration for the [HomeWizard Energy](https://www.homewizard.nl/energy) platform. It can collect data locally from the HomeWizard Energy products and create them as sensors in Home Assistant.
**Supported devices**
-- [Wi-Fi P1 Meter](https://www.homewizard.nl/p1-meter): Depending on the connected DSMR meter: sensors for power import/export, energy consumption (single or three phases) and gas. (Model: `HWE-P1`)
+- [Wi-Fi P1 Meter](https://www.homewizard.nl/p1-meter): Sensors for power import/export, energy consumption (single or three phases). information about your smart meter and gas. (Model: `HWE-P1`)
- [Wi-Fi Energy Socket](https://www.homewizard.nl/energy-socket): Sensors for power import/export and energy consumption and switches for controlling the outlet (model: `HWE-SKT`)
- [Wi-Fi Watermeter](https://www.homewizard.com/watermeter): Sensors for active and total water usage (model: `HWE-WTR`)
- [Wi-Fi kWh Meter](https://www.homewizard.nl/kwh-meter): Sensors for power import/export and energy consumption. (Models: `SDM230-wifi`, `SDM630-wifi`)
-The Wi-Fi Watermeter can be powered via a USB-C cable and with batteries. When using batteries they only connect to Wi-Fi every couple of hours. Because of this, the API can only be used when powered via the USB-C cable. It is not possible to add use this integration when the water meter is powered by batteries.
+The Watermeter can be powered via a USB-C cable and with batteries. When using batteries they only connect to Wi-Fi every couple of hours. Because of this, the API can only be used when powered via the USB-C cable. It is not possible to use this integration when the water meter is powered by batteries.
@@ -47,43 +48,43 @@ You have to enable the local API to allow Home Assistant to communicate with you
## Sensors
-The HomeWizard Energy API only exposes properties that are used within the HomeWizard Energy app. The available properties are listed below.
-
-| Name | Unit | Availability | Description |
-| --- | --- | --- | --- |
-| Wi-Fi SSID | | HWE-P1, HWE-SKT, HWE-WTR, SDM230-wifi, SDM630-wifi | The SSID of the connected network. |
-| Wi-Fi strength | % | HWE-P1, HWE-SKT, HWE-WTR, SDM230-wifi, SDM630-wifi | Percentage of the Wi-Fi connection. |
-| Total energy import T1 | kWh | HWE-P1, HWE-SKT, SDM230-wifi, SDM630-wifi | Energy import reading. |
-| Total energy import T2 | kWh | HWE-P1 | Energy import reading for other tariff. |
-| Total energy export T1 | kWh | HWE-P1, HWE-SKT, SDM230-wifi, SDM630-wifi | Energy export reading. |
-| Total energy export T2 | kWh | HWE-P1 | Energy export reading for other tariff. |
-| Active power | w | HWE-P1, HWE-SKT, SDM230-wifi, SDM630-wifi | Active power usage. |
-| Active power L1 | w | HWE-P1, HWE-SKT, SDM230-wifi, SDM630-wifi | Active power usage line 1, for `SDM230-wifi` and`HWE-SKT` this value is the same as `Active power`. |
-| Active power L2 | w | HWE-P1, SDM630-wifi | Active power usage line 2. |
-| Active power L3 | w | HWE-P1, SDM630-wifi | Active power usage line 3. |
-| Total gas | m3 | HWE-P1 | Current gas import reading, only available when your smart meter is connected to a gas meter. |
-| DSMR version | | HWE-P1 | The detected DSMR version. |
-| Smart meter model | | HWE-P1 | The detected smart meter model. |
-| Active water usage | liter per minute | HWE-WTR | The current usage of water. |
-| Total water usage | m3 | HWE-WTR | Total of water measured since installation. |
+Sensors for the P1 meter, Energy socket, and kWh meter:
+
+- **Total energy import/export (kWh)**: Total energy imported or exported since installation. Each tariff has its own sensor (e.g., T1, T2) and a sensor for the combined value.
+- **Active power (W)**: Active power that is measured on each phase.
+
+Sensors for P1 meter, only available when smart meter exposes these values:
+
+- **Gas usage (m³)**: Total gas used since the installation of the gas meter. A gas meter sends its measurement once every 5 minutes or per hour, depending on the version of the smart meter.
+- **Active tariff**: Current tariff that is used. Can be used to keep consumption as low as possible during peak hours.
+- **Active voltage (V)**: Active voltage that is measured on each phase.
+- **Active current (A)**: Active current that is measured on each phase.
+- **Active frequency (Hz)**: Net frequency.
+- **Voltage sags and swells**: Number of times a voltage sag or well has been detected.
+- **Power failures**: Two sensors that indicate the number of power failures that have been detected by the smart meter. One for all power failures and another for 'long' power failures.
+- **Peak demand**: Belgium users are started to get charged for the peak usage per month (see [capaciteitstarief](https://www.fluvius.be/nl/thema/factuur-en-tarieven/capaciteitstarief)). Two sensors are available: One that shows the current quarterly average and another that shows the peak measured this month. Both these sensors are provided directly from the smart meter and can be used to keep the peak as low as possible.
+
+Sensors for Water meter:
+
+- **Active usage (L/min)**: Flow of water that is measured at that time.
+- **Total usage (m³)**: Total water usage since the installation of the HomeWizard Water meter.
## Energy Socket
-The Wifi Energy Socket (`HWE-SKT`) outlet state and status light can be controlled. There are two switches:
+The Energy Socket outlet state and status light can be controlled. There are two switches:
-- **Switch**: Controls the outlet state of the Energy Socket. This switch is locked out when `Switch Lock` is turned on.
-- **Switch lock**: Forces the outlet state in the `on` position and disables the physical button. This option is useful when the socket is used for a device that must not be turned off, such as a refrigerator.
+- **Switch**: Controls the outlet state of the Energy Socket. This switch is locked out when _Switch Lock_ is turned on.
+- **Switch lock**: Forces the outlet state in the _on_ position and disables the physical button. This option is useful when the socket is used for a device that must not be turned off, such as a refrigerator.
You can also control the green status light brightness with **Status light brightness**. This light turns on when the switch is on.
## Identify
The identify button can be pressed to let the status light blink for a few seconds.
-This feature is currently only available for the Wifi Energy Socket with firmware version `3.01` or later.
+This feature is currently only available for the P1 meter and the Energy Socket.
## Cloud communication
-The HomeWizard Energy devices are designed to work with the HomeWizard Energy app and require communication with the HomeWizard cloud to make them function with the app. The "Cloud connection" configuration toggle can be used to turn off all communication with the HomeWizard cloud, making the device fully local. The device cannot communicate with the app, and the device won't receive any future firmware updates.
+The HomeWizard Energy devices are designed to work with the HomeWizard Energy app and require communication with the HomeWizard cloud to make them function with the app. The "Cloud connection" configuration toggle can be used to turn off all communication with the HomeWizard cloud, making the device fully local. The device cannot communicate with the app, and the device won't receive any future firmware updates. This feature is currently not available for the Water meter.
Cloud communication is restored when the switch is turned on again. Cloud communications are also restored after a factory reset, or when the device is put in pairing mode.
-This feature is currently only available for the Wifi Energy Socket with firmware version `3.01` or later.
diff --git a/source/_integrations/honeywell.markdown b/source/_integrations/honeywell.markdown
index 7939c120fb28..b058a6a6a849 100644
--- a/source/_integrations/honeywell.markdown
+++ b/source/_integrations/honeywell.markdown
@@ -9,6 +9,7 @@ ha_iot_class: Cloud Polling
ha_config_flow: true
ha_codeowners:
- '@rdfurman'
+ - '@mkmer'
ha_domain: honeywell
ha_platforms:
- climate
diff --git a/source/_integrations/hue.markdown b/source/_integrations/hue.markdown
index 924520fbcc2a..33709ad478ee 100644
--- a/source/_integrations/hue.markdown
+++ b/source/_integrations/hue.markdown
@@ -13,7 +13,6 @@ ha_codeowners:
- '@balloob'
- '@marcelveldt'
ha_domain: hue
-ha_ssdp: true
ha_homekit: true
ha_platforms:
- binary_sensor
diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown
index 359432a28b06..ded3321b5058 100644
--- a/source/_integrations/imap.markdown
+++ b/source/_integrations/imap.markdown
@@ -9,72 +9,28 @@ ha_domain: imap
ha_platforms:
- sensor
ha_integration_type: integration
+ha_codeowners:
+ - '@engrbm87'
+ha_config_flow: true
---
-The `imap` integration is observing your [IMAP server](https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol) and reporting the amount of unread emails.
+The IMAP integration is observing your [IMAP server](https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol) and reporting the number of unread emails. Other search criteria can be used, as shown in the example below.
-## Configuration
-
-To enable this sensor, add the following lines to your `configuration.yaml` file:
-
-```yaml
-# Example configuration.yaml entry
-sensor:
- - platform: imap
- server: YOUR_IMAP_SERVER
- username: YOUR_USERNAME
- password: YOUR_PASSWORD
-```
-
-{% 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: The IMAP folder to watch.
- required: false
- default: inbox
- type: string
-search:
- description: The IMAP search to perform on the watched folder.
- required: false
- default: UnSeen UnDeleted
- type: string
-charset:
- description: The character set used for this connection.
- required: false
- default: utf-8
- type: string
-{% endconfiguration %}
+{% include integrations/config_flow.md %}
### Gmail with App Password
-If you’re going to use Gmail, it’s always good practice to create a [App Password](https://support.google.com/mail/answer/185833).
+If you’re going to use Gmail, you need to create an [App Password](https://support.google.com/mail/answer/185833).
1. Go to your [Google Account](https://myaccount.google.com/)
2. Select **Security**
3. Under “Signing in to Google” select **App Passwords**
4. Sign in to your Account, and create a new App Password for Gmail.
-
-You can now use this as your password for Gmail, in your configuration.
+5. Then you can setup the intergation as below:
+ - Server: `imap.gmail.com`
+ - Port: `993`
+ - Username: Your full email address
+ - Password: The new app password
### Configuring IMAP Searches
@@ -84,27 +40,11 @@ By default, this integration will count unread emails. By configuring the search
* `FROM`, `TO`, `SUBJECT` to find emails in a folder (see [IMAP RFC for all standard options](https://tools.ietf.org/html/rfc3501#section-6.4.4))
* [Gmail's IMAP extensions](https://developers.google.com/gmail/imap/imap-extensions) allow raw Gmail searches, like `X-GM-RAW "in: inbox older_than:7d"` to show emails older than one week in your inbox. Note that raw Gmail searches will ignore your folder configuration and search all emails in your account!
-#### Full configuration sample with search
-
-```yaml
-# Example configuration.yaml entry for gmail
-sensor:
- - platform: imap
- server: imap.gmail.com
- port: 993
- username: YOUR_USERNAME
- password: YOUR_PASSWORD
- search: FROM , SUBJECT
- # Or use X-GM-RAW search-term like this, to find unread emails from the last 7 days in your inbox
- # search: 'X-GM-RAW "in: inbox newer_than:7d is:unread"'
+### Selecting a charset supported by the imap server
-# Example configuration.yaml entry for Office 365
-sensor:
- - platform: imap
- server: outlook.office365.com
- port: 993
- username: email@address.com
- password: password
- search: FROM , SUBJECT
- charset: US-ASCII
-```
+Below is an example for setting up the integration to connect to your Microsoft 365 account that requires `US_ASCII` as charset:
+ - Server: `outlook.office365.com`
+ - Port: `993`
+ - Username: Your full email address
+ - Password: Your password
+ - Charset: `US-ASCII`
diff --git a/source/_integrations/influxdb.markdown b/source/_integrations/influxdb.markdown
index 2b6178fa6255..dcbc4dd1ebc3 100644
--- a/source/_integrations/influxdb.markdown
+++ b/source/_integrations/influxdb.markdown
@@ -506,27 +506,27 @@ The example configuration entry below create two request to your local InfluxDB
```yaml
sensor:
- platform: influxdb
- host: localhost
- username: home-assistant
- password: password
- queries:
- - name: last value of foo
- unit_of_measurement: °C
- value_template: '{{ value | round(1) }}'
- group_function: last
- where: '"name" = ''foo'''
- measurement: '"°C"'
- field: value
- database: db1
- - name: Min for last hour
- unit_of_measurement: "%"
- value_template: '{{ value | round(1) }}'
- group_function: min
- where: '"entity_id" = ''salon'' and time > now() - 1h'
- measurement: '"%"'
- field: tmp
- database: db2
+ - platform: influxdb
+ host: localhost
+ username: home-assistant
+ password: password
+ queries:
+ - name: last value of foo
+ unit_of_measurement: °C
+ value_template: '{{ value | round(1) }}'
+ group_function: last
+ where: '"name" = ''foo'''
+ measurement: '"°C"'
+ field: value
+ database: db1
+ - name: Min for last hour
+ unit_of_measurement: "%"
+ value_template: '{{ value | round(1) }}'
+ group_function: min
+ where: '"entity_id" = ''salon'' and time > now() - 1h'
+ measurement: '"%"'
+ field: tmp
+ database: db2
```
{% endraw %}
diff --git a/source/_integrations/intellifire.markdown b/source/_integrations/intellifire.markdown
index 005fb57eaea3..f1cdd9e5e4a8 100644
--- a/source/_integrations/intellifire.markdown
+++ b/source/_integrations/intellifire.markdown
@@ -5,6 +5,7 @@ ha_category:
- Binary Sensor
- Climate
- Fan
+ - Light
- Number
- Sensor
- Switch
@@ -18,6 +19,7 @@ ha_platforms:
- binary_sensor
- climate
- fan
+ - light
- number
- sensor
- switch
@@ -57,6 +59,11 @@ If your unit is equipped with a fan - this entry will be present. There are 5 po
- **Thermostat** - This entity will be present if your unit has thermostatic control.
+
+### Light
+
+The integration provides a light entity if the unit is equipped with lights.
+
### Number
The integration uses a Number entity to control flame height. Valid flame height vales are `1-5`.
diff --git a/source/_integrations/iotawatt.markdown b/source/_integrations/iotawatt.markdown
index a90625e86687..66d2ec16ef75 100644
--- a/source/_integrations/iotawatt.markdown
+++ b/source/_integrations/iotawatt.markdown
@@ -51,4 +51,4 @@ If you have two solar sensors named `Solar1` and `Solar2` you would use:
In the Grid Consumption settings, select `MainsConsumption.wh`
In the Return to grid settings, select `MainsExport.wh`
-In the Solar production settings, select `Solar.wh`
+In the Solar production settings, select `Solar.wh`
diff --git a/source/_integrations/isy994.markdown b/source/_integrations/isy994.markdown
index 015110725bb3..530e431df5a6 100644
--- a/source/_integrations/isy994.markdown
+++ b/source/_integrations/isy994.markdown
@@ -1,14 +1,17 @@
---
-title: Universal Devices ISY994
-description: Instructions on how to setup the ISY994 controller within Home Assistant.
+title: Universal Devices ISY/IoX
+description: Instructions on how to setup an ISY controller within Home Assistant.
ha_category:
- Binary Sensor
+ - Button
- Climate
- Cover
- Fan
- Hub
- Light
- Lock
+ - Number
+ - Select
- Sensor
- Switch
ha_release: 0.28
@@ -21,97 +24,66 @@ ha_codeowners:
ha_ssdp: true
ha_platforms:
- binary_sensor
+ - button
- climate
- cover
- fan
- light
- lock
+ - number
+ - select
- sensor
- switch
ha_dhcp: true
ha_integration_type: hub
---
-The ISY994 is a home automation controller that is capable of controlling Insteon and X10 devices. Some models of the ISY994 can even control Z-Wave devices.
-The ISY994 controller is manufactured by [Universal Devices](https://www.universal-devices.com/smarthome).
+ISY is a home automation controller capable of controlling Insteon, X10, Z-Wave and Zigbee/Matter devices connected to supported hardware manufactured by [Universal Devices, Inc.](https://www.universal-devices.com/).
-There is currently support for the following device types within Home Assistant:
+This integration supports the legacy ISY994 hardware family, as well as current ISY-on-Anything (IoX) hardware, such as the [eisy](https://www.universal-devices.com/product/eisy-home/) or [Polisy](https://www.universal-devices.com/polisy/) devices.
+
+There is currently support for the following platforms within Home Assistant:
- Binary Sensor
+- Button
- Climate
- Cover
- Light
- Fan
- Lock
+- Number
+- Select
- Sensor
- Switch
-Home Assistant is capable of communicating with any binary sensor, cover, fan, light, lock, sensor and switch that is configured on the controller. Using the programs on the controller, custom binary sensors, covers, fans, locks, and switches can also be created.
+Home Assistant is capable of communicating with any binary sensor, cover, fan, light, lock, sensor and switch that is configured on the controller. Using the programs on the controller, custom binary sensors, covers, fans, locks, and switches can also be created. Each device and the ISY hub also include a Query button to query the device.
-{% include integrations/config_flow.md %}
+ISY Networking Module Resources can be executed using the buttons created.
-## Manual configuration
+{% include integrations/config_flow.md %}
-You may also configure the integration manually by adding the following section to your `configuration.yaml` file:
+Once the ISY controller is configured, it will automatically import any binary sensors, covers, fans, lights, locks, sensors and switches it can locate.
-```yaml
-# Example configuration.yaml entry
-isy994:
- host: ISY_ADDRESS
- username: ISY_USERNAME
- password: ISY_PASSWORD
-```
+### Configuration Options
-{% configuration %}
-host:
- description: The host entry should be in full URL format, e.g., `http://192.168.10.100:80`
- required: true
- type: string
-username:
- description: The username that is used to access the ISY interface.
- required: true
- type: string
-password:
- description: The password that is used to access the ISY interface.
- required: true
- type: string
-sensor_string:
- description: This is the string that is used to identify which devices are to be assumed to be sensors instead of lights or switches. If this string is found in the device name or folder, Home Assistant will assume it is a sensor or binary sensor (if the device has on/off or true/false states). This is only necessary for nodes that are not automatically detected as sensors by Home Assistant. Insteon door, window, motion and leak sensors should all be detected automatically.
- required: false
- type: string
- default: sensor
-variable_sensor_string:
- description: This is the string that is used to identify which Integer or State Variables are to be added as sensors. If this string is found in the device name, Home Assistant will assume it is a sensor.
- required: false
- type: string
- default: sensor
-ignore_string:
- description: Any devices that contain this string in their name (or folder path) will be ignored by Home Assistant. They will not become entities at all and will not fire `control_events`.
- required: false
- type: string
- default: {IGNORE ME}
-tls:
- description: This entry should reflect the version of TLS that the ISY controller is using for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not set, it is assumed to be version 1.1. This is the default for most users. ISY994 Pro users may likely be using 1.2. When using HTTPS in the host entry, it is best practice to set this value.
- required: false
- type: string
-restore_light_state:
- description: If disabled (default behavior), lights turned ON from Home Assistant without a `brightness` parameter set, will turn on to the `on_level` set within the physical device. For example, on Insteon devices this would be the same brightness as if the switch/device was turned ON. If this setting is enabled, lights that are turned on from Home Assistant will go to the last known brightness value. Both the `on_level` and `last_brightness` values are available as attributes if needed for device-specific customization.
- required: false
- type: boolean
- default: false
-{% endconfiguration %}
+There are several options available to further customize what is imported from the ISY controller and entity behavior.
-Once the ISY controller is configured, it will automatically import any binary sensors, covers, fans, lights, locks, sensors and switches it can locate.
+- Sensor String: This is the string that is used to identify which devices are to be assumed to be sensors instead of lights or switches. If this string is found in the device name or folder, Home Assistant will consider it a sensor or binary sensor (if the device has on/off or true/false states). This is only necessary for nodes that are not automatically detected as sensors by Home Assistant. Insteon door, window, motion, and leak sensors should all be detected automatically.
+- Variable Sensor String: This is the string that is used to identify which Integer or State Variables are to be enabled by default as `number` entities. If this string is found in the device name, Home Assistant will assume it is a sensor. The default is `"HA."`.
+- Ignore String: Any devices that contain this string in their name (or folder path) will be ignored by Home Assistant. They will not become entities and will not fire `control_events`. The default is `"{IGNORE ME}"`.
+- Restore Light State: If disabled (default behavior), lights turned ON from Home Assistant without a `brightness` parameter set will turn on to the `on_level` set within the physical device. For example, on Insteon devices, this would be the same brightness as if the switch/device was turned ON. If this setting is enabled, lights that are turned on from Home Assistant will go to the last known brightness value. Both the `on_level` and `last_brightness` values are available as attributes if needed for device-specific customization.
### Sensors
-An Insteon door/window sensor will show up as a single Binary Sensor rather than two discrete devices like it does in the ISY994 admin panel. Note that when in "Two Nodes" mode, the sensor will have an UNKNOWN state until the sensor changes for the first time since the last Home Assistant reboot. If you do not use Insteon scenes that are controlled directly from the door sensor, you may prefer to set the sensor to "One Node" mode using the ISY Admin Panel.
+An Insteon door/window sensor will show up as a single Binary Sensor rather than two discrete devices like it does in the ISY Admin Console. Note that when in "Two Nodes" mode, the sensor will have an UNKNOWN state until the sensor changes for the first time since the last Home Assistant reboot. If you do not use Insteon scenes that are controlled directly from the door sensor, you may prefer to set the sensor to "One Node" mode using the ISY Admin Panel.
-Each Insteon leak sensor will also show up as a single Binary Sensor as opposed to the two nodes seen in the ISY994. The name of the device will be based on what the parent node is named in the ISY994, which is typically the one with "-Dry" at the end of the name. This may be confusing, because "On" means wet in Home Assistant. You can rename this node in Home Assistant to be more clear, see the [Customization section](/docs/configuration/customizing-devices/) of your configuration.
+Each Insteon leak sensor will also show up as a single Binary Sensor as opposed to the two nodes seen in the ISY Admin Console. The name of the device will be based on what the parent node is named in the ISY, which is typically the one with "-Dry" at the end of the name. This may be confusing, because "On" means wet in Home Assistant. You can rename this node in Home Assistant to be more clear, see the [Customization section](/docs/configuration/customizing-devices/) of your configuration.
If your leak or door/window sensor supports heartbeats, a new binary_sensor device will be added to Home Assistant to represent the battery state. The sensor will stay "Off" so long as the daily heartbeats occur. If a heartbeat is missed, the sensor will flip to "On". The name of this device will be based on the heartbeat node in the ISY.
-Integer and State Variables from the ISY can be used as sensors by setting the `variable_sensor_string` and adding it as part of the variable name in the ISY. For example, if you have a variable named `HA.my_variable` and a `variable_sensor_string` of `"HA."`, it will be automatically added as a `sensor` in Home Assistant.
+### ISY/IoX Variables
+
+Integer and State Variables from the ISY are imported as `number` entities. You can choose which variables are enabled by default by setting the "Variable Sensor String" Config Option and using it as part of the variable name in the ISY Admin Console (e.g., `HA.` in options and `HA.Variable Name` on the ISY) or you can manually enable the entities you need from the ISY Variables device in Home Assistant.
### Handling Insteon or Other ISY Control Events
@@ -136,7 +108,7 @@ automation:
entity_id: light.lr_track_lights_rear
```
-All `isy994_control` events will have an `entity_id` and `control` parameter in its `event_data`. You'll need to refer to ISY994 documentation for the list of every possible control type, but the common ones are:
+All `isy994_control` events will have an `entity_id` and `control` parameter in its `event_data`. You'll need to refer to ISY documentation for the list of every possible control type, but the common ones are:
- `DON`: On button.
- `DOF`: Off button.
@@ -150,17 +122,20 @@ All `isy994_control` events will have an `entity_id` and `control` parameter in
### Insteon Scenes & Keypad/Remote Buttons
-All Insteon scenes configured in the ISY994 will show up as a `switch` in Home Assistant, as they do not support dimming or setting specific brightness settings as Home Assistant's `light` component.
+All Insteon scenes configured in the ISY Admin Console will show up as a `switch` in Home Assistant, as they do not support dimming or setting specific brightness settings as Home Assistant's `light` component.
Insteon Secondary Keypad buttons and Remote buttons are added to Home Assistant to allow support for using Control Events in Automations. These devices are added as `sensors` since they cannot be directly controlled (turned on/off); their state is the last ON level command they sent, in a range from `0` (Off) to `255` (On 100%). Note: these devices may report incorrect states before being used after a reboot of the ISY. Secondary Keypad buttons may be turned on or off using ISY Scenes (refer to ISY Documentation for more details).
+### Insteon Device Configuration Support
+
+Insteon devices will include entities for setting the device On Level, Ramp Rate, and Backlight Level, if supported; as well as `button` entities for `Beep` and `Query` actions. Note: Backlight Level cannot be read from the device, so an assumed state is used. The current state in Home Assistant will be valid if the backlight is changed from Home Assistant and will also be updated if changed from the ISY Admin Console or REST command while Home Assistant is running. Additional configuration changes still require the ISY Admin Console.
+
### Services
Once loaded, the following services will be exposed with the `isy994.` prefix, to allow advanced control over the ISY and its connected devices:
- - Entity services for Home Assistant-connected entities: `send_node_command`, `send_raw_node_command`, `set_on_level`, and `set_ramp_rate`.
- - Generic ISY services: `system_query`, `set_variable`, `send_program_command`, and `run_network_resource`.
- - Management services for the ISY994 Home Assistant integration: `reload` and `cleanup_entities`.
+ - Entity services for Home Assistant-connected entities: `send_node_command`, `send_raw_node_command`, and `set_ramp_rate`.
+ - Generic ISY services: `send_program_command`
#### Service `isy994.send_node_command`
@@ -210,47 +185,7 @@ Rename a node or group (scene) on the ISY994. Note: this will not automatically
| Service data attribute | Optional | Description |
| ---------------------- | -------- | -------------------------------------------------------------- |
| `entity_id` | no | Name of target entity for the command, e.g., `light.front_porch`. |
-| `name` | no | The new name to use within the ISY994. |
-
-#### Service `isy994.set_on_level`
-
-Send an ISY set_on_level command to a `light` Node to set the devices' local On Level.
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name(s) of target entities for the command, e.g., `light.front_porch`. |
-| `value` | no | The integer value to set the On Level to in a range of 0-255, e.g., `255` |
-
-#### Service `isy994.set_ramp_rate`
-
-Send an ISY set_ramp_rate command to a `light` Node to set the devices' ramp rate. Refer to the PyISY documentation for the [available values](https://github.com/automicus/PyISY/blob/d053369f7531370a907136bf25a177632adccd1e/pyisy/constants.py#L630).
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `entity_id` | no | Name(s) of target entities for the command, e.g., `light.front_porch`. |
-| `value` | no | The integer index value to set the Ramp Rate to in a range of `0` (9.5 minutes) to `31` (0.1 Seconds), e.g., `28` |
-
-#### Service `isy994.system_query`
-
-Request the ISY Query the connected devices.
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `address` | yes | ISY Address to Query. Omitting this requests a system-wide scan (typically recommended by UDI to be scheduled once per day), e.g., `"1A 2B 3C 1"` |
-| `isy` | yes | If you have more than one ISY connected, provide the name of the ISY to query (as shown on the Device Registry or as the top-first node in the ISY Admin Console). Omitting this will cause all ISYs to be queried, e.g., `"ISY"` |
-
-#### Service `isy994.set_variable`
-
-Set an ISY variable's current or initial value. Variables can be set by either type/address or by name.
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `value` | no | The integer value to be sent, e.g., `255` |
-| `address` | no | The address of the variable for which to set the value, e.g., `5` |
-| `type` | no | The variable type, 1 = Integer, 2 = State, e.g., `2` |
-| `name` | yes | The name of the variable to set (Optional, use `name` instead of `type` and `address`), e.g., `"my_variable_name"` |
-| `init` | yes | If True, the initial (init) value will be updated instead of the current value, e.g., `false` |
-| `isy` | yes | If you have more than one ISY connected, provide the name of the ISY to query (as shown on the Device Registry or as the top-first node in the ISY Admin Console). If you have the same variable name or address on multiple ISYs, omitting this will run the command on them all, e.g., `"ISY"` |
+| `name` | no | The new name to use within the ISY. |
#### Service `isy994.send_program_command`
@@ -263,25 +198,6 @@ Send a command to control an ISY program or folder. Valid commands are `run`, `r
| `name` | yes | The name of the program to control (optional, use either `address` or `name`), e.g., `"My Program"` |
| `isy` | yes | (Optional) If you have more than one ISY connected, provide the name of the ISY to query (as shown on the Device Registry or as the top-first node in the ISY Admin Console). If you have the same program name or address on multiple ISYs, omitting this will run the command on them all, e.g., `"ISY"` |
-#### Service `isy994.run_network_resource`
-
-Run a network resource on the ISY.
-
-| Service data attribute | Optional | Description |
-| ---------------------- | -------- | ----------- |
-| `address` | yes | The address of the network resource to execute (optional, use either `address` or `name`), e.g., `121` |
-| `name` | yes | The name of the network resource to execute (optional, use either `address` or `name`), e.g., `"Network Resource 1"` |
-| `isy` | yes | (Optional) If you have more than one ISY connected, provide the name of the ISY to query (as shown on the Device Registry or as the top-first node in the ISY Admin Console). If you have the same resource name or address on multiple ISYs, omitting this will run the command on them all, e.g., `"ISY"` |
-
-#### Service `isy994.reload`
-
-Reload the ISY994 connection(s) without restarting Home Assistant. Use this service to pick up new devices that have been added or changed on the ISY since the last restart of Home Assistant.
-
-#### Service `isy994.cleanup_entities`
-
-Cleanup old entities no longer used by the ISY994 integrations. Useful if you've removed devices from the ISY or changed the filter string options in the configuration to exclude additional items and they were not properly removed
-by Home Assistant.
-
### Creating Custom Devices using ISY Programs
Using the Programs tab in the controller's Administrative Console, custom devices can be created that will appear natively inside of Home Assistant. Home Assistant will scan the following folders and build the device to the associated domains:
diff --git a/source/_integrations/jellyfin.markdown b/source/_integrations/jellyfin.markdown
index 3d8d156b467e..c005d05ca527 100644
--- a/source/_integrations/jellyfin.markdown
+++ b/source/_integrations/jellyfin.markdown
@@ -20,7 +20,7 @@ ha_integration_type: service
---
The Jellyfin integration exposes a [Jellyfin](https://jellyfin.org/) server as a Media Source in Home Assistant.
-Support is currently limited to music and movie libraries only. Other libraries will not appear in the Media Browser. This integration has been tested with Jellyfin server version 10.6.4 and later.
+Support is currently limited to music, movie and tvshow libraries only. Other libraries will not appear in the Media Browser. This integration has been tested with Jellyfin server version 10.6.4 and later.
Additionally, this integration sets up every media session connected to the Jellyfin
server as a media player in Home Assistant to provide media controls for each session.
diff --git a/source/_integrations/kitchen_sink.markdown b/source/_integrations/kitchen_sink.markdown
new file mode 100644
index 000000000000..26c4ac62e285
--- /dev/null
+++ b/source/_integrations/kitchen_sink.markdown
@@ -0,0 +1,28 @@
+---
+title: Everything but the Kitchen Sink
+description: Instructions on how to set up the Everything but the Kitchen Sink integration
+ha_category:
+ - Other
+ha_release: 2023.2
+ha_quality_scale: internal
+ha_codeowners:
+ - '@home-assistant/core'
+ha_domain: kitchen_sink
+ha_iot_class: Calculated
+ha_platforms:
+ - lock
+ - sensor
+ha_integration_type: integration
+---
+
+The Kitchen Sink integration contains demonstrations of various odds and ends.
+
+This sets up a demo environment of features which are obscure or which represent incorrect behavior, and are thus not wanted in the `demo` integration.
+
+To enable the `kitchen_sink` integration in Home Assistant, add the following section to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+
+kitchen_sink:
+```
diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown
index 3372c82283fb..9139fe6d0604 100644
--- a/source/_integrations/knx.markdown
+++ b/source/_integrations/knx.markdown
@@ -85,16 +85,15 @@ knx:
Please see the dedicated platform sections below about how to configure them correctly.
-
### Group addresses
Group addresses are configured as strings or integers in the format "1/2/3" for 3-level GA-structure, "1/2" for 2-level GA-structure or "1" for free GA-structure.
The HA KNX integration uses configured `state_address` or `*_state_address` to update the state of a function. These addresses are read by GroupValueRead requests on startup and when there was no incoming telegram for one hour (default `sync_state`).
-It is possible to configure passive/listening group addresses for all functions of every KNX platform (except `expose` and `notify`). This allows having multiple group addresses to update the state of its function (e.g., the brightness of a light). When group addresses are configured as a list of strings, the first item is the active sending or state-reading address and the rest is registered as passive addresses. This schema behaves like in ETS configuration where the first is the "sending" address and others are just for updating the communication object.
+It is possible to configure passive/listening group addresses for all functions of every KNX platform (except `expose` and `notify`). This allows having multiple group addresses to update the state of its function (e.g., the brightness of a light). When group addresses are configured as a list of strings, the first item is the active sending or state-reading address and the rest is registered as passive addresses. This schema behaves like in ETS configuration where the first is the "sending" address and others are just for updating the group object.
-If your KNX device provides active state communication objects it is advised to use `*_state_address` instead of passive addresses as it reduces configuration complexity and avoids wrong states (e.g., when channels are logically locked).
+If your KNX device provides active state group objects it is advised to use `*_state_address` instead of passive addresses as it reduces configuration complexity and avoids wrong states (e.g., when channels are logically locked).
```yaml
knx:
@@ -627,7 +626,7 @@ knx:
```
`operation_mode_frost_protection_address` / `operation_mode_night_address` / `operation_mode_comfort_address` / `operation_mode_standby_address` are not necessary if `operation_mode_address` is specified.
-If the actor doesn't support explicit state communication objects the `*_state_address` can be configured with the same group address as the writeable `*_address`. The read flag for the `*_state_address` communication object has to be set in ETS to support initial reading e.g., when starting Home Assistant.
+If the actor doesn't support explicit state group objects the `*_state_address` can be configured with the same group address as the writeable `*_address`. The read flag for the `*_state_address` group object has to be set in ETS to support initial reading e.g., when starting Home Assistant.
The following values are valid for the `heat_cool_address` and the `heat_cool_state_address`:
@@ -1090,7 +1089,7 @@ entity_category:
Many KNX devices can change their state internally without a message to the switch address on the KNX bus, e.g., if you configure a scene or a timer on a channel. The optional `state_address` can be used to inform Home Assistant about these state changes. If a KNX message is seen on the bus addressed to the given `state_address` (in most cases from the light actuator), it will overwrite the state of the object.
-For switching/light actuators that are only controlled by a single group address and don't have dedicated state communication objects you can set `state_address` to the same value as `address`.
+For switching/light actuators that are only controlled by a single group address and don't have dedicated state group objects you can set `state_address` to the same value as `address`.
*Note on tunable white:* Home Assistant uses Mireds as the unit for color temperature, whereas KNX typically uses Kelvin. The Kelvin/Mireds relationship is reciprocal, not linear, therefore the color temperature pickers (sliders) in Home Assistant may not align with ones of KNX visualizations. This is the expected behavior.
@@ -1173,7 +1172,7 @@ knx:
color_temperature_mode: absolute
min_kelvin: 2550
max_kelvin: 6200
- # actuator without dedicated state communication object
+ # actuator without dedicated state group object
# color mode: onoff
- name: "Simple light"
address: "1/0/5"
@@ -1510,6 +1509,7 @@ device_class:
| 8.007 | delta_time_hrs | 2 | -32768 ... 32767 | h |
| 8.010 | percentV16 | 2 | -32768 ... 32767 | % |
| 8.011 | rotation_angle | 2 | -32768 ... 32767 | ° |
+| 8.012 | length_m | 2 | -32768 ... 32767 | m |
| 9 | 2byte_float | 2 | -671088.64 ... 670760.96 | |
| 9.001 | temperature | 2 | -273 ... 670760 | °C |
| 9.002 | temperature_difference_2byte | 2 | -670760 ... 670760 | K |
@@ -1519,6 +1519,7 @@ device_class:
| 9.006 | pressure_2byte | 2 | 0 ... 670760 | Pa |
| 9.007 | humidity | 2 | 0 ... 670760 | % |
| 9.008 | ppm | 2 | -671088.64 ... 670760.96 | ppm |
+| 9.009 | air_flow | 2 | -671088.64 ... 670760.96 | m³/h |
| 9.010 | time_1 | 2 | -670760 ... 670760 | s |
| 9.011 | time_2 | 2 | -670760 ... 670760 | ms |
| 9.020 | voltage | 2 | -671088.64 ... 670760.96 | mV |
@@ -1530,12 +1531,18 @@ device_class:
| 9.026 | rain_amount | 2 | -671088.64 ... 670760.96 | l/m² |
| 9.027 | temperature_f | 2 | -459.6 ... 670760 | °F |
| 9.028 | wind_speed_kmh | 2 | 0 ... 670760 | km/h |
+| 9.029 | absolute_humidity | 2 | 0 ... 670760 | g/m³ |
+| 9.030 | concentration_ugm3 | 2 | 0 ... 670760 | μg/m³ |
| 9.? | enthalpy | 2 | -671088.64 ... 670760.96 | H |
| 12 | 4byte_unsigned | 4 | 0 ... 4294967295 | |
+| 12.001 | pulse_4_ucount | 4 | 0 ... 4294967295 | counter pulses |
+| 12.100 | long_time_period_sec | 4 | 0 ... 4294967295 | s |
+| 12.101 | long_time_period_min | 4 | 0 ... 4294967295 | min |
+| 12.100 | long_time_period_hrs | 4 | 0 ... 4294967295 | h |
| 12.1200 | volume_liquid_litre | 4 | 0 ... 4294967295 | l |
| 12.1201 | volume_m3 | 4 | 0 ... 4294967295 | m³ |
| 13 | 4byte_signed | 4 | -2147483648 ... 2147483647 | |
-| 13.001 | pulse_4byte | 4 | -2147483648 ... 2147483647 | pulses |
+| 13.001 | pulse_4byte | 4 | -2147483648 ... 2147483647 | counter pulses |
| 13.002 | flow_rate_m3h | 4 | -2147483648 ... 2147483647 | m³/h |
| 13.010 | active_energy | 4 | -2147483648 ... 2147483647 | Wh |
| 13.011 | apparant_energy | 4 | -2147483648 ... 2147483647 | VAh |
@@ -1543,6 +1550,7 @@ device_class:
| 13.013 | active_energy_kwh | 4 | -2147483648 ... 2147483647 | kWh |
| 13.014 | apparant_energy_kvah | 4 | -2147483648 ... 2147483647 | kVAh |
| 13.015 | reactive_energy_kvarh | 4 | -2147483648 ... 2147483647 | kVARh |
+| 13.016 | active_energy_mwh | 4 | -2147483648 ... 2147483647 | MWh |
| 13.100 | long_delta_timesec | 4 | -2147483648 ... 2147483647 | s |
| 14 | 4byte_float | 4 | | |
| 14.000 | acceleration | 4 | | m/s² |
@@ -1602,11 +1610,11 @@ device_class:
| 14.054 | phaseanglerad | 4 | | rad |
| 14.055 | phaseangledeg | 4 | | ° |
| 14.056 | power | 4 | | W |
-| 14.057 | powerfactor | 4 | | cosΦ |
+| 14.057 | powerfactor | 4 | | |
| 14.058 | pressure | 4 | | Pa |
| 14.059 | reactance | 4 | | Ω |
| 14.060 | resistance | 4 | | Ω |
-| 14.061 | resistivity | 4 | | Ω m |
+| 14.061 | resistivity | 4 | | Ωm |
| 14.062 | self_inductance | 4 | | H |
| 14.063 | solid_angle | 4 | | sr |
| 14.064 | sound_intensity | 4 | | W/m² |
@@ -1620,11 +1628,12 @@ device_class:
| 14.072 | thermal_conductivity | 4 | | W/mK |
| 14.073 | thermoelectric_power | 4 | | V/K |
| 14.074 | time_seconds | 4 | | s |
-| 14.075 | torque | 4 | | N m |
+| 14.075 | torque | 4 | | Nm |
| 14.076 | volume | 4 | | m³ |
| 14.077 | volume_flux | 4 | | m³/s |
| 14.078 | weight | 4 | | N |
| 14.079 | work | 4 | | J |
+| 14.080 | apparent_power | 4 | | VA |
| 16.000 | string | 14 | ASCII | |
| 16.001 | latin_1 | 14 | ISO 8859-1 / Latin-1 | |
| 17.001 | scene_number | 1 | 1 ... 64 | |
@@ -1868,11 +1877,14 @@ logger:
logs:
# For most debugging needs `xnx.log` and `xknx.telegram` are a good choice.
xknx: info # sets the level of all loggers
+ # Loggers for different layers of KNX communication
xknx.log: debug # provides general information (connection, etc.)
- xknx.raw_socket: warning # logs incoming UDP frames in raw hex format
- xknx.knx: debug # logs incoming and outgoing KNX/IP frames at socket level
+ xknx.telegram: debug # logs telegrams before they are being processed or sent
xknx.cemi: debug # logs incoming and outgoing CEMI frames
- xknx.telegram: debug # logs telegrams before they are being processed at device level or sent to an interface
+ xknx.ip_secure: debug # logs IP Secure relevant information
+ xknx.knx: debug # logs incoming and outgoing KNX/IP frames
+ xknx.raw_socket: warning # logs incoming UDP/TCP frames in raw hex format at socket level
+ # Loggers for xknx internals
xknx.state_updater: warning # provides information about the state updater
```
@@ -1888,13 +1900,14 @@ Every `*_state_address` is read on startup sequentially if not configured differ
> Error: KNX bus did not respond in time (2.0 secs) to GroupValueRead request for: '1/2/3'
```
-#### No communication object (CO) assigned to the group address (GA) has the Read-Flag set in ETS
+#### No group object (GO) assigned to the group address (GA) has the Read-Flag set in ETS
-- Enable the read flag for *one* CO assigned to the GA. Use the one most likely to hold the current state (e.g., for a light entity's `brightness_state_address` the according CO of the dimming actuator).
+- Enable the read flag for *one* GO assigned to the GA. Use the one most likely to hold the current state (e.g., for a light entity's `brightness_state_address` the according GO of the dimming actuator).
#### Response telegrams are not passing a line coupler, router or other filter in the installation
-- Use a dummy device in ETS for Home Assistant. These can be found in the ETS online catalog. Assign it to the line your interface connects Home Assistant to and link its communication objects to the group addresses you are using in Home Assistant. ETS will generate filter tables that are applied to your line couplers after updating their application.
+- Assign the group addresses used by Home Assistant to the used interface in ETS if your interface application supports that. ETS will generate filter tables that are applied to your line couplers after updating their application.
+- If your interface application doesn't support that, use a dummy device in ETS for Home Assistant. These can be found in the ETS online catalog. Assign it to the line your interface connects Home Assistant to and link its group objects to the group addresses you are using in Home Assistant.
#### Unresponsive system
@@ -1923,12 +1936,3 @@ The `unique_id` for KNX entities is generated based on required configuration va
- weather: `address_temperature`
There can not be multiple entities on the same platform sharing these exact group addresses, even if they differ in other configuration.
-
-### xknx.yaml configuration
-
-```log
-> The 'config_file' option near /homeassistant/configuration.yaml:42 is deprecated, please remove it from your configuration
-> Invalid config for [knx]: [config_file] is an invalid option for [knx]. Check: knx->knx->config_file.
-```
-
-The feature to specify a xknx configuration schema file in the Home Assistant configuration YAML file (via `config_file:`) is deprecated since Home Assistant 2021.4. You can use the [xknx.yaml config converter](https://xknx.io/config-converter/) to convert it to a Home Assistant compatible `configuration.yaml` schema.
diff --git a/source/_integrations/ld2410_ble.markdown b/source/_integrations/ld2410_ble.markdown
new file mode 100644
index 000000000000..92faaca31ba9
--- /dev/null
+++ b/source/_integrations/ld2410_ble.markdown
@@ -0,0 +1,49 @@
+---
+title: LD2410 BLE
+description: Instructions on how to integrate LD2410 BLE devices into Home Assistant.
+ha_category:
+ - Presence Detection
+ - Sensor
+ha_bluetooth: true
+ha_release: 2023.2
+ha_iot_class: Local Push
+ha_codeowners:
+ - '@930913'
+ha_domain: ld2410_ble
+ha_config_flow: true
+ha_platforms:
+ - binary_sensor
+ - sensor
+ha_integration_type: device
+---
+
+Integrates LD2410 BLE sensors from [Hi-Link](http://www.hlktech.net/) into Home Assistant.
+
+{% include integrations/config_flow.md %}
+
+You can currently configure the settings for motion/static triggers by USB with either the [desktop software](https://drive.google.com/drive/folders/1p4dhbEJA3YubyIjIIC7wwVsSo8x29Fq-?usp=sharing) or the Bluetooth [mobile app](https://www.pgyer.com/Lq8p).
+
+(This integration may not work if you reconfigure the default password or the number of gates.)
+
+## Sensors Provided
+
+The following sensors are provided:
+
+- Motion detected
+- Occupancy detected
+- Moving target distance & energy*
+- Static target distance & energy*
+- Detection distance*
+- Number of moving/static gates
+- Moving energy at gates 0-8*
+- Static energy at gates 0-8*
+
+\* Denotes entity is hidden by default, but can be enabled in the UI.
+
+## Purchasing
+
+
+There are multiple similar versions of the board. Make sure to buy the LD2410B or LD2410C versions as these are the ones with Bluetooth and have been tested. The C variant has 2.54mm pitch pins which is the one used by Arduino type devices, whereas the B variant has half pitch pins.
+
+
+You can buy this module bareboard or in a devkit from [AliExpress](https://www.aliexpress.com/item/1005004351593073.html).
diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown
index e57197810360..1d853dcd1ba1 100644
--- a/source/_integrations/light.mqtt.markdown
+++ b/source/_integrations/light.mqtt.markdown
@@ -217,6 +217,10 @@ 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
+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
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.
@@ -224,7 +228,7 @@ hs_command_topic:
required: false
type: string
hs_state_topic:
- description: "The MQTT topic subscribed to receive color state updates in HS format.
+ description: "The MQTT topic subscribed to receive color state updates in HS format. The expected payload is the hue and saturation values separated by commas, for example, `359.5,100.0`.
Note: Brightness is received separately in the `brightness_state_topic`."
required: false
type: string
@@ -374,12 +378,16 @@ white_scale:
required: false
type: integer
default: 255
+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
xy_command_topic:
description: "The MQTT topic to publish commands to change the light's XY state."
required: false
type: string
xy_state_topic:
- description: The MQTT topic subscribed to receive XY state updates.
+ description: The MQTT topic subscribed to receive XY state updates. The expected payload is the X and Y color values separated by commas, for example, `0.675,0.322`.
required: false
type: string
xy_value_template:
diff --git a/source/_integrations/litejet.markdown b/source/_integrations/litejet.markdown
index caa25577f4b3..14aa49a501e3 100644
--- a/source/_integrations/litejet.markdown
+++ b/source/_integrations/litejet.markdown
@@ -10,6 +10,7 @@ ha_release: 0.32
ha_domain: litejet
ha_config_flow: true
ha_platforms:
+ - diagnostics
- light
- scene
- switch
diff --git a/source/_integrations/litterrobot.markdown b/source/_integrations/litterrobot.markdown
index 67aef645b8df..3227ad93d1f9 100644
--- a/source/_integrations/litterrobot.markdown
+++ b/source/_integrations/litterrobot.markdown
@@ -39,18 +39,18 @@ You will need a Litter-Robot account as well as a Wi-Fi-enabled Litter-Robot or
| Entity | Domain | Description |
| ----------------------------- | -------- | -------------------------------------------------------------------------------- |
-| Litter Box | `vacuum` | Main entity that represents a Litter-Robot unit. |
-| Night Light Mode | `switch` | When turned on, automatically turns on the night light in darker settings. |
-| Panel Lockout | `switch` | When turned on, disables the buttons on the unit to prevent changes to settings. |
-| Last Seen | `sensor` | Displays the time the unit was last seen / reported an update. |
+| Litter box | `vacuum` | Main entity that represents a Litter-Robot unit. |
+| Night light mode | `switch` | When turned on, automatically turns on the night light in darker settings. |
+| Panel lockout | `switch` | When turned on, disables the buttons on the unit to prevent changes to settings. |
+| Last seen | `sensor` | Displays the time the unit was last seen / reported an update. |
| Litter level | `sensor` | Displays the litter level, only for Litter-Robot 4. |
| Pet weight | `sensor` | Displays the last measured pet weight, only for Litter-Robot 4. |
-| Sleep Mode Start Time | `sensor` | When sleep mode is enabled, displays the current or next sleep mode start time. |
-| Sleep Mode End Time | `sensor` | When sleep mode is enabled, displays the current or last sleep mode end time. |
-| Status Code | `sensor` | Displays the status code (Clean Cycle in Progress, Ready, Drawer Full, etc). |
-| Waste Drawer | `sensor` | Displays the current waste drawer level. |
-| Clean Cycle Wait Time Minutes | `select` | View and select the clean cycle wait time. |
-| Reset Waste Drawer | `button` | Button to reset the waste drawer level to 0%, only for Litter-Robot 3. |
+| Sleep mode start time | `sensor` | When sleep mode is enabled, displays the current or next sleep mode start time. |
+| Sleep mode end time | `sensor` | When sleep mode is enabled, displays the current or last sleep mode end time. |
+| Status code | `sensor` | Displays the status code (Clean Cycle in Progress, Ready, Drawer Full, etc). |
+| Waste drawer | `sensor` | Displays the current waste drawer level. |
+| Clean cycle wait time minutes | `select` | View and select the clean cycle wait time. |
+| Reset waste drawer | `button` | Button to reset the waste drawer level to 0%, only for Litter-Robot 3. |
| Firmware | `update` | View and update to the latest firmware, only for Litter-Robot 4. |
### Feeder-Robot
diff --git a/source/_integrations/lock.mqtt.markdown b/source/_integrations/lock.mqtt.markdown
index d8e2bc2c84f1..c64b9512b0dc 100644
--- a/source/_integrations/lock.mqtt.markdown
+++ b/source/_integrations/lock.mqtt.markdown
@@ -20,6 +20,7 @@ Optimistic mode can be forced, even if state topic is available. Try to enable i
It's mandatory for locks to support `lock` and `unlock`. A lock may optionally support `open`, (e.g. to open the bolt in addition to the latch), in this case, `payload_open` is required in the configuration. If the lock is in optimistic mode, it will change states to `unlocked` when handling the `open` command.
+An MQTT lock can also report the intermediate states `unlocking`, `locking` or `jammed` if the motor reports a jammed state.
To enable MQTT locks in your installation, add the following to your `configuration.yaml` file:
@@ -68,6 +69,14 @@ availability_topic:
description: The MQTT topic subscribed to receive availability (online/offline) updates. Must not be used together with `availability`.
required: false
type: string
+code_format:
+ description: A regular expression to validate a supplied code when it is set during the service call to `open`, `lock` or `unlock` the MQTT lock.
+ required: false
+ type: string
+command_template:
+ description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. The lock command template accepts the parameters `value` and `code`. The `value` parameter will contain the configured value for either `payload_open`, `payload_lock` or `payload_unlock`. The `code` parameter is set during the service call to `open`, `lock` or `unlock` the MQTT lock and will be set `None` if no code was passed.
+ required: false
+ type: template
command_topic:
description: The MQTT topic to publish commands to change the lock state.
required: true
@@ -193,26 +202,41 @@ retain:
required: false
type: boolean
default: false
+state_jammed:
+ description: The payload sent to `state_topic` by the lock when it's jammed.
+ required: false
+ type: string
+ default: JAMMED
state_locked:
- description: The payload sent to by the lock when it's locked.
+ description: The payload sent to `state_topic` by the lock when it's locked.
required: false
type: string
default: LOCKED
+state_locking:
+ description: The payload sent to `state_topic` by the lock when it's locking.
+ required: false
+ type: string
+ default: LOCKING
state_topic:
- description: The MQTT topic subscribed to receive state updates.
+ description: The MQTT topic subscribed to receive state updates. It accepts states configured with `state_jammed`, `state_locked`, `state_unlocked`, `state_locking` or `state_unlocking`.
required: false
type: string
state_unlocked:
- description: The payload sent to by the lock when it's unlocked.
+ description: The payload sent to `state_topic` by the lock when it's unlocked.
required: false
type: string
default: UNLOCKED
+state_unlocking:
+ description: The payload sent to `state_topic` by the lock when it's unlocking.
+ required: false
+ type: string
+ default: UNLOCKING
unique_id:
description: An ID that uniquely identifies this lock. If two locks have the same unique ID, Home Assistant will raise an exception.
required: false
type: string
value_template:
- description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the payload."
+ 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
{% endconfiguration %}
@@ -238,12 +262,18 @@ The example below shows a full configuration for a MQTT lock.
mqtt:
lock:
- name: Frontdoor
- state_topic: "home-assistant/frontdoor/"
+ state_topic: "home-assistant/frontdoor/state"
+ code_format: "^\\d{4}$"
command_topic: "home-assistant/frontdoor/set"
+ command_template: '{ "action": "{{ value }}", "code":"{{ code }}" }'
payload_lock: "LOCK"
payload_unlock: "UNLOCK"
state_locked: "LOCK"
state_unlocked: "UNLOCK"
+ state_locking: "LOCKING"
+ state_unlocking: "UNLOCKING"
+ state_jammed: "MOTOR_JAMMED"
+ state_ok: "MOTOR_OK"
optimistic: false
qos: 1
retain: true
diff --git a/source/_integrations/mastodon.markdown b/source/_integrations/mastodon.markdown
index 42acc57d2686..b3c2937daf79 100644
--- a/source/_integrations/mastodon.markdown
+++ b/source/_integrations/mastodon.markdown
@@ -18,6 +18,7 @@ The `mastodon` platform uses [Mastodon](https://joinmastodon.org/) to deliver no
### Setup
Go to **Preferences** in the Mastodon web interface, then to **Development** and create a new application.
+If you want to grant only required accesses, uncheck all checkboxes then check only **read:accounts** and **write:statuses**.
### Configuration
diff --git a/source/_integrations/matrix.markdown b/source/_integrations/matrix.markdown
index 8d6d1b62228e..fbe30367f051 100644
--- a/source/_integrations/matrix.markdown
+++ b/source/_integrations/matrix.markdown
@@ -6,8 +6,6 @@ ha_category:
- Notifications
ha_iot_class: Cloud Push
ha_release: 0.69
-ha_codeowners:
- - '@tinloaf'
ha_domain: matrix
ha_platforms:
- notify
diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown
new file mode 100644
index 000000000000..154fb765ff62
--- /dev/null
+++ b/source/_integrations/matter.markdown
@@ -0,0 +1,203 @@
+---
+title: Matter
+description: Instructions on how to integrate Matter with Home Assistant.
+ha_category:
+ - Binary Sensor
+ - Light
+ - Sensor
+ - Switch
+ha_release: '2022.12'
+ha_iot_class: Local Push
+ha_config_flow: true
+ha_codeowners:
+ - '@marcelveldt'
+ - '@MartinHjelmare'
+ha_domain: matter
+ha_platforms:
+ - binary_sensor
+ - light
+ - sensor
+ - switch
+ha_integration_type: integration
+---
+
+The Matter integration allows you to control Matter devices on your local WiFi or 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.
+
+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.
+
+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.
+
+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.
+
+
+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.
+
+
+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.
+
+For devices where Home Assistant provides an 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.
+
+
+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.
+
+
+{% 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)._
+
+## 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.
+
+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.
+
+### Known issues
+
+- 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)
+
+_Both issues will be fixed in Home Assistant 2023.3._
+
+## 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.
+
+### 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.
+
+
+
+### Add a device using the Android 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 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.
+
+
+
+### Share a device from Apple Home
+
+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.
+
+
+
+### Share a device from Google Home
+
+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.
+
+
+
+## Device specific instructions
+
+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.
+
+### 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.
+
+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.
+
+### 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.
+
+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)
+
+## 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.
+
+### 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**.
+
+### 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
+
+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._
+
diff --git a/source/_integrations/matter.md b/source/_integrations/matter.md
deleted file mode 100644
index 1efecacd6274..000000000000
--- a/source/_integrations/matter.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: Matter
-description: Instructions on how to integrate Matter with Home Assistant.
-ha_category:
- - Binary Sensor
- - Light
- - Sensor
- - Switch
-ha_release: '2022.12'
-ha_iot_class: Local Push
-ha_config_flow: true
-ha_codeowners:
- - '@marcelveldt'
- - '@MartinHjelmare'
-ha_domain: matter
-ha_platforms:
- - binary_sensor
- - light
- - sensor
- - switch
-ha_integration_type: integration
----
-
-This integration allows you to communicate with and control Matter devices on your local WiFi or Thread network.
-
-
-Both Matter and the implementation within Home Assistant are in early (v1) state and features may be missing or could be improved.
-
-
-{% 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).
-
-
-## Advanced installation instructions
-
-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).
-
diff --git a/source/_integrations/mijndomein_energie.markdown b/source/_integrations/mijndomein_energie.markdown
new file mode 100644
index 000000000000..f09057a1d50e
--- /dev/null
+++ b/source/_integrations/mijndomein_energie.markdown
@@ -0,0 +1,20 @@
+---
+title: Mijndomein Energie
+description: Connect and control your Mijndomein Energie devices using the EnergyZero integration
+ha_category:
+ - Energy
+ha_domain: mijndomein_energie
+ha_release: 2023.2
+ha_integration_type: virtual
+ha_supporting_domain: energyzero
+ha_supporting_integration: EnergyZero
+ha_codeowners:
+ - '@klaasnicolaas'
+ha_config_flow: true
+ha_platforms:
+ - diagnostics
+ - sensor
+ha_iot_class: Cloud Polling
+---
+
+{% include integrations/supported_brand.md %}
diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown
index 68d595efc5a8..89ba43af1c76 100644
--- a/source/_integrations/modbus.markdown
+++ b/source/_integrations/modbus.markdown
@@ -1145,7 +1145,7 @@ logger:
default: warning
logs:
homeassistant.components.modbus: debug
- pymodbus.client: debug
+ pymodbus: debug
```
and restart Home Assistant, reproduce the problem, and include the log in the issue.
diff --git a/source/_integrations/moehlenhoff_alpha2.markdown b/source/_integrations/moehlenhoff_alpha2.markdown
index d136b197b3b8..fd477bc63acf 100644
--- a/source/_integrations/moehlenhoff_alpha2.markdown
+++ b/source/_integrations/moehlenhoff_alpha2.markdown
@@ -11,6 +11,7 @@ ha_codeowners:
ha_domain: moehlenhoff_alpha2
ha_platforms:
- binary_sensor
+ - button
- climate
- sensor
ha_integration_type: integration
diff --git a/source/_integrations/mopeka.markdown b/source/_integrations/mopeka.markdown
new file mode 100644
index 000000000000..67f3ee8a637b
--- /dev/null
+++ b/source/_integrations/mopeka.markdown
@@ -0,0 +1,27 @@
+---
+title: Mopeka
+description: Instructions on how to integrate Mopeka devices into Home Assistant.
+ha_category:
+ - Sensor
+ha_bluetooth: true
+ha_release: 2023.2
+ha_iot_class: Local Push
+ha_codeowners:
+ - '@bdraco'
+ha_domain: mopeka
+ha_config_flow: true
+ha_platforms:
+ - sensor
+ha_integration_type: device
+---
+
+Integrates [Mopeka](https://www.mopekaiot.com/) devices into Home Assistant.
+
+{% include integrations/config_flow.md %}
+
+The Mopeka integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional.
+
+## Supported devices
+
+- [Pro Plus](https://www.mopekaiot.com/product/mopeka-pro-plus-sensor) (M1015)
+- [Pro Check](https://www.mopekaiot.com/product/mopeka-pro-check-sensor-aluminum-lpg-cylinders-w-collar) (M1017)
diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown
index e567a2e5b8dd..ea9bd07ab535 100644
--- a/source/_integrations/mqtt.markdown
+++ b/source/_integrations/mqtt.markdown
@@ -23,6 +23,7 @@ ha_platforms:
- diagnostics
- fan
- humidifier
+ - light
- lock
- number
- scene
@@ -31,7 +32,9 @@ ha_platforms:
- siren
- switch
- text
+ - tag
- update
+ - vacuum
ha_integration_type: integration
ha_quality_scale: gold
---
@@ -308,6 +311,7 @@ Configuration variable names in the discovery payload may be abbreviated to cons
'hold_stat_tpl': 'hold_state_template',
'hold_stat_t': 'hold_state_topic',
'hs_cmd_t': 'hs_command_topic',
+ 'hs_cmd_tpl': 'hs_command_template',
'hs_stat_t': 'hs_state_topic',
'hs_val_tpl': 'hs_value_template',
'ic': 'icon',
@@ -391,9 +395,6 @@ Configuration variable names in the discovery payload may be abbreviated to cons
'pl_unlk': 'payload_unlock',
'pos_clsd': 'position_closed',
'pos_open': 'position_open',
- 'pow_cmd_t': 'power_command_topic',
- 'pow_stat_t': 'power_state_topic',
- 'pow_stat_tpl': 'power_state_template',
'pr_mode_cmd_t': 'preset_mode_command_topic',
'pr_mode_cmd_tpl': 'preset_mode_command_template',
'pr_mode_stat_t': 'preset_mode_state_topic',
@@ -428,13 +429,16 @@ Configuration variable names in the discovery payload may be abbreviated to cons
'stat_cla': 'state_class',
'stat_clsd': 'state_closed',
'stat_closing': 'state_closing',
+ 'stat_jam': 'state_jammed',
'stat_off': 'state_off',
'stat_on': 'state_on',
'stat_open': 'state_open',
'stat_opening': 'state_opening',
'stat_stopped': 'state_stopped',
'stat_locked': 'state_locked',
+ 'stat_locking': 'state_locking',
'stat_unlocked': 'state_unlocked',
+ 'stat_unlocking': 'state_unlocking',
'stat_t': 'state_topic',
'stat_tpl': 'state_template',
'stat_val_tpl': 'state_value_template',
@@ -483,6 +487,7 @@ Configuration variable names in the discovery payload may be abbreviated to cons
'whit_val_stat_t': 'white_value_state_topic',
'whit_val_tpl': 'white_value_template',
'xy_cmd_t': 'xy_command_topic',
+ 'xy_cmd_tpl': 'xy_command_template',
'xy_stat_t': 'xy_state_topic',
'xy_val_tpl': 'xy_value_template',
```
@@ -511,6 +516,7 @@ The following software has built-in support for MQTT discovery:
- [Arilux AL-LC0X LED controllers](https://github.com/smrtnt/Arilux_AL-LC0X)
- [ebusd](https://github.com/john30/ebusd)
- [ecowitt2mqtt](https://github.com/bachya/ecowitt2mqtt)
+- [EMS-ESP32 (and EMS-ESP)](https://github.com/emsesp/EMS-ESP32)
- [ESPHome](https://esphome.io)
- [ESPurna](https://github.com/xoseperez/espurna)
- [HASS.Agent](https://github.com/LAB02-Research/HASS.Agent)
@@ -520,6 +526,7 @@ The following software has built-in support for MQTT discovery:
- [room-assistant](https://github.com/mKeRix/room-assistant) (starting with 1.1.0)
- [SmartHome](https://github.com/roncoa/SmartHome)
- [SpeedTest-CLI MQTT](https://github.com/adorobis/speedtest-CLI2mqtt)
+- [SwitchBot-MQTT-BLE-ESP32](https://github.com/devWaves/SwitchBot-MQTT-BLE-ESP32)
- [Tasmota](https://github.com/arendst/Tasmota) (starting with 5.11.1e, development halted)
- [Teleinfo MQTT](https://fmartinou.github.io/teleinfo2mqtt) (starting with 3.0.0)
- [Tydom2MQTT](https://fmartinou.github.io/tydom2mqtt/)
@@ -744,7 +751,7 @@ script:
## Publish & Dump services
-The MQTT integration will register the service `mqtt.publish` which allows publishing messages to MQTT topics. There are two ways of specifying your payload. You can either use `payload` to hard-code a payload or use `payload_template` to specify a [template](/topics/templating/) that will be rendered to generate the payload.
+The MQTT integration will register the service `mqtt.publish` which allows publishing messages to MQTT topics. There are two ways of specifying your payload. You can either use `payload` to hard-code a payload or use `payload_template` to specify a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that will be rendered to generate the payload.
### Service `mqtt.publish`
diff --git a/source/_integrations/mysensors.markdown b/source/_integrations/mysensors.markdown
index 75c47015cec1..b5e98a66957a 100644
--- a/source/_integrations/mysensors.markdown
+++ b/source/_integrations/mysensors.markdown
@@ -16,8 +16,10 @@ ha_platforms:
- device_tracker
- light
- notify
+ - remote
- sensor
- switch
+ - text
ha_config_flow: true
ha_integration_type: integration
---
@@ -841,6 +843,12 @@ void send_status_message()
## Notify
+
+
+The Notify platform is deprecated and replaced with the [Text platform](#text).
+
+
+
Setting the `target` key in the service call will target the name of the MySensors device in Home Assistant. MySensors device names follow the notation: "[Child description]" or alternatively "[Sketch name] [Node id] [Child id]".
#### Notify automation example
@@ -920,6 +928,96 @@ void receive(const MyMessage &message) {
}
```
+## Remote
+
+The following type combinations are supported:
+
+#### MySensors version 1.4 and higher
+
+| S_TYPE | V_TYPE |
+| -------- | ------------------ |
+| S_IR | V_IR_SEND, V_LIGHT |
+
+#### MySensors version 1.5 and higher
+
+| S_TYPE | V_TYPE |
+| ------------ | --------------------- |
+| S_IR | V_IR_SEND, V_STATUS |
+
+V_LIGHT or V_STATUS is required to report the on / off state of the remote. Use either V_LIGHT or V_STATUS depending on library version.
+
+#### IR transceiver example sketch
+
+```cpp
+/*
+ * Documentation: https://www.mysensors.org
+ * Support Forum: https://forum.mysensors.org
+ *
+ * https://www.mysensors.org/build/ir
+ */
+
+#include
+#include
+#include
+
+#define SN "IR Sensor"
+#define SV "1.0"
+#define CHILD_ID 1
+
+MySensor gw;
+
+char code[10] = "abcd01234";
+char oldCode[10] = "abcd01234";
+MyMessage msgCodeRec(CHILD_ID, V_IR_RECEIVE);
+MyMessage msgCode(CHILD_ID, V_IR_SEND);
+MyMessage msgSendCode(CHILD_ID, V_LIGHT);
+
+void setup()
+{
+ gw.begin(incomingMessage);
+ gw.sendSketchInfo(SN, SV);
+ gw.present(CHILD_ID, S_IR);
+ // Send initial values.
+ gw.send(msgCodeRec.set(code));
+ gw.send(msgCode.set(code));
+ gw.send(msgSendCode.set(0));
+}
+
+void loop()
+{
+ gw.process();
+ // IR receiver not implemented, just a dummy report of code when it changes
+ if (String(code) != String(oldCode)) {
+ Serial.print("Code received ");
+ Serial.println(code);
+ gw.send(msgCodeRec.set(code));
+ strcpy(oldCode, code);
+ }
+}
+
+void incomingMessage(const MyMessage &message) {
+ if (message.type==V_LIGHT) {
+ // IR sender not implemented, just a dummy print.
+ if (message.getBool()) {
+ Serial.print("Sending code ");
+ Serial.println(code);
+ }
+ gw.send(msgSendCode.set(message.getBool() ? 1 : 0));
+ // Always turn off device
+ gw.wait(100);
+ gw.send(msgSendCode.set(0));
+ }
+ if (message.type == V_IR_SEND) {
+ // Retrieve the IR code value from the incoming message.
+ String codestring = message.getString();
+ codestring.toCharArray(code, sizeof(code));
+ Serial.print("Changing code to ");
+ Serial.println(code);
+ gw.send(msgCode.set(code));
+ }
+}
+```
+
## Sensor
The following sensor types are supported:
@@ -965,6 +1063,7 @@ The following sensor types are supported:
| S_INFO | V_TEXT |
| S_GAS | V_FLOW, V_VOLUME |
| S_GPS | V_POSITION |
+| S_IR | V_IR_RECORD |
| S_WATER_QUALITY | V_TEMP, V_PH, V_ORP, V_EC |
### Custom unit of measurement
@@ -1051,7 +1150,6 @@ The following actuator types are supported:
| S_SMOKE | V_ARMED |
| S_LIGHT | V_LIGHT |
| S_LOCK | V_LOCK_STATUS |
-| S_IR | V_IR_SEND, V_LIGHT |
#### MySensors version 1.5 and higher
@@ -1073,42 +1171,6 @@ The following actuator types are supported:
All V_TYPES for each S_TYPE above are required to activate the actuator for the platform. Use either V_LIGHT or V_STATUS depending on library version for cases where that V_TYPE is required.
-### Services
-
-The MySensors switch platform exposes a service to change an IR code attribute for an IR switch device and turn the switch on. See the [example sketch](#ir-switch-sketch) for the IR switch below.
-
-| Service | Description |
-| ---------------------- | -------------------------------------------------------------------------------------------- |
-| mysensors.send_ir_code | Set an IR code as a state attribute for a MySensors IR device switch and turn the switch on. |
-
-The service can be used as part of an automation script. For example:
-
-```yaml
-# Example configuration.yaml automation entry
-automation:
- - alias: "Turn HVAC on"
- trigger:
- platform: time
- at: "5:30:00"
- action:
- service: mysensors.send_ir_code
- target:
- entity_id: switch.hvac_1_1
- data:
- V_IR_SEND: "0xC284" # the IR code to send
-
- - alias: "Turn HVAC off"
- trigger:
- platform: time
- at: "0:30:00"
- action:
- service: mysensors.send_ir_code
- target:
- entity_id: switch.hvac_1_1
- data:
- V_IR_SEND: "0xC288" # the IR code to send
-```
-
#### Switch example sketch
```cpp
@@ -1155,74 +1217,70 @@ void incomingMessage(const MyMessage &message)
}
```
-#### IR switch example sketch
+## Text
+
+The following sensor types are supported:
+
+#### MySensors version 2.0 and higher
+
+| S_TYPE | V_TYPE |
+| ------ | ------ |
+| S_INFO | V_TEXT |
+
+#### Text example sketch
```cpp
/*
* Documentation: https://www.mysensors.org
* Support Forum: https://forum.mysensors.org
- *
- * https://www.mysensors.org/build/ir
*/
-#include
+// Enable debug prints to serial monitor
+#define MY_DEBUG
+#define MY_RADIO_NRF24
+
+#include
#include
-#include
-#define SN "IR Sensor"
+#define SN "TextSensor"
#define SV "1.0"
#define CHILD_ID 1
-MySensor gw;
+MyMessage textMsg(CHILD_ID, V_TEXT);
+bool initialValueSent = false;
-char code[10] = "abcd01234";
-char oldCode[10] = "abcd01234";
-MyMessage msgCodeRec(CHILD_ID, V_IR_RECEIVE);
-MyMessage msgCode(CHILD_ID, V_IR_SEND);
-MyMessage msgSendCode(CHILD_ID, V_LIGHT);
+void setup(void) {
+}
-void setup()
-{
- gw.begin(incomingMessage);
- gw.sendSketchInfo(SN, SV);
- gw.present(CHILD_ID, S_IR);
- // Send initial values.
- gw.send(msgCodeRec.set(code));
- gw.send(msgCode.set(code));
- gw.send(msgSendCode.set(0));
+void presentation() {
+ sendSketchInfo(SN, SV);
+ present(CHILD_ID, S_INFO, "TextSensor1");
}
-void loop()
-{
- gw.process();
- // IR receiver not implemented, just a dummy report of code when it changes
- if (String(code) != String(oldCode)) {
- Serial.print("Code received ");
- Serial.println(code);
- gw.send(msgCodeRec.set(code));
- strcpy(oldCode, code);
+void loop() {
+ if (!initialValueSent) {
+ Serial.println("Sending initial value");
+ // Send initial values.
+ send(textMsg.set("-"));
+ Serial.println("Requesting initial value from controller");
+ request(CHILD_ID, V_TEXT);
+ wait(2000, C_SET, V_TEXT);
}
}
-void incomingMessage(const MyMessage &message) {
- if (message.type==V_LIGHT) {
- // IR sender not implemented, just a dummy print.
- if (message.getBool()) {
- Serial.print("Sending code ");
- Serial.println(code);
+void receive(const MyMessage &message) {
+ if (message.type == V_TEXT) {
+ if (!initialValueSent) {
+ Serial.println("Receiving initial value from controller");
+ initialValueSent = true;
}
- gw.send(msgSendCode.set(message.getBool() ? 1 : 0));
- // Always turn off device
- gw.wait(100);
- gw.send(msgSendCode.set(0));
- }
- if (message.type == V_IR_SEND) {
- // Retrieve the IR code value from the incoming message.
- String codestring = message.getString();
- codestring.toCharArray(code, sizeof(code));
- Serial.print("Changing code to ");
- Serial.println(code);
- gw.send(msgCode.set(code));
+ // Dummy print
+ Serial.print("Message: ");
+ Serial.print(message.sensor);
+ Serial.print(", Message: ");
+ Serial.println(message.getString());
+ // Send message to controller
+ send(textMsg.set(message.getString()));
}
}
```
diff --git a/source/_integrations/notify.markdown b/source/_integrations/notify.markdown
index 4fe50b792a7c..1287ada6a294 100644
--- a/source/_integrations/notify.markdown
+++ b/source/_integrations/notify.markdown
@@ -26,7 +26,7 @@ Once loaded, the `notify` platform will expose a service that can be called to s
| `target` | yes | Some platforms allow specifying a recipient that will receive the notification. See your platform page if it is supported.
| `data` | yes | On platforms who have extended functionality. See your platform page if it is supported.
-The notify integration supports specifying [templates](/topics/templating/). This will allow you to use the current state of Home Assistant in your notifications.
+The notify integration supports specifying [templates](/docs/configuration/templating/). This will allow you to use the current state of Home Assistant in your notifications.
In an [action](/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this with a customized subject.
diff --git a/source/_integrations/nuki.markdown b/source/_integrations/nuki.markdown
index fa74e455abd4..405b311b14d8 100644
--- a/source/_integrations/nuki.markdown
+++ b/source/_integrations/nuki.markdown
@@ -13,6 +13,7 @@ ha_domain: nuki
ha_platforms:
- binary_sensor
- lock
+ - sensor
ha_config_flow: true
ha_dhcp: true
ha_integration_type: integration
diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown
index d5b5ff93b8ef..122af2051a2e 100644
--- a/source/_integrations/number.markdown
+++ b/source/_integrations/number.markdown
@@ -33,8 +33,8 @@ The type of data a number represents impacts how it is displayed in the frontend
- **data_rate**: Data rate in bit/s, kbit/s, Mbit/s, Gbit/s, B/s, kB/s, MB/s, GB/s, KiB/s, MiB/s, or GiB/s
- **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB, or YiB
- **distance**: Generic distance in km, m, cm, mm, mi, yd, or in
-- **energy**: Energy in Wh, kWh or MWh
-- **frequency**: Frequency in Hz, kHz, MHz or GHz
+- **energy**: Energy in Wh, kWh, MWh, MJ, or GJ
+- **frequency**: Frequency in Hz, kHz, MHz, or GHz
- **gas**: Gasvolume in m³, ft³, or CCF
- **humidity**: Percentage of humidity in the air
- **illuminance**: The current light level in lx
@@ -58,7 +58,7 @@ The type of data a number represents impacts how it is displayed in the frontend
- **sound_pressure**: Sound pressure in dB or dBA
- **speed**: Generic speed in ft/s, in/d, in/h, km/h, kn, m/s, mph, or mm/d
- **sulphur_dioxide**: Concentration of sulphur dioxide in µg/m³
-- **temperature**: Temperature in °C or °F
+- **temperature**: Temperature in °C, °F or K
- **volatile_organic_compounds**: Concentration of volatile organic compounds in µg/m³
- **voltage**: Voltage in V, mV
- **volume**: Generic volume in L, mL, gal, fl. oz., m³, ft³, or CCF
diff --git a/source/_integrations/onewire.markdown b/source/_integrations/onewire.markdown
index 50a93d58af53..899a2998dea8 100644
--- a/source/_integrations/onewire.markdown
+++ b/source/_integrations/onewire.markdown
@@ -10,6 +10,7 @@ ha_codeowners:
- '@garbled1'
- '@epenet'
ha_domain: onewire
+ha_quality_scale: gold
ha_platforms:
- binary_sensor
- diagnostics
diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown
new file mode 100644
index 000000000000..2a435af8b784
--- /dev/null
+++ b/source/_integrations/openai_conversation.markdown
@@ -0,0 +1,21 @@
+---
+title: OpenAI Conversation
+description: Instructions on how to integrate OpenAI as a conversation agent
+ha_category:
+ - Voice
+ha_release: 2023.2
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@balloob'
+ha_domain: openai_conversation
+ha_integration_type: service
+---
+
+The OpenAI integration adds a conversation agent powered by [OpenAI](https://www.openai.com) in Home Assistant.
+
+This conversation agent is unable to control your house. It can only query information that has been provided by Home Assistant. To be able to answer questions about your house, Home Assistant will need to provide OpenAI with the details of your house, which include areas, devices and their states.
+
+This integration requires an API key to use, [which you can generate here.](https://beta.openai.com/account/api-keys).
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/openalpr_local.markdown b/source/_integrations/openalpr_local.markdown
deleted file mode 100644
index 2f438773d062..000000000000
--- a/source/_integrations/openalpr_local.markdown
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: OpenALPR Local
-description: Instructions on how to integrate licences plates with OpenALPR local into Home Assistant.
-ha_category:
- - Image Processing
-ha_iot_class: Local Push
-ha_release: 0.36
-ha_domain: openalpr_local
-ha_integration_type: integration
----
-
-
- This integration is pending removal from Home Assistant and will be no longer available as of Home Assistant 2022.10.
-
-
-The [OpenALPR](https://www.openalpr.com/) integration for Home Assistant allows you
-to process vehicle license plates from a camera. You can use this information to
-trigger [automations](/integrations/automation/) like opening a garage door.
-
-For using the result inside an automation rule, take a look at the
-[image processing integration](/integrations/image_processing) page.
-
-## Local installation
-
-If you want process all data locally, you will need version 2.3.1 or higher of the
-`alpr` command line tool.
-
-If you don't find binaries for your distribution, you can compile the tool from source.
-Documentation of how to build OpenALPR is found
-[here](https://github.com/openalpr/openalpr/wiki).
-
-On a Debian system you can use the following `cmake` command to build only the command
-line tool:
-
-```bash
-cmake -DWITH_TEST=FALSE -DWITH_BINDING_JAVA=FALSE --DWITH_BINDING_PYTHON=FALSE \
- --DWITH_BINDING_GO=FALSE -DWITH_DAEMON=FALSE -DCMAKE_INSTALL_PREFIX:PATH=/usr ..
-```
-
-For other operating systems, please refer to the
-[OpenALPR wiki](https://github.com/openalpr/openalpr/wiki).
-
-Verify your `alpr` installation with a command like the following:
-
-```bash
-wget -O- -q http://plates.openalpr.com/h786poj.jpg | alpr -
-```
-
-### Configuration
-
-```yaml
-# Example configuration.yaml entry
-image_processing:
- - platform: openalpr_local
- region: eu
- source:
- - entity_id: camera.garage
-```
-
-{% configuration %}
-region:
- description: Country or region. List of [supported values](https://github.com/openalpr/openalpr/tree/master/runtime_data/config).
- required: true
- type: string
-alpr_bin:
- description: The command line tool alpr from OpenALPR software for local processing.
- required: false
- type: string
- default: alpr
-confidence:
- description: The minimum confidence in percent to process with Home Assistant.
- required: false
- type: integer
- default: 80
-source:
- description: List of image sources.
- required: true
- type: list
- keys:
- entity_id:
- description: A camera entity id to get the picture from.
- required: true
- type: string
- name:
- description: This parameter allows you to override the name of your OpenALPR entity.
- required: false
- type: string
-{% endconfiguration %}
diff --git a/source/_integrations/openuv.markdown b/source/_integrations/openuv.markdown
index 1024d443c59b..24837fc29f1f 100644
--- a/source/_integrations/openuv.markdown
+++ b/source/_integrations/openuv.markdown
@@ -193,4 +193,3 @@ provided by OpenUV. So, this strategy is followed:
If you receive a re-authentication notification and are certain that your key has merely
reached its daily call limit, you can safely ignore it.
-
diff --git a/source/_integrations/oralb.markdown b/source/_integrations/oralb.markdown
index 1e89d99cc06e..97170cb1d7e7 100644
--- a/source/_integrations/oralb.markdown
+++ b/source/_integrations/oralb.markdown
@@ -8,6 +8,7 @@ ha_release: 2022.11
ha_iot_class: Local Push
ha_codeowners:
- '@bdraco'
+ - '@Lash-L'
ha_domain: oralb
ha_config_flow: true
ha_platforms:
@@ -19,22 +20,31 @@ Integrates [Oral-B](https://oralb.com/) devices into Home Assistant.
{% include integrations/config_flow.md %}
-The Oral-B integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional.
+The Oral-B integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional.
+
+The integration can discover most Bluetooth-enabled Oral-B toothbrushes. Brushes not listed as supported below may not be correctly identified or have some modes missing.
## Supported devices
- [IO 4 Series](https://oralb.com/en-us/products/electric-toothbrushes/oralbio)
+- [IO 6 Series](https://oralb.com/en-us/products/electric-toothbrushes/io-series-6-electric-toothbrush-gray-opal/)
- [IO 7 Series](https://oralb.com/en-us/products/electric-toothbrushes/oralbio)
- [IO 8 Series](https://oralb.com/en-us/products/electric-toothbrushes/oralbio)
- [IO 9 Series](https://oralb.com/en-us/products/electric-toothbrushes/oralbio)
+- Smart Series 4000
+- Smart Series 6000
- [Smart Series 7000](https://oralb.com/en-us/products/electric-toothbrushes/smart-7000-rechargeable-electric-toothbrush/)
+- Smart Series 8000
- [Genius Series 9000](https://oralb.com/en-us/products/electric-toothbrushes/genius-9600-rechargeable-electric-toothbrush-white/)
+- Genius Series 10000
+- Triumph V2
+- [Genius X](https://www.service.oralb.com/us/en/products/3771/)
## Sensor
* Mode - selected cleaning mode e.g. daily clean.
* Number of sectors - brushing areas set in the **Set Pacer Visualisation** in the brushing preferences in the mobile app.
-* Sector - the current area of the mouth you are brushing.
-* Sector time - amount time brushing the current sector in seconds.
+* Sector - the current sector of brush goal you are in (i.e. if brush goal is 2:00 minutes, and you are at 0:37, you are in sector 2)
* Time - total brushing time in seconds.
* Toothbrush state - whether the toothbrush is running, idle.
+* Battery - toothbrush battery percentage.
diff --git a/source/_integrations/otbr.markdown b/source/_integrations/otbr.markdown
new file mode 100644
index 000000000000..b2905551e828
--- /dev/null
+++ b/source/_integrations/otbr.markdown
@@ -0,0 +1,17 @@
+---
+title: Open Thread Border Router
+ha_category:
+ - Other
+ha_release: 2023.2
+ha_codeowners:
+ - '@home-assistant/core'
+ha_domain: otbr
+ha_iot_class: Local Polling
+ha_integration_type: service
+ha_config_flow: true
+---
+
+The Open Thread Border Router integration allows calling an Open Thread Border Router's REST API from Python and via WebSocket.
+The integration is automatically set up when the "Silicon Labs Multiprotocol" add-on is installed.
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/persistent_notification.markdown b/source/_integrations/persistent_notification.markdown
index 3b46f16919fc..610734a847fb 100644
--- a/source/_integrations/persistent_notification.markdown
+++ b/source/_integrations/persistent_notification.markdown
@@ -24,8 +24,8 @@ The service `persistent_notification.create` takes in `message`, `title`, and `n
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
-| `message` | no | Body of the notification. Accepts [templates](/topics/templating/).
-| `title` | yes | Title of the notification. Accepts [templates](/topics/templating/).
+| `message` | no | Body of the notification. Accepts [templates](/docs/configuration/templating/).
+| `title` | yes | Title of the notification. Accepts [templates](/docs/configuration/templating/).
| `notification_id` | yes | If `notification_id` is given, it will overwrite the notification if there already was a notification with that ID.
Here is how an [action](/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) with static content could look like.
@@ -38,7 +38,7 @@ action:
title: "Custom subject"
```
-If you want to show some runtime information, you have to use [templates](/topics/templating/).
+If you want to show some runtime information, you have to use [templates](/docs/configuration/templating/).
{% raw %}
diff --git a/source/_integrations/person.markdown b/source/_integrations/person.markdown
index 2409e0478247..939e123147b8 100644
--- a/source/_integrations/person.markdown
+++ b/source/_integrations/person.markdown
@@ -20,7 +20,7 @@ Let's say, for example, that you have three trackers: `tracker_gps`, `tracker_ro
1. You're at home, all three devices show state `home` - the state of your Person entity will be `home` with source `tracker_router` or `tracker_ble`, whichever was most recently updated.
2. You just left home. `tracker_gps` shows state `not_home`, but the other two trackers show state `home` (they may not have yet updated due to their `consider_home` setting see [device_tracker](/integrations/device_tracker/#configuring-a-device_tracker-platform)). Since the stationary trackers have priority, you are considered `home`.
-3. After some time, both stationary trackers show state `not_home`. Now your Person entity has state 'not_home' with source `tracker_gps`.
+3. After some time, both stationary trackers show state `not_home`. Now your Person entity has state `not_home` with source `tracker_gps`.
4. While you are away from home, your Home Assistant instance is restarted. Until the `tracker_gps` receives an update, your status will be determined by the stationary trackers, since they will have the most recent update after a restart. Obviously, the state will be `not_home`.
5. Then you're going into a zone you have defined as `zone1`, `tracker_gps` sends an update, and now your state is `zone1` with source `tracker_gps`.
6. You've returned home and your mobile device has connected to the router, but `tracker_gps` hasn't updated yet. Your state will be `home` with source `tracker_router`.
diff --git a/source/_integrations/powerwall.markdown b/source/_integrations/powerwall.markdown
index dfe91bea7e4a..ef1de6b55019 100644
--- a/source/_integrations/powerwall.markdown
+++ b/source/_integrations/powerwall.markdown
@@ -5,17 +5,20 @@ ha_category:
- Binary Sensor
- Energy
- Sensor
+ - Switch
ha_release: 0.108
ha_iot_class: Local Polling
ha_config_flow: true
ha_codeowners:
- '@bdraco'
- '@jrester'
+ - '@daniel-simpson'
ha_domain: powerwall
ha_dhcp: true
ha_platforms:
- binary_sensor
- sensor
+ - switch
ha_integration_type: integration
---
@@ -25,6 +28,7 @@ There is currently support for the following device types within Home Assistant:
- [Binary Sensor](#binary-sensor)
- [Sensor](#sensor)
+- [Switch](#switch)
{% include integrations/config_flow.md %}
@@ -65,6 +69,12 @@ The following sensors show the direction of energy:
- Powerwall Generator Export - Generator energy exported in kWh
- Powerwall Generator Import - Generator energy imported in kWh
+### Switch
+
+The following switches are added for each Powerwall:
+
+- Off-Grid operation - Take your Powerwall off-grid (simulate a grid outage)
+
### Device Info
- Model Number
diff --git a/source/_integrations/pvpc_hourly_pricing.markdown b/source/_integrations/pvpc_hourly_pricing.markdown
index fe2187f5a631..7e91863fab5c 100644
--- a/source/_integrations/pvpc_hourly_pricing.markdown
+++ b/source/_integrations/pvpc_hourly_pricing.markdown
@@ -43,43 +43,6 @@ In case you did nothing after the tariff change on 2021-06-01, both powers are e
You can add up to 2 sensors (one for each geographic zone) by adding them again through the integrations panel,
and you can change the sensor configuration anytime by going to the integration's options.
-### Advanced configuration
-
-PVPC Hourly Pricing allows manual configuration by adding a section to your `configuration.yaml`.
-
-```yaml
-# Set up electricity price sensors as a component:
-pvpc_hourly_pricing:
- - name: "PVPC"
- tariff: "2.0TD"
- power: 3.45
- power_p3: 4.6
- - name: "PVPC-CYM"
- tariff: "2.0TD (Ceuta/Melilla)"
-```
-
-{% configuration %}
-name:
- description: Custom name for the sensor.
- required: true
- type: string
-tariff:
- description: Electric tariff by geographic zone.
- required: true
- default: 2.0TD
- type: string
-power:
- description: Contracted electric power in kW.
- required: false
- default: 3.3
- type: float
-power_p3:
- description: Contracted electric power in kW for valley period (P3).
- required: false
- default: 3.3
- type: float
-{% endconfiguration %}
-
The sensor provides an hourly price for energy consumed, but the variable cost of energy is only one of the factors that add up to the electricity bill:
diff --git a/source/_integrations/qnap_qsw.markdown b/source/_integrations/qnap_qsw.markdown
index d37dc7a5d928..e5d2c43d4e57 100644
--- a/source/_integrations/qnap_qsw.markdown
+++ b/source/_integrations/qnap_qsw.markdown
@@ -39,10 +39,16 @@ Password:
The following *binary sensors* are created:
-| Condition | Description |
+| Binary Sensor | Description |
| :------------------ | :--------------------------------- |
| anomaly | Device anomaly. |
+The following *binary sensors* are created for each port (or LACP):
+
+| Binary Sensor | Description |
+| :------------------ | :--------------------------------- |
+| link | Link status. |
+
## Buttons
The following *buttons* are created:
@@ -55,13 +61,30 @@ The following *buttons* are created:
The following *sensors* are created:
-| Condition | Description |
+| Sensors | Description |
| :------------------ | :--------------------------------- |
| fan_1_speed | Fan 1 Speed. |
| fan_2_speed | Fan 2 Speed. |
+| ports | Number of used ports. |
+| rx | Total RX bytes. |
+| rx_errors | Total number of RX errors. |
+| rx_speed | Total RX speed. |
| temperature | Switch temperature. |
+| tx | Total TX bytes. |
+| tx_speed | Total TX speed. |
| uptime | Uptime seconds. |
+The following *sensors* are created for each port (or LACP):
+
+| Sensors | Description |
+| :------------------ | :--------------------------------- |
+| link_speed | Link speed. |
+| rx | RX bytes. |
+| rx_errors | Number of RX errors. |
+| rx_speed | RX speed. |
+| tx | TX bytes. |
+| tx_speed | TX speed. |
+
## Update
| Update | Description |
diff --git a/source/_integrations/rainbird.markdown b/source/_integrations/rainbird.markdown
index 829e3576cb08..cff1d64f344c 100644
--- a/source/_integrations/rainbird.markdown
+++ b/source/_integrations/rainbird.markdown
@@ -2,9 +2,11 @@
title: Rain Bird
description: Instructions on how to integrate your Rain Bird LNK WiFi Module within Home Assistant.
ha_category:
+ - Binary Sensor
- Irrigation
- Sensor
- Switch
+ha_config_flow: true
ha_release: 0.61
ha_iot_class: Local Polling
ha_codeowners:
@@ -13,6 +15,7 @@ ha_codeowners:
ha_domain: rainbird
ha_platforms:
- binary_sensor
+ - number
- sensor
- switch
ha_integration_type: integration
@@ -22,109 +25,43 @@ This `rainbird` integration allows interacting with [LNK WiFi](https://www.rainb
There is currently support for the following device types within Home Assistant:
-- [Sensor](#sensor)
+- [Binary Sensor](#binary-sensor)
+- [Number](#number)
- [Switch](#switch)
-## Configuration
+{% include integrations/config_flow.md %}
-To enable it, add the following to your `configuration.yaml` file:
+## Configuration Options
-```yaml
-# Example configuration.yaml entry
-rainbird:
- host: IP_ADDRESS_OF_MODULE
- password: YOUR_PASSWORD
- trigger_time: 360
-
-```
+The integration has a configuration option to change the default amount of time that the irrigation
+will run when turning on a zone switch (default is 6 minutes). This can be overridden with a service call (see below).
-{% configuration %}
-host:
- description: IP Address of the Module
- required: true
- type: string
-password:
- description: The password for accessing the module.
- required: true
- type: string
-trigger_time:
- description: Irrigation time. The time will be rounded down to whole minutes.
- required: true
- type: time
-zones:
- description: Dictionary of zone configurations
- required: false
- type: map
- keys:
- ZONE_NUMBER:
- description: Zone ID
- type: map
- keys:
- friendly_name:
- description: Friendly name to see in GUI
- required: false
- type: string
- trigger_time:
- description: Irrigation time. Seconds are ignored.
- required: false
- type: time
-{% endconfiguration %}
-
-
-More complex configuration using all possible features could look like this example:
-```yaml
-# Example configuration.yaml entry
-rainbird:
- - host: IP_ADDRESS_OF_MODULE
- password: YOUR_PASSWORD
- trigger_time:
- minutes: 6
- zones:
- 1:
- friendly_name: My zone 1
- trigger_time:
- minutes: 6
- 2:
- friendly_name: My zone 2
- trigger_time:
- minutes: 2
- - host: IP_ADDRESS_OF_ANOTHER_MODULE
- password: YOUR_ANOTHER_PASSWORD
- trigger_time: 0:06
- zones:
- 1:
- friendly_name: My zone 1
- trigger_time: 0:06
- 3:
- friendly_name: My zone 3
- trigger_time: 0:05
-```
-
-Please note that due to the implementation of the API within the LNK Module, there is a concurrency issue. For example, the Rain Bird app will give connection issues (like already a connection active).
-
+## Binary Sensor
-## Sensor
+The `rainsensor` sensor will tell if you if the device has detected rain.
-This `rainbird` sensor allows interacting with [LNK WiFi](https://www.rainbird.com/products/lnk-wifi-module) module of the Rain Bird Irrigation system in Home Assistant.
+## Number
-The integration adds `rainsensor` and `raindelay` sensors and their `binary_sensor` alternatives.
+The Rain Delay Number Entity lets you set and view the number of days, if any, the automatic irrigation schedule has been delayed.
## Switch
-This `rainbird` switch platform allows interacting with [LNK WiFi](https://www.rainbird.com/products/lnk-wifi-module) module of the Rain Bird Irrigation system in Home Assistant.
-
Switches are automatically added for all available zones of configured controllers.
## Services
-The Rain Bird switch platform exposes a service to start a single irrigation for a given duration.
+The integration exposes services to give additional control over a Rain Bird device.
+
+### `rainbird.start_irrigation`
+
+Start a Rain Bird zone for a set number of minutes. This service accepts a Rain Bird sprinkler
+zone switch entity and allows a custom duration unlike the switch.
-| Service | Description |
-| ------- | ----------- |
-| rainbird.start_irrigation | Set a duration state attribute for a switch and turn the irrigation on.|
-| rainbird.set_rain_delay | Set how long automatic irrigation is turned off.|
+| Service Data Attribute | Optional | Description |
+| ---------------------- | -------- | ----------------------------------------------------- |
+| `entity_id` | no | The Rain Bird Sprinkler zone switch to turn on. |
+| `duration` | no | Number of minutes for this zone to be turned on. |
-The service can be used as part of an automation script. For example:
```yaml
# Example configuration.yaml automation entry
@@ -136,6 +73,6 @@ automation:
action:
- service: rainbird.start_irrigation
data:
- entity_id: switch.sprinkler_1
+ entity_id: switch.rain_bird_sprinkler_1
duration: 5
```
diff --git a/source/_integrations/recollect_waste.markdown b/source/_integrations/recollect_waste.markdown
index e4f5194b8de2..ad999774d78e 100644
--- a/source/_integrations/recollect_waste.markdown
+++ b/source/_integrations/recollect_waste.markdown
@@ -10,12 +10,13 @@ ha_codeowners:
- '@bachya'
ha_config_flow: true
ha_platforms:
+ - calendar
- diagnostics
- sensor
ha_integration_type: service
---
-The `recollect_waste` integration allows you to track the next scheduled waste pickup and what type of waste from [ReCollect](https://recollect.net/waste-haulers/).
+The `recollect_waste` integration allows you to track the next scheduled waste pickup and what type of waste from [ReCollect Waste](https://recollect.net/waste-haulers/).
To use this integration, you must know both your ReCollect Place and Service IDs. In general, cities/municipalities that utilize ReCollect will give you a way to subscribe to a calendar with pickup dates. If you examine the iCal URL for this calendar, the Place and Service IDs are embedded in it:
diff --git a/source/_integrations/recorder.markdown b/source/_integrations/recorder.markdown
index 11c335cc4587..a6bc6c19cc2a 100644
--- a/source/_integrations/recorder.markdown
+++ b/source/_integrations/recorder.markdown
@@ -75,9 +75,9 @@ recorder:
default: 10
type: integer
commit_interval:
- description: How often (in seconds) the events and state changes are committed to the database. The default of `1` allows events to be committed almost right away without trashing the disk when an event storm happens. Increasing this will reduce disk I/O and may prolong disk (SD card) lifetime with the trade-off being that the logbook and history will lag. If this is set to `0` (zero), commit are made as soon as possible after an event is processed.
+ description: How often (in seconds) the events and state changes are committed to the database. The default of `5` allows events to be committed almost right away without trashing the disk when an event storm happens. Increasing this will reduce disk I/O and may prolong disk (SD card) lifetime with the trade-off being that the logbook and history will lag. If this is set to `0` (zero), commit are made as soon as possible after an event is processed.
required: false
- default: 1
+ default: 5
type: integer
exclude:
description: Configure which integrations should be excluded from recordings. ([Configure Filter](#configure-filter))
diff --git a/source/_integrations/renault.markdown b/source/_integrations/renault.markdown
index 8cabf016667a..c2a41532c5ea 100644
--- a/source/_integrations/renault.markdown
+++ b/source/_integrations/renault.markdown
@@ -13,6 +13,7 @@ ha_config_flow: true
ha_codeowners:
- '@epenet'
ha_domain: renault
+ha_quality_scale: platinum
ha_platforms:
- binary_sensor
- button
@@ -36,6 +37,24 @@ This integration provides the following platforms:
All vehicles linked to the account should then get added as devices, with sensors added as linked entity.
+## Buttons
+
+### Button `button.renault_start_charge`
+
+Start charging the vehicle.
+
+Note:
+
+- This button can be unavailable for your vehicle.
+
+### Button `button.renault_stop_charge`
+
+Stop charging the vehicle.
+
+Note:
+
+- This button can be unavailable for your vehicle.
+
## Services
### Service `renault.ac_start`
@@ -88,11 +107,3 @@ Notes:
},
]
```
-
-### Service `renault.charge_start`
-
-Start charge on vehicle.
-
- | Service data attribute | Required | Description |
- | ---------------------- | -------- | ----------- |
- | `vehicle`| yes | device_id of the vehicle |
diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown
index 5eebafa85070..9fc130040292 100644
--- a/source/_integrations/reolink.markdown
+++ b/source/_integrations/reolink.markdown
@@ -1,17 +1,19 @@
---
-title: Reolink NVR/camera
+title: Reolink IP NVR/camera
description: Instructions on how to integrate Reolink devices (NVR/cameras) into Home Assistant.
ha_category:
- Camera
-ha_iot_class: Local Polling
+ha_iot_class: Local Push
ha_release: 2023.1
ha_domain: reolink
ha_codeowners:
- '@starkillerOG'
ha_config_flow: true
ha_platforms:
- - Camera
+ - binary_sensor
+ - camera
ha_integration_type: integration
+ha_dhcp: true
---
The integration allows you to control [Reolink](https://reolink.com/) NVRs or cameras.
@@ -23,14 +25,28 @@ A Reolink user account with admin privileges is needed for the proper operation
{% include integrations/option_flow.md %}
{% configuration_basic %}
Protocol:
- description: Switch between RTSP or RTMP streaming protocol.
+ description: Switch between RTSP, RTMP or FLV streaming protocol.
{% endconfiguration_basic %}
## Camera streams
This integration creates a few camera entities, one for each stream type with different resolutions: Main, Sub, Ext, and Snapshots.
The Sub stream camera entity is enabled by default; the other streams are disabled by default.
-The snapshots stream provides a sequence of image snapshots giving very low latency at the cost of a very low frame rate; this can be used when the hi-res RTMP/RTSP video stream has too much lag.
+The Images stream provides a sequence of image snapshots giving very low latency at the cost of a very low frame rate; this can be used when the RTMP/RTSP/FLV video stream has too much lag.
+
+## Binary sensors
+
+Depending on the supported features of the camera binary sensors are added for:
+
+- Motion detection
+- Doorbell presses
+- AI person detection
+- AI vehicle detection
+- AI pet detection
+- AI face detection
+
+These sensors are polled every 60 seconds and receive ONVIF push events for immediate updates.
+Not all camera models generate ONVIF push events for all event types, some binary sensors might, therefore, only be polled.
## Tested models
@@ -42,6 +58,7 @@ The following models have been tested and confirmed to work:
- RLC-410W
- RLC-411
- RLC-420
+- RLC-510A
- RLC-511
- RLC-511W
- RLC-520
@@ -52,7 +69,9 @@ The following models have been tested and confirmed to work:
- RLC-820A
- RLC-823A
- RLN8-410 NVR
+- RLN16-410 NVR
- Reolink Duo Floodlight PoE
+- Reolink TrackMix PoE
- Reolink Video Doorbell (PoE and Wi-Fi)
Battery-powered cameras are not yet supported.
@@ -63,6 +82,6 @@ The following models are lacking the HTTP webserver API and can therfore not wor
## Reolink firmware limitations
-- The Reolink NVR only sends event-notifications if motion happens on the camera connected to the first (index "0") channel, therefore the binary sensors of all channels will only be updated when the first channel sees motion.
-- Reolink doorbell presses only generate ONVIF event notifications when the doorbell is directly connected to your network. The doorbell visitor binary sensor will not work when connecting the Reolink doorbell to an NVR.
+- The Reolink NVR only sends event-notifications if motion happens on the camera connected to the first (index "0") channel, therefore the binary sensors of all channels will only be updated when the first channel sees motion. Beta NVR firmware v3.0.0.211_23011204 fixes this issue, you can request beta firmware from reolink support, release firmware is expected in a few weeks.
+- Reolink doorbell presses only generate ONVIF event notifications when the doorbell is directly connected to your network. The doorbell visitor binary sensor will not work when connecting the Reolink doorbell to an NVR. Beta NVR firmware v3.0.0.211_23011204 fixes this issue, you can request beta firmware from reolink support, release firmware is expected in a few weeks.
- 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.
diff --git a/source/_integrations/rss_feed_template.markdown b/source/_integrations/rss_feed_template.markdown
index b09c2b38329f..5db2cffe80f4 100644
--- a/source/_integrations/rss_feed_template.markdown
+++ b/source/_integrations/rss_feed_template.markdown
@@ -44,7 +44,7 @@ feed_id:
required: true
type: string
title:
- description: The title of the feed, which is parsed as [template](/topics/templating/).
+ description: The title of the feed, which is parsed as [template](/docs/configuration/templating/).
required: false
type: template
items:
@@ -53,11 +53,11 @@ items:
type: list
keys:
title:
- description: The title of the item, which is parsed as [template](/topics/templating/).
+ description: The title of the item, which is parsed as [template](/docs/configuration/templating/).
required: false
type: template
description:
- description: The description of the item, which is parsed as [template](/topics/templating/).
+ description: The description of the item, which is parsed as [template](/docs/configuration/templating/).
required: false
type: template
{% endconfiguration %}
diff --git a/source/_integrations/ruuvi_gateway.markdown b/source/_integrations/ruuvi_gateway.markdown
new file mode 100644
index 000000000000..546f6eb7ef37
--- /dev/null
+++ b/source/_integrations/ruuvi_gateway.markdown
@@ -0,0 +1,31 @@
+---
+title: Ruuvi Gateway
+description: Support for Ruuvi Gateway devices acting as BLE remote scanners.
+ha_category:
+ - Sensor
+ha_release: '2023.2'
+ha_iot_class: Local Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@akx'
+ha_domain: ruuvi_gateway
+ha_dhcp: true
+ha_integration_type: integration
+---
+
+Integrates [Ruuvi Gateway](https://ruuvi.com/gateway/) devices as
+polling BLE remote scanners [via the `/history` endpoint][poll].
+
+## Setup
+
+Make sure to [enable Bearer Token authentication][poll] on the Ruuvi Gateway device
+(and take note of the token).
+
+You may also wish to enable scanning for _all_ BLE beacons (not just RuuviTags);
+be sure to set the "Use Ruuvi Cloud or/and a custom server and configure more settings"
+option on the Cloud Options setup page, and when you get to the "Bluetooth Scanning" page,
+select "All (including third party beacons)".
+
+{% include integrations/config_flow.md %}
+
+[poll]: https://docs.ruuvi.com/gw-examples/polling-mode
diff --git a/source/_integrations/rympro.markdown b/source/_integrations/rympro.markdown
new file mode 100644
index 000000000000..3e53b11ca292
--- /dev/null
+++ b/source/_integrations/rympro.markdown
@@ -0,0 +1,23 @@
+---
+title: Read Your Meter Pro
+description: Instructions on how to integrate water meters through Read Your Meter Pro.
+ha_category:
+ - Sensor
+ha_release: '2023.2'
+ha_iot_class: Cloud Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@OnFreund'
+ha_domain: rympro
+ha_platforms:
+ - sensor
+ha_integration_type: integration
+---
+
+This integration connects with a [Read Your Meter Pro](https://rym-pro.com/) account to get water meter reads into Home Assistant.
+
+{% include integrations/config_flow.md %}
+
+## Supported Platforms:
+
+- [Sensor](/integrations/sensor/)
diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown
index 2335a91ea447..e1dc768d2733 100644
--- a/source/_integrations/sensor.markdown
+++ b/source/_integrations/sensor.markdown
@@ -11,7 +11,7 @@ ha_codeowners:
ha_integration_type: entity
---
-Sensors are a basic platform component in Home Assistant. They monitor the states and conditions of a variety of entities. An entity can be many things. This can include a physical device like a motion sensor that reports the battery level, a web service that retrieves the weather temperature, a built-in function that calculates the sun's elevation relative to your GPS position, or even a custom sensor you may have created to report the free space on your laptop. These are all *things* reporting different types of information.
+Sensors are a basic platform component in Home Assistant. They monitor the states and conditions of a variety of entities. An entity can be many things. This can include a physical device like a motion sensor that reports the battery level, a web service that retrieves the weather temperature, a built-in function that calculates the sun's elevation relative to your GPS position, or even a custom sensor you may have created to report the free space on your laptop. These are all _things_ reporting different types of information.
Some of these sensors are built-in to Home Assistant, some are created automatically when you add an integration (see this [list](/integrations/#sensor)), and some can be created manually. The [Statistics](/integrations/statistics) and [Template](/integrations/template) sensors are two examples of the last case.
@@ -25,16 +25,16 @@ The type of data a sensor returns impacts how it is displayed in the frontend. T
- **atmospheric_pressure**: Atmospheric pressure in cbar, bar, hPa, inHg, kPa, mbar, Pa or psi
- **battery**: Percentage of battery that is left in %
- **carbon_dioxide**: Carbon Dioxide in CO2 (Smoke) in ppm
-- **carbon_monoxide**: Carbon Monoxide in CO (Gas CNG/LPG) in ppm
+- **carbon_monoxide**: Carbon Monoxide in CO (Gas CNG/LPG) in ppm
- **current**: Current in A, mA
- **data_rate**: Data rate in bit/s, kbit/s, Mbit/s, Gbit/s, B/s, kB/s, MB/s, GB/s, KiB/s, MiB/s or GiB/s
- **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB or YiB
- **date**: Date string (ISO 8601)
-- **distance**: Generic distance in km, m, cm, mm, mi, yd or in
-- **duration**: Duration in d, h, min or s
-- **energy**: Energy in Wh, kWh or MWh
+- **distance**: Generic distance in km, m, cm, mm, mi, yd, or in
+- **duration**: Duration in d, h, min, or s
+- **energy**: Energy in Wh, kWh, MWh, MJ, or GJ
- **enum**: Has a limited set of (non-numeric) states
-- **frequency**: Frequency in Hz, kHz, MHz or GHz
+- **frequency**: Frequency in Hz, kHz, MHz, or GHz
- **gas**: Gasvolume in m³, ft³ or CCF
- **humidity**: Percentage of humidity in the air in %
- **illuminance**: The current light level in lx
@@ -58,14 +58,14 @@ The type of data a sensor returns impacts how it is displayed in the frontend. T
- **sound_pressure**: Sound pressure in dB or dBA
- **speed**: Generic speed in ft/s, in/d, in/h, km/h, kn, m/s, mph or mm/d
- **sulphur_dioxide**: Concentration of sulphur dioxide in µg/m³
-- **temperature**: Temperature in °C or °F
+- **temperature**: Temperature in °C, °F or K
- **timestamp**: Datetime object or timestamp string (ISO 8601)
- **volatile_organic_compounds**: Concentration of volatile organic compounds in µg/m³
- **voltage**: Voltage in V, mV
-- **volume**: Generic volume in L, mL, gal, fl. oz., m³, ft³ or CCF
-- **water**: Water consumption in L, gal, m³, ft³ or CCF
-- **weight**: Generic mass in kg, g, mg, µg, oz, lb or st
-- **wind_speed**: Wind speed in ft/s, km/h, kn, m/s or mph
+- **volume**: Generic volume in L, mL, gal, fl. oz., m³, ft³, or CCF
+- **water**: Water consumption in L, gal, m³, ft³, or CCF
+- **weight**: Generic mass in kg, g, mg, µg, oz, lb, or st
+- **wind_speed**: Wind speed in ft/s, km/h, kn, m/s, or mph
diff --git a/source/_integrations/sfr_box.markdown b/source/_integrations/sfr_box.markdown
new file mode 100644
index 000000000000..09ca3788f717
--- /dev/null
+++ b/source/_integrations/sfr_box.markdown
@@ -0,0 +1,28 @@
+---
+title: SFR Box
+description: Instructions on how to integrate SFR Box into Home Assistant.
+ha_category:
+ - Sensor
+ha_release: 2023.2
+ha_iot_class: Local Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@epenet'
+ha_domain: sfr_box
+ha_platforms:
+ - binary_sensor
+ - button
+ - diagnostics
+ - sensor
+ha_integration_type: device
+---
+
+The SFR Box integration offers integration with the **SFR** broadband router.
+
+This integration provides the following platforms:
+
+- Binary Sensors - such as ADSL status.
+- Buttons - such as reboot.
+- Sensors - such as ADSL line status, attenuation, noise and data rate.
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown
index 9133d54f53c3..25d49d2a6293 100644
--- a/source/_integrations/shelly.markdown
+++ b/source/_integrations/shelly.markdown
@@ -289,4 +289,3 @@ Please check from the device Web UI that the configured server is reachable.
- Generation 1 "Shelly 4Pro" and "Shelly Sense" are not supported (devices based on old CoAP v1 protocol)
- Before set up, battery-powered devices must be woken up by pressing the button on the device.
- OTA update service does not support battery-powered devices
-
diff --git a/source/_integrations/snooz.markdown b/source/_integrations/snooz.markdown
index 5751f78bb1d5..85f256e01f4c 100644
--- a/source/_integrations/snooz.markdown
+++ b/source/_integrations/snooz.markdown
@@ -49,3 +49,61 @@ Fan speed percentage is mapped to the device volume level.
Speed percentages less than 10 have no effect - they all map to a value of 1 on the device.
+
+## Services
+
+### Service `snooz.transition_on`
+
+Transition the volume level over the specified duration. If the device is powered off, the transition will start at the lowest volume level.
+
+{% my developer_call_service badge service="snooz.transition_on" %}
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `duration` | yes | Number of seconds to transition to target volume.
+| `volume` | yes | Percentage volume level. If not specified, the volume on the device is used.
+
+#### Automation example
+
+```yaml
+automation:
+ - trigger:
+ - platform: time
+ at: "04:20:00"
+ action:
+ - service: snooz.transition_on
+ target:
+ entity_id: fan.snooz_abcd
+ data:
+ volume: 33
+ duration: 120
+```
+
+### Service `snooz.transition_off`
+
+Transition the volume level to the lowest setting over the specified duration, then power off the device.
+
+
+Once the transition completes, the volume level is restored to the value before the transition started.
+
+
+{% my developer_call_service badge service="snooz.transition_off" %}
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `duration` | yes | Number of seconds to complete the transition.
+
+#### Automation example
+
+```yaml
+automation:
+ - trigger:
+ - platform: time
+ at: "16:20:00"
+ action:
+ - service: snooz.transition_off
+ target:
+ entity_id: fan.snooz_abcd
+ data:
+ duration: 120
+```
diff --git a/source/_integrations/sql.markdown b/source/_integrations/sql.markdown
index 59e453c34fd0..54aca6e6fcf1 100644
--- a/source/_integrations/sql.markdown
+++ b/source/_integrations/sql.markdown
@@ -19,8 +19,68 @@ ha_integration_type: integration
The `sql` sensor platform enables you to use values from an [SQL](https://en.wikipedia.org/wiki/SQL) database supported by the [sqlalchemy](https://www.sqlalchemy.org) library, to populate a sensor state (and attributes).
This can be used to present statistics about Home Assistant sensors if used with the `recorder` integration database. It can also be used with an external data source.
+**This integration can be configured using both config flow and by YAML.**
+
{% include integrations/config_flow.md %}
+## Configuration by YAML
+
+To configure this sensor, define the sensor connection variables and a list of queries to your `configuration.yaml` file. A sensor will be created for each query.
+
+To enable it, add the following lines to your `configuration.yaml` file (example by required fields):
+
+{% raw %}
+```yaml
+# Example configuration.yaml
+sql:
+ - name: Sun state
+ query: >
+ SELECT *
+ FROM states
+ WHERE entity_id = 'sun.sun'
+ ORDER BY state_id
+ DESC LIMIT 1;
+ column: "state"
+```
+{% endraw %}
+
+{% configuration %}
+sql:
+ description: Integration.
+ required: true
+ type: map
+ keys:
+ 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)."
+ type: string
+ name:
+ description: The name of the sensor.
+ required: true
+ type: string
+ query:
+ description: An SQL QUERY string, should return 1 result at most.
+ required: true
+ type: string
+ column:
+ description: The field name to select.
+ required: true
+ type: string
+ unit_of_measurement:
+ description: Defines the units of measurement of the sensor, if any.
+ required: false
+ type: string
+ value_template:
+ description: Defines a template to extract a value from the payload.
+ required: false
+ type: template
+ unique_id:
+ description: Provide a unique id for this sensor.
+ required: false
+ type: string
+{% endconfiguration %}
+
## Information
See [supported engines](/integrations/recorder/#custom-database-engines) for which you can connect with this integration.
@@ -76,7 +136,7 @@ Use `db_size` as column for value.
Change `table_schema="homeassistant"` to the name that you use as the database name, to ensure that your sensor will work properly.
```sql
-SELECT table_schema "database", Round(Sum(data_length + index_length) / 1024, 1) "value" FROM information_schema.tables WHERE table_schema="homeassistant" GROUP BY table_schema;
+SELECT table_schema "database", Round(Sum(data_length + index_length) / POWER(1024,2), 1) "value" FROM information_schema.tables WHERE table_schema="homeassistant" GROUP BY table_schema;
```
Use `value` as column for value.
diff --git a/source/_integrations/ssdp.markdown b/source/_integrations/ssdp.markdown
index 7130818db77d..6c019bf08968 100644
--- a/source/_integrations/ssdp.markdown
+++ b/source/_integrations/ssdp.markdown
@@ -47,6 +47,6 @@ The following integrations are automatically discovered by the SSDP integration:
- [Sony Songpal](/integrations/songpal/)
- [Synology DSM](/integrations/synology_dsm/)
- [Ubiquiti UniFi](/integrations/unifi/)
- - [Universal Devices ISY994](/integrations/isy994/)
+ - [Universal Devices ISY/IoX](/integrations/isy994/)
- [UPnP](/integrations/upnp/)
- [WiLight](/integrations/wilight/)
diff --git a/source/_integrations/starlink.markdown b/source/_integrations/starlink.markdown
new file mode 100644
index 000000000000..ba26ea55308f
--- /dev/null
+++ b/source/_integrations/starlink.markdown
@@ -0,0 +1,57 @@
+---
+title: Starlink
+description: Instructions on how to integrate Starlink into Home Assistant.
+ha_category:
+ - Binary Sensor
+ - Button
+ - Network
+ - Sensor
+ - Switch
+ha_release: 2023.2
+ha_iot_class: Local Polling
+ha_config_flow: true
+ha_codeowners:
+ - '@boswelja'
+ha_domain: starlink
+ha_platforms:
+ - binary_sensor
+ - button
+ - sensor
+ - switch
+ha_integration_type: integration
+ha_quality_scale: silver
+---
+
+The Starlink integration allows you to integrate your [Starlink](https://www.starlink.com/) into Home Assistant.
+
+**Important:** If your Starlink is in bypass mode, you will need to open a route to it so that the local API can be accessed. Otherwise this integration will not work.
+
+{% include integrations/config_flow.md %}
+
+### Sensor
+
+- Ping - The ping that Starlink has measured, in ms
+- 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
+- Last boot time - The time Starlink was last turned on
+
+### Binary Sensor
+
+- 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"
+- 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
+- Mast near vertical - Whether Dishy is mounted straight
+- Motors stuck - Whether Dishy is unable to move
+- Thermal throttle - Whether Starlink has reduced performance to avoid overheating
+- Unexpected location - Whether Starlink has detected operation outside of its designated area
+
+### Button
+
+- Reboot - Reboots your Starlink system
+
+### Switch
+
+- Stowed - Controls whether Dishy is stowed
diff --git a/source/_integrations/stookwijzer.markdown b/source/_integrations/stookwijzer.markdown
new file mode 100644
index 000000000000..4b8837d71819
--- /dev/null
+++ b/source/_integrations/stookwijzer.markdown
@@ -0,0 +1,21 @@
+---
+title: Stookwijzer
+description: Instructions on how to use Stookwijzer data within Home Assistant
+ha_category:
+ - Environment
+ - Sensor
+ha_release: 2023.2
+ha_iot_class: Cloud Polling
+ha_codeowners:
+ - '@fwestenberg'
+ha_domain: stookwijzer
+ha_config_flow: true
+ha_platforms:
+ - diagnostics
+ - sensor
+ha_integration_type: service
+---
+
+The Stookwijzer integration queries the [Stookwijzer](https://www.stookwijzer.nu) API for windspeed and gets the air quality index from [Luchtmeetnet](https://www.luchtmeetnet.nl). Using these parameters, Stookwijzer advises people not to burn pallets or wood, or to use the barbecue. This can prevent health problems for people in the area.
+
+{% include integrations/config_flow.md %}
diff --git a/source/_integrations/switch.rest.markdown b/source/_integrations/switch.rest.markdown
index 1c85b923508a..d1b17c3e1272 100644
--- a/source/_integrations/switch.rest.markdown
+++ b/source/_integrations/switch.rest.markdown
@@ -50,12 +50,12 @@ timeout:
type: integer
default: 10
body_on:
- description: "The body of the POST request that commands the switch to become enabled. This value can be a [template](/topics/templating/)."
+ description: "The body of the POST request that commands the switch to become enabled. This value can be a [template](/docs/configuration/templating/)."
required: false
type: string
default: "ON"
body_off:
- description: "The body of the POST request that commands the switch to become disabled. This value can also be a [template](/topics/templating/)."
+ description: "The body of the POST request that commands the switch to become disabled. This value can also be a [template](/docs/configuration/templating/)."
required: false
type: string
default: "OFF"
@@ -94,7 +94,7 @@ Make sure that the URL matches exactly your endpoint or resource.
### Switch with templated value
-This example shows a switch that uses a [template](/topics/templating/) to allow Home Assistant to determine its state. In this example, the REST endpoint returns this JSON response with true indicating the switch is on.
+This example shows a switch that uses a [template](/docs/configuration/templating/) to allow Home Assistant to determine its state. In this example, the REST endpoint returns this JSON response with true indicating the switch is on.
```json
{"is_active": "true"}
diff --git a/source/_integrations/switchbee.markdown b/source/_integrations/switchbee.markdown
index 489a2ee61510..769a0bc66ded 100644
--- a/source/_integrations/switchbee.markdown
+++ b/source/_integrations/switchbee.markdown
@@ -8,7 +8,7 @@ ha_category:
- Light
- Switch
ha_release: '2022.10'
-ha_iot_class: Local Polling
+ha_iot_class: Local Push
ha_config_flow: true
ha_codeowners:
- '@jafar-atili'
diff --git a/source/_integrations/switchbot.markdown b/source/_integrations/switchbot.markdown
index 8087e3519c1f..f37e1c5a5894 100644
--- a/source/_integrations/switchbot.markdown
+++ b/source/_integrations/switchbot.markdown
@@ -5,9 +5,9 @@ ha_category:
- Binary Sensor
- Cover
- Light
+ - Lock
- Sensor
- Switch
- - Lock
ha_release: 0.78
ha_iot_class: Local Push
ha_codeowners:
@@ -27,7 +27,6 @@ ha_platforms:
- lock
- sensor
- switch
- - lock
ha_config_flow: true
ha_integration_type: integration
---
diff --git a/source/_integrations/synology_dsm.markdown b/source/_integrations/synology_dsm.markdown
index 8ed6c549f182..0f1625639ddc 100644
--- a/source/_integrations/synology_dsm.markdown
+++ b/source/_integrations/synology_dsm.markdown
@@ -23,9 +23,10 @@ ha_platforms:
- switch
- update
ha_integration_type: integration
+ha_zeroconf: true
---
-The Synology DSM integration provides access to various statistics from your [Synology NAS](https://www.synology.com) (_DSM 5.x and higher_) as well as cameras from the [Surveillance Station](https://www.synology.com/en-us/surveillance).
+The Synology DSM integration provides access to various statistics from your [Synology NAS](https://www.synology.com) (_DSM 5.x and higher_) as well as cameras from the [Surveillance Station](https://www.synology.com/surveillance).
{% include integrations/config_flow.md %}
@@ -52,7 +53,7 @@ Due to the nature of the Synology DSM API, it is required to grant the user admi
When creating the user, it is possible to deny access to all locations and applications. By doing this, the user will not be able to login to the web interface or view any of the files on the Synology NAS. It is still able to read the utilization and storage information using the API.
-If you want to add cameras from [Surveillance Station](https://www.synology.com/en-us/surveillance), the user needs application permission for [Surveillance Station](https://www.synology.com/en-us/surveillance).
+If you want to add cameras from [Surveillance Station](https://www.synology.com/surveillance), the user needs application permission for [Surveillance Station](https://www.synology.com/surveillance).
### If you utilize 2-Step Verification or Two Factor Authentication (2FA) with your Synology NAS
@@ -110,11 +111,11 @@ Similar to the [normal disk sensors](#disk-sensors), there are binary sensors re
## Switch
-A switch is available to enable/disable the [Surveillance Station](https://www.synology.com/en-us/surveillance) Home mode.
+A switch is available to enable/disable the [Surveillance Station](https://www.synology.com/surveillance) Home mode.
## Cameras
-For each camera added in [Surveillance Station](https://www.synology.com/en-us/surveillance), a camera will be created in Home Assistant.
+For each camera added in [Surveillance Station](https://www.synology.com/surveillance), a camera will be created in Home Assistant.
## Buttons
diff --git a/source/_integrations/synology_srm.markdown b/source/_integrations/synology_srm.markdown
index 9ad193bcb402..7149a8f42593 100644
--- a/source/_integrations/synology_srm.markdown
+++ b/source/_integrations/synology_srm.markdown
@@ -13,7 +13,7 @@ ha_platforms:
ha_integration_type: integration
---
-This platform allows you to detect presence by looking at connected devices to a [Synology SRM](https://www.synology.com/en-us/srm) router.
+This platform allows you to detect presence by looking at connected devices to a [Synology SRM](https://www.synology.com/srm) router.
## Configuration
diff --git a/source/_integrations/thread.markdown b/source/_integrations/thread.markdown
new file mode 100644
index 000000000000..118d689e06b4
--- /dev/null
+++ b/source/_integrations/thread.markdown
@@ -0,0 +1,22 @@
+---
+title: Thread
+ha_category:
+ - Other
+ha_release: 2023.2
+ha_codeowners:
+ - '@home-assistant/core'
+ha_domain: thread
+ha_iot_class: Local Polling
+ha_integration_type: service
+ha_config_flow: true
+---
+
+The Thread integration helps you track the different Thread networks in your home and helps you manage their credentials. It is currently a work in progress.
+
+Thread is a low-power mesh networking standard which allows users to connect their devices within a home network. It uses the same RF technology as Zigbee, but provides IP connectivity similar to Wi-Fi. Unlike Zigbee, Thread does not allow to control devices directly: It is just a communication protocol. A higher level protocol such as Matter or HomeKit is required to control Thread enabled devices. Thread allows devices to communicate with each other without the need for a central gateway or router. This makes it ideal for home automation, where a large number of devices may need to be connected.
+
+To connect a Thread network to Home Assistant, Thread Border Routers (TBRs) are used. TBRs are devices that bridge the Thread network to a local Wi-Fi or Ethernet network. To add a TBR to Home Assistant, you can use our [Home Assistant Yellow](/yellow/) hub or the [Home Assistant SkyConnect](/skyconnect/) Zigbee/Thread stick.
+
+Home Assistant communicates with TBRs over the local network. This means that TBRs do not have to be physically attached to Home Assistant to be used. You might already have a TBR as part of other products in your home, like a Google Nest Hub Gen 2 or Apple HomePod Mini. Each vendor forms their own network when you start using their products, so you can end up having a Home Assistant, an Apple, and a Google Thread network in your home. These are all separate networks using different credentials, which prevents devices to roam between TBRs.
+
+It is possible to align credentials for TBRs from different vendors and have them form a single network together. This allows you to freely move devices between rooms without losing connectivity. To do this, you need to make sure that all TBRs use the same credentials.
diff --git a/source/_integrations/torque.markdown b/source/_integrations/torque.markdown
index 59362f055d90..5015d4c64ff1 100644
--- a/source/_integrations/torque.markdown
+++ b/source/_integrations/torque.markdown
@@ -4,7 +4,7 @@ description: Instructions on how to integrate Torque sensors into Home Assistant
ha_category:
- Car
ha_release: '0.10'
-ha_iot_class: Cloud Polling
+ha_iot_class: Local Push
ha_domain: torque
ha_platforms:
- sensor
diff --git a/source/_integrations/universal.markdown b/source/_integrations/universal.markdown
index a74f58b05ab0..fcc49c782568 100644
--- a/source/_integrations/universal.markdown
+++ b/source/_integrations/universal.markdown
@@ -71,7 +71,7 @@ children:
required: false
type: list
state_template:
- description: "A [template](/topics/templating/) can be specified to render the state of the media player. In this way, the state may depend on entities that are not themselves media players, like switches or input booleans."
+ description: "A [template](/docs/configuration/templating/) can be specified to render the state of the media player. In this way, the state may depend on entities that are not themselves media players, like switches or input booleans."
required: false
type: template
commands:
diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown
index fa0eb95ef2f4..c6af67994ed1 100644
--- a/source/_integrations/vacuum.mqtt.markdown
+++ b/source/_integrations/vacuum.mqtt.markdown
@@ -86,7 +86,7 @@ charging_topic:
required: false
type: string
cleaning_template:
- description: Defines a [template](/topics/templating/) to define the cleaning state of the vacuum. This is required if `cleaning_topic` is set.
+ 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
cleaning_topic:
@@ -98,7 +98,7 @@ command_topic:
required: false
type: string
docked_template:
- description: Defines a [template](/topics/templating/) to define the docked state of the vacuum. This is required if `docked_topic` is set.
+ 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
docked_topic:
@@ -121,7 +121,7 @@ entity_category:
type: string
default: None
error_template:
- description: Defines a [template](/topics/templating/) to define potential error messages emitted by the vacuum. This is required if `error_topic` is set.
+ 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
error_topic:
@@ -133,7 +133,7 @@ fan_speed_list:
required: false
type: [string, list]
fan_speed_template:
- description: Defines a [template](/topics/templating/) to define the fan speed of the vacuum. This is required if `fan_speed_topic` is set.
+ 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
fan_speed_topic:
diff --git a/source/_integrations/venstar.markdown b/source/_integrations/venstar.markdown
index a30e68c6b8a7..28a1935d284f 100644
--- a/source/_integrations/venstar.markdown
+++ b/source/_integrations/venstar.markdown
@@ -39,6 +39,7 @@ Currently supported functionality:
- Remote temperature sensors
- Thermostat alerts (Filter replacement/etc)
- Reading IAQ and CO2 levels (on supported devices, e.g. T3950, only)
+- Reading the current schedule state (morning/day/evening/night/inactive)
The following values are supported for the preset_mode state attribute:
diff --git a/source/_integrations/webostv.markdown b/source/_integrations/webostv.markdown
index 13dc3b5d31b7..bba9429e366c 100644
--- a/source/_integrations/webostv.markdown
+++ b/source/_integrations/webostv.markdown
@@ -7,7 +7,6 @@ ha_category:
ha_iot_class: Local Push
ha_release: 0.18
ha_codeowners:
- - '@bendavid'
- '@thecode'
ha_domain: webostv
ha_config_flow: true
diff --git a/source/_integrations/whirlpool.markdown b/source/_integrations/whirlpool.markdown
index ef781b8a7517..18423811f097 100644
--- a/source/_integrations/whirlpool.markdown
+++ b/source/_integrations/whirlpool.markdown
@@ -1,34 +1,53 @@
---
-title: Whirlpool Sixth Sense
-description: Instructions on how to integrate Whirlpool 6th Sense Live appliances with Home Assistant.
+title: Whirlpool Appliances
+description: Instructions on how to integrate Whirlpool appliances with Home Assistant.
ha_category:
- Climate
-ha_release: '2021.10'
+ - Sensor
+ha_release: '2022.10'
ha_iot_class: Cloud Push
ha_config_flow: true
ha_codeowners:
- '@abmantis'
+ - '@mkmer'
ha_domain: whirlpool
ha_platforms:
- climate
-ha_integration_type: integration
+ - sensor
+ha_integration_type: hub
---
-The `whirlpool` integration integrates Whirlpool 6th Sense Live appliances into Home Assistant.
+The `whirlpool` integration integrates Whirlpool 6th Sense Live, and Whirlpool/Maytag Washer and Dryer appliances into Home Assistant.
There is currently support for the following device types within Home Assistant:
+- [Supported hardware](#supported-hardware)
+- [Sensor](#sensor)
- [Climate](#climate)
## Supported hardware
The following air conditioners are confirmed to be working, but other models that use the 6th Sense Live application may also work:
+Climate:
+
- SPIW309A2WF/SPIW312A2WF
- SPIW409A2WF
+Washer:
+
+- WTW6120HW2
+
+Dryer:
+
+- Not confirmed
+
{% include integrations/config_flow.md %}
+## Sensor
+
+The `whirlpool` sensor platform integrates Whirlpool Washer and Dryer systems into Home Assistant, allowing views of the machine state, time remaining and the "wash & go" tank fill status as sensors for each device.
+
## Climate
The `whirlpool` climate platform integrates Whirlpool air conditioning systems into Home Assistant, allowing control of the appliance trough the user interface. The current inside temperature is also displayed on the thermostat card.
diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown
index 117272d51b0d..8efa95fe3d49 100644
--- a/source/_integrations/xiaomi_miio.markdown
+++ b/source/_integrations/xiaomi_miio.markdown
@@ -1615,7 +1615,7 @@ Sensor Dirty Left*:
Current Clean Time:
description: The current cleaning time of the vacuum. If the vacuum is not cleaning, this sensor will have the same value as the "Last Clean Duration" sensor.
Current Clean Area:
- description: The current area that has been cleaned. If the vacuum is not cealning, this sensor will have the same value as the "Last Clean Area" sensor.
+ description: The current area that has been cleaned. If the vacuum is not cleaning, this sensor will have the same value as the "Last Clean Area" sensor.
Last Clean Area*:
description: The last cleaned area in square meters
Last Clean Duration*:
diff --git a/source/_integrations/zeversolar.markdown b/source/_integrations/zeversolar.markdown
new file mode 100644
index 000000000000..e738e2bc642b
--- /dev/null
+++ b/source/_integrations/zeversolar.markdown
@@ -0,0 +1,34 @@
+---
+title: Zeversolar
+description: Instructions on how to configure the Zeversolar integration within Home Assistant
+ha_category:
+ - Environment
+ha_release: 2023.2
+ha_iot_class: Local Polling
+ha_domain: zeversolar
+ha_platforms:
+ - sensor
+ha_config_flow: true
+ha_integration_type: device
+ha_codeowners:
+ - '@kvanzuijlen'
+---
+
+The Zeversolar integration uses the local device IP to get information like the current power and
+today's total energy production.
+This integration allows you to collect and save data providig a historical overview of your Zeversolar
+production.
+
+## Prerequisites
+
+You need a Zeversolar inverter connected to your solar panels and Wi-Fi. Furthermore, you need to
+get the Zeversolar IP address.
+
+{% include integrations/config_flow.md %}
+
+## Sensor Types
+
+When configured, the integration will create two sensors for each configured inverter:
+
+- Energy today, in `kWh` (Kilowatt-hour)
+- Current power, in `W` (Watts)
diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown
index e3ac18ed057b..af0efff6e215 100644
--- a/source/_integrations/zha.markdown
+++ b/source/_integrations/zha.markdown
@@ -144,7 +144,7 @@ a new pop-up asking for a radio type. In the pop-up:
| Radio Type | Zigbee Radio Hardware |
| ------------- | ------------- |
-| `ezsp` | Silicon Labs EmberZNet protocol (e.g., Elelabs, HUSBZB-1, Telegesis) |
+| `ezsp` | Silicon Labs EmberZNet protocol (e.g., Home Assistant SkyConnect, Elelabs, HUSBZB-1, Telegesis) |
| `deconz` | dresden elektronik deCONZ protocol (e.g., ConBee I/II, RaspBee I/II) |
| `znp` | Texas Instruments (e.g., CC253x, CC26x2, CC13x2) |
| `zigate` | ZiGate Serial protocol (e.g., ZiGate USB-TTL, PiZiGate, ZiGate WiFi) |
@@ -433,11 +433,11 @@ Tip to new users is that, while there is no official list of supported devices,
### ZHA exception and deviation handling
-The ZHA implementation in Home Assistant relies on a library called "[ZHA Device Handlers](https://github.com/zigpy/zha-device-handlers)" to resolve issues with Zigbee devices that do not fully conform with the Zigbee standards. The few devices that deviate from the Zigbee specifications set by the [Zigbee Alliance](https://zigbeealliance.org) may therefore require proper bug reports with debug logs from users to assistant the developers in writing custom [ZHA Device Handlers](https://github.com/zigpy/zha-device-handlers/blob/dev/README.md) for all of a device functions to work properly with the ZHA integration.
+Home Assistant's ZHA integration already supports most standard device types out-of-the-box as long as they follow the official Zigbee specifications, but for devices that manufacturers have not properly not fully Zigbee compatible, the ZHA integration has implemented a library called "[ZHA Device Handlers (also known as "zha-quirk")](https://github.com/zigpy/zha-device-handlers)" that handle and resolve compliance issues via custom conversion/translation of Zigbee parameters (clusters and attributes) for specific devices which do not conform with the Zigbee standards.
+
+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.
-Such a custom "ZHA Device Handler" are Python scripts that internally are also referred to as a "quirk" because they fix "quirks", like deviations from the standard specifications. ZHA Device Handles do this by transparently, acting as a translator, translating and converting non-compliant device messages and instead present them to the application as coming from a virtual compliant device. These ZHA Device Handlers for Home Assistant can thus be used to parse custom messages to and from Zigbee devices. The ZHA Device Handlers that are made can then be reused by all users in future versions of Home Assistant.
-The custom quirks implementations for zigpy implemented as ZHA Device Handlers for Home Assistant are a similar concept to that of [Hub-connected Device Handlers for the SmartThings Classics platform](https://docs.smartthings.com/en/latest/device-type-developers-guide/) as well as that of [Zigbee-Herdsman Converters (formerly Zigbee-Shepherd Converters) as used by Zigbee2mqtt](https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html), meaning they are each virtual representations of a physical device that expose additional functionality that is not provided out-of-the-box by the existing integration between these platforms.
### Reporting issues
diff --git a/source/_integrations/zwave_me.markdown b/source/_integrations/zwave_me.markdown
index 7be7c64fd06d..27654fbd5740 100644
--- a/source/_integrations/zwave_me.markdown
+++ b/source/_integrations/zwave_me.markdown
@@ -20,6 +20,7 @@ ha_config_flow: true
ha_codeowners:
- '@lawfulchaos'
- '@Z-Wave-Me'
+ - '@PoltoS'
ha_domain: zwave_me
ha_platforms:
- binary_sensor
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 c27d93d22a5f..d973f3bc039a 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
@@ -42,7 +42,7 @@ We want to make it as easy as possible to use Assist. To enable this for Android
[Assist on Android Wear documentation.](https://next.home-assistant.io/docs/assist/android/)
-_The new tile is currently available in the [Android beta](https://play.google.com/apps/testing/io.homeassistant.companion.android) and will be part of the next Android release._
+_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)._
@@ -52,7 +52,7 @@ For Apple devices we have been able to create a fully hands-free experience by i
[Assist via Siri and Apple Shortcuts documentation.](https://next.home-assistant.io/docs/assist/apple/)
-_The Assist shortcut will be available in the Mac and iOS beta channel today and will be part of the next release for iOS and Mac._
+_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._
diff --git a/source/_posts/2023-02-01-release-20232.markdown b/source/_posts/2023-02-01-release-20232.markdown
new file mode 100644
index 000000000000..43df3d5fb205
--- /dev/null
+++ b/source/_posts/2023-02-01-release-20232.markdown
@@ -0,0 +1,1114 @@
+---
+layout: post
+title: "2023.2: How can I Assist?"
+description: "Meet: Assist! Our new assistant! Furthermore, an even tighter integration with ESPHome, streaming history graphs, sensor groups, and more than 15 new integrations!"
+date: 2023-02-01 00:00:00
+date_formatted: "February 1, 2023"
+author: Franck Nijhof
+author_twitter: frenck
+comments: true
+categories:
+ - Release-Notes
+ - Core
+og_image: /images/blog/2023-02/social.png
+---
+
+
+
+Home Assistant Core 2023.2! 🎉
+
+This release covers the first month of development of 2023, and it is setting
+one heck of a high bar for the rest of the year! 😅
+
+Undoubtedly, the most spectacular features are related to the
+[first chapter of Year of the Voice](/blog/2023/01/26/year-of-the-voice-chapter-1/). 🎙️
+It is hard to sum up all of this in this release blog, so I'm not even going
+to try doing it in this introduction, but holy mother of smart homes: this is
+exciting stuff! 😮
+
+My personal favorite this release: huge steps into an even tighter integration
+with our amazing sister project: [ESPHome](https://esphome.io). Creating
+and maintaining your own secure DIY IoT devices just became a lot easier.
+
+And since we are talking about awesomeness, have you noticed the large amount
+of logos in the release image above? So many new integrations! 🤩
+
+Enjoy the release!
+
+../Frenck
+
+_PS: Just a reminder that valentine's day is coming up. Be sure to share the love! ❤️_
+
+
+
+- [Meet: Assist!](#meet-assist)
+- [Streaming history](#streaming-history)
+- [Grouping sensors](#grouping-sensors)
+- [Now even tighter integrated with ESPHome](#now-even-tighter-integrated-with-esphome)
+- [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.2.1 - February 2](#release-202321---february-2)
+- [Release 2023.2.2 - February 4](#release-202322---february-4)
+- [Release 2023.2.3 - February 7](#release-202323---february-7)
+- [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=S3XRVsqRX9k) 1 February 2023, at 12:00 PST / 21:00 CET!
+
+
+
+## Meet: Assist!
+
+It's [Home Assistant's Year of the Voice](/blog/2022/12/20/year-of-voice/), and
+it's our goal to let users control Home Assistant in their own language.
+Together with the Home Assistant community, we have been hard at work building
+the foundation for this.
+
+Today we like you to meet:
+
+
+
+ Assist
+allows you to use natural language to control Home Assistant. It is powered by
+[Hassil](https://github.com/home-assistant/hassil) and the sentences
+(contributed by 112! people) from the
+[Home Assistant Intents](https://home-assistant.github.io/intents/) project.
+
+We believe technology is meant to be played with, and projects should be
+usable as soon as possible. Together with the community, we can then iterate
+and refine. That's why today, we're delivering a basic experience supporting
+a stunning 22! languages that work with Assist.
+
+Go ahead, it is enabled by default; just tap the new Assist icon
+
+at the top right of your dashboard to start using it.
+
+Oh, and we are also releasing some fun stuff we've cooked up along the way!
+[Read more about Assist](/docs/assist/) and other released voice features in the
+[Chapter 1: Assist](/blog/2023/01/26/year-of-the-voice-chapter-1/) blogpost
+and a [video presentation (including live demos) on YouTube](https://www.youtube.com/live/ixgNT3RETPg).
+
+
+
+## Streaming history
+
+History cards now update live! We now stream the state changes while they are
+happening and update the graphs in real-time 😲
+
+
+
+These history cards now show live power usage, while I'm brewing a cup of coffee.
+
+
+But this isn't just limited to history cards, your
+{% my history title="history dashboard" %} is now live too!
+
+As a result of this all, we can now write less frequently to the database in our
+recorder. It took years of changes to get us to this point (thanks [@bdraco] 🙏).
+It greatly reduces resource usage and increases storage lifetimes significantly.
+The previously introduced live logbook and now the live history were the
+last pieces that made this possible.
+
+As a side-effect, it should also resolve the authentication errors some people
+experienced re-opening the iOS companion app when using history cards.
+
+## Grouping sensors
+
+The [group helper](/integrations/group) now supports sensors too! Sensor groups
+can combine entities with a numeric state, like [sensors](/integrations/sensor),
+[number](/integrations/number), and [number helpers](/integrations/input_number)
+entities.
+
+
+
+{% my config_flow_start badge domain="group" %}
+
+This feature is a revised, improved, and more logical version of the
+"Min/Max" integration / "Combine the state of several sensors" helper.
+It is likely we are going to replace those with this new sensor group
+in the future.
+
+Compared to those previously mentioned methods, the sensor groups have the
+additional options to hide their member entities and the option to ignore
+sensors that currently are not in a numeric state (i.e., currently "unavailable"
+or "unknown").
+
+## Now even tighter integrated with ESPHome
+
+[ESPHome](https://esphome.io) already works really well with Home Assistant.
+Yet, this release makes it even better!
+
+If you are using the ESPHome add-on, we have some great improvements for you.
+The add-on and Home Assistant will now communicate with each other, bringing
+in many new features.
+
+When you set up a new device in ESPHome and next add it to Home Assistant,
+they will be able to exchange encryption keys. Removing the need for you to
+find, copy & paste those. Just a single click and the setup is done! 🚀
+
+But that is not all. What is really mind-blowing, is that the ESPHome
+integration will now provide update entities when using the add-on!
+
+
+
+Right now, the update entities will only indicate if a device needs updating.
+However, when the next major release of ESPHome (2023.2) becomes available,
+it will support updating them too! Yes, at that point, you can update your
+ESPHome devices directly from Home Assistant and even automate it!
+
+Also, ESPHome is deprecating the old password-based authentication for its
+API in favor of the more secure encryption key. If one of your ESPHome devices
+is still using a plain password, Home Assistant will notify you by creating
+an issue in your {% my repairs title="Repairs dashboard" %}.
+
+
+
+We've also prepared for the next release of ESPHome (2023.2), in which you can
+add a friendly, more human name to your ESPHome devices. Home Assistant will
+pick those up, making your ESPHome devices look better out-of-the-box!
+
+## Other noteworthy changes
+
+There is much more juice in this release; here are some of the other
+noteworthy changes this release:
+
+- You can now add aliases to your areas too! Our new Assist feature
+ leverages this.
+- Got an energy sensor in `Wh`, but you'd like it to be `kWh`? You can now
+ change the units of energy sensors in the entity settings.
+- Each entity in the frontend has its own color, which is based on the current
+ entity state. We now have [officially added support](/integrations/frontend/#state-color)
+ for themes to customize these.
+- The most awesome integration of all, got even better. [@Lash-L] added support
+ for the battery state of your [Oral-B] toothbrush!
+- The automations & scripts UI now support selecting other entities for
+ above/below in the numeric state conditions & triggers. Thanks, [@karwosts]!
+- The [Reolink] integration now supports FLV streams, cameras can be discovered
+ on the network, but more importantly: binary sensors! For things
+ like motion, person, vehicle detection, and... Doorbell presses!
+ Thanks, [@starkillerOG]!
+- There is now a [service] that allows for the creation of calendar events. So,
+ you can now automate events to be added to your calendars! Amazing, [@allenporter]!
+- When selecting multiple entities from a list in the UI, it will now exclude
+ already added entities. No more accidentally added duplicates! Thanks, [@piitaya]!
+- [@Kane610] added PoE power sensors to the [UniFi Network] integrations, nice!
+- The [Tile card] now has a vertical option! Great, [@TheZoker]!
+- [Jellyfin] now works with TV shows in the media browser. Thanks, [@j-stienstra]!
+- We have bumped the CHIP/Matter SDK version used by our [Matter] implementation
+ to 1.0.0.2, which [contains many fixes].
+- From the Month of "What the heck?": Old-style [groups] can now remove entities
+ from the group using the `group.set` service. Thanks, [@gjohansson-ST]!
+- You might have noticed a [Thread] and an [Open Thread Border Router] integration
+ being added to this release. These are currently not for active use but for
+ initial early development.
+- The experimental multi-pan feature has been enabled again. Allowing to run
+ both Zigbee and Thread using the single radio found in both Home Assistant
+ Yellow and Home Assistant SkyConnect.
+- The following integrations now reached a [Platinum] level on the
+ [integration quality scale]:
+ - [Renault] excellent job [@epenet]!
+ - [HomeWizard Energy] awesome work [@DCSBL]!
+
+[@allenporter]: https://github.com/allenporter
+[@DCSBL]: https://github.com/DCSBL
+[@epenet]: https://github.com/epenet
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@j-stienstra]: https://github.com/j-stienstra
+[@Kane610]: https://github.com/Kane610
+[@karwosts]: https://github.com/karwosts
+[@Lash-L]: https://github.com/Lash-L
+[@piitaya]: https://github.com/piitaya
+[@starkillerOG]: https://github.com/starkillerOG
+[@TheZoker]: https://github.com/TheZoker
+[groups]: /integrations/group#old-style-groups
+[HomeWizard Energy]: /integrations/homewizard
+[integration quality scale]: /docs/quality_scale/
+[Jellyfin]: /integrations/jellyfin
+[Matter]: /integrations/matter
+[Open Thread Border Router]: /integrations/otbr
+[Oral-B]: /integrations/oralb
+[Platinum]: /docs/quality_scale/#platinum-
+[Renault]: /integrations/renault
+[Reolink]: /integrations/reolink
+[service]: /integrations/calendar/#services
+[contains many fixes]: https://github.com/project-chip/connectedhomeip/releases/tag/v1.0.0.2
+[Thread]: /integrations/thread
+[Tile card]: /dashboards/tile/
+[UniFi Network]: /integrations/unifi
+
+## New Integrations
+
+We welcome the following new integrations in this release:
+
+- **[EnergyZero]**, added by [@klaasnicolaas]
+ Retrieves dynamic (hourly) energy & gas prices from the Dutch utility company
+ EnergyZero.
+
+- **[EufyLife]**, added by [@bdr99]
+ Integrate Eufy smart scales over Bluetooth.
+
+- **[Everything but the Kitchen Sink]**, added by [@emontnemery]
+ This is a test integration, which provides various odd and obscure entities.
+ It can be helpful for development purposes, but generally no use otherwise.
+
+- **[Google Mail]**, added by [@tkdrob]
+ Provides services to manage your Google Mail auto-response and provides
+ a notification service to send (or draft) emails.
+
+- **[LD2410 BLE]**, added by [@930913]
+ Integrates a [$4 LD2410 Bluetooth mmWave sensor], which works with our
+ Bluetooth proxies!
+
+- **[Mopeka]**, added by [@bdraco]
+ Works with your Mopeka BLE propane tank monitors.
+
+- **[OpenAI Conversation]**, added by [@balloob]
+ OpenAI integration that uses GPT-3 to showcase replacing the Home Assistant
+ conversation agent. Note: It cannot control anything in your home.
+
+- **[Read Your Meter Pro]**, added by [@OnFreund]
+ Pull in your water usage/meter readings from your Read Your Meter Pro account.
+
+- **[Ruuvi Gateway]**, added by [@akx]
+ Integrates the Ruuvi Gateway that reads your Ruuvi sensors.
+
+- **[SFR Box]**, added by [@epenet]
+ Offers integration with the SFR broadband routers.
+
+- **[Starlink]**, added by [@boswelja]
+ Starlink is a satellite internet constellation operated by SpaceX.
+ Integrate your Starlink dish with Home Assistant.
+
+- **[Stookwijzer]**, added by [@fwestenberg]
+ Stookwijzer advises wether to burn pallets or wood, or to
+ use the barbecue. This can prevent health problems for people in the area
+ (NL only).
+
+- **[Zeversolar]**, added by [@kvanzuijlen]
+ Get power and energy information from your Zeversolar solar inverter locally.
+
+This release also has some new virtual integrations. Virtual integrations
+are stubs that are handled by other (existing) integrations to help with
+findability. These are new:
+
+- **[ANWB Energie]** provided by [EnergyZero], added by [@klaasnicolaas]
+- **[Energie VanOns]** provided by [EnergyZero], added by [@klaasnicolaas]
+- **[Mijndomein Energie]** provided by [EnergyZero], added by [@klaasnicolaas]
+- **[Fire TV]** provided by [Android TV], added by [@jrieger]
+
+[@930913]: https://github.com/930913
+[@akx]: https://github.com/akx
+[@balloob]: https://github.com/balloob
+[@bdr99]: https://github.com/bdr99
+[@bdraco]: https://github.com/bdraco
+[@boswelja]: https://github.com/boswelja
+[@emontnemery]: https://github.com/emontnemery
+[@epenet]: https://github.com/epenet
+[@fwestenberg]: https://github.com/fwestenberg
+[@jrieger]: https://github.com/jrieger
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@kvanzuijlen]: https://github.com/kvanzuijlen
+[@OnFreund]: https://github.com/OnFreund
+[@tkdrob]: https://github.com/tkdrob
+[$4 LD2410 Bluetooth mmWave sensor]: https://www.aliexpress.com/item/1005004351593073.html
+[Android TV]: /integrations/androidtv
+[ANWB Energie]: /integrations/anwb_energie
+[Energie VanOns]: /integrations/energie_vanons
+[EnergyZero]: /integrations/energyzero
+[EufyLife]: /integrations/eufylife_ble
+[Everything but the Kitchen Sink]: /integrations/kitchen_sink
+[Fire TV]: /integrations/fire_tv
+[Google Mail]: /integrations/google_mail
+[LD2410 BLE]: /integrations/ld2410_ble
+[Mijndomein Energie]: /integrations/mijndomein_energie
+[Mopeka]: /integrations/mopeka
+[OpenAI Conversation]: /integrations/openai_conversation
+[Read Your Meter Pro]: /integrations/rympro
+[Ruuvi Gateway]: /integrations/ruuvi_gateway
+[SFR Box]: /integrations/sfr_box
+[Starlink]: /integrations/starlink
+[Stookwijzer]: /integrations/stookwijzer
+[Zeversolar]: /integrations/zeversolar
+
+## Integrations now available to set up from the UI
+
+The following integrations are now available via the Home Assistant UI:
+
+- **[Rain Bird]**, done by [@allenporter]
+- **[IMAP]**, done by [@engrbm87]
+- **[D-Link]**, done by [@tkdrob]
+
+[@allenporter]: https://github.com/allenporter
+[@engrbm87]: https://github.com/engrbm87
+[@tkdrob]: https://github.com/tkdrob
+[D-Link]: /integrations/dlink
+[IMAP]: /integrations/imap
+[Rain Bird]: /integrations/rainbird
+
+## Release 2023.2.1 - February 2
+
+- Support ISY994 Z-Wave motorized blinds as cover ([@shbatm] - [#87102]) ([isy994 docs])
+- Bump reolink_aio to 0.3.1 ([@starkillerOG] - [#87118]) ([reolink docs])
+- Bump reolink-aio to 0.3.2 ([@starkillerOG] - [#87121]) ([reolink docs])
+- Fix invalid state class in renault ([@epenet] - [#87135]) ([renault docs])
+- Add missing converters to recorder statistics ([@epenet] - [#87137]) ([recorder docs])
+- Add missing supported features to Z-Wave.Me siren ([@lawfulchaos] - [#87141]) ([zwave_me docs])
+- Reolink unsubscribe webhook when first refresh fails ([@starkillerOG] - [#87147]) ([reolink docs])
+- Fix statistics graphs not loading with data_rate, electric_current, voltage, information, and unitless units ([@bdraco] - [#87202]) ([recorder docs])
+- Add Reauth config flow to honeywell ([@mkmer] - [#86170]) ([honeywell docs])
+- Bump AIOSomecomfort to 0.0.6 ([@mkmer] - [#87203]) ([honeywell docs])
+- Update frontend to 20230202.0 ([@bramkragten] - [#87208]) ([frontend docs])
+- Bump py-synologydsm-api to 2.1.1 ([@mib1185] - [#87211]) ([synology_dsm docs])
+- Fix disabled condition within an automation action ([@karliemeads] - [#87213]) (breaking-change)
+
+[#86170]: https://github.com/home-assistant/core/pull/86170
+[#87101]: https://github.com/home-assistant/core/pull/87101
+[#87102]: https://github.com/home-assistant/core/pull/87102
+[#87118]: https://github.com/home-assistant/core/pull/87118
+[#87121]: https://github.com/home-assistant/core/pull/87121
+[#87135]: https://github.com/home-assistant/core/pull/87135
+[#87137]: https://github.com/home-assistant/core/pull/87137
+[#87141]: https://github.com/home-assistant/core/pull/87141
+[#87147]: https://github.com/home-assistant/core/pull/87147
+[#87202]: https://github.com/home-assistant/core/pull/87202
+[#87203]: https://github.com/home-assistant/core/pull/87203
+[#87208]: https://github.com/home-assistant/core/pull/87208
+[#87211]: https://github.com/home-assistant/core/pull/87211
+[#87213]: https://github.com/home-assistant/core/pull/87213
+[@bdraco]: https://github.com/bdraco
+[@bramkragten]: https://github.com/bramkragten
+[@epenet]: https://github.com/epenet
+[@frenck]: https://github.com/frenck
+[@karliemeads]: https://github.com/karliemeads
+[@lawfulchaos]: https://github.com/lawfulchaos
+[@mib1185]: https://github.com/mib1185
+[@mkmer]: https://github.com/mkmer
+[@shbatm]: https://github.com/shbatm
+[@starkillerOG]: https://github.com/starkillerOG
+[abode docs]: /integrations/abode/
+[frontend docs]: /integrations/frontend/
+[honeywell docs]: /integrations/honeywell/
+[isy994 docs]: /integrations/isy994/
+[recorder docs]: /integrations/recorder/
+[renault docs]: /integrations/renault/
+[reolink docs]: /integrations/reolink/
+[synology_dsm docs]: /integrations/synology_dsm/
+[zwave_me docs]: /integrations/zwave_me/
+
+## Release 2023.2.2 - February 4
+
+- Add missing mopeka translations ([@bdraco] - [#87421]) ([mopeka docs])
+- Fix call values in Aussie Broadband ([@Bre77] - [#87229]) ([aussie_broadband docs])
+- Handle failed Sonos subscriptions better ([@jjlawren] - [#87240]) ([sonos docs])
+- Filesize timestamp remove state class ([@gjohansson-ST] - [#87247]) ([filesize docs])
+- Bump reolink-aio to 0.3.4 ([@starkillerOG] - [#87272]) ([reolink docs])
+- Fix volume state class in renault ([@epenet] - [#87280]) ([renault docs])
+- Bump sfrbox-api to 0.0.6 ([@epenet] - [#87281]) ([sfr_box docs])
+- Extend state class sensor warnings with expected values ([@frenck] - [#87294]) ([sensor docs])
+- Fix incorrect description in sensor group config flow ([@frenck] - [#87298]) ([group docs])
+- Don't override icon in sensor group when device class is set ([@frenck] - [#87304]) ([group docs])
+- Fix Bravia TV refreshing zero volume level ([@Drafteed] - [#87318]) ([braviatv docs])
+- Fixed parser for zeversolar hardware version M10 ([@kvanzuijlen] - [#87319]) ([zeversolar docs])
+- Fix code format issue in Yale Smart Alarm ([@gjohansson-ST] - [#87323]) ([yale_smart_alarm docs])
+- Bump py-synologydsm-api to 2.1.2 ([@mib1185] - [#87324]) ([synology_dsm docs])
+- Bump oralb-ble to 0.17.2 ([@Lash-L] - [#87355]) ([oralb docs])
+- Update pylutron-caseta to 0.18.1 ([@mdonoughe] - [#87361]) ([lutron_caseta docs])
+- Fix exception when trying to poll a HomeKit device over Thread with no active encryption context ([@Jc2k] - [#87379]) ([homekit_controller docs])
+- Fix Ruuvi Gateway data being ignored when system is not using UTC time ([@akx] - [#87384]) ([ruuvi_gateway docs])
+- Fix state class in Enphase Envoy ([@vpathuis] - [#87397]) ([enphase_envoy docs])
+- Ignore invalid zeroconf names from devices with broken firmwares ([@bdraco] - [#87414]) ([zeroconf docs])
+- Disable mopeka accelerometer sensors by default ([@bdraco] - [#87420]) ([mopeka docs])
+- Bump aiohomekit to 2.4.6 ([@bdraco] - [#87427]) ([homekit_controller docs])
+- Update black to 23.1.0 ([@frenck] - [#87188])
+
+[#87188]: https://github.com/home-assistant/core/pull/87188
+[#87101]: https://github.com/home-assistant/core/pull/87101
+[#87221]: https://github.com/home-assistant/core/pull/87221
+[#87229]: https://github.com/home-assistant/core/pull/87229
+[#87240]: https://github.com/home-assistant/core/pull/87240
+[#87247]: https://github.com/home-assistant/core/pull/87247
+[#87272]: https://github.com/home-assistant/core/pull/87272
+[#87280]: https://github.com/home-assistant/core/pull/87280
+[#87281]: https://github.com/home-assistant/core/pull/87281
+[#87294]: https://github.com/home-assistant/core/pull/87294
+[#87298]: https://github.com/home-assistant/core/pull/87298
+[#87304]: https://github.com/home-assistant/core/pull/87304
+[#87318]: https://github.com/home-assistant/core/pull/87318
+[#87319]: https://github.com/home-assistant/core/pull/87319
+[#87323]: https://github.com/home-assistant/core/pull/87323
+[#87324]: https://github.com/home-assistant/core/pull/87324
+[#87355]: https://github.com/home-assistant/core/pull/87355
+[#87361]: https://github.com/home-assistant/core/pull/87361
+[#87379]: https://github.com/home-assistant/core/pull/87379
+[#87384]: https://github.com/home-assistant/core/pull/87384
+[#87397]: https://github.com/home-assistant/core/pull/87397
+[#87414]: https://github.com/home-assistant/core/pull/87414
+[#87420]: https://github.com/home-assistant/core/pull/87420
+[#87421]: https://github.com/home-assistant/core/pull/87421
+[#87427]: https://github.com/home-assistant/core/pull/87427
+[@Bre77]: https://github.com/Bre77
+[@Drafteed]: https://github.com/Drafteed
+[@Jc2k]: https://github.com/Jc2k
+[@Lash-L]: https://github.com/Lash-L
+[@akx]: https://github.com/akx
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@epenet]: https://github.com/epenet
+[@frenck]: https://github.com/frenck
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@jjlawren]: https://github.com/jjlawren
+[@kvanzuijlen]: https://github.com/kvanzuijlen
+[@mdonoughe]: https://github.com/mdonoughe
+[@mib1185]: https://github.com/mib1185
+[@starkillerOG]: https://github.com/starkillerOG
+[@vpathuis]: https://github.com/vpathuis
+[abode docs]: /integrations/abode/
+[aussie_broadband docs]: /integrations/aussie_broadband/
+[braviatv docs]: /integrations/braviatv/
+[enphase_envoy docs]: /integrations/enphase_envoy/
+[filesize docs]: /integrations/filesize/
+[group docs]: /integrations/group/
+[homekit_controller docs]: /integrations/homekit_controller/
+[lutron_caseta docs]: /integrations/lutron_caseta/
+[mopeka docs]: /integrations/mopeka/
+[oralb docs]: /integrations/oralb/
+[renault docs]: /integrations/renault/
+[reolink docs]: /integrations/reolink/
+[ruuvi_gateway docs]: /integrations/ruuvi_gateway/
+[sensor docs]: /integrations/sensor/
+[sfr_box docs]: /integrations/sfr_box/
+[sonos docs]: /integrations/sonos/
+[synology_dsm docs]: /integrations/synology_dsm/
+[yale_smart_alarm docs]: /integrations/yale_smart_alarm/
+[zeroconf docs]: /integrations/zeroconf/
+[zeversolar docs]: /integrations/zeversolar/
+
+## Release 2023.2.3 - February 7
+
+- Speed up purge time with newer MariaDB versions ([@bdraco] - [#87409]) ([recorder docs])
+- Add missing name field to emulated_hue config ([@gregoryhaynes] - [#87456]) ([emulated_hue docs])
+- Bump lupupy to 0.2.7 ([@majuss] - [#87469]) ([lupusec docs])
+- Bump py-synologydsm-api to 2.1.4 ([@mib1185] - [#87471]) ([synology_dsm docs])
+- Disable uptime sensor by default in Unifi ([@tkdrob] - [#87484]) ([unifi docs])
+- Add the correct loggers to velbus manifest.json ([@Cereal2nd] - [#87488]) ([velbus docs])
+- Fix recorder run history during schema migration and startup ([@bdraco] - [#87492]) ([recorder docs])
+- Bump xiaomi-ble to 0.16.1 ([@Ernst79] - [#87496]) ([xiaomi_ble docs])
+- Bump jaraco.abode to 3.3.0 ([@zim514] - [#87498]) ([abode docs])
+- Bump bimmer_connected to 0.12.1 ([@rikroe] - [#87506]) ([bmw_connected_drive docs])
+- Add LD2410BLE support for new firmware version ([@bencorrado] - [#87507]) ([ld2410_ble docs])
+- Bump env_canada to 0.5.28 ([@michaeldavie] - [#87509]) ([environment_canada docs])
+- Optimize history.get_last_state_changes query ([@bdraco] - [#87554]) ([recorder docs])
+- OpenAI: Ignore devices without a name ([@balloob] - [#87558]) ([openai_conversation docs])
+- Bump oralb-ble to 0.17.4 ([@Lash-L] - [#87570]) ([oralb docs])
+- Fix matter remove config entry device ([@MartinHjelmare] - [#87571]) ([matter docs])
+- Fix indent on slow_range_in_select for MySQL/MariaDB ([@bdraco] - [#87581]) ([recorder docs])
+- Fix LD2410 BLE detection with passive scans ([@bdraco] - [#87584]) ([ld2410_ble docs])
+- Bump inkbird-ble to 0.5.6 ([@bdraco] - [#87590]) ([inkbird docs])
+- Bump sensorpro-ble to 0.5.3 ([@bdraco] - [#87591]) ([sensorpro docs])
+- Bump thermopro-ble to 0.4.5 ([@bdraco] - [#87592]) ([thermopro docs])
+- Bump bluemaestro-ble to 0.2.3 ([@bdraco] - [#87594]) ([bluemaestro docs])
+- Bump sensorpush-ble to 1.5.5 ([@bdraco] - [#87595]) ([sensorpush docs])
+- Improve rainbird device reliability by sending requests serially ([@allenporter] - [#87603]) ([rainbird docs])
+- Do not return cached values for entity states in emulated_hue ([@Tho85] - [#87642]) ([emulated_hue docs])
+- Bump pyrainbird to 2.0.0 ([@allenporter] - [#86851]) ([rainbird docs])
+- Bump PyISY to 3.1.13, check portal for network buttons ([@shbatm] - [#87650]) ([isy994 docs])
+
+[#86851]: https://github.com/home-assistant/core/pull/86851
+[#87101]: https://github.com/home-assistant/core/pull/87101
+[#87221]: https://github.com/home-assistant/core/pull/87221
+[#87409]: https://github.com/home-assistant/core/pull/87409
+[#87433]: https://github.com/home-assistant/core/pull/87433
+[#87456]: https://github.com/home-assistant/core/pull/87456
+[#87469]: https://github.com/home-assistant/core/pull/87469
+[#87471]: https://github.com/home-assistant/core/pull/87471
+[#87484]: https://github.com/home-assistant/core/pull/87484
+[#87488]: https://github.com/home-assistant/core/pull/87488
+[#87492]: https://github.com/home-assistant/core/pull/87492
+[#87496]: https://github.com/home-assistant/core/pull/87496
+[#87498]: https://github.com/home-assistant/core/pull/87498
+[#87506]: https://github.com/home-assistant/core/pull/87506
+[#87507]: https://github.com/home-assistant/core/pull/87507
+[#87509]: https://github.com/home-assistant/core/pull/87509
+[#87554]: https://github.com/home-assistant/core/pull/87554
+[#87558]: https://github.com/home-assistant/core/pull/87558
+[#87570]: https://github.com/home-assistant/core/pull/87570
+[#87571]: https://github.com/home-assistant/core/pull/87571
+[#87581]: https://github.com/home-assistant/core/pull/87581
+[#87584]: https://github.com/home-assistant/core/pull/87584
+[#87590]: https://github.com/home-assistant/core/pull/87590
+[#87591]: https://github.com/home-assistant/core/pull/87591
+[#87592]: https://github.com/home-assistant/core/pull/87592
+[#87594]: https://github.com/home-assistant/core/pull/87594
+[#87595]: https://github.com/home-assistant/core/pull/87595
+[#87603]: https://github.com/home-assistant/core/pull/87603
+[#87642]: https://github.com/home-assistant/core/pull/87642
+[#87650]: https://github.com/home-assistant/core/pull/87650
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@Ernst79]: https://github.com/Ernst79
+[@Lash-L]: https://github.com/Lash-L
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@Tho85]: https://github.com/Tho85
+[@allenporter]: https://github.com/allenporter
+[@balloob]: https://github.com/balloob
+[@bdraco]: https://github.com/bdraco
+[@bencorrado]: https://github.com/bencorrado
+[@frenck]: https://github.com/frenck
+[@gregoryhaynes]: https://github.com/gregoryhaynes
+[@majuss]: https://github.com/majuss
+[@mib1185]: https://github.com/mib1185
+[@michaeldavie]: https://github.com/michaeldavie
+[@rikroe]: https://github.com/rikroe
+[@shbatm]: https://github.com/shbatm
+[@tkdrob]: https://github.com/tkdrob
+[@zim514]: https://github.com/zim514
+[abode docs]: /integrations/abode/
+[bluemaestro docs]: /integrations/bluemaestro/
+[bmw_connected_drive docs]: /integrations/bmw_connected_drive/
+[emulated_hue docs]: /integrations/emulated_hue/
+[environment_canada docs]: /integrations/environment_canada/
+[inkbird docs]: /integrations/inkbird/
+[isy994 docs]: /integrations/isy994/
+[ld2410_ble docs]: /integrations/ld2410_ble/
+[lupusec docs]: /integrations/lupusec/
+[matter docs]: /integrations/matter/
+[openai_conversation docs]: /integrations/openai_conversation/
+[oralb docs]: /integrations/oralb/
+[rainbird docs]: /integrations/rainbird/
+[recorder docs]: /integrations/recorder/
+[sensorpro docs]: /integrations/sensorpro/
+[sensorpush docs]: /integrations/sensorpush/
+[synology_dsm docs]: /integrations/synology_dsm/
+[thermopro docs]: /integrations/thermopro/
+[unifi docs]: /integrations/unifi/
+[velbus docs]: /integrations/velbus/
+[xiaomi_ble docs]: /integrations/xiaomi_ble/
+
+## 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 "Python 3.9 support has been removed" %}
+
+Python 3.9 support has previously been deprecated and has now been removed.
+Home Assistant now requires Python 3.10 to run.
+
+If you are using Home Assistant OS, Home Assistant Container, or Home Assistant
+Supervised installation method, you don’t have to do anything. In those cases,
+we handle this all for you.
+
+Your system has been using Python 3.10 for quite some time already.
+
+([@frenck] - [#85456])
+
+[@frenck]: https://github.com/frenck
+[#85456]: https://github.com/home-assistant/core/pull/85456
+
+{% enddetails %}
+
+{% details "MariaDB" %}
+
+If you are using MariaDB with Home Assistant recorder, please make sure
+you run `10.5.17` , `10.6.9`, `10.7.5`, `10.8.4` (depending on which major
+release you are using). If you are using the MariaDB core add-on,
+make sure to update it to the latest version: `2.5.2`.
+
+Older versions of MariaDB suffer from a significant performance regression
+when retrieving history data or purging the database.
+
+([@bdraco] - [#87040])
+
+[@bdraco]: https://github.com/bdraco
+[#87040]: https://github.com/home-assistant/core/pull/87040
+
+{% enddetails %}
+
+{% details "Automations & Scripts" %}
+
+A disabled condition, for example, in an automation or script, will no longer
+always be a pass/`True` within an `OR` condition. Instead, in those
+cases, the condition will now have no effect when disabled.
+
+([@karliemeads] - [#79718]) ([documentation](/integrations/automations))
+
+[@karliemeads]: https://github.com/karliemeads
+[#79718]: https://github.com/home-assistant/core/pull/79718
+
+{% enddetails %}
+
+{% details "AccuWeather" %}
+
+For the precipitation entity, the unit was changed from `mm` to `mm/h`
+(`in` to `in/h`), resulting in the need to fix the unit for long-term
+statistics. You can do that in `Developer Tools` -> `Stats`.
+
+([@bieniu] - [#86088]) ([documentation](/integrations/accuweather))
+
+[@bieniu]: https://github.com/bieniu
+[#86088]: https://github.com/home-assistant/core/pull/86088
+
+{% enddetails %}
+
+{% details "Airly" %}
+
+If the language in the Home Assistant settings is set to Polish, the language
+of the `advice` and `description` attributes of the CAQI entity will change
+from English to Polish.
+
+If you are using these in your automations or scripts, you might need to adjust
+them to match this change.
+
+([@bieniu] - [#85655]) ([documentation](/integrations/airly))
+
+[@bieniu]: https://github.com/bieniu
+[#85655]: https://github.com/home-assistant/core/pull/85655
+
+{% enddetails %}
+
+{% details "Fitbit" %}
+
+The state values of the Fitbit sensor entities will change to remove any
+thousands delimiters. For example, `1,500` will become `1500`.
+
+If you're using the state of these entities in automations or scripts,
+you need to update them to handle the new state format.
+
+([@sw-carlos-cristobal] - [#85251]) ([documentation](/integrations/fitbit))
+
+[@sw-carlos-cristobal]: https://github.com/sw-carlos-cristobal
+[#85251]: https://github.com/home-assistant/core/pull/85251
+
+{% enddetails %}
+
+{% details "Flume" %}
+
+The scan/update interval for water values has been restored to match the Flume
+app.
+
+To stay under Flume's API limits, the device connection is now checked hourly,
+and notifications are checked every 5 minutes.
+
+([@bdraco] - [#86354]) ([documentation](/integrations/flume))
+
+[@bdraco]: https://github.com/bdraco
+[#86354]: https://github.com/home-assistant/core/pull/86354
+
+{% enddetails %}
+
+{% details "History" %}
+
+The `use_include_order` YAML configuration option has been removed.
+
+This option was used to sort the history on the original history panel which,
+is no longer used. As it no longer has a function and only serves to
+slow down the response, it has been removed.
+
+([@bdraco] - [#86365]) ([documentation](/integrations/history))
+
+[@bdraco]: https://github.com/bdraco
+[#86365]: https://github.com/home-assistant/core/pull/86365
+
+{% enddetails %}
+
+{% details "IoTaWatt" %}
+
+The IoTAWatt integration no longer provides sensors with the "Accumulated"
+suffix. The accumulated sensors have been introduced to support net energy
+export/import metering.
+
+Newer versions of IoTaWatt provide "Integrators", which allow achieving the
+same more efficiently and with higher accuracy.
+
+You should configure [Integrators](https://docs.iotawatt.com/en/master/integrators.html)
+to calculate the net energy export and import.
+
+([@agners] - [#86611]) ([documentation](/integrations/iotawatt))
+
+[@agners]: https://github.com/agners
+[#86611]: https://github.com/home-assistant/core/pull/86611
+
+{% enddetails %}
+
+{% details "Matter" %}
+
+The Matter integration now requires running Matter Server version `2.0.0`.
+
+If you're using the Matter Server add-on to run the Matter Server,
+you will need version `3.0.0` of the add-on.
+
+We had to change our vendor ID in the add-on; as a result, all devices
+need to be recommissioned.
+
+([@MartinHjelmare] - [#86470]) ([documentation](/integrations/matter))
+
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[#86470]: https://github.com/home-assistant/core/pull/86470
+
+{% enddetails %}
+
+{% details "Nettigo Air Monitor" %}
+
+The states of air quality sensors have been standardized to match Home Assistant
+core rules. This affects two states of the sensors that NAM can provide:
+
+- `very low`, which now became `very_low`
+- `very high`, which now became `very_high`
+
+If you used those states directly in your automations, scripts, or templates;
+you would need to adjust those to match these changes.
+
+([@frenck] - [#85245]) ([documentation](/integrations/nam))
+
+[@frenck]: https://github.com/frenck
+[#85245]: https://github.com/home-assistant/core/pull/85245
+
+{% enddetails %}
+
+{% details "Pentair ScreenLogic" %}
+
+The Pentair ScreenLogic integration now correctly categorizes all known lights.
+Removing any lights that were previously incorrectly created as switch entities
+may be necessary.
+
+([@dieselrabbit] - [#86608]) ([documentation](/integrations/screenlogic))
+
+[@dieselrabbit]: https://github.com/dieselrabbit
+[#86608]: https://github.com/home-assistant/core/pull/86608
+
+{% enddetails %}
+
+{% details "Pi-hole" %}
+
+The previously deprecated YAML configuration of the Pi-hole
+integration has been removed.
+
+Pi-hole 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.
+
+([@mib1185] - [#84803]) ([documentation](/integrations/pi_hole))
+
+[@mib1185]: https://github.com/mib1185
+[#84803]: https://github.com/home-assistant/core/pull/84803
+
+---
+
+The extra state attribute "Domains blocked" has been removed from all sensors.
+It is already exposed as its own dedicated sensor.
+
+If you used the state attribute in your automations or scripts, you would
+need to adjust them to use the dedicated sensor instead.
+
+([@mib1185] - [#85424]) ([documentation](/integrations/pi_hole))
+
+[@mib1185]: https://github.com/mib1185
+[#85424]: https://github.com/home-assistant/core/pull/85424
+
+{% enddetails %}
+
+{% details "Rain Bird" %}
+
+Rainbird is now configured via the UI, and configuration from YAML has been
+imported automatically.
+
+However, there are a few notable changes:
+
+- Custom per zone overrides for irrigation time are no longer supported.
+- The Rain delay `binary_sensor` that duplicates the Rain delay time `sensor`
+ has been removed. You should move all uses to the `sensor` value and check
+ for a non-zero value to get equivalent behavior.
+- The Rain `sensor` that duplicates the Rain `binary_sensor` has been removed.
+ You may check the `binary_sensor` state to get equivalent behavior.
+
+Also, the way the "Rain Delay" is managed has changed. The Rain Delay, which
+pauses irrigation for a specified number of days, is now managed with a `number`
+entity which can be controlled directly from the UI.
+
+The existing service call `rainbird.set_rain_delay` and the Raindelay sensor
+have been deprecated. Any existing automations or scripts that make service
+calls to `rainbird.set_rain_delay` will need to be replaced with a call
+to `number.set_value`. Additionally, the existing service call was updated to
+require an integration entry configuration since it previously had undefined
+behavior, so it is recommended to move directly to the new number service call.
+
+([@allenporter] - [#85271] [#86208]) ([documentation](/integrations/rainbird))
+
+[@allenporter]: https://github.com/allenporter
+[#85271]: https://github.com/home-assistant/core/pull/85271
+[#86208]: https://github.com/home-assistant/core/pull/86208
+
+{% enddetails %}
+
+{% details "Recorder" %}
+
+The recorder's default commit interval has been increased to 5 seconds to
+reduce disk I/O and increase storage longevity.
+
+As the history and logbook integrations both support live streaming, which
+avoids the need to read the database after the initial sync, there is no
+remaining core functionality that needs a lower commit interval.
+
+The [`commit_interval`](/integrations/recorder/#commit_interval) can be adjusted
+to a lower value in the event an integration has not been updated to watch for
+events instead of reading the database and needs to read the database sooner.
+
+([@bdraco] - [#86115]) ([documentation](/integrations/recorder))
+
+[@bdraco]: https://github.com/bdraco
+[#86115]: https://github.com/home-assistant/core/pull/86115
+
+{% enddetails %}
+
+{% details "Renault" %}
+
+The previously deprecated `renault.charge_start` service has been removed.
+Please use the dedicated start charge button entity to start the charge instead.
+
+([@epenet] - [#86070]) ([documentation](/integrations/renault))
+
+[@epenet]: https://github.com/epenet
+[#86070]: https://github.com/home-assistant/core/pull/86070
+
+{% enddetails %}
+
+{% details "Sony Bravia TV" %}
+
+Sony Bravia TV media players no longer have fake (assumed) `playing` or `paused`
+states, and those are replaced with the `on` state.
+
+If you have automations or scripts that use the `playing` or `paused` state,
+please update them to be compatible with this change.
+
+([@Drafteed] - [#84885]) ([documentation](/integrations/braviatv))
+
+[@Drafteed]: https://github.com/Drafteed
+[#84885]: https://github.com/home-assistant/core/pull/84885
+
+---
+
+The `source_list` no longer contains a list of applications and TV channels.
+Apps and channels have been separated from the input list and moved
+to the Media Browser.
+
+If you have automations or scripts that use `media_player.select_source` to
+switch apps or channels on the Bravia TV, the automations need to be
+updated to use `media_player.play_media` service instead.
+
+The options flow has been removed from the integration, as the only
+configurable setting `ignored_sources` was no longer relevant
+and incompatible with this change.
+
+([@Drafteed] - [#85288]) ([documentation](/integrations/braviatv))
+
+[@Drafteed]: https://github.com/Drafteed
+[#85288]: https://github.com/home-assistant/core/pull/85288
+
+{% enddetails %}
+
+{% details "Spain electricity hourly pricing (PVPC)" %}
+
+The previously deprecated YAML configuration of the Spain electricity hourly
+pricing (PVPC) integration has been removed.
+
+Spain electricity hourly pricing (PVPC) 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.
+
+([@azogue] - [#85614]) ([documentation](/integrations/pvpc_hourly_pricing))
+
+[@azogue]: https://github.com/azogue
+[#85614]: https://github.com/home-assistant/core/pull/85614
+
+{% enddetails %}
+
+{% details "Tado" %}
+
+The swing modes of Tado have changed. This is to standardize with other
+integrations, and so it can support translations.
+
+- `ON` became the lowercase `on`
+- `OFF` became the lowercase `off`
+
+If you used these swing modes in your automations or scripts, you might
+need to adjust those to this change.
+
+([@emontnemery] - [#84278]) ([documentation](/integrations/tado))
+
+[@emontnemery]: https://github.com/emontnemery
+[#84278]: https://github.com/home-assistant/core/pull/84278
+
+{% enddetails %}
+
+{% details "Twinkly" %}
+
+All extra state attributes from Twinkly light entities have been removed.
+
+They mostly added information about the device,
+not the actual light state itself.
+
+([@frenck] - [#84986]) ([documentation](/integrations/twinkly))
+
+[@frenck]: https://github.com/frenck
+[#84986]: https://github.com/home-assistant/core/pull/84986
+
+{% enddetails %}
+
+{% details "Universal Devices ISY/IoX" %}
+
+ISY/IoX Variables have been moved from `sensor` entities to `number` entities;
+the existing `sensor` entities are deprecated and will be removed in a future
+release.
+
+The `isy994.set_variable` service has been deprecated in favor of using
+the `number` entities to directly set the variable values.
+
+Please update any dashboards, scripts, and automations that may be using these
+entities or service.
+
+([@shbatm] - [#85511]) ([documentation](/integrations/isy994))
+
+[@shbatm]: https://github.com/frenshbatmck
+[#85511]: https://github.com/home-assistant/core/pull/85511
+
+---
+
+Entities for INSTEON Aux Properties and Device Communication Errors have been
+removed for nodes that are not the main (load) node.
+
+On Level and Ramp Rate sensors have been removed for non-dimmable (non-`light.`)
+devices. Only load devices receive communication error updates and only
+dimmable devices support `OL` and `RR` commands.
+
+The other entities were previously added but did not receive valid states from
+the ISY or end-devices. These sensors were disabled by default.
+
+([@shbatm] - [#85744]) ([documentation](/integrations/isy994))
+
+[@shbatm]: https://github.com/shbatm
+[#85744]: https://github.com/home-assistant/core/pull/85744
+
+{% enddetails %}
+
+{% details "Uptime" %}
+
+The previously deprecated YAML configuration of the Uptime
+integration has been removed.
+
+Uptime is now configured via the UI. Any existing YAML configuration has been
+imported in previous releases and can now be safely removed from your YAML
+configuration files.
+
+([@frenck] - [#86292]) ([documentation](/integrations/uptime))
+
+[@frenck]: https://github.com/frenck
+[#86292]: https://github.com/home-assistant/core/pull/86292
+
+{% enddetails %}
+
+{% details "Yamaha Network Receivers" %}
+
+When there is a connection error with the receiver, the device will now
+go into an unavailable state until the connection has been restored.
+
+([@sredna] - [#85018]) ([documentation](/integrations/yamaha))
+
+[@sredna]: https://github.com/sredna
+[#85018]: https://github.com/home-assistant/core/pull/85018
+
+{% enddetails %}
+
+{% details "Yamaha MusicCast" %}
+
+The raw state/option values of the Yamaha MusicCast zone sleep `select` entities
+have been standardized to match Home Assistant core rules.
+
+The following states/options have been changed
+
+- `120 min`, which now became `120_min`
+- `90 min`, which now became `90_min`
+- `60 min`, which now became `60_min`
+- `30 min`, which now became `30_min`
+
+If you used those states/options directly in your automations, scripts,
+or templates; you will need to adjust those to match these changes.
+
+([@frenck] - [#85292]) ([documentation](/integrations/yamaha_musiccast))
+
+[@frenck]: https://github.com/frenck
+[#85292]: https://github.com/home-assistant/core/pull/85292
+
+{% enddetails %}
+
+{% details "Zentralanstalt für Meteorologie und Geodynamik (ZAMG)" %}
+
+The previously deprecated YAML configuration of the Zentralanstalt für
+Meteorologie und Geodynamik (ZAMG) integration has been removed.
+
+Zentralanstalt für Meteorologie und Geodynamik (ZAMG) 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.
+
+([@killer0071234] - [#86113]) ([documentation](/integrations/zamg))
+
+[@killer0071234]: https://github.com/killer0071234
+[#86113]: https://github.com/home-assistant/core/pull/86113
+
+{% enddetails %}
+
+{% details "Zigbee Home Automation" %}
+
+The `AnalogInput` sensor entities for certain Xiaomi plugs have been removed
+from ZHA.
+
+Properly working "Active power" and "Summation delivered" sensors are available
+to replace the older entities. These newer sensor entities can also be used in
+Home Assistant Energy dashboard.
+
+([@TheJulianJES] - [#86261]) ([documentation](/integrations/zha))
+
+[@TheJulianJES]: https://github.com/TheJulianJES
+[#86261]: https://github.com/home-assistant/core/pull/86261
+
+{% 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:
+
+[devblog]: https://developers.home-assistant.io/blog/
+
+- [Bluetooth updates for 2023.2 and later](https://developers.home-assistant.io/blog/2023/01/12/bluetooth-adapters)
+- [Cover intents deprecated](https://developers.home-assistant.io/blog/2023/01/20/cover-intent-deprecated)
+- [Database schema v32 updates](https://developers.home-assistant.io/blog/2023/01/02/db-schema-v32)
+- [Future proofing the Conversation integration](https://developers.home-assistant.io/blog/2023/01/24/conversation-updates)
+- [Sensor entity can now do rounding of numerical values](https://developers.home-assistant.io/blog/2023/01/25/sensor_rounding)
+
+## Farewell to the following
+
+The following integrations are also no longer available as of this release:
+
+- **Almond** has been removed. It is in a non-working state, and the services
+ have been shut down.
+- **OpenALPR Local** was previously deprecated and has now been removed. It
+ doesn't work correctly and has no usage, according to our public analytics.
+
+## 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.2](/changelogs/core-2023.2)
diff --git a/source/_posts/2023-02-08-state-of-matter-and-thread.markdown b/source/_posts/2023-02-08-state-of-matter-and-thread.markdown
new file mode 100644
index 000000000000..d7180d227629
--- /dev/null
+++ b/source/_posts/2023-02-08-state-of-matter-and-thread.markdown
@@ -0,0 +1,137 @@
+---
+layout: post
+title: "Matter & Thread: where we’re at"
+description: "Update on the current state of Matter & Thread, and what we’re planning next"
+date: 2023-02-08 00:00:00
+date_formatted: "February 8, 2023"
+author: Paulus Schoutsen
+comments: true
+categories: Technology
+---
+
+A lot is happening in Home Assistant around Matter and Thread. It can be hard to keep track of it all, so we wanted to take a moment to write an update on the current state, and what we’re planning next.
+
+Summary:
+
+- Matter works, including Thread devices via Thread border routers from Apple and Google.
+- The Thread border router in Home Assistant is operational but not integrated until the next release, Home Assistant 2023.3.
+- We’ve expanded the documentation for Matter and Thread to cover most asked questions and include videos on how to add Matter devices to Home Assistant.
+- Users using a [Home Assistant Yellow][yellow] hub can enable an experimental Thread border router.
+- Users on other systems can get a Thread Border Router using a [Home Assistant SkyConnect][skyconnect].
+- Announcing [SL Web Tools][sl-web-tools]. It allows users to use their browser to update Zigbee/Thread sticks based on SiLabs chips, like the Home Assistant SkyConnect.
+- We’re open sourcing our [automated build scripts][sl-builder] to create reproducible firmware builds for Zigbee/Thread sticks based on SiLabs chips.
+
+
+
+## Matter
+
+[Matter][matter] is a new smart home standard which works locally. Its first release was at the end of last year, and is in the process of being adopted throughout the industry. We’ve been working hard on making it work with Home Assistant.
+
+Today Home Assistant can control the basic operation of most Matter devices. You can add both Wi-Fi and Thread based devices, and the most common device types work. Matter bridges do not work yet – this will be added in Home Assistant 2023.3.
+
+
+
+The Matter implementation in Home Assistant is built on-top of the open source Matter SDK developed by members of the Connectivity Standards Alliance (CSA). This is the same SDK that powers Matter for Google and Apple products. As a member of this alliance, we are collaborating to further improve this Matter SDK making it a solid base for our Matter support.
+
+Together with this blog post, we’ve released a big update to [our Matter documentation][matter]. We have added instructions with accompanying videos on how to pair Matter devices with Home Assistant and how to share Matter devices from Apple Home/Google Home to Home Assistant.
+
+
+
+## Thread
+
+[Thread][thread] is a low-power mesh networking standard which allows users to connect their devices within a home network. It uses the same RF technology as Zigbee but provides IP connectivity similar to Wi-Fi. Matter supports Thread as a connectivity option for low-power and battery-operated devices.
+
+Together with this blog post, we’ve released an update to [our Thread documentation][thread]. We explain the different parts that make up a Thread network and how you can create one at home.
+
+
+
+Google Android asks if you want to share their Google Thread credentials with Home Assistant.
+
+
+As users acquire more products with Thread in their home, they might end up with multiple Thread networks. Since a Thread device can only communicate with a single Thread network, it is important to be able to unify your Thread networks.
+
+The goal of the upcoming Home Assistant Thread panel is to allow you to manage your Thread networks and help you to merge them into a single one. This is done in collaboration with the Home Assistant Companion apps, allowing us to synchronize Thread networks between Apple/Google and Home Assistant.
+
+We’ve created a mockup of this panel that you can [try out here][thread-mockup].
+
+
+
+Screenshot of the mockup for the Thread panel. Open mockup
+
+
+## Hardware to use Thread & Matter
+
+Both Matter and Thread are technologies that are entering mainstream markets. There are a lot of moving parts in both technologies. We’ve been relying heavily on the work done by Google, Apple, and other members of the CSA to make these technologies accessible to Home Assistant users (thanks!).
+
+Google and Apple updated their products to support Matter and Thread. However, it is important that we can operate independently. Home Assistant Yellow and Home Assistant SkyConnect include radio chips that are capable of running Zigbee and Thread at the same time. We are working on making this multiprotocol support available to all Home Assistant users.
+
+### Home Assistant Yellow
+
+[Home Assistant Yellow][yellow] is our take on a perfect home automation hub. It’s powered by a Raspberry Pi Compute Module 4 (CM4), which you can upgrade if you want more memory. And if you run out of storage, it has space to plug in a hard drive. [And it’s open hardware.][yellow-docs]
+
+
+
+
+
+
+For radio connectivity, it includes a module by Silicon Labs, which is set up out of the box, to provide Zigbee. With the latest Home Assistant 2023.2 release, it is possible to turn your Home Assistant Yellow into a Thread border router. This can be done by enabling our experimental multiprotocol support in {% my hardware title="Settings -> Hardware" %} and by clicking Configure.
+
+Currently, it is not possible to disable multiprotocol support once enabled. We will be offering a way to disable multiprotocol support soon, allowing users to rollback if they run into issues.
+
+The Home Assistant Yellow was originally crowd funded in October 2021. We’ve been busy with production and last month have fulfilled all original backers and most of the pre-orders.
+
+That’s why today, we’re happy to announce that RaspberryPi.dk will be our first distributor, outside of Crowd Supply, to start selling the Home Assistant Yellow. They have already been produced and are currently on a boat on their way to them. All variants can be [pre-ordered on their website][rpidk].
+
+More distributors will follow as soon as the chip shortage allows!
+
+### Home Assistant SkyConnect
+
+Home Assistant is about choice. You’re not limited to running it on official hardware, you can bring your own. In fact, Raspberry Pi devices are by far the most popular platform to run Home Assistant on, but there is a catch: they lack any smart home radio connectivity.
+
+We created the [Home Assistant SkyConnect][skyconnect] to provide the missing smart home connectivity. It contains a chip from the same family as the Home Assistant Yellow. It is set out of the box to provide Zigbee. With the latest Home Assistant 2023.2 and when using Home Assistant OS, it is possible to turn your Home Assistant SkyConnect into a Thread border router. This can be done by enabling our experimental multiprotocol support in {% my hardware title="Settings -> Hardware" %} and by clicking Configure.
+
+
+
+
+
+Home Assistant SkyConnect was introduced at the end of 2022 via our distributor network (hit “buy” on [our website][skyconnect]). Many distributors sold out right away but most should be receiving new stock soon.
+
+Together with today’s blog post, we’ve pushed a big update to [the SkyConnect documentation website][skyconnect-docs], including tutorials on how to migrate from a different Zigbee stick.
+
+## SiLabs multi-flasher & SL Web Tools
+
+It’s our mission to build the Open Home: a smart home that offers privacy, choice, and durability. Part of our efforts is to build tooling that helps other creators to make projects and products to help further the Open Home cause.
+
+As part of this effort, two years ago, we built ESP Web Tools. It revolutionized the DIY firmware world by allowing any ESP32/ESP8266 project to offer an easy web installer on their homepage, allowing users to get started directly from their browser. It has been adopted by all the great projects, including [Tasmota], [WLED], and [ESPresense]. Ever since the introduction of ESP Web Tools, we have wanted to expand this to more devices.
+
+Today we’re announcing [SL Web Tools][sl-web-tools]. It allows users to manage the firmware on Zigbee/Thread sticks using SiLabs chips directly from their browser, no terminals or compilation necessary. This allows any creator to offer easy firmware updates to their users and make experimental updates available to test bug fixes quickly.
+
+To see it in action, SL Web Tools has been added to [the Home Assistant SkyConnect documentation][skyconnect-docs].
+
+SL Web Tools is powered by our new open source Python package [`silabs-universal-flasher`][sl-flasher]. We run this in the browser using [Pyodide].
+
+
+
+## Building firmware for Silicon Labs chips
+
+It can be a pain to compile firmware for SiLabs chips. It’s hard to track different versions, your patch sets, and different chips. We’re fans of automation, so we have created an automated build system to create reproducible firmware builds for the Home Assistant Yellow and Home Assistant SkyConnect.
+
+We’re open sourcing this to make it easier for other creators to provide their users with up-to-date firmware. In combination with SL Web Tools, we offer a complete package that empowers other creators to provide their users with the latest firmware updates.
+
+[Find the repository on GitHub.][sl-builder]
+
+[matter]: /integrations/matter
+[rpidk]: https://raspberrypi.dk/en/?s=home+assistant+yellow&post_type=product
+[skyconnect-docs]: https://skyconnect.home-assistant.io
+[skyconnect]: /skyconnect
+[sl-builder]: https://github.com/NabuCasa/silabs-firmware-builder
+[sl-flasher]: https://github.com/NabuCasa/universal-silabs-flasher
+[sl-web-tools]: https://github.com/NabuCasa/sl-web-tools
+[thread-mockup]: https://www.figma.com/proto/DDz0MNwzzxjJdeEHCamQi1/Thread?node-id=68:2863&scaling=scale-down&page-id=68:2862&starting-point-node-id=68:2863
+[thread]: /integrations/thread
+[yellow-docs]: https://yellow.home-assistant.io/documentation/
+[yellow]: /yellow
+[Pyodide]: https://pyodide.org/en/stable/
+[Tasmota]: https://tasmota.github.io/install/
+[WLED]: https://install.wled.me/
+[ESPresense]: https://espresense.com/firmware
diff --git a/source/_redirects b/source/_redirects
index a2e7650ce1b4..bb2f58a3d201 100644
--- a/source/_redirects
+++ b/source/_redirects
@@ -195,7 +195,6 @@
/integrations/input_slider /integrations/input_number
/integrations/leviton /integrations/leviton_z_wave
/integrations/light.switch /integrations/switch_as_x
-/integrations/openalpr /integrations/openalpr_local
/integrations/pca /integrations/elv
/integrations/pollen /integrations/iqvia
/integrations/polling /integrations/telegram_polling
@@ -420,6 +419,7 @@
# Removed integrations
/integrations/alarmdotcom /more-info/removed-integration 301
+/integrations/almond /more-info/removed-integration 301
/integrations/ambee /more-info/removed-integration 301
/integrations/apns /more-info/removed-integration 301
/integrations/arlo /more-info/removed-integration 301
@@ -479,6 +479,8 @@
/integrations/nello /more-info/removed-integration 301
/integrations/nma /more-info/removed-integration 301
/integrations/nuimo_controller /more-info/removed-integration 301
+/integrations/openalpr /more-info/removed-integration 301
+/integrations/openalpr_local /more-info/removed-integration 301
/integrations/orangepi_gpio /more-info/removed-integration 301
/integrations/ozw /more-info/removed-integration 301
/integrations/pcal9535a /more-info/removed-integration 301
diff --git a/source/changelogs/core-2023.2.markdown b/source/changelogs/core-2023.2.markdown
new file mode 100644
index 000000000000..985cc9dd0b2e
--- /dev/null
+++ b/source/changelogs/core-2023.2.markdown
@@ -0,0 +1,2141 @@
+---
+title: Full Changelog for Home Assistant Core 2023.2
+description: Detailed changelog for the Home Assistant Core 2023.2 release
+---
+
+These are all the changes included in the Home Assistant Core 2023.2 release.
+
+For a summary in a more readable format:
+[Release notes blog for this release](/blog/2023/02/01/release-20232/).
+
+## Full Changelog
+
+- Reduce number of asyncio tasks created by bond ([@bdraco] - [#84668])
+- Bump version to 2023.2.0dev0 ([@frenck] - [#84707])
+- Use built in polling for litterrobot update entity ([@natekspencer] - [#84678])
+- Remove additional `airvisual_pro` references in `airvisual` ([@bachya] - [#84724])
+- Avoid logging increase during tests ([@elupus] - [#84672])
+- Rework UniFi device tracker to utilizing entity description ([@Kane610] - [#81979])
+- Improve `syncthru` generic typing ([@cdce8p] - [#84648])
+- Avoid running final writes in executor in test ([@elupus] - [#84679])
+- Improve DataUpdateCoordinator typing in integrations (5) ([@cdce8p] - [#84740])
+- Improve `youless` generic typing ([@cdce8p] - [#84739])
+- Set Yamaha unique_id ([@sredna] - [#84730])
+- Improve DataUpdateCoordinator typing in integrations (6) ([@cdce8p] - [#84741])
+- Remove myself as a code owner ([@tinloaf] - [#84701])
+- Improve `freedompro` generic typing ([@cdce8p] - [#84736])
+- Improve `ondilo_ico` generic typing ([@cdce8p] - [#84738])
+- Improve `iqvia` typing ([@cdce8p] - [#84734])
+- Improve `brunt` generic typing ([@cdce8p] - [#84735])
+- Improve `upnp` typing ([@cdce8p] - [#84652])
+- Improve `here_travel_time` generic typing ([@cdce8p] - [#84631])
+- Update coverage to 7.0.1 ([@frenck] - [#84764])
+- Improve `oncue` generic typing ([@cdce8p] - [#84761])
+- Improve `modbus` generic typing ([@cdce8p] - [#84737])
+- Update holidays to 0.18.0 ([@frenck] - [#84770])
+- Update pre-commit to 2.21.0 ([@frenck] - [#84768])
+- Fix MQTT test logging level after default pytest logging capture change ([@jbouwh] - [#84773])
+- Update attrs to 22.2.0 ([@frenck] - [#84772])
+- Improve `opengarage` generic typing ([@cdce8p] - [#84640])
+- Improve code quality Time of Day ([@gjohansson-ST] - [#79412])
+- Add distance sensor device class to Mazda integration ([@bdr99] - [#84659])
+- Do not depend MQTT CI tests on debug logs ([@jbouwh] - [#84783])
+- Fix code quality issues for HomeWizard ([@DCSBL] - [#84134])
+- Add PoE power sensor to UniFi integration ([@Kane610] - [#84314])
+- Add mysensors text platform ([@MartinHjelmare] - [#84667])
+- Add support for US in the Whirlpool integration ([@abmantis] - [#77237])
+- Cleanup pytest.approx in unit conversion tests ([@epenet] - [#84810])
+- Mark required fields in FlowResult typedict ([@frenck] - [#84811])
+- Refactor mysensors device tracker ([@MartinHjelmare] - [#84747])
+- Allow None connector for BaseHaRemoteScanner ([@akx] - [#84847])
+- Update todoist integration to use new official rest api library ([@boralyl] - [#79481])
+- Add `state_class` to the sensor entity descriptions for apcupsd integration ([@yuxincs] - [#84829])
+- Enable strict typing for apcupsd ([@yuxincs] - [#84861])
+- Move add Update entities to UniFi controller ([@Kane610] - [#84477])
+- Make device tracker use common UniFi entity class ([@Kane610] - [#84786])
+- Update orjson to 3.8.3 ([@frenck] - [#84878])
+- Renovate Ambient PWS config flow tests ([@bachya] - [#84879])
+- Improve `shelly` generic typing ([@cdce8p] - [#84889])
+- Add SFR Box integration ([@epenet] - [#84780])
+- Remove redundant Guardian handler unsub logic ([@bachya] - [#84905])
+- Fix handling of empty google_calendars.yaml file ([@allenporter] - [#84909])
+- Use entity descriptions in mysensors binary sensor ([@MartinHjelmare] - [#84897])
+- Add device info to transmission ([@avee87] - [#84660])
+- Renovate Notion config flow tests ([@bachya] - [#84906])
+- Renovate ReCollect Waste config flow tests ([@bachya] - [#84908])
+- Tiny clean up of the ESPHome config flow ([@balloob] - [#84903])
+- Use generator instead of single-list-unpack in PurpleAir config flow ([@bachya] - [#84922])
+- Update description to guide user to find ESPHome encryption key. ([@balloob] - [#84928])
+- Bump velbus-aio to 2022.12.0 ([@Cereal2nd] - [#83278])
+- Simplify AirVisual Pro sensor implementation ([@bachya] - [#84898])
+- Change ISY994 group device assignments ([@shbatm] - [#84933])
+- Assumed state in Bravia TV media player ([@Drafteed] - [#84885])
+- Remove legacy constant from UniFi ([@Kane610] - [#84947])
+- Bump whirlpool-sixth-sense to 0.18.0 ([@mkmer] - [#84945])
+- Fix Whirlpool type error in get_brand_for_region ([@mkmer] - [#84944])
+- Remove unused PurpleAir sensor constant ([@bachya] - [#84953])
+- Fix Whirlpool register_attr_callback ([@mkmer] - [#84962])
+- Improve roon volume translation logic ([@pavoni] - [#84916])
+- Fix some typos in ZHA comments ([@TheJulianJES] - [#84881])
+- Remove deprecated PI-Hole YAML config ([@mib1185] - [#84803])
+- Add optimistic option for MQTT climate ([@jbouwh] - [#84777])
+- Improve device automation tests ([@emontnemery] - [#84972])
+- Renovate PurpleAir tests ([@bachya] - [#84894])
+- Improve DataUpdateCoordinator typing in integrations (7) ([@cdce8p] - [#84890])
+- Update Pillow to 9.4.0 ([@frenck] - [#84974])
+- Update watchdog to 2.2.1 ([@frenck] - [#84982])
+- Move sensor constants and define public names from this module ([@frenck] - [#84973])
+- Add Whirlpool device_info and has_entity_name ([@mkmer] - [#84946])
+- Remove attributes from Twinkly lights ([@frenck] - [#84986])
+- Bump axis to v45 ([@Kane610] - [#84992])
+- Add initial test for nibe buttons ([@elupus] - [#84950])
+- Only run garbage collection per module ([@elupus] - [#84681])
+- Bump pytradfri to 9.0.1 ([@MartinHjelmare] - [#85001])
+- Bump AIOAladdinConnect to 0.1.50 ([@mkmer] - [#85006])
+- Adjust stale bot action to be more performant ([@frenck] - [#84999])
+- Disable sky connect config entry if USB stick is not plugged in ([@emontnemery] - [#84975])
+- Improve performance of fetching and storing history and events with the database ([@bdraco] - [#84870])
+- Update coverage to 7.0.2 ([@frenck] - [#85020])
+- Improve typing of SelectorConfig ([@frenck] - [#85022])
+- Update ISY994 integration to be model agnostic ([@shbatm] - [#85017])
+- Bump sqlalchemy to 1.4.45 ([@bdraco] - [#85021])
+- Improve `bluetooth` generic typing ([@cdce8p] - [#84891])
+- Update stale strings in repairs tests ([@emontnemery] - [#85046])
+- Clarify SensorDeviceClass.PRECIPITATION docstring ([@emontnemery] - [#85045])
+- Address late feedback in SFR Box sensors ([@epenet] - [#85038])
+- Correct return type of two raise-only methods in recorder ([@frenck] - [#85048])
+- Address late feedback in SFR Box config flow ([@epenet] - [#85037])
+- Clarify NumberDeviceClass.PRECIPITATION docstring ([@epenet] - [#85051])
+- Add hs_command_template and xy_command_template to mqtt light default schema ([@orosam] - [#84988])
+- Add bitcoin to strict typing ([@epenet] - [#85049])
+- Address late feedback in SFR Box coordinator ([@epenet] - [#85039])
+- Bump blebox_uniapi to 2.1.4 ([@riokuu] - [#85059])
+- Improve renault tests ([@epenet] - [#85065])
+- Improve onewire tests ([@epenet] - [#85064])
+- Improve SFR Box test coverage ([@epenet] - [#85054])
+- Bump pycoolmasternet-async and add filter and error code support to CoolMastetNet ([@amitfin] - [#84548])
+- Add services for transitioning snooz volume on or off ([@AustinBrunkhorst] - [#83515])
+- Bump pycoolmasternet-async and add coolmaster swing mode ([@amitfin] - [#82809])
+- Add door, opening and motion sensors to Xiaomi-ble ([@Ernst79] - [#84990])
+- Fix incorrectly return type on bad_identifier in UniFi Protect ([@frenck] - [#85050])
+- Zeversolar integration ([@kvanzuijlen] - [#84887])
+- Import mqtt and recorder locally in test fixtures ([@emontnemery] - [#85067])
+- Fix double time conversion in async_track_point_in_utc_time ([@bdraco] - [#85036])
+- Move add Device tracker entities to UniFi controller ([@Kane610] - [#84883])
+- Ruuvi Gateway integration ([@akx] - [#84853])
+- Add EnergyZero integration ([@klaasnicolaas] - [#83886])
+- Bump scapy to 2.5.0 ([@bdraco] - [#85074])
+- Add MQTT climate setting for current humidity ([@Stonos] - [#84592])
+- Make switch platform use common UniFi entity class ([@Kane610] - [#84458])
+- Fix multi inheritance with CoordinatorEntity ([@cdce8p] - [#85053])
+- Add translation key for IPP printer integration ([@piitaya] - [#84441])
+- ISY994: Add dhcp support for eisy ([@shbatm] - [#85083])
+- Correct initial config of MQTT climate ([@jbouwh] - [#85097])
+- Add ANWB Energie (virtual) integration ([@klaasnicolaas] - [#85077])
+- Revert "Disable sky connect config entry if USB stick is not plugged in" ([@emontnemery] - [#85103])
+- Sensibo select platform translations ([@gjohansson-ST] - [#82743])
+- Remove unnecessary `title` kwarg in options flows ([@bachya] - [#85131])
+- Add last timestamp to Tile attributes ([@jcconnell] - [#85095])
+- Renovate Airvisual tests ([@bachya] - [#84892])
+- Renovate Ridwell config flow tests ([@bachya] - [#85135])
+- Fix humidifier enforce type hints ([@MartinHjelmare] - [#85148])
+- Clean up pylint warning in zwave_js light ([@MartinHjelmare] - [#85149])
+- Fix typo in Tuya climate ([@o951753o] - [#85185])
+- Adjust set_humidity type hints ([@epenet] - [#85176])
+- Allow SensorDeviceClass.POWER_FACTOR unit None ([@emontnemery] - [#85181])
+- Add Mijndomein Energie virtual integration ([@klaasnicolaas] - [#85165])
+- Generalize a base ReCollect Waste entity ([@bachya] - [#85166])
+- Bump pybravia to 0.3.0 ([@Drafteed] - [#85127])
+- Bumb python-homewizard-energy to 1.4.0 ([@DCSBL] - [#85114])
+- Update orjson to 3.8.4 ([@frenck] - [#85195])
+- Add econet device and state classes ([@davidflypei] - [#84201])
+- Add WS endpoint config/entity_registry/get_entries ([@emontnemery] - [#85063])
+- Remove unneeded type checking from Sensibo ([@gjohansson-ST] - [#85231])
+- Add Airzone Select platform support ([@Noltari] - [#76415])
+- Assign ISY994 program entities to hub device, simplify device info ([@shbatm] - [#85224])
+- Fix translation keys for NAM sensors ([@frenck] - [#85245])
+- Update coverage to 7.0.3 ([@frenck] - [#85197])
+- Add support for `WetDry`, `WindHeading`, and `Flex` fields in LaCrosse View ([@IceBotYT] - [#79062])
+- Bump devolo_plc_api to 1.0.0 ([@Shutgun] - [#85235])
+- Remove redundant CONF_PATH from sabnzbd config flow ([@shaiu] - [#85214])
+- Bump steamodd to 4.23 ([@tkdrob] - [#85071])
+- Restore low battery state on ISY994 Insteon heartbeat nodes ([@shbatm] - [#85209])
+- Avoid some data merges in the bluetooth remote scanners when nothing has changed ([@bdraco] - [#85270])
+- Add additional device classes and units to ISY994 aux sensors ([@shbatm] - [#85274])
+- Add LD2410 BLE integration ([@930913] - [#83883])
+- Improve weather Forecast typing ([@frenck] - [#85019])
+- Bump bluetooth-data-tools to 0.3.1 for ld2410-ble ([@cgarwood] - [#85278])
+- Use async with timeout ([@balloob] - [#85281])
+- Bump actions/checkout from 3.2.0 to 3.3.0 (@dependabot - [#85285])
+- Add diagnostics to EnergyZero integration ([@klaasnicolaas] - [#85164])
+- Fix some pytest warning for helpers ([@balloob] - [#85283])
+- Renovate OpenUV config flow tests ([@bachya] - [#85150])
+- Address late feedback in SFR Box enum sensors ([@epenet] - [#84977])
+- lacrosse_view: Set entity availablity depending on the data ([@nijel] - [#85303])
+- Bump sfrbox-api to 0.0.2 ([@epenet] - [#85302])
+- Complete test coverage for SFR Box ([@epenet] - [#85068])
+- Make sensor platform use common UniFi entity class ([@Kane610] - [#84818])
+- Increase Netgear speedtest period to 2 hours ([@starkillerOG] - [#85299])
+- Mark Yamaha media player as unavailable when unresponsive ([@sredna] - [#85018])
+- Renovate Tile config flow tests ([@bachya] - [#85154])
+- Update debugpy to 1.6.5 ([@frenck] - [#85297])
+- Fix Fitbit state for values over 999 ([@sw-carlos-cristobal] - [#85251])
+- Add EasyBaby support to Tuya ([@frenck] - [#85298])
+- Add addtional device classes to ISY994 sensors and bump PyISY to 3.0.11 ([@shbatm] - [#85315])
+- Add Whirlpool washer and dryer to Whirlpool integration ([@mkmer] - [#85066])
+- Drop ChainMap in translation cache ([@bdraco] - [#85260])
+- Use Platform enum and remove DOMAIN as X imports in ISY994 ([@shbatm] - [#85341])
+- Add query button entities to ISY994 devices and hub ([@shbatm] - [#85337])
+- Bump aioesphomeapi to 13.0.3 ([@bdraco] - [#85356])
+- Bump pyrainbird to 1.1.0 ([@allenporter] - [#85358])
+- Correct memory leak for rfxtrx lighting4 devices ([@elupus] - [#85354])
+- Validate length of rfxtrx identifier ([@elupus] - [#85352])
+- Make API key mandatory for PI-Hole ([@mib1185] - [#85264])
+- Move platform related stuff out of const.py in PI-Hole integration ([@mib1185] - [#85237])
+- Bump volkszahler to 0.4.0 ([@bbr111] - [#85335])
+- Bump accuweather package to 0.5.0 ([@bieniu] - [#85326])
+- Remove own sensor description in PI-Hole ([@mib1185] - [#85371])
+- Improve `flume` generic typing ([@cdce8p] - [#85329])
+- Improve `devolo_home_network` generic typing ([@cdce8p] - [#85328])
+- Improve `sleepiq` generic typing ([@cdce8p] - [#85330])
+- Improve DataUpdateCoordinator typing in integrations (9) ([@cdce8p] - [#85332])
+- Improve DataUpdateCoordinator typing in integrations (8) ([@cdce8p] - [#85331])
+- Switch to attr use in philips js ([@elupus] - [#85345])
+- Add config flow for Rain Bird ([@allenporter] - [#85271])
+- EZVIZ: Add mac to device info ([@RenierM26] - [#85378])
+- Add beep button entity to ISY994 Insteon devices ([@shbatm] - [#85367])
+- Add Google Mail integration ([@tkdrob] - [#82637])
+- Add Starlink Integration ([@boswelja] - [#77091])
+- Add QNAP QSW sensors for each port ([@Noltari] - [#76811])
+- Hassil intents ([@synesthesiam] - [#85156])
+- Fix unit of illuminance in Plugwise illuminance sensor ([@bouwew] - [#85392])
+- Mark repo as safe directory to git config ([@RoboMagus] - [#83755])
+- Avoid pattern search entry when there are no patterns in the entity filter ([@bdraco] - [#85404])
+- Update copyright year to 2023 ([@davet2001] - [#85396])
+- SQL reintroduce yaml support ([@gjohansson-ST] - [#75205])
+- Plugwise: add support for 3-phase DSMR's ([@bouwew] - [#85421])
+- Remove obsolete "Domains blocked" extra attribute from PI-Hole sensors ([@mib1185] - [#85424])
+- Add Nuki battery percentage sensor ([@Savjee] - [#84968])
+- Limit Whirlpool timestamp changes to +/- 60 seconds ([@mkmer] - [#85368])
+- Small speed up to frequently called datetime functions ([@bdraco] - [#85399])
+- Use subscription callbacks to discover Sonos speakers ([@jjlawren] - [#85411])
+- Code styling tweaks to the MQTT integration ([@frenck] - [#85463])
+- Code styling tweaks to Bluetooth ([@frenck] - [#85448])
+- Address a few deprecation warnings in tests ([@scop] - [#85472])
+- Bump soco to 0.29.0 ([@jjlawren] - [#85473])
+- Code styling tweaks to the AdGuard Home integration ([@frenck] - [#85468])
+- Fix fetching of initial data of Netgear sensors ([@starkillerOG] - [#85450])
+- Update pydocstyle to 6.2.3 ([@cdce8p] - [#85449])
+- Code styling tweaks to the WLED integration ([@frenck] - [#85466])
+- Code styling tweaks to the LaMetric integration ([@frenck] - [#85469])
+- Handle timeouts in Sonos, reduce logging noise ([@jjlawren] - [#85461])
+- Code styling tweaks to core entity components ([@frenck] - [#85460])
+- Code styling tweaks to core helpers ([@frenck] - [#85441])
+- Expose async_scanner_devices_by_address from the bluetooth api ([@dbuezas] - [#83733])
+- Add missing context in homewizard assistant error ([@eMerzh] - [#85397])
+- Bump aioesphomeapi to 13.0.4 ([@bdraco] - [#85406])
+- Google Assistant SDK: support Korean and Japanese ([@tronikos] - [#85419])
+- Upgrade RestrictedPython to 6.0 ([@scop] - [#85426])
+- Z-Wave.Me: Cover: Fixed calibration errors and add missing is_closed ([@PoltoS] - [#85452])
+- Z-Wave.Me integration: Add code owners to receive notifications on github ([@PoltoS] - [#85476])
+- Add network resource button entities to ISY994 and bump PyISY to 3.0.12 ([@shbatm] - [#85429])
+- Code styling tweaks to core utils & YAML loader ([@frenck] - [#85433])
+- Bump actions/upload-artifact from 3.1.1 to 3.1.2 (@dependabot - [#85489])
+- Use power factor device class in Fronius integration again ([@farmio] - [#85495])
+- Bump actions/cache from 3.2.2 to 3.2.3 (@dependabot - [#85488])
+- Add config flow to imap ([@engrbm87] - [#74623])
+- Default disable voltage sensors in Plugwise ([@CoMPaTech] - [#85451])
+- Allow converting units of energy sensors ([@emontnemery] - [#85497])
+- Bump axis to v46 ([@Kane610] - [#85431])
+- Update sensor test ([@emontnemery] - [#85522])
+- Adjust zwave_js diagnostics ([@epenet] - [#85524])
+- Improve integration type hints for diagnostics ([@epenet] - [#85526])
+- Fix translation keys for Yamaha MusicCast selectors ([@frenck] - [#85292])
+- Whirlpool general code cleanup ([@mkmer] - [#85387])
+- Bump aiohue library to 4.6.1 ([@marcelveldt] - [#85504])
+- Add "Schedule Part" enum sensor to Venstar thermostat ([@scolby33] - [#84332])
+- Refactor entity registry JSON cache ([@emontnemery] - [#85085])
+- Add a calendar entity to ReCollect Waste ([@bachya] - [#85347])
+- Pin matplotlib to 3.6.1 ([@frenck] - [#85540])
+- Bump pySwitchbee to 1.7.19 ([@jafar-atili] - [#84442])
+- Refactor device registry JSON cache ([@emontnemery] - [#85539])
+- Split wheels building of all requirements ([@frenck] - [#85564])
+- Only build compressed states once ([@bdraco] - [#85561])
+- Add UniFi Protect Chime Duration entity ([@AngellusMortis] - [#85538])
+- Add IntelliFire lights ([@jeeftor] - [#79816])
+- Load custom sentences from config directory ([@synesthesiam] - [#85558])
+- Netgear fix missing await ([@starkillerOG] - [#85574])
+- Google Assistant SDK conversation agent ([@tronikos] - [#85499])
+- Plugwise: add missing P1v2 sensors ([@bouwew] - [#85589])
+- Adapt tplink to use has_entity_name ([@rytilahti] - [#85577])
+- Bump dbus-fast to 1.84.0 ([@bdraco] - [#85568])
+- Bump bleak to 0.19.5 ([@bdraco] - [#85567])
+- Code styling tweaks to the Cast integration ([@frenck] - [#85560])
+- Add switch platform to devolo_home_network ([@Shutgun] - [#72494])
+- Revert "Adapt tplink to use has_entity_name" ([@frenck] - [#85595])
+- Bump whirlpool-sixth-sense to 0.18.1 ([@mkmer] - [#85521])
+- Simplify sensor state validation ([@epenet] - [#85513])
+- Deprecate Magicseaweed ([@frenck] - [#85527])
+- Bump motionEye client version to v0.3.14 ([@dermotduffy] - [#85408])
+- Adjust diagnostic return type in Sonos ([@epenet] - [#85585])
+- Drop title from repairs flows (2) ([@emontnemery] - [#85597])
+- Further generalize base Ridwell entity ([@bachya] - [#85486])
+- Reolink add support for flv protocol ([@starkillerOG] - [#85576])
+- Fix unknown data in google wifi ([@epenet] - [#85616])
+- Remove invalid state class in hue ([@epenet] - [#85617])
+- Fix unknown data in influxdb ([@epenet] - [#85619])
+- Fix unknown data in qwikswitch ([@epenet] - [#85621])
+- Remove invalid unit of measurement in mfi ([@epenet] - [#85620])
+- Remove invalid state class in tado ([@epenet] - [#85624])
+- Remove invalid state class in deconz ([@epenet] - [#85615])
+- Fix unknown data in vultr ([@epenet] - [#85627])
+- Add kitchen_sink integration ([@emontnemery] - [#85592])
+- Fix unknown data in homematicip_cloud ([@epenet] - [#85618])
+- Bump AIOAladdinConnect to 0.1.52 ([@mkmer] - [#85632])
+- Bump plugwise to v0.27.1 ([@bouwew] - [#85630])
+- Add diagnostics platform to SFR Box ([@epenet] - [#85500])
+- Google Assistant SDK: Fix broadcast command in Japanese ([@tronikos] - [#85636])
+- Remove deprecated YAML manual config for PVPC Hourly Pricing ([@azogue] - [#85614])
+- Remove invalid device class in gios ([@epenet] - [#85611])
+- Bump bluemaestro-ble to 0.2.1 ([@Ernst79] - [#85648])
+- Add ISY994 variables as number entities ([@shbatm] - [#85511])
+- Remove old migrate unique ID code from ISY994 ([@shbatm] - [#85641])
+- Update xknx to 2.3.0 - add some DPTs, Routing security ([@farmio] - [#85658])
+- Add diagnostics to bmw_connected_drive ([@rikroe] - [#74871])
+- Add D-Link config flow ([@tkdrob] - [#84927])
+- Make the kitchen_sink integration trigger statistics issues ([@emontnemery] - [#79742])
+- Revert "Bump steamodd to 4.23" ([@jbouwh] - [#85651])
+- Handle ESPHome dashboard discovery ([@balloob] - [#85662])
+- Bump `aiopvpc` to 4.0.1 ([@azogue] - [#85612])
+- Bump whirlpool-sixth-sense to 0.18.2 ([@mkmer] - [#85679])
+- Bump bthome-ble to 2.5.0 ([@Ernst79] - [#85670])
+- Remove invalid device class in energyzero ([@epenet] - [#85690])
+- Automatically fetch the encryption key from the ESPHome dashboard ([@balloob] - [#85709])
+- Add ESPHome update entities ([@balloob] - [#85717])
+- Use fallback advertising interval for non-connectable Bluetooth devices ([@Alcoinus] - [#85701])
+- Bump moehlenhoff-alpha2 to 1.3.0 ([@TitanNano] - [#85720])
+- Remove unreachable config entry migration in pvpc hourly pricing ([@azogue] - [#85700])
+- Add Energie VanOns virtual integration ([@klaasnicolaas] - [#85704])
+- Clean attributes in pvpc hourly pricing ElecPriceSensor ([@azogue] - [#85688])
+- Address review comments for D-Link config flow ([@tkdrob] - [#85712])
+- Add binary_sensor to Starlink ([@boswelja] - [#85409])
+- Consolidate device info and clean-up ISY994 code base ([@shbatm] - [#85657])
+- Cleanup Shelly sensor description ([@thecode] - [#85732])
+- Add RPC smoke binary sensor to Shelly integration ([@bieniu] - [#85697])
+- Add unitless unit converter ([@emontnemery] - [#85694])
+- Add system diagnostic sensors to SFR Box ([@epenet] - [#85184])
+- Add WS command sensor/device_class_convertible_units ([@emontnemery] - [#85213])
+- Add WS command number/device_class_convertible_units ([@emontnemery] - [#85598])
+- Deprecate power_command_topic for MQTT climate ([@jbouwh] - [#85229])
+- Add binary sensor platform to SFR Box ([@epenet] - [#85508])
+- Change Ruuvi movement counter to correct state class ([@osmaa] - [#85677])
+- Fix sensor test ([@emontnemery] - [#85740])
+- Refactor energy validation issue reporting ([@emontnemery] - [#85523])
+- Fix gen_requirements_all script permissions ([@MartinHjelmare] - [#85745])
+- Pass language to the Airly API ([@bieniu] - [#85655])
+- Add missing enum item in SFR Box ([@epenet] - [#85746])
+- Bump sfrbox-api to 0.0.4 ([@epenet] - [#85742])
+- Bump screenlogicpy to 0.6.2 ([@dieselrabbit] - [#85725])
+- Follow-up on ReCollect Waste calendar entity ([@bachya] - [#85766])
+- Add statistics support to iperf3 ([@yuvalabou] - [#85771])
+- Update coverage to 7.0.5 ([@frenck] - [#85774])
+- Fix IoT Class for Torque integration ([@nareddyt] - [#85667])
+- Implement sync time button for moehlenhoff_alpha2 ([@TitanNano] - [#85676])
+- Add nightly intents to nightly build ([@frenck] - [#85760])
+- Address small review comments in ESPHome ([@frenck] - [#85770])
+- Update sentry-sdk to 1.13.0 ([@frenck] - [#85772])
+- Move ISY994 data to dataclass and remove bad entities ([@shbatm] - [#85744])
+- Bump georss_ign_sismologia_client to 0.6 ([@exxamalte] - [#85784])
+- Adjust diagnostics return types ([@epenet] - [#85525])
+- Key Huawei LTE routers in hass.data by config entry rather than unique id ([@scop] - [#85788])
+- Fix nightly intents in nightly builds ([@frenck] - [#85806])
+- Downgrade integrations without code owner ([@epenet] - [#85752])
+- Fix nightly intents in nightly builds (part2) ([@frenck] - [#85818])
+- Make use of str.removeprefix and .removesuffix ([@scop] - [#85584])
+- Remove 'tariff' edition from options-flow ([@azogue] - [#85703])
+- Increase max line size for ingress addons ([@mdegat01] - [#85775])
+- Abort config flow if Airly measuring station does not exist ([@bieniu] - [#85652])
+- Collection of typing improvements in common test helpers ([@frenck] - [#85509])
+- Clean up old config migration of Axis config ([@Kane610] - [#85671])
+- Huawei LTE sensor improvements ([@scop] - [#84019])
+- Bump PyISY to 3.1.4 to fix dependency issues ([@shbatm] - [#85825])
+- Deprecate YAML configuration for ISY994 ([@shbatm] - [#85797])
+- Bump actions/setup-python from 4.4.0 to 4.5.0 (@dependabot - [#85801])
+- Bump screenlogicpy to 0.6.3 ([@dieselrabbit] - [#85799])
+- Update oralb to show battery percentage ([@Lash-L] - [#85800])
+- Remove dead code path in devolo Home Network ([@Shutgun] - [#85790])
+- Store Axis device with entry_id key rather than unique_id ([@Kane610] - [#85673])
+- Bump cryptography to 39.0.0 ([@bdraco] - [#85846])
+- Bump python-matter-server to 1.1.0 ([@MartinHjelmare] - [#85840])
+- Bump reolink-aio to 0.2.2 ([@starkillerOG] - [#85848])
+- Add On Level number entities to ISY994 Insteon Devices ([@shbatm] - [#85798])
+- Use IntEnum for hassfest quality scale ([@epenet] - [#85817])
+- Create and use config_entry fixture for Axis integration tests ([@Kane610] - [#85865])
+- Avoid linear searches for excluded events ([@bdraco] - [#85851])
+- Downgrade MQTT logging ([@thecode] - [#85867])
+- Bump total_connect_client to 2023.1 ([@austinmroczek] - [#85882])
+- Bump PyISY to 3.1.5 and fix bad Z-Wave properties from eisy ([@shbatm] - [#85900])
+- Add dhcp discovery to D-Link ([@tkdrob] - [#85661])
+- Use parametrize to modify Axis test fixtures ([@Kane610] - [#85884])
+- Add Insteon ramp rate select entities to ISY994 ([@shbatm] - [#85895])
+- Bump tololib to v0.1.0b4 ([@MatthiasLohr] - [#85866])
+- Startup error message improvements ([@scop] - [#85860])
+- Fix conflict between stale bot rules ([@frenck] - [#85923])
+- Bump reolink-aio to 0.2.3 ([@starkillerOG] - [#85871])
+- Allow empty motionEye passwords ([@dermotduffy] - [#85407])
+- Add conversation to default config ([@balloob] - [#85877])
+- Replace deprecated unit converter utils ([@mib1185] - [#85927])
+- Replace the usage of unit constants by enumerations in Tests [a-e] ([@mib1185] - [#85932])
+- Fix apcupsd spamming logs when host is unavailable ([@ondras12345] - [#85920])
+- Replace the usage of unit constants by enumerations in Tests [f-g] ([@mib1185] - [#85933])
+- Replace the usage of unit constants by enumerations in Tests [o-r] ([@mib1185] - [#85936])
+- Replace the usage of unit constants by enumerations in Tests [h-l] ([@mib1185] - [#85934])
+- Replace the usage of unit constants by enumerations in Tests [m-n] ([@mib1185] - [#85935])
+- Address invalid keys in translation for whirlpool ([@mkmer] - [#85849])
+- Implement state error handling in HomeWizard ([@DCSBL] - [#84991])
+- Make translations keys check hassfest more strict ([@frenck] - [#85221])
+- Cleanup webOS TV YAML import leftovers ([@thecode] - [#85957])
+- Replace the usage of unit constants by enumerations in Tests [v-z] ([@mib1185] - [#85938])
+- Clean up legacy import from HomeWizard ([@frenck] - [#85960])
+- Use value of enum ([@jbouwh] - [#85944])
+- Upgrade HomeWizard to platinum quality ([@DCSBL] - [#82580])
+- Core code styling improvements ([@frenck] - [#85963])
+- Bump pymodbus library to V3.1.0 ([@janiversen] - [#85961])
+- Bump PyISY to 3.1.6 ([@shbatm] - [#85974])
+- Ensure remote bluetooth adapters are loaded before integrations that need them ([@bdraco] - [#85723])
+- Make Synology DSM integration fully async ([@mib1185] - [#85904])
+- Support availability for ISY994 devices ([@shbatm] - [#85928])
+- Deprecate ISY994 custom cleanup entities service ([@shbatm] - [#85931])
+- Add Starlink reboot button ([@boswelja] - [#85729])
+- Add friendly name support for ESPHome ([@jesserockz] - [#85976])
+- Add locking and unlocking to MQTT lock ([@Nardol] - [#85779])
+- Replace the usage of unit constants by enumerations in Tests [s-u] ([@mib1185] - [#85937])
+- Fix fetching history include_start_time_state when timezone is not UTC ([@bdraco] - [#85983])
+- Add state_class to mill Estimated CO2 sensor ([@Jorei] - [#85894])
+- Update python-homewizard-energy to 1.5.0 ([@frenck] - [#85966])
+- Update pytest to 7.2.1 ([@frenck] - [#85990])
+- Add sensors for new P1 datapoints in HomeWizard ([@DCSBL] - [#85198])
+- Warn if numeric sensors have an invalid value ([@epenet] - [#85863])
+- Make the kitchen_sink integration set up a config entry ([@emontnemery] - [#85680])
+- Improve typing of HomeWizard sensors ([@frenck] - [#85997])
+- Allow None in add_suggested_values_to_schema ([@epenet] - [#85763])
+- Cleanup of HomeWizard button platform ([@frenck] - [#85999])
+- Remove WebOS TV client wrapper ([@thecode] - [#86001])
+- Clean up unused import steps from HomeWizard config flow ([@frenck] - [#86002])
+- Bump pykoplenti to 1.0.0 ([@lemanjo] - [#83251])
+- Add missing mock in fritzbox ([@epenet] - [#86005])
+- Adjust invalid test values in rest ([@epenet] - [#86009])
+- Adjust invalid test values in snmp ([@epenet] - [#86006])
+- Add sensor state class validation for device classes ([@frenck] - [#84402])
+- Adjust invalid test values in tcp ([@epenet] - [#86007])
+- Adjust invalid test values in template ([@epenet] - [#86008])
+- Remove invalid uom from mqtt tests ([@epenet] - [#86004])
+- Bring modbus back to 100% test coverage ([@janiversen] - [#85972])
+- Adjust sensor validation warning ([@epenet] - [#86017])
+- Add tier summation delivered for Lixee Zlinky TIC ([@piitaya] - [#82602])
+- Implement "group members assume state" option for ZHA ([@TheJulianJES] - [#84938])
+- Avoid import homeassistant.const as a module ([@epenet] - [#85991])
+- Small refactor to HomeWizard config flow ([@frenck] - [#86020])
+- Fix entity cleanup and naming bugs in ISY994 ([@shbatm] - [#86023])
+- Code styling tweaks to the recorder integration ([@frenck] - [#86030])
+- Remove SSDP discovery from Hue ([@marcelveldt] - [#85506])
+- Add Jellyfin media source support for tvshows ([@j-stienstra] - [#85953])
+- Remove the usage of HA core unit constant in withings own unit definitions ([@mib1185] - [#85942])
+- Deprecate ISY994 custom reload service ([@shbatm] - [#86019])
+- Replace deprecated constants and utils by their successors in NWS tests ([@mib1185] - [#85926])
+- Add Fire TV virtual integration ([@jrieger] - [#85741])
+- Add Insteon backlight control support to ISY994, bump PyISY to 3.1.8 ([@shbatm] - [#85981])
+- Set deviceclass to speaker for Sonos media_player ([@mvdwetering] - [#80694])
+- Add enable/disable config switch for ISY994 devices ([@shbatm] - [#85975])
+- Run `flake8` on more files ([@mxr] - [#85333])
+- Make central AvmWrapper class fully async in Fritz!Tools ([@mib1185] - [#83768])
+- Code cleanup in litterrobot ([@natekspencer] - [#86037])
+- Fix logic of disabled condition for "OR" ([@karliemeads] - [#79718])
+- Bump openerz-api to 0.2.0 ([@matteocorti] - [#86013])
+- Set onewire quality scale to gold ([@epenet] - [#85748])
+- Add Tuya sensor for Smart IR remote device ([@tyge68] - [#85955])
+- Add switch to Tuya product category wsdcg ([@rsmatias] - [#85762])
+- Deduplicate some entity registry code ([@emontnemery] - [#85541])
+- Improve type hints in nws ([@kamiyo] - [#83173])
+- Update orjson to 3.8.5 ([@frenck] - [#86043])
+- Add SSHd and GH CLI to devcontainer to support `gh net` ([@iMicknl] - [#81623])
+- Update whois to 0.9.23 ([@frenck] - [#86042])
+- Add some sensors and controls to tuya dehumidifier ([@Andre0512] - [#85380])
+- Remove signal strength state class from Huawei LTE transmit power sensor ([@scop] - [#85973])
+- Add typings to OVO Energy integration ([@timmo001] - [#75944])
+- oralb async_poll doc comment typo ([@Lash-L] - [#86049])
+- Add EufyLife Bluetooth integration ([@bdr99] - [#85907])
+- Code styling tweaks to the zeroconf integration ([@frenck] - [#86048])
+- Address Starlink code quality and add update sensor ([@boswelja] - [#86066])
+- Allow converting units of additional sensor device classes ([@emontnemery] - [#86072])
+- Make event.time_tracker_utcnow patchable with freezegun ([@bdraco] - [#86051])
+- Remove deprecated Renault service ([@epenet] - [#86070])
+- Removes OpenALPR Local integration ([@frenck] - [#85544])
+- Add vicare buffer top/main temperature sensors ([@oischinger] - [#79466])
+- Add sous vide start functionality ([@hpirila] - [#84447])
+- Raise HomeAssistantError in Renault ([@epenet] - [#86071])
+- Set renault quality scale to platinum ([@epenet] - [#85753])
+- Fix invalid constant in vicare ([@epenet] - [#86079])
+- Add diagnostics to devolo Home Network ([@Shutgun] - [#86022])
+- Soma connect update ([@ratsept] - [#85682])
+- Add Thread integration ([@emontnemery] - [#85002])
+- Fix typo in energy: misplaced closing brace ([@lunmay] - [#86027])
+- Add Enum device class for HomeWizard active tariff ([@DCSBL] - [#86078])
+- Remove config entry specifics from FlowManager ([@emontnemery] - [#85565])
+- Use Home Assistant swing modes in tado climate ([@emontnemery] - [#84278])
+- Allow translating select selector options ([@jbouwh] - [#85531])
+- Bump pylitejet to 0.4.6 (now with async!) ([@joncar] - [#85493])
+- Allow manually setting up the Thread integration ([@emontnemery] - [#86087])
+- Adjust Thread config flow ([@emontnemery] - [#86097])
+- Subclass a `DataUpdateCoordinator` for Ridwell ([@bachya] - [#85644])
+- Adjust kitchen_sink test ([@emontnemery] - [#86099])
+- Improve logging shutdown ([@emontnemery] - [#85812])
+- Adjust translations for zha buttons ([@elupus] - [#86095])
+- Remove deprecated zamg YAML config ([@killer0071234] - [#86113])
+- Ensure flux_led does not try to reload while setup is in progress ([@bdraco] - [#86122])
+- Code styling tweaks to the Alexa integration ([@frenck] - [#86121])
+- Update to pylutron_caseta to 0.18.0 ([@mdonoughe] - [#86133])
+- Bump AIOAladdinConnect to 0.1.53 ([@mkmer] - [#86129])
+- Reset Modbus value on down ([@GrahamJB1] - [#86127])
+- Remove WebOS TV script translation leftover ([@thecode] - [#86109])
+- Only wait for import flows to initialize at setup ([@emontnemery] - [#86106])
+- Code styling tweaks to the ESPHome integration ([@frenck] - [#86146])
+- Bump pybravia to 0.3.1 ([@Drafteed] - [#86153])
+- Fix incorrect type hint in Filter ([@epenet] - [#86141])
+- Rename precision variable in Filter ([@epenet] - [#86090])
+- Add missing raise for exceptions ([@cdce8p] - [#86155])
+- Remove unnecessary try-else (4) ([@cdce8p] - [#86161])
+- Remove unnecessary try-else (5) ([@cdce8p] - [#86164])
+- Remove unnecessary try-else (1) ([@cdce8p] - [#86158])
+- Remove unnecessary try-else (2) ([@cdce8p] - [#86159])
+- Remove unnecessary try-else (3) ([@cdce8p] - [#86160])
+- Change 'Sky Connect' to 'SkyConnect' ([@emontnemery] - [#86166])
+- Update pylint to 2.15.10 ([@cdce8p] - [#86167])
+- Change Honeywell somecomfort API to AIOSomecomfort API ([@mkmer] - [#86102])
+- Use more _attrs_* in Axis entities ([@Kane610] - [#85555])
+- Add OTBR WebSocket API ([@balloob] - [#86107])
+- Add reauth flow to webOS TV integration ([@thecode] - [#86168])
+- Reload ESPHome config entries when dashboard info received ([@balloob] - [#86174])
+- Add sensor platform to LD2410BLE ([@930913] - [#85276])
+- ESPHome dashboard tweaks ([@balloob] - [#86176])
+- Rename Eufy integration to EufyHome ([@bdr99] - [#86065])
+- Cleanup Insteon code issues ([@teharris1] - [#86173])
+- Add a switch to Starlink for stow/unstow ([@boswelja] - [#85730])
+- Add conversation reload service ([@synesthesiam] - [#86175])
+- Add type hints to Filter integration tests ([@epenet] - [#86169])
+- Add type hints to Filter ([@epenet] - [#86165])
+- Clean up HomeWizard diagnostic tests ([@frenck] - [#86211])
+- Support float in modbus register sensor ([@GrahamJB1] - [#86128])
+- 75142 Added QEMU_CPU ARG to the dockerfile ([@Gerigot] - [#86178])
+- Add filter to strict-typing ([@epenet] - [#86215])
+- modbus slave unique ids ([@GrahamJB1] - [#86126])
+- Fix stray string literal in bluetooth test wrapper ([@akx] - [#86228])
+- Fix docstring in esphome.bluetooth.client ([@akx] - [#86226])
+- Add conversation mobile app webhook ([@balloob] - [#86239])
+- Update ESPHome devices from HA ([@balloob] - [#86249])
+- HassTurnOn/Off intents to also handle cover entities ([@synesthesiam] - [#86206])
+- Improve `ld2410_ble` generic typing ([@cdce8p] - [#86258])
+- Fix docstring in helpers.template_entity ([@akx] - [#86227])
+- Bumb python-homewizard-energy to 1.6.0 ([@DCSBL] - [#86255])
+- Bump reolink-aio to 0.3.0 ([@starkillerOG] - [#86259])
+- Shelly - use common coordinator base class ([@thecode] - [#86262])
+- Add option to run only pylint or mypy tests [ci] ([@cdce8p] - [#86260])
+- Add jammed state support for MQTT lock ([@jbouwh] - [#86010])
+- Support password less PI-Hole installations ([@mib1185] - [#86184])
+- Add sensors for smart and gas meter identifiers (serial numbers) in HomeWizard ([@DCSBL] - [#86282])
+- Add Stookwijzer ([@fwestenberg] - [#84435])
+- Stricter pylint message control ([@frenck] - [#86154])
+- Code styling tweaks to the tests - Part 1 ([@frenck] - [#86192])
+- Import recorder locally in test fixtures ([@emontnemery] - [#86286])
+- Rename `otbr` integration ([@emontnemery] - [#86284])
+- Add battery device class to Glances battery sensor ([@frenck] - [#86278])
+- Automatically set up HomeWizard during onboarding ([@frenck] - [#86024])
+- Update python-homewizard-energy to 1.6.1 ([@frenck] - [#86274])
+- Refactor HomeWizard switch platform to use entity descriptions ([@frenck] - [#86011])
+- Remove deprecated Uptime YAML configuration ([@frenck] - [#86292])
+- Address Honeywell late review ([@mkmer] - [#86202])
+- Reolink add binary sensors ([@starkillerOG] - [#85654])
+- Update stale docstring on demo lock platform ([@jbouwh] - [#86306])
+- Fix `state_class` for Accuweather `precipitation` sensor ([@bieniu] - [#86088])
+- Correct pet_weight sensor state class in litterrobot ([@natekspencer] - [#86320])
+- Bump PyISY to 3.1.9 for performance improvements ([@shbatm] - [#86297])
+- Improve device automation validation ([@emontnemery] - [#86143])
+- Conversation config ([@synesthesiam] - [#86326])
+- Ensure all unit converters are tested ([@epenet] - [#86271])
+- Bump bcrypt to 4.0.1 ([@epenet] - [#86338])
+- Fix incorrect mock in whirlpool ([@Lash-L] - [#86331])
+- Fix preset modes in Honeywell ([@mkmer] - [#86293])
+- Fix Honeywell unavailable state on connection lost ([@mkmer] - [#86312])
+- Fix edge cases for adding/enabling sensors for UniFi Protect ([@AngellusMortis] - [#86329])
+- Add zeroconf discovery to Synology DSM ([@bdraco] - [#86062])
+- Restore flume scan interval to match app ([@bdraco] - [#86354])
+- Bump flux_led to 0.28.35 ([@bdraco] - [#86352])
+- Switch an `asyncio.wait_for` in the template helper to `async_timeout` ([@bdraco] - [#86349])
+- Don't interpret negative verbosity as debug ([@elupus] - [#86318])
+- React on IP changes in devolo Home Network ([@Shutgun] - [#86195])
+- Cleanup Shelly imports ([@thecode] - [#86359])
+- Revert "Add SSHd and GH CLI to devcontainer to support `gh net`" ([@thecode] - [#86360])
+- Add support for streaming (push) history ([@bdraco] - [#85892])
+- Avoid creating logbook stream task if unsubscribed while waiting for executor ([@bdraco] - [#86363])
+- Allow changing the Insteon USB device ([@teharris1] - [#86290])
+- Increase default recorder commit interval to 5 seconds ([@bdraco] - [#86115])
+- Split history websocket API into its own file ([@bdraco] - [#86364])
+- Bump pytrafikverket to 0.2.3 ([@gjohansson-ST] - [#86341])
+- Add missing ratio test cases in unit conversion ([@epenet] - [#86340])
+- Upgrade python-homewizard-energy to 1.7.0 ([@DCSBL] - [#86383])
+- Bump py-synologydsm-api to 2.0.2 ([@mib1185] - [#86374])
+- Bump AIOSomecomfort to 0.0.3 ([@mkmer] - [#86371])
+- Add per-file-ignore to pylint ([@epenet] - [#86289])
+- Use fixtures to setup Axis integration in tests ([@Kane610] - [#86034])
+- Remove history use_include_order configuration option ([@bdraco] - [#86365])
+- Bump version python-bsblan to 0.5.9 ([@liudger] - [#86373])
+- Fix repr for States and Events without a timestamp ([@bdraco] - [#86391])
+- Bump aiounifi to v44 ([@Kane610] - [#86381])
+- Bump yalexs-ble to 1.12.7 ([@bdraco] - [#86396])
+- Drop Python 3.9 support ([@frenck] - [#85456])
+- Add mysensors remote platform ([@MartinHjelmare] - [#86376])
+- Add Reolink dhcp discovery ([@starkillerOG] - [#85880])
+- Shelly - handle None in RPC power sensors ([@thecode] - [#86399])
+- Cleanup Climacell translations ([@thecode] - [#86325])
+- Improve MQTT transport select label ([@jbouwh] - [#86216])
+- Upgrade caldav to 1.0.1 ([@daniele-athome] - [#85536])
+- Change @conway20 to @Lash-L in OralB codeowners after github rename ([@Lash-L] - [#86416])
+- Bump tesla_powerwall lib version to 0.3.19 ([@daniel-simpson] - [#86421])
+- Add support for additional fields to nut ([@zebardy] - [#83265])
+- Import `ParamSpec` from typing [Py310] ([@cdce8p] - [#86413])
+- Update python version used for pylint [Py310] ([@cdce8p] - [#86414])
+- Update Union typing (1) [Py310] ([@cdce8p] - [#86424])
+- Update Union typing (2) [Py310] ([@cdce8p] - [#86425])
+- Bump pre-commit-hooks to 4.4.0 ([@akx] - [#82984])
+- Update Union typing (4) [Py310] ([@cdce8p] - [#86427])
+- Update Union typing (5) [Py310] ([@cdce8p] - [#86428])
+- Update Optional typing (2) [Py310] ([@cdce8p] - [#86419])
+- Update Optional typing (1) [Py310] ([@cdce8p] - [#86417])
+- Update pre-commit-config [Py310] ([@cdce8p] - [#86415])
+- Update Union typing (3) [Py310] ([@cdce8p] - [#86426])
+- Detect timestamp discontinuity in stream ([@uvjustin] - [#86430])
+- Add missing conversion tests in unit conversion ([@epenet] - [#86434])
+- Give august its own aiohttp session ([@bdraco] - [#86404])
+- Fix `local_partial_types` errors ([@cdce8p] - [#86410])
+- Bump lupupy to 0.2.5 ([@majuss] - [#86439])
+- Adjust icons for iperf3 ([@yuvalabou] - [#85809])
+- Fix hassfest coverage check ([@epenet] - [#86443])
+- Add validation for lock component ([@jbouwh] - [#85842])
+- Add unit and device class to ZHA RSSI sensor ([@mbo18] - [#85390])
+- Use ExecuteIfOff on color cluster for supported bulbs with ZHA ([@TheJulianJES] - [#84874])
+- Update Union typing (zha) [Py310] ([@cdce8p] - [#86453])
+- Add command template and code_format support for MQTT lock ([@jbouwh] - [#85830])
+- Don't ignore diagnostics coverage ([@epenet] - [#86440])
+- Add remove entity in group.set service ([@gjohansson-ST] - [#79401])
+- Update Union typing (6) [Py310] ([@cdce8p] - [#86454])
+- Fix grammar in some hassio docstrings ([@emontnemery] - [#86458])
+- Always add `code` to template vars MQTT lock command template ([@jbouwh] - [#86460])
+- Drop unused dtype ([@cdce8p] - [#86459])
+- Update stream timestamp discontinuity check with audio ([@uvjustin] - [#86446])
+- Add Thread integration ([@emontnemery] - [#86283])
+- Rename fake kitchen_sink demo locks to more common name ([@jbouwh] - [#86452])
+- Prevent wilcard coverage ignore if tests exist ([@epenet] - [#86455])
+- Rename logbook constant ([@epenet] - [#86464])
+- Add gates to LD2410BLE ([@930913] - [#86412])
+- Add matter diagnostics ([@MartinHjelmare] - [#86091])
+- Add Shelly Pro 3EM sensors ([@thecode] - [#86403])
+- Small adjustments to API docs config ([@frenck] - [#86474])
+- Fix Shelly RPC key instances handling ([@thecode] - [#86479])
+- Update esphome bluetooth client for python 3.11 ([@bdraco] - [#86480])
+- Bump yalexs_ble to 1.12.8 ([@bdraco] - [#86481])
+- Add 3 new fields to LaCrosse View ([@IceBotYT] - [#86356])
+- Set correct step on nibe number entity ([@elupus] - [#86492])
+- Add Powerwall off grid switch ([@daniel-simpson] - [#86357])
+- Bump aioshelly to 5.3.0 ([@thecode] - [#86493])
+- Use intent responses from home-assistant-intents ([@synesthesiam] - [#86484])
+- Enable strict typing for the otbr integration ([@emontnemery] - [#86473])
+- Add authentication to SFR Box ([@epenet] - [#85757])
+- Add missing config flow abort strings ([@scop] - [#86180])
+- Bump aio_geojson_geonetnz_quakes to 0.15 ([@exxamalte] - [#86505])
+- Bump aio_geojson_geonetnz_volcano to 0.8 ([@exxamalte] - [#86507])
+- Update geniushub-client to 0.7.0 ([@wibbit] - [#85058])
+- Remove redundant label for MQTT CA verification selector ([@jbouwh] - [#86236])
+- Update debugpy to 1.6.6 ([@frenck] - [#86509])
+- Update spotipy to 2.22.1 ([@frenck] - [#86510])
+- Add reauth to SFR Box ([@epenet] - [#86511])
+- Fix CI, missing import in MQTT ([@frenck] - [#86517])
+- Support playback of channel preset in philips_js ([@elupus] - [#86491])
+- Bump sfrbox-api to 0.0.5 ([@epenet] - [#86512])
+- Introduce ruff (eventually replacing autoflake, pyupgrade, flake8) ([@akx] - [#86224])
+- Add translations for shelly ble scanner options in option flow ([@jbouwh] - [#86218])
+- Replace abodepy library with jaraco.abode to enable new Abode devices ([@tradel] - [#85474])
+- Add translation support for utility_meter type in config flow ([@jbouwh] - [#86220])
+- Add translation support for trafikverket_ferry weekday setting in option flow ([@jbouwh] - [#86219])
+- Update pre-commit to 3.0.0 ([@frenck] - [#86518])
+- Add translations for type select selector min_max config and option flow ([@jbouwh] - [#86213])
+- Add translation support for select selectors of integration `integration` config flow ([@jbouwh] - [#86212])
+- Add translation support for select selectors of derivative config and option flow ([@jbouwh] - [#86190])
+- Update Ruff to 0.0.231, enable D401 ([@akx] - [#86520])
+- Bump devolo_plc_api to 1.1.0 ([@Shutgun] - [#86516])
+- Add scrape to strict-typing ([@epenet] - [#86515])
+- Add reboot button to SFRBox ([@epenet] - [#86514])
+- Bump pymodbus to v3.1.1 ([@janiversen] - [#86513])
+- Add available to LiteJet ([@joncar] - [#86506])
+- Enable T20 (flake8-print) to ban use of print statements ([@frenck] - [#86525])
+- Add `lacrosse` to strict-typing ([@cdce8p] - [#86527])
+- Add browse media and play media support in Bravia TV ([@Drafteed] - [#85288])
+- Fix wrong notification sound name in LaMetric ([@mythicaleinhorn] - [#86483])
+- Replace `None` constant [ps4] ([@cdce8p] - [#86541])
+- Replace `None` constants [minecraft_server] ([@cdce8p] - [#86540])
+- Improve `ring` typing ([@cdce8p] - [#86539])
+- Remove unused integration constants ([@cdce8p] - [#86542])
+- Improve `rflink` typing ([@cdce8p] - [#86538])
+- Improve `cast` typing ([@cdce8p] - [#86536])
+- Bump aioecowitt 2023.01.0 ([@pvizeli] - [#86531])
+- Improve `bosch_shc` typing ([@cdce8p] - [#86535])
+- Add additional property media_channel to media_player in squeezebox component ([@niklasdoerfler] - [#86402])
+- Google Assistant SDK: support audio response playback ([@tronikos] - [#85989])
+- Remove files with coverage > 97% from ignore list ([@epenet] - [#86466])
+- Fix Shelly sleeping Gen2 - update data upon initialize ([@thecode] - [#86544])
+- Google Assistant SDK: Allow multiple commands in the same conversation context ([@tronikos] - [#85423])
+- Improve `google_assistant` typing ([@cdce8p] - [#86537])
+- Store Shelly climate `last_target_temp` value in restore extra data ([@bieniu] - [#86482])
+- Bump python-matter-server to 2.0.0 ([@MartinHjelmare] - [#86470])
+- Re-enable multi-PAN ([@puddly] - [#86533])
+- Add `rss_feed_template` to strict-typing ([@cdce8p] - [#86528])
+- Add events for xiaomi-ble ([@Ernst79] - [#85139])
+- Add sensor to group ([@gjohansson-ST] - [#83186])
+- Migrate ambient_station to use async_forward_entry_setups ([@bdraco] - [#86555])
+- Migrate anthemav to async_forward_entry_setups ([@bdraco] - [#86557])
+- Migrate fjaraskupan to use async_forward_entry_setups ([@bdraco] - [#86560])
+- Migrate google_assistant to use async_forward_entry_setups ([@bdraco] - [#86561])
+- Add rainbird rain delay number entity, deprecating the sensor and service ([@allenporter] - [#86208])
+- Migrate shelly to use async_forward_entry_setups ([@bdraco] - [#86554])
+- Migrate NextDNS to use `async_forward_entry_setups` ([@bieniu] - [#86567])
+- ReadYourMeter Pro integration ([@OnFreund] - [#85986])
+- Migrate life360 to use async_forward_entry_setups ([@bdraco] - [#86571])
+- Migrate steam_online to use async_forward_entry_setups ([@bdraco] - [#86578])
+- Migrate soundtouch to use async_forward_entry_setups ([@bdraco] - [#86577])
+- Ensure platform setup is awaited in zwave_me ([@bdraco] - [#86581])
+- Migrate legacy nest to use async_forward_entry_setups ([@bdraco] - [#86573])
+- Conversation cleanup ([@balloob] - [#86592])
+- Bump aio_geojson_nsw_rfs_incidents to 0.6 ([@exxamalte] - [#86583])
+- Bump google-nest-sdm to 2.2.4 ([@allenporter] - [#86595])
+- Allow customizing sensor state precision ([@emontnemery] - [#86074])
+- Bump bthome-ble to 2.5.1 ([@Ernst79] - [#86584])
+- Migrate Shelly to the new entity naming style ([@bieniu] - [#86574])
+- Migrate escea to use async_forward_entry_setups ([@bdraco] - [#86559])
+- Migrate heos to use async_forward_entry_setups ([@bdraco] - [#86562])
+- Migrate homematicip_cloud to use async_forward_entry_setups ([@bdraco] - [#86563])
+- Migrate cast to use async_forward_entry_setups ([@bdraco] - [#86558])
+- Migrate konnected to use async_forward_entry_setups ([@bdraco] - [#86565])
+- Migrate Landis+Gyr to use async_forward_entry_setups ([@bdraco] - [#86569])
+- Migrate lg_soundbar to use async_forward_entry_setups ([@bdraco] - [#86570])
+- Migrate melnor to use async_forward_entry_setups ([@bdraco] - [#86572])
+- Migrate tomorrowio to use async_forward_entry_setups ([@bdraco] - [#86579])
+- Migrate totalconnect to use async_forward_entry_setups ([@bdraco] - [#86580])
+- Calculate data using all sections for here_travel_time ([@eifinger] - [#86576])
+- Address late review in SFRBox ([@epenet] - [#86604])
+- Mock async_setup_entry in SamsungTV tests ([@epenet] - [#86601])
+- Bump aio_geojson_usgs_earthquakes to 0.2 ([@exxamalte] - [#86598])
+- Misc typing improvements ([@cdce8p] - [#86550])
+- Add issue to ESPHome deprecating api password ([@jesserockz] - [#86606])
+- Drop IoTaWatt Accumulated sensors ([@agners] - [#86611])
+- Migrate samsungtv to use async_forward_entry_setups ([@bdraco] - [#86575])
+- Fix matter clusters BasicInformation ([@MartinHjelmare] - [#86615])
+- Bump screenlogicpy to v0.6.4 ([@dieselrabbit] - [#86603])
+- Include all light circuit functions ([@dieselrabbit] - [#86608])
+- Bump httpx to 0.23.3 ([@exxamalte] - [#86614])
+- Allow a temperature sensor to be in K ([@emontnemery] - [#86073])
+- Add a `contains` jinja filter and test ([@Vaarlion] - [#86390])
+- Bump zha-quirks to 0.0.91 ([@dmulcahey] - [#86590])
+- Remove unnecessary ZHA AnalogInput sensors for Xiaomi plugs ([@TheJulianJES] - [#86261])
+- Add group support for ZHA ExecuteIfOff lights ([@TheJulianJES] - [#86465])
+- Remove Almond integration ([@frenck] - [#86616])
+- Add service to create calendar events ([@allenporter] - [#85805])
+- Migrate islamic_prayer_times to use async_forward_entry_setups ([@bdraco] - [#86564])
+- Change pressure unit of measurement from mbar to hPa in Netatmo integration ([@ljungqvist] - [#86210])
+- Add number platform support to Alexa ([@jbouwh] - [#86553])
+- Add Mega Joule as valid unit of energy ([@SgtBatten] - [#86055])
+- Remove ability to ignore coverage violations ([@epenet] - [#86597])
+- Increase async_setup_platforms deprecation logging to warning ([@bdraco] - [#86582])
+- Add diagnostics to LiteJet ([@joncar] - [#86600])
+- Bump python-matter-server 2.0.1 ([@MartinHjelmare] - [#86625])
+- Bump gassist-text to 0.0.10 ([@tronikos] - [#85782])
+- Add OpenAI integration ([@balloob] - [#86621])
+- Bump home-assistant-intents 2023.1.25 ([@synesthesiam] - [#86626])
+- Upgrade python-homewizard-energy to 1.8.0 ([@DCSBL] - [#86627])
+- Add Mopeka integration ([@bdraco] - [#86500])
+- Update frontend to 20230125.0 ([@bramkragten] - [#86628])
+- Print expected device class units in error log ([@elupus] - [#86125])
+- Fix oauth2 error ([@balloob] - [#86634])
+- Google Assistant: unset agent on unload ([@balloob] - [#86635])
+- Correct units on mopeka battery voltage sensor ([@bdraco] - [#86663])
+- Bump ZHA quirks lib ([@dmulcahey] - [#86669])
+- Add error handling for OpenAI ([@balloob] - [#86671])
+- Add device registration to the Nuki component ([@pree] - [#79806])
+- Migrate Nuki to new entity naming style ([@Nardol] - [#80021])
+- Update ndms2_client to 0.1.2 ([@foxel] - [#86624])
+- Add known webostv button to list ([@MHFDoge] - [#86674])
+- Make openai conversation prompt template more readable + test case ([@balloob] - [#86676])
+- Fix missing interface key in deCONZ logbook ([@Kane610] - [#86684])
+- Terminate strings at NUL when recording states and events ([@emontnemery] - [#86687])
+- Update Inovelli Blue Series switch support in ZHA ([@dmulcahey] - [#86711])
+- Bump python-matter-server to 2.0.2 ([@MartinHjelmare] - [#86712])
+- Remove gas device class from current sensor in dsmr_reader ([@frenck] - [#86725])
+- Fix state classes for duration device class ([@frenck] - [#86727])
+- Bump aioshelly to 5.3.1 ([@thecode] - [#86751])
+- OpenAI: Fix device without model ([@balloob] - [#86754])
+- Fix state class issues in Ambient PWS ([@bachya] - [#86758])
+- ESPHome update: Store reference to runtime data, not one of its values ([@balloob] - [#86762])
+- Remove esphome password from config flow data if not needed ([@jesserockz] - [#86763])
+- Chunk MariaDB and Postgresql data migration to avoid running out of buffer space ([@bdraco] - [#86680])
+- Fix Bluetooth discoveries missing between restarts ([@bdraco] - [#86808])
+- Bump plugwise to v0.27.4 ([@bouwew] - [#86812])
+- Fix D-Link config flow auth ([@tkdrob] - [#86824])
+- Check for missing ISY994 Z-Wave Properties ([@shbatm] - [#86829])
+- Update frontend to 20230128.0 ([@piitaya] - [#86838])
+- Fix D-Link attributes ([@tkdrob] - [#86842])
+- Improve websocket throughput of state changes ([@bdraco] - [#86855])
+- Fix tradfri air quality device class ([@MartinHjelmare] - [#86861])
+- Fix v32 schema migration when MySQL global.time_zone is configured with non-UTC timezone ([@bdraco] - [#86867])
+- Ignore empty payloads from DSMR Reader ([@Glodenox] - [#86841])
+- Address Google mail late review ([@tkdrob] - [#86847])
+- Cache the names and area lists in the default agent ([@bdraco] - [#86874])
+- Add Bosch SHC description and host form strings ([@tschamm] - [#86897])
+- Fix old indices not being removed in schema migration leading to slow MySQL queries ([@bdraco] - [#86917])
+- Drop minus sign on negative zero ([@emontnemery] - [#86939])
+- Fix MQTT discovery failing after bad config update ([@jbouwh] - [#86935])
+- Speed up live history setup if there is no pending data to commit ([@bdraco] - [#86942])
+- Fix ThreeWayHandle sensor in Overkiz integration ([@iMicknl] - [#86953])
+- Silence spurious warnings about removing ix_states_entity_id with newer installs ([@bdraco] - [#86961])
+- Fix some mobile app sensor registration/update issues ([@balloob] - [#86965])
+- Performance improvements for Assist ([@synesthesiam] - [#86966])
+- Use device area id in intent matching ([@synesthesiam] - [#86678])
+- Honeywell auto mode invalid attribute ([@mkmer] - [#86728])
+- ZHA config flow cleanup ([@puddly] - [#86742])
+- Catch AndroidTV exception on setup ([@ollo69] - [#86819])
+- Uses PolledSmartEnergySummation for ZLinky ([@piitaya] - [#86960])
+- Fix error on empty location in ssdp messages ([@StevenLooman] - [#86970])
+- Ensure a proper scope_id is given for IPv6 addresses when initializing the SSDP component ([@StevenLooman] - [#86975])
+- Allow any state class when using the precipitation device class ([@frenck] - [#86977])
+- Update frontend to 20230130.0 ([@bramkragten] - [#86978])
+- Bump ZHA dependencies ([@puddly] - [#86979])
+- Check dashboard when showing reauth form ([@balloob] - [#86980])
+- Bump pyisy to 3.1.11 ([@shbatm] - [#86981])
+- Prioritize entity names over area names in Assist matching ([@synesthesiam] - [#86982])
+- ESPHome discovered dashboard checks reauth flows ([@balloob] - [#86993])
+- ESPHome handle remove password and no encryption ([@balloob] - [#86995])
+- Bump env_canada to 0.5.27 ([@michaeldavie] - [#86996])
+- Bump ESPHome Dashboard API 1.2.3 ([@balloob] - [#86997])
+- Bump plugwise to v0.27.5 ([@bouwew] - [#87001])
+- Only report invalid numeric value for sensors once ([@frenck] - [#87010])
+- Honeywell Correct key name ([@mkmer] - [#87018])
+- Bump home-assistant-intents to 2023.1.31 ([@synesthesiam] - [#87034])
+- Add a repair issue when using MariaDB is affected by MDEV-25020 ([@bdraco] - [#87040])
+- Fix Yamaha MusicCast zone sleep select entity ([@frenck] - [#87041])
+- Improve JSON errors from HTTP view ([@balloob] - [#87042])
+- Ensure humidity is still exported to HomeKit when it is read-only ([@bdraco] - [#87051])
+- Trigger update of ESPHome update entity when static info updates ([@balloob] - [#87058])
+- Guard what version we can install ESPHome updates with ([@balloob] - [#87059])
+- Bump AIOAladdinConnect to 0.1.54 ([@mkmer] - [#86749])
+- Bump AIOAladdinConnect to 0.1.55 ([@mkmer] - [#87086])
+- Reduce chance of queue overflow during schema migration ([@bdraco] - [#87090])
+- Fix Assist skipping entities that are hidden or have entity category ([@balloob] - [#87096])
+- Update pyTibber to 0.26.12 ([@Danielhiversen] - [#87098])
+- Update frontend to 20230201.0 ([@bramkragten] - [#87099])
+- Bump isort from 5.11.4 to 5.12.0 ([@ludeeus] - [#86890])
+
+[#72494]: https://github.com/home-assistant/core/pull/72494
+[#74623]: https://github.com/home-assistant/core/pull/74623
+[#74871]: https://github.com/home-assistant/core/pull/74871
+[#75205]: https://github.com/home-assistant/core/pull/75205
+[#75944]: https://github.com/home-assistant/core/pull/75944
+[#76415]: https://github.com/home-assistant/core/pull/76415
+[#76811]: https://github.com/home-assistant/core/pull/76811
+[#77091]: https://github.com/home-assistant/core/pull/77091
+[#77237]: https://github.com/home-assistant/core/pull/77237
+[#79062]: https://github.com/home-assistant/core/pull/79062
+[#79401]: https://github.com/home-assistant/core/pull/79401
+[#79412]: https://github.com/home-assistant/core/pull/79412
+[#79466]: https://github.com/home-assistant/core/pull/79466
+[#79481]: https://github.com/home-assistant/core/pull/79481
+[#79718]: https://github.com/home-assistant/core/pull/79718
+[#79742]: https://github.com/home-assistant/core/pull/79742
+[#79806]: https://github.com/home-assistant/core/pull/79806
+[#79816]: https://github.com/home-assistant/core/pull/79816
+[#80021]: https://github.com/home-assistant/core/pull/80021
+[#80694]: https://github.com/home-assistant/core/pull/80694
+[#81623]: https://github.com/home-assistant/core/pull/81623
+[#81979]: https://github.com/home-assistant/core/pull/81979
+[#82580]: https://github.com/home-assistant/core/pull/82580
+[#82602]: https://github.com/home-assistant/core/pull/82602
+[#82637]: https://github.com/home-assistant/core/pull/82637
+[#82743]: https://github.com/home-assistant/core/pull/82743
+[#82809]: https://github.com/home-assistant/core/pull/82809
+[#82984]: https://github.com/home-assistant/core/pull/82984
+[#83173]: https://github.com/home-assistant/core/pull/83173
+[#83186]: https://github.com/home-assistant/core/pull/83186
+[#83251]: https://github.com/home-assistant/core/pull/83251
+[#83265]: https://github.com/home-assistant/core/pull/83265
+[#83278]: https://github.com/home-assistant/core/pull/83278
+[#83515]: https://github.com/home-assistant/core/pull/83515
+[#83733]: https://github.com/home-assistant/core/pull/83733
+[#83755]: https://github.com/home-assistant/core/pull/83755
+[#83768]: https://github.com/home-assistant/core/pull/83768
+[#83883]: https://github.com/home-assistant/core/pull/83883
+[#83886]: https://github.com/home-assistant/core/pull/83886
+[#84019]: https://github.com/home-assistant/core/pull/84019
+[#84134]: https://github.com/home-assistant/core/pull/84134
+[#84201]: https://github.com/home-assistant/core/pull/84201
+[#84278]: https://github.com/home-assistant/core/pull/84278
+[#84314]: https://github.com/home-assistant/core/pull/84314
+[#84332]: https://github.com/home-assistant/core/pull/84332
+[#84402]: https://github.com/home-assistant/core/pull/84402
+[#84435]: https://github.com/home-assistant/core/pull/84435
+[#84441]: https://github.com/home-assistant/core/pull/84441
+[#84442]: https://github.com/home-assistant/core/pull/84442
+[#84447]: https://github.com/home-assistant/core/pull/84447
+[#84458]: https://github.com/home-assistant/core/pull/84458
+[#84477]: https://github.com/home-assistant/core/pull/84477
+[#84548]: https://github.com/home-assistant/core/pull/84548
+[#84592]: https://github.com/home-assistant/core/pull/84592
+[#84631]: https://github.com/home-assistant/core/pull/84631
+[#84640]: https://github.com/home-assistant/core/pull/84640
+[#84648]: https://github.com/home-assistant/core/pull/84648
+[#84652]: https://github.com/home-assistant/core/pull/84652
+[#84659]: https://github.com/home-assistant/core/pull/84659
+[#84660]: https://github.com/home-assistant/core/pull/84660
+[#84667]: https://github.com/home-assistant/core/pull/84667
+[#84668]: https://github.com/home-assistant/core/pull/84668
+[#84672]: https://github.com/home-assistant/core/pull/84672
+[#84678]: https://github.com/home-assistant/core/pull/84678
+[#84679]: https://github.com/home-assistant/core/pull/84679
+[#84681]: https://github.com/home-assistant/core/pull/84681
+[#84701]: https://github.com/home-assistant/core/pull/84701
+[#84707]: https://github.com/home-assistant/core/pull/84707
+[#84724]: https://github.com/home-assistant/core/pull/84724
+[#84730]: https://github.com/home-assistant/core/pull/84730
+[#84734]: https://github.com/home-assistant/core/pull/84734
+[#84735]: https://github.com/home-assistant/core/pull/84735
+[#84736]: https://github.com/home-assistant/core/pull/84736
+[#84737]: https://github.com/home-assistant/core/pull/84737
+[#84738]: https://github.com/home-assistant/core/pull/84738
+[#84739]: https://github.com/home-assistant/core/pull/84739
+[#84740]: https://github.com/home-assistant/core/pull/84740
+[#84741]: https://github.com/home-assistant/core/pull/84741
+[#84747]: https://github.com/home-assistant/core/pull/84747
+[#84761]: https://github.com/home-assistant/core/pull/84761
+[#84764]: https://github.com/home-assistant/core/pull/84764
+[#84768]: https://github.com/home-assistant/core/pull/84768
+[#84770]: https://github.com/home-assistant/core/pull/84770
+[#84772]: https://github.com/home-assistant/core/pull/84772
+[#84773]: https://github.com/home-assistant/core/pull/84773
+[#84777]: https://github.com/home-assistant/core/pull/84777
+[#84780]: https://github.com/home-assistant/core/pull/84780
+[#84783]: https://github.com/home-assistant/core/pull/84783
+[#84786]: https://github.com/home-assistant/core/pull/84786
+[#84803]: https://github.com/home-assistant/core/pull/84803
+[#84810]: https://github.com/home-assistant/core/pull/84810
+[#84811]: https://github.com/home-assistant/core/pull/84811
+[#84818]: https://github.com/home-assistant/core/pull/84818
+[#84829]: https://github.com/home-assistant/core/pull/84829
+[#84847]: https://github.com/home-assistant/core/pull/84847
+[#84853]: https://github.com/home-assistant/core/pull/84853
+[#84861]: https://github.com/home-assistant/core/pull/84861
+[#84870]: https://github.com/home-assistant/core/pull/84870
+[#84874]: https://github.com/home-assistant/core/pull/84874
+[#84878]: https://github.com/home-assistant/core/pull/84878
+[#84879]: https://github.com/home-assistant/core/pull/84879
+[#84881]: https://github.com/home-assistant/core/pull/84881
+[#84883]: https://github.com/home-assistant/core/pull/84883
+[#84885]: https://github.com/home-assistant/core/pull/84885
+[#84887]: https://github.com/home-assistant/core/pull/84887
+[#84889]: https://github.com/home-assistant/core/pull/84889
+[#84890]: https://github.com/home-assistant/core/pull/84890
+[#84891]: https://github.com/home-assistant/core/pull/84891
+[#84892]: https://github.com/home-assistant/core/pull/84892
+[#84894]: https://github.com/home-assistant/core/pull/84894
+[#84897]: https://github.com/home-assistant/core/pull/84897
+[#84898]: https://github.com/home-assistant/core/pull/84898
+[#84903]: https://github.com/home-assistant/core/pull/84903
+[#84905]: https://github.com/home-assistant/core/pull/84905
+[#84906]: https://github.com/home-assistant/core/pull/84906
+[#84908]: https://github.com/home-assistant/core/pull/84908
+[#84909]: https://github.com/home-assistant/core/pull/84909
+[#84916]: https://github.com/home-assistant/core/pull/84916
+[#84922]: https://github.com/home-assistant/core/pull/84922
+[#84927]: https://github.com/home-assistant/core/pull/84927
+[#84928]: https://github.com/home-assistant/core/pull/84928
+[#84933]: https://github.com/home-assistant/core/pull/84933
+[#84938]: https://github.com/home-assistant/core/pull/84938
+[#84944]: https://github.com/home-assistant/core/pull/84944
+[#84945]: https://github.com/home-assistant/core/pull/84945
+[#84946]: https://github.com/home-assistant/core/pull/84946
+[#84947]: https://github.com/home-assistant/core/pull/84947
+[#84950]: https://github.com/home-assistant/core/pull/84950
+[#84953]: https://github.com/home-assistant/core/pull/84953
+[#84962]: https://github.com/home-assistant/core/pull/84962
+[#84968]: https://github.com/home-assistant/core/pull/84968
+[#84972]: https://github.com/home-assistant/core/pull/84972
+[#84973]: https://github.com/home-assistant/core/pull/84973
+[#84974]: https://github.com/home-assistant/core/pull/84974
+[#84975]: https://github.com/home-assistant/core/pull/84975
+[#84977]: https://github.com/home-assistant/core/pull/84977
+[#84982]: https://github.com/home-assistant/core/pull/84982
+[#84986]: https://github.com/home-assistant/core/pull/84986
+[#84988]: https://github.com/home-assistant/core/pull/84988
+[#84990]: https://github.com/home-assistant/core/pull/84990
+[#84991]: https://github.com/home-assistant/core/pull/84991
+[#84992]: https://github.com/home-assistant/core/pull/84992
+[#84999]: https://github.com/home-assistant/core/pull/84999
+[#85001]: https://github.com/home-assistant/core/pull/85001
+[#85002]: https://github.com/home-assistant/core/pull/85002
+[#85006]: https://github.com/home-assistant/core/pull/85006
+[#85017]: https://github.com/home-assistant/core/pull/85017
+[#85018]: https://github.com/home-assistant/core/pull/85018
+[#85019]: https://github.com/home-assistant/core/pull/85019
+[#85020]: https://github.com/home-assistant/core/pull/85020
+[#85021]: https://github.com/home-assistant/core/pull/85021
+[#85022]: https://github.com/home-assistant/core/pull/85022
+[#85036]: https://github.com/home-assistant/core/pull/85036
+[#85037]: https://github.com/home-assistant/core/pull/85037
+[#85038]: https://github.com/home-assistant/core/pull/85038
+[#85039]: https://github.com/home-assistant/core/pull/85039
+[#85045]: https://github.com/home-assistant/core/pull/85045
+[#85046]: https://github.com/home-assistant/core/pull/85046
+[#85048]: https://github.com/home-assistant/core/pull/85048
+[#85049]: https://github.com/home-assistant/core/pull/85049
+[#85050]: https://github.com/home-assistant/core/pull/85050
+[#85051]: https://github.com/home-assistant/core/pull/85051
+[#85053]: https://github.com/home-assistant/core/pull/85053
+[#85054]: https://github.com/home-assistant/core/pull/85054
+[#85058]: https://github.com/home-assistant/core/pull/85058
+[#85059]: https://github.com/home-assistant/core/pull/85059
+[#85063]: https://github.com/home-assistant/core/pull/85063
+[#85064]: https://github.com/home-assistant/core/pull/85064
+[#85065]: https://github.com/home-assistant/core/pull/85065
+[#85066]: https://github.com/home-assistant/core/pull/85066
+[#85067]: https://github.com/home-assistant/core/pull/85067
+[#85068]: https://github.com/home-assistant/core/pull/85068
+[#85071]: https://github.com/home-assistant/core/pull/85071
+[#85074]: https://github.com/home-assistant/core/pull/85074
+[#85077]: https://github.com/home-assistant/core/pull/85077
+[#85083]: https://github.com/home-assistant/core/pull/85083
+[#85085]: https://github.com/home-assistant/core/pull/85085
+[#85095]: https://github.com/home-assistant/core/pull/85095
+[#85097]: https://github.com/home-assistant/core/pull/85097
+[#85103]: https://github.com/home-assistant/core/pull/85103
+[#85114]: https://github.com/home-assistant/core/pull/85114
+[#85127]: https://github.com/home-assistant/core/pull/85127
+[#85131]: https://github.com/home-assistant/core/pull/85131
+[#85135]: https://github.com/home-assistant/core/pull/85135
+[#85139]: https://github.com/home-assistant/core/pull/85139
+[#85148]: https://github.com/home-assistant/core/pull/85148
+[#85149]: https://github.com/home-assistant/core/pull/85149
+[#85150]: https://github.com/home-assistant/core/pull/85150
+[#85154]: https://github.com/home-assistant/core/pull/85154
+[#85156]: https://github.com/home-assistant/core/pull/85156
+[#85164]: https://github.com/home-assistant/core/pull/85164
+[#85165]: https://github.com/home-assistant/core/pull/85165
+[#85166]: https://github.com/home-assistant/core/pull/85166
+[#85176]: https://github.com/home-assistant/core/pull/85176
+[#85181]: https://github.com/home-assistant/core/pull/85181
+[#85184]: https://github.com/home-assistant/core/pull/85184
+[#85185]: https://github.com/home-assistant/core/pull/85185
+[#85195]: https://github.com/home-assistant/core/pull/85195
+[#85197]: https://github.com/home-assistant/core/pull/85197
+[#85198]: https://github.com/home-assistant/core/pull/85198
+[#85209]: https://github.com/home-assistant/core/pull/85209
+[#85213]: https://github.com/home-assistant/core/pull/85213
+[#85214]: https://github.com/home-assistant/core/pull/85214
+[#85221]: https://github.com/home-assistant/core/pull/85221
+[#85224]: https://github.com/home-assistant/core/pull/85224
+[#85229]: https://github.com/home-assistant/core/pull/85229
+[#85231]: https://github.com/home-assistant/core/pull/85231
+[#85235]: https://github.com/home-assistant/core/pull/85235
+[#85237]: https://github.com/home-assistant/core/pull/85237
+[#85245]: https://github.com/home-assistant/core/pull/85245
+[#85251]: https://github.com/home-assistant/core/pull/85251
+[#85260]: https://github.com/home-assistant/core/pull/85260
+[#85264]: https://github.com/home-assistant/core/pull/85264
+[#85270]: https://github.com/home-assistant/core/pull/85270
+[#85271]: https://github.com/home-assistant/core/pull/85271
+[#85274]: https://github.com/home-assistant/core/pull/85274
+[#85276]: https://github.com/home-assistant/core/pull/85276
+[#85278]: https://github.com/home-assistant/core/pull/85278
+[#85281]: https://github.com/home-assistant/core/pull/85281
+[#85283]: https://github.com/home-assistant/core/pull/85283
+[#85285]: https://github.com/home-assistant/core/pull/85285
+[#85288]: https://github.com/home-assistant/core/pull/85288
+[#85292]: https://github.com/home-assistant/core/pull/85292
+[#85297]: https://github.com/home-assistant/core/pull/85297
+[#85298]: https://github.com/home-assistant/core/pull/85298
+[#85299]: https://github.com/home-assistant/core/pull/85299
+[#85302]: https://github.com/home-assistant/core/pull/85302
+[#85303]: https://github.com/home-assistant/core/pull/85303
+[#85315]: https://github.com/home-assistant/core/pull/85315
+[#85326]: https://github.com/home-assistant/core/pull/85326
+[#85328]: https://github.com/home-assistant/core/pull/85328
+[#85329]: https://github.com/home-assistant/core/pull/85329
+[#85330]: https://github.com/home-assistant/core/pull/85330
+[#85331]: https://github.com/home-assistant/core/pull/85331
+[#85332]: https://github.com/home-assistant/core/pull/85332
+[#85333]: https://github.com/home-assistant/core/pull/85333
+[#85335]: https://github.com/home-assistant/core/pull/85335
+[#85337]: https://github.com/home-assistant/core/pull/85337
+[#85341]: https://github.com/home-assistant/core/pull/85341
+[#85345]: https://github.com/home-assistant/core/pull/85345
+[#85347]: https://github.com/home-assistant/core/pull/85347
+[#85352]: https://github.com/home-assistant/core/pull/85352
+[#85354]: https://github.com/home-assistant/core/pull/85354
+[#85356]: https://github.com/home-assistant/core/pull/85356
+[#85358]: https://github.com/home-assistant/core/pull/85358
+[#85367]: https://github.com/home-assistant/core/pull/85367
+[#85368]: https://github.com/home-assistant/core/pull/85368
+[#85371]: https://github.com/home-assistant/core/pull/85371
+[#85378]: https://github.com/home-assistant/core/pull/85378
+[#85380]: https://github.com/home-assistant/core/pull/85380
+[#85387]: https://github.com/home-assistant/core/pull/85387
+[#85390]: https://github.com/home-assistant/core/pull/85390
+[#85392]: https://github.com/home-assistant/core/pull/85392
+[#85396]: https://github.com/home-assistant/core/pull/85396
+[#85397]: https://github.com/home-assistant/core/pull/85397
+[#85399]: https://github.com/home-assistant/core/pull/85399
+[#85404]: https://github.com/home-assistant/core/pull/85404
+[#85406]: https://github.com/home-assistant/core/pull/85406
+[#85407]: https://github.com/home-assistant/core/pull/85407
+[#85408]: https://github.com/home-assistant/core/pull/85408
+[#85409]: https://github.com/home-assistant/core/pull/85409
+[#85411]: https://github.com/home-assistant/core/pull/85411
+[#85419]: https://github.com/home-assistant/core/pull/85419
+[#85421]: https://github.com/home-assistant/core/pull/85421
+[#85423]: https://github.com/home-assistant/core/pull/85423
+[#85424]: https://github.com/home-assistant/core/pull/85424
+[#85426]: https://github.com/home-assistant/core/pull/85426
+[#85429]: https://github.com/home-assistant/core/pull/85429
+[#85431]: https://github.com/home-assistant/core/pull/85431
+[#85433]: https://github.com/home-assistant/core/pull/85433
+[#85441]: https://github.com/home-assistant/core/pull/85441
+[#85448]: https://github.com/home-assistant/core/pull/85448
+[#85449]: https://github.com/home-assistant/core/pull/85449
+[#85450]: https://github.com/home-assistant/core/pull/85450
+[#85451]: https://github.com/home-assistant/core/pull/85451
+[#85452]: https://github.com/home-assistant/core/pull/85452
+[#85456]: https://github.com/home-assistant/core/pull/85456
+[#85460]: https://github.com/home-assistant/core/pull/85460
+[#85461]: https://github.com/home-assistant/core/pull/85461
+[#85463]: https://github.com/home-assistant/core/pull/85463
+[#85466]: https://github.com/home-assistant/core/pull/85466
+[#85468]: https://github.com/home-assistant/core/pull/85468
+[#85469]: https://github.com/home-assistant/core/pull/85469
+[#85472]: https://github.com/home-assistant/core/pull/85472
+[#85473]: https://github.com/home-assistant/core/pull/85473
+[#85474]: https://github.com/home-assistant/core/pull/85474
+[#85476]: https://github.com/home-assistant/core/pull/85476
+[#85486]: https://github.com/home-assistant/core/pull/85486
+[#85488]: https://github.com/home-assistant/core/pull/85488
+[#85489]: https://github.com/home-assistant/core/pull/85489
+[#85493]: https://github.com/home-assistant/core/pull/85493
+[#85495]: https://github.com/home-assistant/core/pull/85495
+[#85497]: https://github.com/home-assistant/core/pull/85497
+[#85499]: https://github.com/home-assistant/core/pull/85499
+[#85500]: https://github.com/home-assistant/core/pull/85500
+[#85504]: https://github.com/home-assistant/core/pull/85504
+[#85506]: https://github.com/home-assistant/core/pull/85506
+[#85508]: https://github.com/home-assistant/core/pull/85508
+[#85509]: https://github.com/home-assistant/core/pull/85509
+[#85511]: https://github.com/home-assistant/core/pull/85511
+[#85513]: https://github.com/home-assistant/core/pull/85513
+[#85521]: https://github.com/home-assistant/core/pull/85521
+[#85522]: https://github.com/home-assistant/core/pull/85522
+[#85523]: https://github.com/home-assistant/core/pull/85523
+[#85524]: https://github.com/home-assistant/core/pull/85524
+[#85525]: https://github.com/home-assistant/core/pull/85525
+[#85526]: https://github.com/home-assistant/core/pull/85526
+[#85527]: https://github.com/home-assistant/core/pull/85527
+[#85531]: https://github.com/home-assistant/core/pull/85531
+[#85536]: https://github.com/home-assistant/core/pull/85536
+[#85538]: https://github.com/home-assistant/core/pull/85538
+[#85539]: https://github.com/home-assistant/core/pull/85539
+[#85540]: https://github.com/home-assistant/core/pull/85540
+[#85541]: https://github.com/home-assistant/core/pull/85541
+[#85544]: https://github.com/home-assistant/core/pull/85544
+[#85555]: https://github.com/home-assistant/core/pull/85555
+[#85558]: https://github.com/home-assistant/core/pull/85558
+[#85560]: https://github.com/home-assistant/core/pull/85560
+[#85561]: https://github.com/home-assistant/core/pull/85561
+[#85564]: https://github.com/home-assistant/core/pull/85564
+[#85565]: https://github.com/home-assistant/core/pull/85565
+[#85567]: https://github.com/home-assistant/core/pull/85567
+[#85568]: https://github.com/home-assistant/core/pull/85568
+[#85574]: https://github.com/home-assistant/core/pull/85574
+[#85576]: https://github.com/home-assistant/core/pull/85576
+[#85577]: https://github.com/home-assistant/core/pull/85577
+[#85584]: https://github.com/home-assistant/core/pull/85584
+[#85585]: https://github.com/home-assistant/core/pull/85585
+[#85589]: https://github.com/home-assistant/core/pull/85589
+[#85592]: https://github.com/home-assistant/core/pull/85592
+[#85595]: https://github.com/home-assistant/core/pull/85595
+[#85597]: https://github.com/home-assistant/core/pull/85597
+[#85598]: https://github.com/home-assistant/core/pull/85598
+[#85611]: https://github.com/home-assistant/core/pull/85611
+[#85612]: https://github.com/home-assistant/core/pull/85612
+[#85614]: https://github.com/home-assistant/core/pull/85614
+[#85615]: https://github.com/home-assistant/core/pull/85615
+[#85616]: https://github.com/home-assistant/core/pull/85616
+[#85617]: https://github.com/home-assistant/core/pull/85617
+[#85618]: https://github.com/home-assistant/core/pull/85618
+[#85619]: https://github.com/home-assistant/core/pull/85619
+[#85620]: https://github.com/home-assistant/core/pull/85620
+[#85621]: https://github.com/home-assistant/core/pull/85621
+[#85624]: https://github.com/home-assistant/core/pull/85624
+[#85627]: https://github.com/home-assistant/core/pull/85627
+[#85630]: https://github.com/home-assistant/core/pull/85630
+[#85632]: https://github.com/home-assistant/core/pull/85632
+[#85636]: https://github.com/home-assistant/core/pull/85636
+[#85641]: https://github.com/home-assistant/core/pull/85641
+[#85644]: https://github.com/home-assistant/core/pull/85644
+[#85648]: https://github.com/home-assistant/core/pull/85648
+[#85651]: https://github.com/home-assistant/core/pull/85651
+[#85652]: https://github.com/home-assistant/core/pull/85652
+[#85654]: https://github.com/home-assistant/core/pull/85654
+[#85655]: https://github.com/home-assistant/core/pull/85655
+[#85657]: https://github.com/home-assistant/core/pull/85657
+[#85658]: https://github.com/home-assistant/core/pull/85658
+[#85661]: https://github.com/home-assistant/core/pull/85661
+[#85662]: https://github.com/home-assistant/core/pull/85662
+[#85667]: https://github.com/home-assistant/core/pull/85667
+[#85670]: https://github.com/home-assistant/core/pull/85670
+[#85671]: https://github.com/home-assistant/core/pull/85671
+[#85673]: https://github.com/home-assistant/core/pull/85673
+[#85676]: https://github.com/home-assistant/core/pull/85676
+[#85677]: https://github.com/home-assistant/core/pull/85677
+[#85679]: https://github.com/home-assistant/core/pull/85679
+[#85680]: https://github.com/home-assistant/core/pull/85680
+[#85682]: https://github.com/home-assistant/core/pull/85682
+[#85688]: https://github.com/home-assistant/core/pull/85688
+[#85690]: https://github.com/home-assistant/core/pull/85690
+[#85694]: https://github.com/home-assistant/core/pull/85694
+[#85697]: https://github.com/home-assistant/core/pull/85697
+[#85700]: https://github.com/home-assistant/core/pull/85700
+[#85701]: https://github.com/home-assistant/core/pull/85701
+[#85703]: https://github.com/home-assistant/core/pull/85703
+[#85704]: https://github.com/home-assistant/core/pull/85704
+[#85709]: https://github.com/home-assistant/core/pull/85709
+[#85712]: https://github.com/home-assistant/core/pull/85712
+[#85717]: https://github.com/home-assistant/core/pull/85717
+[#85720]: https://github.com/home-assistant/core/pull/85720
+[#85723]: https://github.com/home-assistant/core/pull/85723
+[#85725]: https://github.com/home-assistant/core/pull/85725
+[#85729]: https://github.com/home-assistant/core/pull/85729
+[#85730]: https://github.com/home-assistant/core/pull/85730
+[#85732]: https://github.com/home-assistant/core/pull/85732
+[#85740]: https://github.com/home-assistant/core/pull/85740
+[#85741]: https://github.com/home-assistant/core/pull/85741
+[#85742]: https://github.com/home-assistant/core/pull/85742
+[#85744]: https://github.com/home-assistant/core/pull/85744
+[#85745]: https://github.com/home-assistant/core/pull/85745
+[#85746]: https://github.com/home-assistant/core/pull/85746
+[#85748]: https://github.com/home-assistant/core/pull/85748
+[#85752]: https://github.com/home-assistant/core/pull/85752
+[#85753]: https://github.com/home-assistant/core/pull/85753
+[#85757]: https://github.com/home-assistant/core/pull/85757
+[#85760]: https://github.com/home-assistant/core/pull/85760
+[#85762]: https://github.com/home-assistant/core/pull/85762
+[#85763]: https://github.com/home-assistant/core/pull/85763
+[#85766]: https://github.com/home-assistant/core/pull/85766
+[#85770]: https://github.com/home-assistant/core/pull/85770
+[#85771]: https://github.com/home-assistant/core/pull/85771
+[#85772]: https://github.com/home-assistant/core/pull/85772
+[#85774]: https://github.com/home-assistant/core/pull/85774
+[#85775]: https://github.com/home-assistant/core/pull/85775
+[#85779]: https://github.com/home-assistant/core/pull/85779
+[#85782]: https://github.com/home-assistant/core/pull/85782
+[#85784]: https://github.com/home-assistant/core/pull/85784
+[#85788]: https://github.com/home-assistant/core/pull/85788
+[#85790]: https://github.com/home-assistant/core/pull/85790
+[#85797]: https://github.com/home-assistant/core/pull/85797
+[#85798]: https://github.com/home-assistant/core/pull/85798
+[#85799]: https://github.com/home-assistant/core/pull/85799
+[#85800]: https://github.com/home-assistant/core/pull/85800
+[#85801]: https://github.com/home-assistant/core/pull/85801
+[#85805]: https://github.com/home-assistant/core/pull/85805
+[#85806]: https://github.com/home-assistant/core/pull/85806
+[#85809]: https://github.com/home-assistant/core/pull/85809
+[#85812]: https://github.com/home-assistant/core/pull/85812
+[#85817]: https://github.com/home-assistant/core/pull/85817
+[#85818]: https://github.com/home-assistant/core/pull/85818
+[#85825]: https://github.com/home-assistant/core/pull/85825
+[#85830]: https://github.com/home-assistant/core/pull/85830
+[#85840]: https://github.com/home-assistant/core/pull/85840
+[#85842]: https://github.com/home-assistant/core/pull/85842
+[#85846]: https://github.com/home-assistant/core/pull/85846
+[#85848]: https://github.com/home-assistant/core/pull/85848
+[#85849]: https://github.com/home-assistant/core/pull/85849
+[#85851]: https://github.com/home-assistant/core/pull/85851
+[#85860]: https://github.com/home-assistant/core/pull/85860
+[#85863]: https://github.com/home-assistant/core/pull/85863
+[#85865]: https://github.com/home-assistant/core/pull/85865
+[#85866]: https://github.com/home-assistant/core/pull/85866
+[#85867]: https://github.com/home-assistant/core/pull/85867
+[#85871]: https://github.com/home-assistant/core/pull/85871
+[#85877]: https://github.com/home-assistant/core/pull/85877
+[#85880]: https://github.com/home-assistant/core/pull/85880
+[#85882]: https://github.com/home-assistant/core/pull/85882
+[#85884]: https://github.com/home-assistant/core/pull/85884
+[#85892]: https://github.com/home-assistant/core/pull/85892
+[#85894]: https://github.com/home-assistant/core/pull/85894
+[#85895]: https://github.com/home-assistant/core/pull/85895
+[#85900]: https://github.com/home-assistant/core/pull/85900
+[#85904]: https://github.com/home-assistant/core/pull/85904
+[#85907]: https://github.com/home-assistant/core/pull/85907
+[#85920]: https://github.com/home-assistant/core/pull/85920
+[#85923]: https://github.com/home-assistant/core/pull/85923
+[#85926]: https://github.com/home-assistant/core/pull/85926
+[#85927]: https://github.com/home-assistant/core/pull/85927
+[#85928]: https://github.com/home-assistant/core/pull/85928
+[#85931]: https://github.com/home-assistant/core/pull/85931
+[#85932]: https://github.com/home-assistant/core/pull/85932
+[#85933]: https://github.com/home-assistant/core/pull/85933
+[#85934]: https://github.com/home-assistant/core/pull/85934
+[#85935]: https://github.com/home-assistant/core/pull/85935
+[#85936]: https://github.com/home-assistant/core/pull/85936
+[#85937]: https://github.com/home-assistant/core/pull/85937
+[#85938]: https://github.com/home-assistant/core/pull/85938
+[#85942]: https://github.com/home-assistant/core/pull/85942
+[#85944]: https://github.com/home-assistant/core/pull/85944
+[#85953]: https://github.com/home-assistant/core/pull/85953
+[#85955]: https://github.com/home-assistant/core/pull/85955
+[#85957]: https://github.com/home-assistant/core/pull/85957
+[#85960]: https://github.com/home-assistant/core/pull/85960
+[#85961]: https://github.com/home-assistant/core/pull/85961
+[#85963]: https://github.com/home-assistant/core/pull/85963
+[#85966]: https://github.com/home-assistant/core/pull/85966
+[#85972]: https://github.com/home-assistant/core/pull/85972
+[#85973]: https://github.com/home-assistant/core/pull/85973
+[#85974]: https://github.com/home-assistant/core/pull/85974
+[#85975]: https://github.com/home-assistant/core/pull/85975
+[#85976]: https://github.com/home-assistant/core/pull/85976
+[#85981]: https://github.com/home-assistant/core/pull/85981
+[#85983]: https://github.com/home-assistant/core/pull/85983
+[#85986]: https://github.com/home-assistant/core/pull/85986
+[#85989]: https://github.com/home-assistant/core/pull/85989
+[#85990]: https://github.com/home-assistant/core/pull/85990
+[#85991]: https://github.com/home-assistant/core/pull/85991
+[#85997]: https://github.com/home-assistant/core/pull/85997
+[#85999]: https://github.com/home-assistant/core/pull/85999
+[#86001]: https://github.com/home-assistant/core/pull/86001
+[#86002]: https://github.com/home-assistant/core/pull/86002
+[#86004]: https://github.com/home-assistant/core/pull/86004
+[#86005]: https://github.com/home-assistant/core/pull/86005
+[#86006]: https://github.com/home-assistant/core/pull/86006
+[#86007]: https://github.com/home-assistant/core/pull/86007
+[#86008]: https://github.com/home-assistant/core/pull/86008
+[#86009]: https://github.com/home-assistant/core/pull/86009
+[#86010]: https://github.com/home-assistant/core/pull/86010
+[#86011]: https://github.com/home-assistant/core/pull/86011
+[#86013]: https://github.com/home-assistant/core/pull/86013
+[#86017]: https://github.com/home-assistant/core/pull/86017
+[#86019]: https://github.com/home-assistant/core/pull/86019
+[#86020]: https://github.com/home-assistant/core/pull/86020
+[#86022]: https://github.com/home-assistant/core/pull/86022
+[#86023]: https://github.com/home-assistant/core/pull/86023
+[#86024]: https://github.com/home-assistant/core/pull/86024
+[#86027]: https://github.com/home-assistant/core/pull/86027
+[#86030]: https://github.com/home-assistant/core/pull/86030
+[#86034]: https://github.com/home-assistant/core/pull/86034
+[#86037]: https://github.com/home-assistant/core/pull/86037
+[#86042]: https://github.com/home-assistant/core/pull/86042
+[#86043]: https://github.com/home-assistant/core/pull/86043
+[#86048]: https://github.com/home-assistant/core/pull/86048
+[#86049]: https://github.com/home-assistant/core/pull/86049
+[#86051]: https://github.com/home-assistant/core/pull/86051
+[#86055]: https://github.com/home-assistant/core/pull/86055
+[#86062]: https://github.com/home-assistant/core/pull/86062
+[#86065]: https://github.com/home-assistant/core/pull/86065
+[#86066]: https://github.com/home-assistant/core/pull/86066
+[#86070]: https://github.com/home-assistant/core/pull/86070
+[#86071]: https://github.com/home-assistant/core/pull/86071
+[#86072]: https://github.com/home-assistant/core/pull/86072
+[#86073]: https://github.com/home-assistant/core/pull/86073
+[#86074]: https://github.com/home-assistant/core/pull/86074
+[#86078]: https://github.com/home-assistant/core/pull/86078
+[#86079]: https://github.com/home-assistant/core/pull/86079
+[#86087]: https://github.com/home-assistant/core/pull/86087
+[#86088]: https://github.com/home-assistant/core/pull/86088
+[#86090]: https://github.com/home-assistant/core/pull/86090
+[#86091]: https://github.com/home-assistant/core/pull/86091
+[#86095]: https://github.com/home-assistant/core/pull/86095
+[#86097]: https://github.com/home-assistant/core/pull/86097
+[#86099]: https://github.com/home-assistant/core/pull/86099
+[#86102]: https://github.com/home-assistant/core/pull/86102
+[#86106]: https://github.com/home-assistant/core/pull/86106
+[#86107]: https://github.com/home-assistant/core/pull/86107
+[#86109]: https://github.com/home-assistant/core/pull/86109
+[#86113]: https://github.com/home-assistant/core/pull/86113
+[#86115]: https://github.com/home-assistant/core/pull/86115
+[#86121]: https://github.com/home-assistant/core/pull/86121
+[#86122]: https://github.com/home-assistant/core/pull/86122
+[#86125]: https://github.com/home-assistant/core/pull/86125
+[#86126]: https://github.com/home-assistant/core/pull/86126
+[#86127]: https://github.com/home-assistant/core/pull/86127
+[#86128]: https://github.com/home-assistant/core/pull/86128
+[#86129]: https://github.com/home-assistant/core/pull/86129
+[#86133]: https://github.com/home-assistant/core/pull/86133
+[#86141]: https://github.com/home-assistant/core/pull/86141
+[#86143]: https://github.com/home-assistant/core/pull/86143
+[#86146]: https://github.com/home-assistant/core/pull/86146
+[#86153]: https://github.com/home-assistant/core/pull/86153
+[#86154]: https://github.com/home-assistant/core/pull/86154
+[#86155]: https://github.com/home-assistant/core/pull/86155
+[#86158]: https://github.com/home-assistant/core/pull/86158
+[#86159]: https://github.com/home-assistant/core/pull/86159
+[#86160]: https://github.com/home-assistant/core/pull/86160
+[#86161]: https://github.com/home-assistant/core/pull/86161
+[#86164]: https://github.com/home-assistant/core/pull/86164
+[#86165]: https://github.com/home-assistant/core/pull/86165
+[#86166]: https://github.com/home-assistant/core/pull/86166
+[#86167]: https://github.com/home-assistant/core/pull/86167
+[#86168]: https://github.com/home-assistant/core/pull/86168
+[#86169]: https://github.com/home-assistant/core/pull/86169
+[#86173]: https://github.com/home-assistant/core/pull/86173
+[#86174]: https://github.com/home-assistant/core/pull/86174
+[#86175]: https://github.com/home-assistant/core/pull/86175
+[#86176]: https://github.com/home-assistant/core/pull/86176
+[#86178]: https://github.com/home-assistant/core/pull/86178
+[#86180]: https://github.com/home-assistant/core/pull/86180
+[#86184]: https://github.com/home-assistant/core/pull/86184
+[#86190]: https://github.com/home-assistant/core/pull/86190
+[#86192]: https://github.com/home-assistant/core/pull/86192
+[#86195]: https://github.com/home-assistant/core/pull/86195
+[#86202]: https://github.com/home-assistant/core/pull/86202
+[#86206]: https://github.com/home-assistant/core/pull/86206
+[#86208]: https://github.com/home-assistant/core/pull/86208
+[#86210]: https://github.com/home-assistant/core/pull/86210
+[#86211]: https://github.com/home-assistant/core/pull/86211
+[#86212]: https://github.com/home-assistant/core/pull/86212
+[#86213]: https://github.com/home-assistant/core/pull/86213
+[#86215]: https://github.com/home-assistant/core/pull/86215
+[#86216]: https://github.com/home-assistant/core/pull/86216
+[#86218]: https://github.com/home-assistant/core/pull/86218
+[#86219]: https://github.com/home-assistant/core/pull/86219
+[#86220]: https://github.com/home-assistant/core/pull/86220
+[#86224]: https://github.com/home-assistant/core/pull/86224
+[#86226]: https://github.com/home-assistant/core/pull/86226
+[#86227]: https://github.com/home-assistant/core/pull/86227
+[#86228]: https://github.com/home-assistant/core/pull/86228
+[#86236]: https://github.com/home-assistant/core/pull/86236
+[#86239]: https://github.com/home-assistant/core/pull/86239
+[#86249]: https://github.com/home-assistant/core/pull/86249
+[#86255]: https://github.com/home-assistant/core/pull/86255
+[#86258]: https://github.com/home-assistant/core/pull/86258
+[#86259]: https://github.com/home-assistant/core/pull/86259
+[#86260]: https://github.com/home-assistant/core/pull/86260
+[#86261]: https://github.com/home-assistant/core/pull/86261
+[#86262]: https://github.com/home-assistant/core/pull/86262
+[#86271]: https://github.com/home-assistant/core/pull/86271
+[#86274]: https://github.com/home-assistant/core/pull/86274
+[#86278]: https://github.com/home-assistant/core/pull/86278
+[#86282]: https://github.com/home-assistant/core/pull/86282
+[#86283]: https://github.com/home-assistant/core/pull/86283
+[#86284]: https://github.com/home-assistant/core/pull/86284
+[#86286]: https://github.com/home-assistant/core/pull/86286
+[#86289]: https://github.com/home-assistant/core/pull/86289
+[#86290]: https://github.com/home-assistant/core/pull/86290
+[#86292]: https://github.com/home-assistant/core/pull/86292
+[#86293]: https://github.com/home-assistant/core/pull/86293
+[#86297]: https://github.com/home-assistant/core/pull/86297
+[#86306]: https://github.com/home-assistant/core/pull/86306
+[#86312]: https://github.com/home-assistant/core/pull/86312
+[#86318]: https://github.com/home-assistant/core/pull/86318
+[#86320]: https://github.com/home-assistant/core/pull/86320
+[#86325]: https://github.com/home-assistant/core/pull/86325
+[#86326]: https://github.com/home-assistant/core/pull/86326
+[#86329]: https://github.com/home-assistant/core/pull/86329
+[#86331]: https://github.com/home-assistant/core/pull/86331
+[#86338]: https://github.com/home-assistant/core/pull/86338
+[#86340]: https://github.com/home-assistant/core/pull/86340
+[#86341]: https://github.com/home-assistant/core/pull/86341
+[#86349]: https://github.com/home-assistant/core/pull/86349
+[#86352]: https://github.com/home-assistant/core/pull/86352
+[#86354]: https://github.com/home-assistant/core/pull/86354
+[#86356]: https://github.com/home-assistant/core/pull/86356
+[#86357]: https://github.com/home-assistant/core/pull/86357
+[#86359]: https://github.com/home-assistant/core/pull/86359
+[#86360]: https://github.com/home-assistant/core/pull/86360
+[#86363]: https://github.com/home-assistant/core/pull/86363
+[#86364]: https://github.com/home-assistant/core/pull/86364
+[#86365]: https://github.com/home-assistant/core/pull/86365
+[#86371]: https://github.com/home-assistant/core/pull/86371
+[#86373]: https://github.com/home-assistant/core/pull/86373
+[#86374]: https://github.com/home-assistant/core/pull/86374
+[#86376]: https://github.com/home-assistant/core/pull/86376
+[#86381]: https://github.com/home-assistant/core/pull/86381
+[#86383]: https://github.com/home-assistant/core/pull/86383
+[#86390]: https://github.com/home-assistant/core/pull/86390
+[#86391]: https://github.com/home-assistant/core/pull/86391
+[#86396]: https://github.com/home-assistant/core/pull/86396
+[#86399]: https://github.com/home-assistant/core/pull/86399
+[#86402]: https://github.com/home-assistant/core/pull/86402
+[#86403]: https://github.com/home-assistant/core/pull/86403
+[#86404]: https://github.com/home-assistant/core/pull/86404
+[#86410]: https://github.com/home-assistant/core/pull/86410
+[#86412]: https://github.com/home-assistant/core/pull/86412
+[#86413]: https://github.com/home-assistant/core/pull/86413
+[#86414]: https://github.com/home-assistant/core/pull/86414
+[#86415]: https://github.com/home-assistant/core/pull/86415
+[#86416]: https://github.com/home-assistant/core/pull/86416
+[#86417]: https://github.com/home-assistant/core/pull/86417
+[#86419]: https://github.com/home-assistant/core/pull/86419
+[#86421]: https://github.com/home-assistant/core/pull/86421
+[#86424]: https://github.com/home-assistant/core/pull/86424
+[#86425]: https://github.com/home-assistant/core/pull/86425
+[#86426]: https://github.com/home-assistant/core/pull/86426
+[#86427]: https://github.com/home-assistant/core/pull/86427
+[#86428]: https://github.com/home-assistant/core/pull/86428
+[#86430]: https://github.com/home-assistant/core/pull/86430
+[#86434]: https://github.com/home-assistant/core/pull/86434
+[#86439]: https://github.com/home-assistant/core/pull/86439
+[#86440]: https://github.com/home-assistant/core/pull/86440
+[#86443]: https://github.com/home-assistant/core/pull/86443
+[#86446]: https://github.com/home-assistant/core/pull/86446
+[#86452]: https://github.com/home-assistant/core/pull/86452
+[#86453]: https://github.com/home-assistant/core/pull/86453
+[#86454]: https://github.com/home-assistant/core/pull/86454
+[#86455]: https://github.com/home-assistant/core/pull/86455
+[#86458]: https://github.com/home-assistant/core/pull/86458
+[#86459]: https://github.com/home-assistant/core/pull/86459
+[#86460]: https://github.com/home-assistant/core/pull/86460
+[#86464]: https://github.com/home-assistant/core/pull/86464
+[#86465]: https://github.com/home-assistant/core/pull/86465
+[#86466]: https://github.com/home-assistant/core/pull/86466
+[#86470]: https://github.com/home-assistant/core/pull/86470
+[#86473]: https://github.com/home-assistant/core/pull/86473
+[#86474]: https://github.com/home-assistant/core/pull/86474
+[#86479]: https://github.com/home-assistant/core/pull/86479
+[#86480]: https://github.com/home-assistant/core/pull/86480
+[#86481]: https://github.com/home-assistant/core/pull/86481
+[#86482]: https://github.com/home-assistant/core/pull/86482
+[#86483]: https://github.com/home-assistant/core/pull/86483
+[#86484]: https://github.com/home-assistant/core/pull/86484
+[#86491]: https://github.com/home-assistant/core/pull/86491
+[#86492]: https://github.com/home-assistant/core/pull/86492
+[#86493]: https://github.com/home-assistant/core/pull/86493
+[#86500]: https://github.com/home-assistant/core/pull/86500
+[#86505]: https://github.com/home-assistant/core/pull/86505
+[#86506]: https://github.com/home-assistant/core/pull/86506
+[#86507]: https://github.com/home-assistant/core/pull/86507
+[#86509]: https://github.com/home-assistant/core/pull/86509
+[#86510]: https://github.com/home-assistant/core/pull/86510
+[#86511]: https://github.com/home-assistant/core/pull/86511
+[#86512]: https://github.com/home-assistant/core/pull/86512
+[#86513]: https://github.com/home-assistant/core/pull/86513
+[#86514]: https://github.com/home-assistant/core/pull/86514
+[#86515]: https://github.com/home-assistant/core/pull/86515
+[#86516]: https://github.com/home-assistant/core/pull/86516
+[#86517]: https://github.com/home-assistant/core/pull/86517
+[#86518]: https://github.com/home-assistant/core/pull/86518
+[#86520]: https://github.com/home-assistant/core/pull/86520
+[#86525]: https://github.com/home-assistant/core/pull/86525
+[#86527]: https://github.com/home-assistant/core/pull/86527
+[#86528]: https://github.com/home-assistant/core/pull/86528
+[#86531]: https://github.com/home-assistant/core/pull/86531
+[#86533]: https://github.com/home-assistant/core/pull/86533
+[#86535]: https://github.com/home-assistant/core/pull/86535
+[#86536]: https://github.com/home-assistant/core/pull/86536
+[#86537]: https://github.com/home-assistant/core/pull/86537
+[#86538]: https://github.com/home-assistant/core/pull/86538
+[#86539]: https://github.com/home-assistant/core/pull/86539
+[#86540]: https://github.com/home-assistant/core/pull/86540
+[#86541]: https://github.com/home-assistant/core/pull/86541
+[#86542]: https://github.com/home-assistant/core/pull/86542
+[#86544]: https://github.com/home-assistant/core/pull/86544
+[#86550]: https://github.com/home-assistant/core/pull/86550
+[#86553]: https://github.com/home-assistant/core/pull/86553
+[#86554]: https://github.com/home-assistant/core/pull/86554
+[#86555]: https://github.com/home-assistant/core/pull/86555
+[#86557]: https://github.com/home-assistant/core/pull/86557
+[#86558]: https://github.com/home-assistant/core/pull/86558
+[#86559]: https://github.com/home-assistant/core/pull/86559
+[#86560]: https://github.com/home-assistant/core/pull/86560
+[#86561]: https://github.com/home-assistant/core/pull/86561
+[#86562]: https://github.com/home-assistant/core/pull/86562
+[#86563]: https://github.com/home-assistant/core/pull/86563
+[#86564]: https://github.com/home-assistant/core/pull/86564
+[#86565]: https://github.com/home-assistant/core/pull/86565
+[#86567]: https://github.com/home-assistant/core/pull/86567
+[#86569]: https://github.com/home-assistant/core/pull/86569
+[#86570]: https://github.com/home-assistant/core/pull/86570
+[#86571]: https://github.com/home-assistant/core/pull/86571
+[#86572]: https://github.com/home-assistant/core/pull/86572
+[#86573]: https://github.com/home-assistant/core/pull/86573
+[#86574]: https://github.com/home-assistant/core/pull/86574
+[#86575]: https://github.com/home-assistant/core/pull/86575
+[#86576]: https://github.com/home-assistant/core/pull/86576
+[#86577]: https://github.com/home-assistant/core/pull/86577
+[#86578]: https://github.com/home-assistant/core/pull/86578
+[#86579]: https://github.com/home-assistant/core/pull/86579
+[#86580]: https://github.com/home-assistant/core/pull/86580
+[#86581]: https://github.com/home-assistant/core/pull/86581
+[#86582]: https://github.com/home-assistant/core/pull/86582
+[#86583]: https://github.com/home-assistant/core/pull/86583
+[#86584]: https://github.com/home-assistant/core/pull/86584
+[#86590]: https://github.com/home-assistant/core/pull/86590
+[#86592]: https://github.com/home-assistant/core/pull/86592
+[#86595]: https://github.com/home-assistant/core/pull/86595
+[#86597]: https://github.com/home-assistant/core/pull/86597
+[#86598]: https://github.com/home-assistant/core/pull/86598
+[#86600]: https://github.com/home-assistant/core/pull/86600
+[#86601]: https://github.com/home-assistant/core/pull/86601
+[#86603]: https://github.com/home-assistant/core/pull/86603
+[#86604]: https://github.com/home-assistant/core/pull/86604
+[#86606]: https://github.com/home-assistant/core/pull/86606
+[#86608]: https://github.com/home-assistant/core/pull/86608
+[#86611]: https://github.com/home-assistant/core/pull/86611
+[#86614]: https://github.com/home-assistant/core/pull/86614
+[#86615]: https://github.com/home-assistant/core/pull/86615
+[#86616]: https://github.com/home-assistant/core/pull/86616
+[#86621]: https://github.com/home-assistant/core/pull/86621
+[#86624]: https://github.com/home-assistant/core/pull/86624
+[#86625]: https://github.com/home-assistant/core/pull/86625
+[#86626]: https://github.com/home-assistant/core/pull/86626
+[#86627]: https://github.com/home-assistant/core/pull/86627
+[#86628]: https://github.com/home-assistant/core/pull/86628
+[#86634]: https://github.com/home-assistant/core/pull/86634
+[#86635]: https://github.com/home-assistant/core/pull/86635
+[#86663]: https://github.com/home-assistant/core/pull/86663
+[#86669]: https://github.com/home-assistant/core/pull/86669
+[#86671]: https://github.com/home-assistant/core/pull/86671
+[#86674]: https://github.com/home-assistant/core/pull/86674
+[#86676]: https://github.com/home-assistant/core/pull/86676
+[#86678]: https://github.com/home-assistant/core/pull/86678
+[#86680]: https://github.com/home-assistant/core/pull/86680
+[#86684]: https://github.com/home-assistant/core/pull/86684
+[#86687]: https://github.com/home-assistant/core/pull/86687
+[#86711]: https://github.com/home-assistant/core/pull/86711
+[#86712]: https://github.com/home-assistant/core/pull/86712
+[#86725]: https://github.com/home-assistant/core/pull/86725
+[#86727]: https://github.com/home-assistant/core/pull/86727
+[#86728]: https://github.com/home-assistant/core/pull/86728
+[#86742]: https://github.com/home-assistant/core/pull/86742
+[#86749]: https://github.com/home-assistant/core/pull/86749
+[#86751]: https://github.com/home-assistant/core/pull/86751
+[#86754]: https://github.com/home-assistant/core/pull/86754
+[#86758]: https://github.com/home-assistant/core/pull/86758
+[#86762]: https://github.com/home-assistant/core/pull/86762
+[#86763]: https://github.com/home-assistant/core/pull/86763
+[#86808]: https://github.com/home-assistant/core/pull/86808
+[#86812]: https://github.com/home-assistant/core/pull/86812
+[#86819]: https://github.com/home-assistant/core/pull/86819
+[#86824]: https://github.com/home-assistant/core/pull/86824
+[#86829]: https://github.com/home-assistant/core/pull/86829
+[#86838]: https://github.com/home-assistant/core/pull/86838
+[#86841]: https://github.com/home-assistant/core/pull/86841
+[#86842]: https://github.com/home-assistant/core/pull/86842
+[#86847]: https://github.com/home-assistant/core/pull/86847
+[#86855]: https://github.com/home-assistant/core/pull/86855
+[#86861]: https://github.com/home-assistant/core/pull/86861
+[#86867]: https://github.com/home-assistant/core/pull/86867
+[#86874]: https://github.com/home-assistant/core/pull/86874
+[#86890]: https://github.com/home-assistant/core/pull/86890
+[#86897]: https://github.com/home-assistant/core/pull/86897
+[#86917]: https://github.com/home-assistant/core/pull/86917
+[#86935]: https://github.com/home-assistant/core/pull/86935
+[#86939]: https://github.com/home-assistant/core/pull/86939
+[#86942]: https://github.com/home-assistant/core/pull/86942
+[#86953]: https://github.com/home-assistant/core/pull/86953
+[#86960]: https://github.com/home-assistant/core/pull/86960
+[#86961]: https://github.com/home-assistant/core/pull/86961
+[#86965]: https://github.com/home-assistant/core/pull/86965
+[#86966]: https://github.com/home-assistant/core/pull/86966
+[#86970]: https://github.com/home-assistant/core/pull/86970
+[#86975]: https://github.com/home-assistant/core/pull/86975
+[#86977]: https://github.com/home-assistant/core/pull/86977
+[#86978]: https://github.com/home-assistant/core/pull/86978
+[#86979]: https://github.com/home-assistant/core/pull/86979
+[#86980]: https://github.com/home-assistant/core/pull/86980
+[#86981]: https://github.com/home-assistant/core/pull/86981
+[#86982]: https://github.com/home-assistant/core/pull/86982
+[#86993]: https://github.com/home-assistant/core/pull/86993
+[#86995]: https://github.com/home-assistant/core/pull/86995
+[#86996]: https://github.com/home-assistant/core/pull/86996
+[#86997]: https://github.com/home-assistant/core/pull/86997
+[#87001]: https://github.com/home-assistant/core/pull/87001
+[#87010]: https://github.com/home-assistant/core/pull/87010
+[#87018]: https://github.com/home-assistant/core/pull/87018
+[#87034]: https://github.com/home-assistant/core/pull/87034
+[#87040]: https://github.com/home-assistant/core/pull/87040
+[#87041]: https://github.com/home-assistant/core/pull/87041
+[#87042]: https://github.com/home-assistant/core/pull/87042
+[#87051]: https://github.com/home-assistant/core/pull/87051
+[#87058]: https://github.com/home-assistant/core/pull/87058
+[#87059]: https://github.com/home-assistant/core/pull/87059
+[#87086]: https://github.com/home-assistant/core/pull/87086
+[#87090]: https://github.com/home-assistant/core/pull/87090
+[#87096]: https://github.com/home-assistant/core/pull/87096
+[#87098]: https://github.com/home-assistant/core/pull/87098
+[#87099]: https://github.com/home-assistant/core/pull/87099
+[@930913]: https://github.com/930913
+[@Alcoinus]: https://github.com/Alcoinus
+[@Andre0512]: https://github.com/Andre0512
+[@AngellusMortis]: https://github.com/AngellusMortis
+[@AustinBrunkhorst]: https://github.com/AustinBrunkhorst
+[@Cereal2nd]: https://github.com/Cereal2nd
+[@CoMPaTech]: https://github.com/CoMPaTech
+[@DCSBL]: https://github.com/DCSBL
+[@Danielhiversen]: https://github.com/Danielhiversen
+[@Drafteed]: https://github.com/Drafteed
+[@Ernst79]: https://github.com/Ernst79
+[@Gerigot]: https://github.com/Gerigot
+[@Glodenox]: https://github.com/Glodenox
+[@GrahamJB1]: https://github.com/GrahamJB1
+[@IceBotYT]: https://github.com/IceBotYT
+[@Jorei]: https://github.com/Jorei
+[@Kane610]: https://github.com/Kane610
+[@Lash-L]: https://github.com/Lash-L
+[@MHFDoge]: https://github.com/MHFDoge
+[@MartinHjelmare]: https://github.com/MartinHjelmare
+[@MatthiasLohr]: https://github.com/MatthiasLohr
+[@Nardol]: https://github.com/Nardol
+[@Noltari]: https://github.com/Noltari
+[@OnFreund]: https://github.com/OnFreund
+[@PoltoS]: https://github.com/PoltoS
+[@RenierM26]: https://github.com/RenierM26
+[@RoboMagus]: https://github.com/RoboMagus
+[@Savjee]: https://github.com/Savjee
+[@SgtBatten]: https://github.com/SgtBatten
+[@Shutgun]: https://github.com/Shutgun
+[@StevenLooman]: https://github.com/StevenLooman
+[@Stonos]: https://github.com/Stonos
+[@TheJulianJES]: https://github.com/TheJulianJES
+[@TitanNano]: https://github.com/TitanNano
+[@Vaarlion]: https://github.com/Vaarlion
+[@abmantis]: https://github.com/abmantis
+[@agners]: https://github.com/agners
+[@akx]: https://github.com/akx
+[@allenporter]: https://github.com/allenporter
+[@amitfin]: https://github.com/amitfin
+[@austinmroczek]: https://github.com/austinmroczek
+[@avee87]: https://github.com/avee87
+[@azogue]: https://github.com/azogue
+[@bachya]: https://github.com/bachya
+[@balloob]: https://github.com/balloob
+[@bbr111]: https://github.com/bbr111
+[@bdr99]: https://github.com/bdr99
+[@bdraco]: https://github.com/bdraco
+[@bieniu]: https://github.com/bieniu
+[@boralyl]: https://github.com/boralyl
+[@boswelja]: https://github.com/boswelja
+[@bouwew]: https://github.com/bouwew
+[@bramkragten]: https://github.com/bramkragten
+[@cdce8p]: https://github.com/cdce8p
+[@cgarwood]: https://github.com/cgarwood
+[@daniel-simpson]: https://github.com/daniel-simpson
+[@daniele-athome]: https://github.com/daniele-athome
+[@davet2001]: https://github.com/davet2001
+[@davidflypei]: https://github.com/davidflypei
+[@dbuezas]: https://github.com/dbuezas
+[@dermotduffy]: https://github.com/dermotduffy
+[@dieselrabbit]: https://github.com/dieselrabbit
+[@dmulcahey]: https://github.com/dmulcahey
+[@eMerzh]: https://github.com/eMerzh
+[@eifinger]: https://github.com/eifinger
+[@elupus]: https://github.com/elupus
+[@emontnemery]: https://github.com/emontnemery
+[@engrbm87]: https://github.com/engrbm87
+[@epenet]: https://github.com/epenet
+[@exxamalte]: https://github.com/exxamalte
+[@farmio]: https://github.com/farmio
+[@foxel]: https://github.com/foxel
+[@frenck]: https://github.com/frenck
+[@fwestenberg]: https://github.com/fwestenberg
+[@gjohansson-ST]: https://github.com/gjohansson-ST
+[@hpirila]: https://github.com/hpirila
+[@iMicknl]: https://github.com/iMicknl
+[@j-stienstra]: https://github.com/j-stienstra
+[@jafar-atili]: https://github.com/jafar-atili
+[@janiversen]: https://github.com/janiversen
+[@jbouwh]: https://github.com/jbouwh
+[@jcconnell]: https://github.com/jcconnell
+[@jeeftor]: https://github.com/jeeftor
+[@jesserockz]: https://github.com/jesserockz
+[@jjlawren]: https://github.com/jjlawren
+[@joncar]: https://github.com/joncar
+[@jrieger]: https://github.com/jrieger
+[@kamiyo]: https://github.com/kamiyo
+[@karliemeads]: https://github.com/karliemeads
+[@killer0071234]: https://github.com/killer0071234
+[@klaasnicolaas]: https://github.com/klaasnicolaas
+[@kvanzuijlen]: https://github.com/kvanzuijlen
+[@lemanjo]: https://github.com/lemanjo
+[@liudger]: https://github.com/liudger
+[@ljungqvist]: https://github.com/ljungqvist
+[@ludeeus]: https://github.com/ludeeus
+[@lunmay]: https://github.com/lunmay
+[@majuss]: https://github.com/majuss
+[@marcelveldt]: https://github.com/marcelveldt
+[@matteocorti]: https://github.com/matteocorti
+[@mbo18]: https://github.com/mbo18
+[@mdegat01]: https://github.com/mdegat01
+[@mdonoughe]: https://github.com/mdonoughe
+[@mib1185]: https://github.com/mib1185
+[@michaeldavie]: https://github.com/michaeldavie
+[@mkmer]: https://github.com/mkmer
+[@mvdwetering]: https://github.com/mvdwetering
+[@mxr]: https://github.com/mxr
+[@mythicaleinhorn]: https://github.com/mythicaleinhorn
+[@nareddyt]: https://github.com/nareddyt
+[@natekspencer]: https://github.com/natekspencer
+[@nijel]: https://github.com/nijel
+[@niklasdoerfler]: https://github.com/niklasdoerfler
+[@o951753o]: https://github.com/o951753o
+[@oischinger]: https://github.com/oischinger
+[@ollo69]: https://github.com/ollo69
+[@ondras12345]: https://github.com/ondras12345
+[@orosam]: https://github.com/orosam
+[@osmaa]: https://github.com/osmaa
+[@pavoni]: https://github.com/pavoni
+[@piitaya]: https://github.com/piitaya
+[@pree]: https://github.com/pree
+[@puddly]: https://github.com/puddly
+[@pvizeli]: https://github.com/pvizeli
+[@ratsept]: https://github.com/ratsept
+[@rikroe]: https://github.com/rikroe
+[@riokuu]: https://github.com/riokuu
+[@rsmatias]: https://github.com/rsmatias
+[@rytilahti]: https://github.com/rytilahti
+[@scolby33]: https://github.com/scolby33
+[@scop]: https://github.com/scop
+[@shaiu]: https://github.com/shaiu
+[@shbatm]: https://github.com/shbatm
+[@sredna]: https://github.com/sredna
+[@starkillerOG]: https://github.com/starkillerOG
+[@sw-carlos-cristobal]: https://github.com/sw-carlos-cristobal
+[@synesthesiam]: https://github.com/synesthesiam
+[@teharris1]: https://github.com/teharris1
+[@thecode]: https://github.com/thecode
+[@timmo001]: https://github.com/timmo001
+[@tinloaf]: https://github.com/tinloaf
+[@tkdrob]: https://github.com/tkdrob
+[@tradel]: https://github.com/tradel
+[@tronikos]: https://github.com/tronikos
+[@tschamm]: https://github.com/tschamm
+[@tyge68]: https://github.com/tyge68
+[@uvjustin]: https://github.com/uvjustin
+[@wibbit]: https://github.com/wibbit
+[@yuvalabou]: https://github.com/yuvalabou
+[@yuxincs]: https://github.com/yuxincs
+[@zebardy]: https://github.com/zebardy
+[abode docs]: https://www.home-assistant.io/integrations/abode/
+[accuweather docs]: https://www.home-assistant.io/integrations/accuweather/
+[adguard docs]: https://www.home-assistant.io/integrations/adguard/
+[airly docs]: https://www.home-assistant.io/integrations/airly/
+[airthings_ble docs]: https://www.home-assistant.io/integrations/airthings_ble/
+[airvisual docs]: https://www.home-assistant.io/integrations/airvisual/
+[airvisual_pro docs]: https://www.home-assistant.io/integrations/airvisual_pro/
+[airzone docs]: https://www.home-assistant.io/integrations/airzone/
+[aladdin_connect docs]: https://www.home-assistant.io/integrations/aladdin_connect/
+[alexa docs]: https://www.home-assistant.io/integrations/alexa/
+[almond docs]: https://www.home-assistant.io/integrations/almond/
+[ambient_station docs]: https://www.home-assistant.io/integrations/ambient_station/
+[androidtv docs]: https://www.home-assistant.io/integrations/androidtv/
+[anthemav docs]: https://www.home-assistant.io/integrations/anthemav/
+[anwb_energie docs]: https://www.home-assistant.io/integrations/anwb_energie/
+[apcupsd docs]: https://www.home-assistant.io/integrations/apcupsd/
+[august docs]: https://www.home-assistant.io/integrations/august/
+[axis docs]: https://www.home-assistant.io/integrations/axis/
+[bitcoin docs]: https://www.home-assistant.io/integrations/bitcoin/
+[blebox docs]: https://www.home-assistant.io/integrations/blebox/
+[bluemaestro docs]: https://www.home-assistant.io/integrations/bluemaestro/
+[bluetooth docs]: https://www.home-assistant.io/integrations/bluetooth/
+[bmw_connected_drive docs]: https://www.home-assistant.io/integrations/bmw_connected_drive/
+[bond docs]: https://www.home-assistant.io/integrations/bond/
+[bosch_shc docs]: https://www.home-assistant.io/integrations/bosch_shc/
+[braviatv docs]: https://www.home-assistant.io/integrations/braviatv/
+[broadlink docs]: https://www.home-assistant.io/integrations/broadlink/
+[brunt docs]: https://www.home-assistant.io/integrations/brunt/
+[bsblan docs]: https://www.home-assistant.io/integrations/bsblan/
+[bthome docs]: https://www.home-assistant.io/integrations/bthome/
+[caldav docs]: https://www.home-assistant.io/integrations/caldav/
+[calendar docs]: https://www.home-assistant.io/integrations/calendar/
+[camera docs]: https://www.home-assistant.io/integrations/camera/
+[cast docs]: https://www.home-assistant.io/integrations/cast/
+[cert_expiry docs]: https://www.home-assistant.io/integrations/cert_expiry/
+[climacell docs]: https://www.home-assistant.io/integrations/climacell/
+[climate docs]: https://www.home-assistant.io/integrations/climate/
+[co2signal docs]: https://www.home-assistant.io/integrations/co2signal/
+[comfoconnect docs]: https://www.home-assistant.io/integrations/comfoconnect/
+[config docs]: https://www.home-assistant.io/integrations/config/
+[conversation docs]: https://www.home-assistant.io/integrations/conversation/
+[coolmaster docs]: https://www.home-assistant.io/integrations/coolmaster/
+[cover docs]: https://www.home-assistant.io/integrations/cover/
+[debugpy docs]: https://www.home-assistant.io/integrations/debugpy/
+[deconz docs]: https://www.home-assistant.io/integrations/deconz/
+[default_config docs]: https://www.home-assistant.io/integrations/default_config/
+[deluge docs]: https://www.home-assistant.io/integrations/deluge/
+[demo docs]: https://www.home-assistant.io/integrations/demo/
+[derivative docs]: https://www.home-assistant.io/integrations/derivative/
+[device_automation docs]: https://www.home-assistant.io/integrations/device_automation/
+[devolo_home_network docs]: https://www.home-assistant.io/integrations/devolo_home_network/
+[dhcp docs]: https://www.home-assistant.io/integrations/dhcp/
+[diagnostics docs]: https://www.home-assistant.io/integrations/diagnostics/
+[dlink docs]: https://www.home-assistant.io/integrations/dlink/
+[dlna_dmr docs]: https://www.home-assistant.io/integrations/dlna_dmr/
+[dlna_dms docs]: https://www.home-assistant.io/integrations/dlna_dms/
+[dsmr_reader docs]: https://www.home-assistant.io/integrations/dsmr_reader/
+[ecobee docs]: https://www.home-assistant.io/integrations/ecobee/
+[econet docs]: https://www.home-assistant.io/integrations/econet/
+[ecowitt docs]: https://www.home-assistant.io/integrations/ecowitt/
+[elgato docs]: https://www.home-assistant.io/integrations/elgato/
+[elkm1 docs]: https://www.home-assistant.io/integrations/elkm1/
+[emoncms docs]: https://www.home-assistant.io/integrations/emoncms/
+[energie_vanons docs]: https://www.home-assistant.io/integrations/energie_vanons/
+[energy docs]: https://www.home-assistant.io/integrations/energy/
+[energyzero docs]: https://www.home-assistant.io/integrations/energyzero/
+[environment_canada docs]: https://www.home-assistant.io/integrations/environment_canada/
+[escea docs]: https://www.home-assistant.io/integrations/escea/
+[esphome docs]: https://www.home-assistant.io/integrations/esphome/
+[eufy docs]: https://www.home-assistant.io/integrations/eufy/
+[eufylife_ble docs]: https://www.home-assistant.io/integrations/eufylife_ble/
+[ezviz docs]: https://www.home-assistant.io/integrations/ezviz/
+[filter docs]: https://www.home-assistant.io/integrations/filter/
+[fire_tv docs]: https://www.home-assistant.io/integrations/fire_tv/
+[firmata docs]: https://www.home-assistant.io/integrations/firmata/
+[fitbit docs]: https://www.home-assistant.io/integrations/fitbit/
+[fjaraskupan docs]: https://www.home-assistant.io/integrations/fjaraskupan/
+[flume docs]: https://www.home-assistant.io/integrations/flume/
+[flux_led docs]: https://www.home-assistant.io/integrations/flux_led/
+[folder_watcher docs]: https://www.home-assistant.io/integrations/folder_watcher/
+[forked_daapd docs]: https://www.home-assistant.io/integrations/forked_daapd/
+[freedompro docs]: https://www.home-assistant.io/integrations/freedompro/
+[fritz docs]: https://www.home-assistant.io/integrations/fritz/
+[fritzbox docs]: https://www.home-assistant.io/integrations/fritzbox/
+[fronius docs]: https://www.home-assistant.io/integrations/fronius/
+[frontend docs]: https://www.home-assistant.io/integrations/frontend/
+[generic docs]: https://www.home-assistant.io/integrations/generic/
+[generic_hygrostat docs]: https://www.home-assistant.io/integrations/generic_hygrostat/
+[geniushub docs]: https://www.home-assistant.io/integrations/geniushub/
+[geonetnz_quakes docs]: https://www.home-assistant.io/integrations/geonetnz_quakes/
+[geonetnz_volcano docs]: https://www.home-assistant.io/integrations/geonetnz_volcano/
+[gios docs]: https://www.home-assistant.io/integrations/gios/
+[glances docs]: https://www.home-assistant.io/integrations/glances/
+[goalzero docs]: https://www.home-assistant.io/integrations/goalzero/
+[google docs]: https://www.home-assistant.io/integrations/google/
+[google_assistant docs]: https://www.home-assistant.io/integrations/google_assistant/
+[google_assistant_sdk docs]: https://www.home-assistant.io/integrations/google_assistant_sdk/
+[google_mail docs]: https://www.home-assistant.io/integrations/google_mail/
+[google_sheets docs]: https://www.home-assistant.io/integrations/google_sheets/
+[google_wifi docs]: https://www.home-assistant.io/integrations/google_wifi/
+[group docs]: https://www.home-assistant.io/integrations/group/
+[guardian docs]: https://www.home-assistant.io/integrations/guardian/
+[hassio docs]: https://www.home-assistant.io/integrations/hassio/
+[heos docs]: https://www.home-assistant.io/integrations/heos/
+[here_travel_time docs]: https://www.home-assistant.io/integrations/here_travel_time/
+[history docs]: https://www.home-assistant.io/integrations/history/
+[homeassistant_hardware docs]: https://www.home-assistant.io/integrations/homeassistant_hardware/
+[homeassistant_sky_connect docs]: https://www.home-assistant.io/integrations/homeassistant_sky_connect/
+[homeassistant_yellow docs]: https://www.home-assistant.io/integrations/homeassistant_yellow/
+[homekit docs]: https://www.home-assistant.io/integrations/homekit/
+[homematicip_cloud docs]: https://www.home-assistant.io/integrations/homematicip_cloud/
+[homewizard docs]: https://www.home-assistant.io/integrations/homewizard/
+[honeywell docs]: https://www.home-assistant.io/integrations/honeywell/
+[http docs]: https://www.home-assistant.io/integrations/http/
+[huawei_lte docs]: https://www.home-assistant.io/integrations/huawei_lte/
+[hue docs]: https://www.home-assistant.io/integrations/hue/
+[huisbaasje docs]: https://www.home-assistant.io/integrations/huisbaasje/
+[ign_sismologia docs]: https://www.home-assistant.io/integrations/ign_sismologia/
+[imap docs]: https://www.home-assistant.io/integrations/imap/
+[influxdb docs]: https://www.home-assistant.io/integrations/influxdb/
+[insteon docs]: https://www.home-assistant.io/integrations/insteon/
+[integration docs]: https://www.home-assistant.io/integrations/integration/
+[intellifire docs]: https://www.home-assistant.io/integrations/intellifire/
+[intent docs]: https://www.home-assistant.io/integrations/intent/
+[iotawatt docs]: https://www.home-assistant.io/integrations/iotawatt/
+[iperf3 docs]: https://www.home-assistant.io/integrations/iperf3/
+[ipp docs]: https://www.home-assistant.io/integrations/ipp/
+[iqvia docs]: https://www.home-assistant.io/integrations/iqvia/
+[islamic_prayer_times docs]: https://www.home-assistant.io/integrations/islamic_prayer_times/
+[isy994 docs]: https://www.home-assistant.io/integrations/isy994/
+[jellyfin docs]: https://www.home-assistant.io/integrations/jellyfin/
+[keenetic_ndms2 docs]: https://www.home-assistant.io/integrations/keenetic_ndms2/
+[keymitt_ble docs]: https://www.home-assistant.io/integrations/keymitt_ble/
+[kitchen_sink docs]: https://www.home-assistant.io/integrations/kitchen_sink/
+[knx docs]: https://www.home-assistant.io/integrations/knx/
+[konnected docs]: https://www.home-assistant.io/integrations/konnected/
+[kostal_plenticore docs]: https://www.home-assistant.io/integrations/kostal_plenticore/
+[lacrosse docs]: https://www.home-assistant.io/integrations/lacrosse/
+[lacrosse_view docs]: https://www.home-assistant.io/integrations/lacrosse_view/
+[lametric docs]: https://www.home-assistant.io/integrations/lametric/
+[landisgyr_heat_meter docs]: https://www.home-assistant.io/integrations/landisgyr_heat_meter/
+[lcn docs]: https://www.home-assistant.io/integrations/lcn/
+[ld2410_ble docs]: https://www.home-assistant.io/integrations/ld2410_ble/
+[lg_soundbar docs]: https://www.home-assistant.io/integrations/lg_soundbar/
+[life360 docs]: https://www.home-assistant.io/integrations/life360/
+[lifx docs]: https://www.home-assistant.io/integrations/lifx/
+[light docs]: https://www.home-assistant.io/integrations/light/
+[litejet docs]: https://www.home-assistant.io/integrations/litejet/
+[litterrobot docs]: https://www.home-assistant.io/integrations/litterrobot/
+[local_calendar docs]: https://www.home-assistant.io/integrations/local_calendar/
+[lock docs]: https://www.home-assistant.io/integrations/lock/
+[logbook docs]: https://www.home-assistant.io/integrations/logbook/
+[lupusec docs]: https://www.home-assistant.io/integrations/lupusec/
+[lutron_caseta docs]: https://www.home-assistant.io/integrations/lutron_caseta/
+[magicseaweed docs]: https://www.home-assistant.io/integrations/magicseaweed/
+[matter docs]: https://www.home-assistant.io/integrations/matter/
+[mazda docs]: https://www.home-assistant.io/integrations/mazda/
+[media_extractor docs]: https://www.home-assistant.io/integrations/media_extractor/
+[melnor docs]: https://www.home-assistant.io/integrations/melnor/
+[metoffice docs]: https://www.home-assistant.io/integrations/metoffice/
+[mfi docs]: https://www.home-assistant.io/integrations/mfi/
+[mijndomein_energie docs]: https://www.home-assistant.io/integrations/mijndomein_energie/
+[mill docs]: https://www.home-assistant.io/integrations/mill/
+[min_max docs]: https://www.home-assistant.io/integrations/min_max/
+[minecraft_server docs]: https://www.home-assistant.io/integrations/minecraft_server/
+[mobile_app docs]: https://www.home-assistant.io/integrations/mobile_app/
+[modbus docs]: https://www.home-assistant.io/integrations/modbus/
+[modem_callerid docs]: https://www.home-assistant.io/integrations/modem_callerid/
+[moehlenhoff_alpha2 docs]: https://www.home-assistant.io/integrations/moehlenhoff_alpha2/
+[mopeka docs]: https://www.home-assistant.io/integrations/mopeka/
+[motion_blinds docs]: https://www.home-assistant.io/integrations/motion_blinds/
+[motioneye docs]: https://www.home-assistant.io/integrations/motioneye/
+[mqtt docs]: https://www.home-assistant.io/integrations/mqtt/
+[mysensors docs]: https://www.home-assistant.io/integrations/mysensors/
+[nam docs]: https://www.home-assistant.io/integrations/nam/
+[nanoleaf docs]: https://www.home-assistant.io/integrations/nanoleaf/
+[nest docs]: https://www.home-assistant.io/integrations/nest/
+[netatmo docs]: https://www.home-assistant.io/integrations/netatmo/
+[netgear docs]: https://www.home-assistant.io/integrations/netgear/
+[nextdns docs]: https://www.home-assistant.io/integrations/nextdns/
+[nibe_heatpump docs]: https://www.home-assistant.io/integrations/nibe_heatpump/
+[notion docs]: https://www.home-assistant.io/integrations/notion/
+[nsw_rural_fire_service_feed docs]: https://www.home-assistant.io/integrations/nsw_rural_fire_service_feed/
+[nuki docs]: https://www.home-assistant.io/integrations/nuki/
+[number docs]: https://www.home-assistant.io/integrations/number/
+[nut docs]: https://www.home-assistant.io/integrations/nut/
+[nws docs]: https://www.home-assistant.io/integrations/nws/
+[oncue docs]: https://www.home-assistant.io/integrations/oncue/
+[ondilo_ico docs]: https://www.home-assistant.io/integrations/ondilo_ico/
+[onewire docs]: https://www.home-assistant.io/integrations/onewire/
+[openai_conversation docs]: https://www.home-assistant.io/integrations/openai_conversation/
+[openalpr_local docs]: https://www.home-assistant.io/integrations/openalpr_local/
+[openerz docs]: https://www.home-assistant.io/integrations/openerz/
+[opengarage docs]: https://www.home-assistant.io/integrations/opengarage/
+[openuv docs]: https://www.home-assistant.io/integrations/openuv/
+[oralb docs]: https://www.home-assistant.io/integrations/oralb/
+[otbr docs]: https://www.home-assistant.io/integrations/otbr/
+[overkiz docs]: https://www.home-assistant.io/integrations/overkiz/
+[ovo_energy docs]: https://www.home-assistant.io/integrations/ovo_energy/
+[philips_js docs]: https://www.home-assistant.io/integrations/philips_js/
+[pi_hole docs]: https://www.home-assistant.io/integrations/pi_hole/
+[ping docs]: https://www.home-assistant.io/integrations/ping/
+[plugwise docs]: https://www.home-assistant.io/integrations/plugwise/
+[powerwall docs]: https://www.home-assistant.io/integrations/powerwall/
+[prusalink docs]: https://www.home-assistant.io/integrations/prusalink/
+[ps4 docs]: https://www.home-assistant.io/integrations/ps4/
+[purpleair docs]: https://www.home-assistant.io/integrations/purpleair/
+[pvpc_hourly_pricing docs]: https://www.home-assistant.io/integrations/pvpc_hourly_pricing/
+[python_script docs]: https://www.home-assistant.io/integrations/python_script/
+[qnap_qsw docs]: https://www.home-assistant.io/integrations/qnap_qsw/
+[qwikswitch docs]: https://www.home-assistant.io/integrations/qwikswitch/
+[rainbird docs]: https://www.home-assistant.io/integrations/rainbird/
+[rainmachine docs]: https://www.home-assistant.io/integrations/rainmachine/
+[recollect_waste docs]: https://www.home-assistant.io/integrations/recollect_waste/
+[recorder docs]: https://www.home-assistant.io/integrations/recorder/
+[renault docs]: https://www.home-assistant.io/integrations/renault/
+[reolink docs]: https://www.home-assistant.io/integrations/reolink/
+[repairs docs]: https://www.home-assistant.io/integrations/repairs/
+[rest docs]: https://www.home-assistant.io/integrations/rest/
+[rflink docs]: https://www.home-assistant.io/integrations/rflink/
+[rfxtrx docs]: https://www.home-assistant.io/integrations/rfxtrx/
+[ridwell docs]: https://www.home-assistant.io/integrations/ridwell/
+[ring docs]: https://www.home-assistant.io/integrations/ring/
+[roon docs]: https://www.home-assistant.io/integrations/roon/
+[rss_feed_template docs]: https://www.home-assistant.io/integrations/rss_feed_template/
+[ruuvi_gateway docs]: https://www.home-assistant.io/integrations/ruuvi_gateway/
+[ruuvitag_ble docs]: https://www.home-assistant.io/integrations/ruuvitag_ble/
+[rympro docs]: https://www.home-assistant.io/integrations/rympro/
+[sabnzbd docs]: https://www.home-assistant.io/integrations/sabnzbd/
+[samsungtv docs]: https://www.home-assistant.io/integrations/samsungtv/
+[scrape docs]: https://www.home-assistant.io/integrations/scrape/
+[screenlogic docs]: https://www.home-assistant.io/integrations/screenlogic/
+[sensibo docs]: https://www.home-assistant.io/integrations/sensibo/
+[sensor docs]: https://www.home-assistant.io/integrations/sensor/
+[sentry docs]: https://www.home-assistant.io/integrations/sentry/
+[sfr_box docs]: https://www.home-assistant.io/integrations/sfr_box/
+[shelly docs]: https://www.home-assistant.io/integrations/shelly/
+[simplisafe docs]: https://www.home-assistant.io/integrations/simplisafe/
+[sleepiq docs]: https://www.home-assistant.io/integrations/sleepiq/
+[snmp docs]: https://www.home-assistant.io/integrations/snmp/
+[snooz docs]: https://www.home-assistant.io/integrations/snooz/
+[solaredge docs]: https://www.home-assistant.io/integrations/solaredge/
+[soma docs]: https://www.home-assistant.io/integrations/soma/
+[sonarr docs]: https://www.home-assistant.io/integrations/sonarr/
+[sonos docs]: https://www.home-assistant.io/integrations/sonos/
+[soundtouch docs]: https://www.home-assistant.io/integrations/soundtouch/
+[spotify docs]: https://www.home-assistant.io/integrations/spotify/
+[sql docs]: https://www.home-assistant.io/integrations/sql/
+[squeezebox docs]: https://www.home-assistant.io/integrations/squeezebox/
+[ssdp docs]: https://www.home-assistant.io/integrations/ssdp/
+[starlink docs]: https://www.home-assistant.io/integrations/starlink/
+[steam_online docs]: https://www.home-assistant.io/integrations/steam_online/
+[stookwijzer docs]: https://www.home-assistant.io/integrations/stookwijzer/
+[stream docs]: https://www.home-assistant.io/integrations/stream/
+[switchbee docs]: https://www.home-assistant.io/integrations/switchbee/
+[switchbot docs]: https://www.home-assistant.io/integrations/switchbot/
+[syncthing docs]: https://www.home-assistant.io/integrations/syncthing/
+[syncthru docs]: https://www.home-assistant.io/integrations/syncthru/
+[synology_dsm docs]: https://www.home-assistant.io/integrations/synology_dsm/
+[tado docs]: https://www.home-assistant.io/integrations/tado/
+[tcp docs]: https://www.home-assistant.io/integrations/tcp/
+[tellstick docs]: https://www.home-assistant.io/integrations/tellstick/
+[template docs]: https://www.home-assistant.io/integrations/template/
+[thread docs]: https://www.home-assistant.io/integrations/thread/
+[tibber docs]: https://www.home-assistant.io/integrations/tibber/
+[tile docs]: https://www.home-assistant.io/integrations/tile/
+[tod docs]: https://www.home-assistant.io/integrations/tod/
+[todoist docs]: https://www.home-assistant.io/integrations/todoist/
+[tolo docs]: https://www.home-assistant.io/integrations/tolo/
+[tomorrowio docs]: https://www.home-assistant.io/integrations/tomorrowio/
+[torque docs]: https://www.home-assistant.io/integrations/torque/
+[totalconnect docs]: https://www.home-assistant.io/integrations/totalconnect/
+[tplink docs]: https://www.home-assistant.io/integrations/tplink/
+[tradfri docs]: https://www.home-assistant.io/integrations/tradfri/
+[trafikverket_ferry docs]: https://www.home-assistant.io/integrations/trafikverket_ferry/
+[trafikverket_train docs]: https://www.home-assistant.io/integrations/trafikverket_train/
+[trafikverket_weatherstation docs]: https://www.home-assistant.io/integrations/trafikverket_weatherstation/
+[transmission docs]: https://www.home-assistant.io/integrations/transmission/
+[tts docs]: https://www.home-assistant.io/integrations/tts/
+[tuya docs]: https://www.home-assistant.io/integrations/tuya/
+[twentemilieu docs]: https://www.home-assistant.io/integrations/twentemilieu/
+[twinkly docs]: https://www.home-assistant.io/integrations/twinkly/
+[unifi docs]: https://www.home-assistant.io/integrations/unifi/
+[unifiprotect docs]: https://www.home-assistant.io/integrations/unifiprotect/
+[upnp docs]: https://www.home-assistant.io/integrations/upnp/
+[uptime docs]: https://www.home-assistant.io/integrations/uptime/
+[usgs_earthquakes_feed docs]: https://www.home-assistant.io/integrations/usgs_earthquakes_feed/
+[utility_meter docs]: https://www.home-assistant.io/integrations/utility_meter/
+[velbus docs]: https://www.home-assistant.io/integrations/velbus/
+[venstar docs]: https://www.home-assistant.io/integrations/venstar/
+[vicare docs]: https://www.home-assistant.io/integrations/vicare/
+[volkszaehler docs]: https://www.home-assistant.io/integrations/volkszaehler/
+[vultr docs]: https://www.home-assistant.io/integrations/vultr/
+[wallbox docs]: https://www.home-assistant.io/integrations/wallbox/
+[watttime docs]: https://www.home-assistant.io/integrations/watttime/
+[weather docs]: https://www.home-assistant.io/integrations/weather/
+[webostv docs]: https://www.home-assistant.io/integrations/webostv/
+[websocket_api docs]: https://www.home-assistant.io/integrations/websocket_api/
+[whirlpool docs]: https://www.home-assistant.io/integrations/whirlpool/
+[whois docs]: https://www.home-assistant.io/integrations/whois/
+[withings docs]: https://www.home-assistant.io/integrations/withings/
+[wiz docs]: https://www.home-assistant.io/integrations/wiz/
+[wled docs]: https://www.home-assistant.io/integrations/wled/
+[workday docs]: https://www.home-assistant.io/integrations/workday/
+[xiaomi_ble docs]: https://www.home-assistant.io/integrations/xiaomi_ble/
+[xiaomi_miio docs]: https://www.home-assistant.io/integrations/xiaomi_miio/
+[yalexs_ble docs]: https://www.home-assistant.io/integrations/yalexs_ble/
+[yamaha docs]: https://www.home-assistant.io/integrations/yamaha/
+[yamaha_musiccast docs]: https://www.home-assistant.io/integrations/yamaha_musiccast/
+[yeelight docs]: https://www.home-assistant.io/integrations/yeelight/
+[youless docs]: https://www.home-assistant.io/integrations/youless/
+[zamg docs]: https://www.home-assistant.io/integrations/zamg/
+[zeroconf docs]: https://www.home-assistant.io/integrations/zeroconf/
+[zeversolar docs]: https://www.home-assistant.io/integrations/zeversolar/
+[zha docs]: https://www.home-assistant.io/integrations/zha/
+[zwave_js docs]: https://www.home-assistant.io/integrations/zwave_js/
+[zwave_me docs]: https://www.home-assistant.io/integrations/zwave_me/
diff --git a/source/dashboards/header-footer.markdown b/source/dashboards/header-footer.markdown
index 20fc36f33f0c..5e25b4241755 100644
--- a/source/dashboards/header-footer.markdown
+++ b/source/dashboards/header-footer.markdown
@@ -28,6 +28,10 @@ image:
required: true
description: The URL of an image.
type: string
+alt_text:
+ required: false
+ description: Alternative text for the image. This is necessary for users of assistive technology. The [W3C images tutorial](https://www.w3.org/WAI/tutorials/images/) provides simple guidance for writing alternative text.
+ type: string
tap_action:
required: false
description: Action taken on card tap. See [action documentation](/dashboards/actions/#tap-action).
diff --git a/source/docs/assist/aliases.markdown b/source/docs/assist/aliases.markdown
new file mode 100644
index 000000000000..75dcadce3587
--- /dev/null
+++ b/source/docs/assist/aliases.markdown
@@ -0,0 +1,9 @@
+---
+title: "Assist - Entity Aliases"
+---
+
+Assist will use the names of your entities, as well as any aliases you've configured.
+
+
+
+By adding aliases in your native language, you can speak to Home Assistant with the language configured on your [Android watch](/docs/assist/android/) or [Apple device](/docs/assist/apple/).
diff --git a/source/docs/assist/android.markdown b/source/docs/assist/android.markdown
new file mode 100644
index 000000000000..b3211eec9104
--- /dev/null
+++ b/source/docs/assist/android.markdown
@@ -0,0 +1,28 @@
+---
+title: "Assist on Android."
+---
+
+Assist is available on WearOS using the [Home Assistant Companion App](https://play.google.com/store/apps/details?id=io.homeassistant.companion.android) and "Assist" tile.
+
+
+
+## Installation
+
+After [installing the companion app](https://companion.home-assistant.io/docs/getting_started/) and connecting it to your Home Assistant, visit the Android WatchOS app and click "Add tile" inside the Tiles area. Select the "Assist" tile to add it to your watch:
+
+
+
+
+## Usage
+
+Swipe left on your watch until the "Assist" button is visible:
+
+
+
+After pressing "Assist", wait for "Speak Now" to be displayed:
+
+
+
+Speak your command, then press the "play" icon on the right to send the command to Home Assistant:
+
+
diff --git a/source/docs/assist/apple.markdown b/source/docs/assist/apple.markdown
new file mode 100644
index 000000000000..64f2f6790189
--- /dev/null
+++ b/source/docs/assist/apple.markdown
@@ -0,0 +1,67 @@
+---
+title: "Assist on Apple devices"
+---
+
+Assist is integrated via [Home Assistant Companion](https://apps.apple.com/us/app/home-assistant/id1099568401) into Apple devices using the [Shortcuts app](https://support.apple.com/guide/shortcuts/welcome/ios). Assist can be used in the following ways on Apple devices:
+
+- Activated by Siri by saying the shortcut name "Hey Siri, Assist"
+- Added to your iPhone home screen
+- Pinned to your Mac menu bar
+- Activated via a keyboard shortcut on your Mac
+- Added as an Apple Watch complication
+
+
+
+## Installation
+
+To get started make sure you're running the latest version of the [Home Assistant Companion app](https://apps.apple.com/us/app/home-assistant/id1099568401?itsct=apps_box_badge&itscg=30200) and have updated your Apple devices. Then download the two shortcuts and open them to import them:
+
+- [Assist shortcut](https://www.icloud.com/shortcuts/4172210db1d74599bf9ae4f9e1e3d6ed)
+- [Assist Button shortcut](https://www.icloud.com/shortcuts/73ebb68ca1a24ae1811b7d6971203334)
+
+
+
+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)
+
+### Adjusting the language
+
+Shortcuts triggerd via Siri will always use the same language as Siri is set to. The Assist Button shortcut is meant to be manually triggered and can be configured for any language.
+
+Open the shortcuts app, and edit the Button Assist shortcut. The text in quotes will be shown in the language of your device.
+
+- Use the arrow to expand the _"Dictate text"_ action options, and select your language
+- Use the arrow to expand the _"Assist with `Provided Input`"_ options, and select your language.
+
+
+You can import the button shortcut multiple times to create versions for different languages, when asked if you would like to replace your Shortcut, choose "Keep Both".
+
+
+## Multiple servers
+
+The Assist shortcut works also if you have configured multiple Home Assistant servers. By default it will prompt you to pick the server to sent the command too. This is not very hands-off, and so you can update the shortcut to point at a specific server. You will need to import the shortcuts multiple times, once for each server.
+
+Open the shortcuts app and edit each Assist shortcut. The text in quotes will be shown in the language of your device.
+
+- Use the arrow to expand the _"Assist with `Provided Input`"_ action, and select your Home Assistant server.
+
+## Customizing the Siri experience
+
+Siri allows activating shortcuts by their name. If you change the name of the "Assist" shortcut, you will also have to refer to it by its new name: "Hey Siri, my new name". Be aware that Siri can get confused and might not work if your shortcut name overlaps with actual Siri commands.
+
+It is possible to change the text that Siri says when activating the Assist shortcut. Open the shortcuts app and edit each your Assist shortcut. The text in quotes will be shown in the language of your device.
+
+- Find _"Ask for `Text`"_ and tap on _`How can I assist?`_ and change it to your desired prompt.
+
+You can also use the share action to [add a Shortcut to your Home Screen](https://support.apple.com/guide/shortcuts/apd735880972/ios) or set an [Accessibility Shortcut](https://support.apple.com/en-gb/HT204390) to run this Shortcut when you triple-click the Side button.
+
+## Troubleshooting
+
+The latest version of Siri on the Apple Watch contains an annoying bug where it will not remember that the shortcut is allowed to talk to Home Assistant. This requires the user to tap or say "Allow" for every invocation of the Assist shortcut. The workaround is to remove the Home Assistant application from your watch, which will have the shortcut execute on your phone which does not have this problem. Removing the app prevents you from triggering actions via the Home Assistant interface for Apple Watch. It does not prevent you from adding shortcuts to trigger assist from a complication.
+
+## Changelog
+
+### Version 1 - Jan 26, 2022
+
+Initial release
diff --git a/source/docs/assist/builtin_sentences.markdown b/source/docs/assist/builtin_sentences.markdown
new file mode 100644
index 000000000000..41abf4245e7c
--- /dev/null
+++ b/source/docs/assist/builtin_sentences.markdown
@@ -0,0 +1,27 @@
+---
+title: "Assist - Default Sentences"
+---
+
+Home Assistant comes with built-in sentences [contributed by the community](https://github.com/home-assistant/intents/) for [dozens of languages](https://developers.home-assistant.io/docs/voice/intent-recognition/supported-languages).
+These sentences allow you to:
+
+* **Turn entities on and off**
+ * *"turn on the living room light"*
+ * *"turn off ceiling fan"*
+* **Open and close covers**
+ * *"Close the garage door"*
+ * *"Open kitchen window"*
+* **Set the brightness and color of lights**
+ * *"Change kitchen lights brightness to 50%"*
+ * *"Set bed light to green"*
+
+In addition to individual entities, commands can target **areas**:
+
+* *"turn on all lights in the living room"*
+* *"open windows in the kitchen"*
+* *"change kitchen brightness to 50%"*
+* *"set bedroom lights to green"*
+
+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.
diff --git a/source/docs/assist/custom_sentences.markdown b/source/docs/assist/custom_sentences.markdown
new file mode 100644
index 000000000000..aca9225490e5
--- /dev/null
+++ b/source/docs/assist/custom_sentences.markdown
@@ -0,0 +1,112 @@
+---
+title: "Assist - Custom Sentences"
+---
+
+You may add your own sentences to the intent recognizer by either extending an [existing intent](https://developers.home-assistant.io/docs/intent_builtin/) or creating a new one. You may also [customize responses](#customizing-responses) for existing intents.
+
+## In configuration.yaml
+
+Intents and sentences may be added in the [`conversation`](/integrations/conversation/) config in your `configuration.yaml` file:
+
+{% raw %}
+
+```yaml
+# Example configuration.yaml
+conversation:
+ intents:
+ HassTurnOn:
+ - "activate [the] {name}"
+```
+
+{% endraw %}
+
+This extends the default English sentences for the `HassTurnOn` intent, allowing you to say "activate the kitchen lights" as well as "turn on the kitchen lights".
+
+New intents can also be added, with their responses and actions defined using the [`intent_script`](/integrations/intent_script/) integration:
+
+{% raw %}
+
+```yaml
+# Example configuration.yaml
+conversation:
+ intents:
+ YearOfVoice:
+ - "how is the year of voice going"
+
+intent_script:
+ YearOfVoice:
+ speech:
+ text: "Great! We're at over 40 languages and counting."
+```
+
+{% endraw %}
+
+Besides a text response, `intent_script` can trigger any `action` available in Home Assistant, such as calling a service or firing an event.
+
+## In config directory
+
+More advanced customization can be done in Home Assistant's `config` directory. YAML files in `config/custom_sentences/en`, for example, will be loaded when English sentences (language code `en`) are requested.
+
+The following example creates a new `SetVolume` intent that changes the volume on one of two media players:
+
+{% raw %}
+
+```yaml
+# Example config/custom_sentences/en/media.yaml
+language: "en"
+intents:
+ SetVolume:
+ data:
+ - sentences:
+ - "(set|change) {media_player} volume to {volume} [percent]"
+ - "(set|change) [the] volume for {media_player} to {volume} [percent]"
+lists:
+ media_player:
+ values:
+ - in: "living room"
+ out: "media_player.living_room"
+ - in: "bedroom"
+ out: "media_player.bedroom"
+ volume:
+ range:
+ from: 0
+ to: 100
+```
+
+{% endraw %}
+
+As mentioned above, you can then use the `intent_script` integration to implement an action and provide a response for `SetVolume`:
+
+{% raw %}
+
+```yaml
+# Example configuration.yaml
+intent_script:
+ SetVolume:
+ action:
+ service: "media_player.volume_set"
+ data:
+ entity_id: "{{ media_player }}"
+ volume_level: "{{ volume / 100.0 }}"
+ speech:
+ text: "Volume changed to {{ volume }}"
+```
+
+{% endraw %}
+
+## Customizing Responses
+
+Responses for existing intents can be customized as well in `config/custom_sentences/`:
+
+{% raw %}
+
+```yaml
+# Example config/custom_sentences/en/responses.yaml
+language: "en"
+responses:
+ intents:
+ HassTurnOn:
+ default: "I have turned on the {{ slots.name }}"
+```
+
+{% endraw %}
diff --git a/source/docs/assist/index.markdown b/source/docs/assist/index.markdown
new file mode 100644
index 000000000000..bfde547ee8c0
--- /dev/null
+++ b/source/docs/assist/index.markdown
@@ -0,0 +1,21 @@
+---
+title: Assist - Talking to Home Assistant
+---
+
+
+
+Assist is our feature to allow you to control Home Assistant using natural language. It is built on top of an open voice foundation and powered by knowledge provided by our community. You can use the [built-in sentences](/docs/assist/builtin_sentences) to control entities and areas, or [create your own](/docs/assist/custom_sentences).
+
+[List of supported languages.](https://developers.home-assistant.io/docs/voice/intent-recognition/supported-languages)
+
+Assist is available to use on most platforms that can interface with Home Assistant. Look for the Assist icon :
+
+- Inside the Home Assistant app in the top-right corner
+- On Android Watch using [Assist tile](/docs/assist/android)
+- On Apple devices via [Siri and Assist shortcuts](/docs/assist/apple)
+
+Did Assist not understand your sentence? [Contribute them.](https://developers.home-assistant.io/docs/voice/intent-recognition/)
+
+_Assist was introduced in Home Assistant 2023.2._
+
+
diff --git a/source/images/assist/android_tile.png b/source/images/assist/android_tile.png
new file mode 100644
index 000000000000..bcfced7ad913
Binary files /dev/null and b/source/images/assist/android_tile.png differ
diff --git a/source/images/assist/android_watch.png b/source/images/assist/android_watch.png
new file mode 100644
index 000000000000..ae93b94b8e21
Binary files /dev/null and b/source/images/assist/android_watch.png differ
diff --git a/source/images/assist/android_watch_1.png b/source/images/assist/android_watch_1.png
new file mode 100644
index 000000000000..9c921883a266
Binary files /dev/null and b/source/images/assist/android_watch_1.png differ
diff --git a/source/images/assist/android_watch_2.png b/source/images/assist/android_watch_2.png
new file mode 100644
index 000000000000..769bcc4c3622
Binary files /dev/null and b/source/images/assist/android_watch_2.png differ
diff --git a/source/images/assist/android_watch_3.png b/source/images/assist/android_watch_3.png
new file mode 100644
index 000000000000..7614b7ca75bc
Binary files /dev/null and b/source/images/assist/android_watch_3.png differ
diff --git a/source/images/assist/assist-logo.png b/source/images/assist/assist-logo.png
new file mode 100644
index 000000000000..b9717beb3355
Binary files /dev/null and b/source/images/assist/assist-logo.png differ
diff --git a/source/images/assist/ios-expanded-shortcut-action.jpeg b/source/images/assist/ios-expanded-shortcut-action.jpeg
new file mode 100644
index 000000000000..be98e8b1ff37
Binary files /dev/null and b/source/images/assist/ios-expanded-shortcut-action.jpeg differ
diff --git a/source/images/blog/2023-02-08-state-of-matter-and-thread/android-thread.png b/source/images/blog/2023-02-08-state-of-matter-and-thread/android-thread.png
new file mode 100644
index 000000000000..8ae69c6fc499
Binary files /dev/null and b/source/images/blog/2023-02-08-state-of-matter-and-thread/android-thread.png differ
diff --git a/source/images/blog/2023-02-08-state-of-matter-and-thread/thread-mockup.png b/source/images/blog/2023-02-08-state-of-matter-and-thread/thread-mockup.png
new file mode 100644
index 000000000000..22e99ddeb078
Binary files /dev/null and b/source/images/blog/2023-02-08-state-of-matter-and-thread/thread-mockup.png differ
diff --git a/source/images/blog/2023-02/assist.png b/source/images/blog/2023-02/assist.png
new file mode 100644
index 000000000000..e6ba002bd19e
Binary files /dev/null and b/source/images/blog/2023-02/assist.png differ
diff --git a/source/images/blog/2023-02/esphome-repairs-encryption-key.png b/source/images/blog/2023-02/esphome-repairs-encryption-key.png
new file mode 100644
index 000000000000..6bc20719d8c3
Binary files /dev/null and b/source/images/blog/2023-02/esphome-repairs-encryption-key.png differ
diff --git a/source/images/blog/2023-02/esphome-update-entities.png b/source/images/blog/2023-02/esphome-update-entities.png
new file mode 100644
index 000000000000..a60ef89080bd
Binary files /dev/null and b/source/images/blog/2023-02/esphome-update-entities.png differ
diff --git a/source/images/blog/2023-02/sensor-groups.png b/source/images/blog/2023-02/sensor-groups.png
new file mode 100644
index 000000000000..8e5453570434
Binary files /dev/null and b/source/images/blog/2023-02/sensor-groups.png differ
diff --git a/source/images/blog/2023-02/social.png b/source/images/blog/2023-02/social.png
new file mode 100644
index 000000000000..40297599fa48
Binary files /dev/null and b/source/images/blog/2023-02/social.png differ
diff --git a/source/images/blog/2023-02/streaming-history-cards.gif b/source/images/blog/2023-02/streaming-history-cards.gif
new file mode 100644
index 000000000000..b26976235105
Binary files /dev/null and b/source/images/blog/2023-02/streaming-history-cards.gif differ
diff --git a/source/images/integrations/google_assistant_sdk/conversation.png b/source/images/integrations/google_assistant_sdk/conversation.png
new file mode 100644
index 000000000000..ee696e0533f2
Binary files /dev/null and b/source/images/integrations/google_assistant_sdk/conversation.png differ
diff --git a/source/images/screenshots/voice-commands.png b/source/images/screenshots/voice-commands.png
index 39a98deef7ed..cfed4415f2d1 100644
Binary files a/source/images/screenshots/voice-commands.png and b/source/images/screenshots/voice-commands.png differ
diff --git a/source/index.html b/source/index.html
index e485ce4f4bce..17236ce995c4 100644
--- a/source/index.html
+++ b/source/index.html
@@ -81,7 +81,7 @@
Ok Google, turn on the AC
Take over all the screens
- Home Assistant Cast makes each TV a display.
+ Home Assistant Cast makes every TV a display.