diff --git a/CODEOWNERS b/CODEOWNERS index c0c6c5e75ed1..1cd47e58d2fb 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -15,6 +15,7 @@ source/_integrations/acmeda.markdown @atmurray source/_integrations/acomax.markdown @starkillerOG source/_integrations/adax.markdown @danielhiversen source/_integrations/adguard.markdown @frenck +source/_integrations/ads.markdown @mrpasztoradam source/_integrations/advantage_air.markdown @Bre77 source/_integrations/aemet.markdown @Noltari source/_integrations/aep_ohio.markdown @tronikos @@ -51,6 +52,7 @@ source/_integrations/androidtv.markdown @JeffLIrion @ollo69 source/_integrations/androidtv_remote.markdown @tronikos @Drafteed source/_integrations/anova.markdown @Lash-L source/_integrations/anthemav.markdown @hyralex +source/_integrations/anthropic.markdown @Shulyaka source/_integrations/anwb_energie.markdown @klaasnicolaas source/_integrations/aosmith.markdown @bdr99 source/_integrations/apache_kafka.markdown @bachya @@ -62,6 +64,7 @@ source/_integrations/application_credentials.markdown @home-assistant/core source/_integrations/apprise.markdown @caronc source/_integrations/aprilaire.markdown @chamberlain2007 source/_integrations/aprs.markdown @PhilRW +source/_integrations/aps.markdown @tronikos source/_integrations/apsystems.markdown @mawoka-myblock @SonnenladenGmbH source/_integrations/aquacell.markdown @Jordi1990 source/_integrations/aranet.markdown @aschmitz @thecode @anrijs @@ -70,6 +73,7 @@ source/_integrations/arris_tg2492lg.markdown @vanbalken source/_integrations/arve.markdown @ikalnyi source/_integrations/aseko_pool_live.markdown @milanmeu source/_integrations/assist_pipeline.markdown @balloob @synesthesiam +source/_integrations/assist_satellite.markdown @home-assistant/core @synesthesiam source/_integrations/asuswrt.markdown @kennedyshead @ollo69 source/_integrations/atag.markdown @MatsNL source/_integrations/aten_pe.markdown @mtdcr @@ -124,12 +128,13 @@ source/_integrations/bryant_evolution.markdown @danielsmyers source/_integrations/bsblan.markdown @liudger source/_integrations/bswitch.markdown @jafar-atili source/_integrations/bt_smarthub.markdown @typhoon2099 -source/_integrations/bthome.markdown @Ernst79 +source/_integrations/bthome.markdown @Ernst79 @thecode source/_integrations/bticino.markdown @cgtobi source/_integrations/bubendorff.markdown @cgtobi source/_integrations/buienradar.markdown @mjj4791 @ties @Robbie1221 source/_integrations/button.markdown @home-assistant/core source/_integrations/calendar.markdown @home-assistant/core +source/_integrations/cambridge_audio.markdown @noahhusby source/_integrations/camera.markdown @home-assistant/core source/_integrations/cast.markdown @emontnemery source/_integrations/ccm15.markdown @ocalvo @@ -168,6 +173,7 @@ source/_integrations/dacia.markdown @epenet source/_integrations/daikin.markdown @fredrike source/_integrations/date.markdown @home-assistant/core source/_integrations/datetime.markdown @home-assistant/core +source/_integrations/deako.markdown @sebirdman @balake @deakolights source/_integrations/debugpy.markdown @frenck source/_integrations/deconz.markdown @Kane610 source/_integrations/default_config.markdown @home-assistant/core @@ -201,8 +207,9 @@ source/_integrations/dormakaba_dkey.markdown @emontnemery source/_integrations/downloader.markdown @erwindouna source/_integrations/dremel_3d_printer.markdown @tkdrob source/_integrations/drop_connect.markdown @ChandlerSystems @pfrazer -source/_integrations/dsmr.markdown @Robbie1221 @frenck +source/_integrations/dsmr.markdown @Robbie1221 source/_integrations/dsmr_reader.markdown @sorted-bits @glodenox @erwindouna +source/_integrations/duke_energy.markdown @hunterjm source/_integrations/duotecno.markdown @cereal2nd source/_integrations/duquesne_light.markdown @tronikos source/_integrations/dwd_weather_warnings.markdown @runningman84 @stephan192 @andarotajo @@ -217,6 +224,7 @@ source/_integrations/efergy.markdown @tkdrob source/_integrations/egardia.markdown @jeroenterheerdt source/_integrations/electrasmart.markdown @jafar-atili source/_integrations/electric_kiwi.markdown @mikey0000 +source/_integrations/elevenlabs.markdown @sorgfresser source/_integrations/elgato.markdown @frenck source/_integrations/elkm1.markdown @gwww @bdraco source/_integrations/elmax.markdown @albertogeniola @@ -287,6 +295,7 @@ source/_integrations/fronius.markdown @farmio source/_integrations/frontend.markdown @home-assistant/frontend source/_integrations/frontier_silicon.markdown @wlcrs source/_integrations/fujitsu_anywair.markdown @Bre77 +source/_integrations/fujitsu_fglair.markdown @crevetor source/_integrations/fully_kiosk.markdown @cgarwood source/_integrations/fyta.markdown @dontinelli source/_integrations/garages_amsterdam.markdown @klaasnicolaas @@ -311,9 +320,10 @@ source/_integrations/goodwe.markdown @mletenay @starkillerOG 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_cloud.markdown @lufton @tronikos source/_integrations/google_generative_ai_conversation.markdown @tronikos source/_integrations/google_mail.markdown @tkdrob +source/_integrations/google_photos.markdown @allenporter source/_integrations/google_sheets.markdown @tkdrob source/_integrations/google_tasks.markdown @allenporter source/_integrations/google_travel_time.markdown @eifinger @@ -358,6 +368,7 @@ source/_integrations/homematic.markdown @pvizeli source/_integrations/homematicip_cloud.markdown @hahn-th source/_integrations/homewizard.markdown @DCSBL source/_integrations/honeywell.markdown @rdfurman @mkmer +source/_integrations/html5.markdown @alexyao2015 source/_integrations/http.markdown @home-assistant/core source/_integrations/huawei_lte.markdown @scop @fphammerle source/_integrations/hue.markdown @balloob @marcelveldt @@ -400,13 +411,14 @@ source/_integrations/intellifire.markdown @jeeftor source/_integrations/intesishome.markdown @jnimmo source/_integrations/ios.markdown @robbiet480 source/_integrations/iotawatt.markdown @gtdiehl @jyavenard -source/_integrations/iotty.markdown @pburgio +source/_integrations/iotty.markdown @pburgio @shapournemati-iotty source/_integrations/iperf3.markdown @rohankapoorcom source/_integrations/ipma.markdown @dgomes source/_integrations/iqvia.markdown @bachya source/_integrations/irish_rail_transport.markdown @ttroy50 source/_integrations/iron_os.markdown @tr4nt0r source/_integrations/isal.markdown @bdraco +source/_integrations/iskra.markdown @iskramis source/_integrations/islamic_prayer_times.markdown @engrbm87 @cpfair source/_integrations/ismartwindow.markdown @starkillerOG source/_integrations/israel_rail.markdown @shaiu @@ -451,6 +463,7 @@ source/_integrations/ld2410_ble.markdown @930913 source/_integrations/leaone.markdown @bdraco source/_integrations/led_ble.markdown @bdraco source/_integrations/legrand.markdown @cgtobi +source/_integrations/lektrico.markdown @lektrico source/_integrations/leviton_z_wave.markdown @home-assistant/z-wave source/_integrations/lg_netcast.markdown @Drafteed @splinter98 source/_integrations/lidarr.markdown @tkdrob @@ -476,7 +489,7 @@ source/_integrations/luci.markdown @mzdrale source/_integrations/luftdaten.markdown @fabaff @frenck source/_integrations/lupusec.markdown @majuss @suaveolent source/_integrations/lutron.markdown @cdheiser @wilburCForce -source/_integrations/lutron_caseta.markdown @swails @bdraco @danaues @eclair4151 +source/_integrations/lutron_caseta.markdown @swails @danaues @eclair4151 source/_integrations/luxaflex.markdown @bdraco @kingy444 @trullock source/_integrations/lyric.markdown @timmo001 source/_integrations/madeco.markdown @starkillerOG @@ -516,6 +529,7 @@ source/_integrations/mobile_app.markdown @home-assistant/core source/_integrations/modem_callerid.markdown @tkdrob source/_integrations/modern_forms.markdown @wonderslug source/_integrations/moehlenhoff_alpha2.markdown @j-a-n +source/_integrations/monarch_money.markdown @jeeftor source/_integrations/monessen.markdown @jeeftor source/_integrations/monoprice.markdown @etsinko @OnFreund source/_integrations/monzo.markdown @jakemartin-icl @@ -550,6 +564,7 @@ source/_integrations/nextcloud.markdown @mib1185 source/_integrations/nextdns.markdown @bieniu source/_integrations/nfandroidtv.markdown @tkdrob source/_integrations/nibe_heatpump.markdown @elupus +source/_integrations/nice_go.markdown @IceBotYT source/_integrations/nightscout.markdown @marciogranzotto source/_integrations/nilu.markdown @hfurubotten source/_integrations/nina.markdown @DeerMaximum @@ -569,6 +584,7 @@ source/_integrations/number.markdown @home-assistant/core @Shulyaka source/_integrations/nut.markdown @bdraco @ollo69 @pestevez source/_integrations/nutrichef.markdown @bdraco source/_integrations/nws.markdown @MatthewFlamm @kamiyo +source/_integrations/nyt_games.markdown @joostlek source/_integrations/nzbget.markdown @chriscla source/_integrations/obihai.markdown @dshokouhi @ejpenney source/_integrations/octoprint.markdown @rfleming71 @@ -614,7 +630,6 @@ source/_integrations/pge.markdown @tronikos source/_integrations/philips_js.markdown @elupus source/_integrations/pi_hole.markdown @shenxn source/_integrations/picnic.markdown @corneyl -source/_integrations/pilight.markdown @trekky12 source/_integrations/pinecil.markdown @tr4nt0r source/_integrations/ping.markdown @jpbede source/_integrations/piper.markdown @balloob @synesthesiam @@ -633,7 +648,7 @@ source/_integrations/prometheus.markdown @knyar source/_integrations/prosegur.markdown @dgomes source/_integrations/proximity.markdown @mib1185 source/_integrations/proxmoxve.markdown @jhollowe @Corbeno -source/_integrations/prusalink.markdown @balloob @Skaronator +source/_integrations/prusalink.markdown @balloob source/_integrations/ps4.markdown @ktnrg45 source/_integrations/pse.markdown @tronikos source/_integrations/psoklahoma.markdown @tronikos @@ -725,6 +740,7 @@ source/_integrations/sensor.markdown @home-assistant/core source/_integrations/sensorblue.markdown @bdraco source/_integrations/sensorpro.markdown @bdraco source/_integrations/sensorpush.markdown @bdraco +source/_integrations/sensoterra.markdown @markruys source/_integrations/sentry.markdown @dcramer @frenck source/_integrations/senz.markdown @milanmeu source/_integrations/serial.markdown @fabaff @@ -761,6 +777,7 @@ source/_integrations/smarther.markdown @cgtobi source/_integrations/smarttub.markdown @mdz source/_integrations/smarty.markdown @z0mbieprocess source/_integrations/smhi.markdown @gjohansson-ST +source/_integrations/smlight.markdown @tl-sl source/_integrations/sms.markdown @ocalvo source/_integrations/smud.markdown @tronikos source/_integrations/snapcast.markdown @luar123 @@ -808,8 +825,8 @@ source/_integrations/switch.template.markdown @home-assistant/core source/_integrations/switch_as_x.markdown @home-assistant/core source/_integrations/switchbee.markdown @jafar-atili source/_integrations/switchbot.markdown @danielhiversen @RenierM26 @murtas @Eloston @dsypniewski -source/_integrations/switchbot_cloud.markdown @SeraphicRav @laurence-presland -source/_integrations/switcher_kis.markdown @thecode +source/_integrations/switchbot_cloud.markdown @SeraphicRav @laurence-presland @Gigatrappeur +source/_integrations/switcher_kis.markdown @thecode @YogevBokobza source/_integrations/switchmate.markdown @danielhiversen @qiz-li source/_integrations/symfonisk.markdown @jjlawren @peterager source/_integrations/syncthing.markdown @zhulik @@ -853,6 +870,7 @@ source/_integrations/todoist.markdown @boralyl source/_integrations/tolo.markdown @MatthiasLohr source/_integrations/tomorrowio.markdown @raman325 @lymanepp source/_integrations/totalconnect.markdown @austinmroczek +source/_integrations/touchline_sl.markdown @jnsgruk source/_integrations/tplink.markdown @rytilahti @bdraco @sdb9696 source/_integrations/tplink_omada.markdown @MarkGodwin source/_integrations/tplink_tapo.markdown @rytilahti @bdraco @sdb9696 @@ -865,6 +883,7 @@ source/_integrations/trafikverket_train.markdown @gjohansson-ST source/_integrations/trafikverket_weatherstation.markdown @gjohansson-ST source/_integrations/transmission.markdown @engrbm87 @JPHutchins source/_integrations/trend.markdown @jpbede +source/_integrations/triggercmd.markdown @rvmey source/_integrations/tts.markdown @home-assistant/core source/_integrations/tuya.markdown @Tuya @zlinoliver @frenck source/_integrations/twentemilieu.markdown @frenck @@ -926,6 +945,7 @@ source/_integrations/webhook.markdown @home-assistant/core source/_integrations/webmin.markdown @autinerd source/_integrations/webostv.markdown @thecode source/_integrations/websocket_api.markdown @home-assistant/core +source/_integrations/weheat.markdown @jesperraemaekers source/_integrations/wemo.markdown @esev source/_integrations/whirlpool.markdown @abmantis @mkmer source/_integrations/whisper.markdown @balloob @synesthesiam @@ -936,6 +956,7 @@ source/_integrations/wirelesstag.markdown @sergeymaysak source/_integrations/withings.markdown @joostlek source/_integrations/wiz.markdown @sbidy source/_integrations/wled.markdown @frenck +source/_integrations/wmspro.markdown @mback2k source/_integrations/wolflink.markdown @adamkrol93 @mtielen source/_integrations/workday.markdown @fabaff @gjohansson-ST source/_integrations/worldclock.markdown @fabaff @@ -947,6 +968,7 @@ source/_integrations/xiaomi_ble.markdown @Jc2k @Ernst79 source/_integrations/xiaomi_miio.markdown @rytilahti @syssi @starkillerOG source/_integrations/xiaomi_tv.markdown @simse source/_integrations/xmpp.markdown @fabaff @flowolf +source/_integrations/yale.markdown @bdraco source/_integrations/yale_home.markdown @bdraco source/_integrations/yale_smart_alarm.markdown @gjohansson-ST source/_integrations/yalexs_ble.markdown @bdraco diff --git a/Gemfile b/Gemfile index 53fec32495ad..22273a694f39 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,7 @@ group :development do # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' gem 'rubocop', '1.66.1' - gem 'ruby-lsp', '0.18.4' + gem 'ruby-lsp', '0.19.1' gem 'rackup', '2.1.0' end diff --git a/Gemfile.lock b/Gemfile.lock index 2d8f300001ad..c1ca0553cb55 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -91,7 +91,7 @@ GEM racc pathutil (0.16.2) forwardable-extended (~> 2.6) - prism (1.0.0) + prism (1.1.0) public_suffix (6.0.1) racc (1.8.1) rack (3.1.7) @@ -108,7 +108,7 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - rbs (3.6.0) + rbs (3.6.1) logger regexp_parser (2.9.2) rexml (3.3.8) @@ -125,19 +125,18 @@ GEM unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.32.3) parser (>= 3.3.1.0) - ruby-lsp (0.18.4) + ruby-lsp (0.19.1) language_server-protocol (~> 3.17.0) - prism (~> 1.0) + prism (>= 1.1, < 2.0) rbs (>= 3, < 4) sorbet-runtime (>= 0.5.10782) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) - sass-embedded (1.79.4-arm64-darwin) - google-protobuf (~> 4.27) - sass-embedded (1.79.4-x86_64-linux-gnu) + sass-embedded (1.79.4) google-protobuf (~> 4.27) + rake (>= 13) sass-globbing (1.1.5) sass (>= 3.1) sassc (2.1.0) @@ -150,7 +149,7 @@ GEM rack-protection (= 4.0.0) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11589) + sorbet-runtime (0.5.11597) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -177,7 +176,7 @@ DEPENDENCIES rackup (= 2.1.0) rake (= 13.2.1) rubocop (= 1.66.1) - ruby-lsp (= 0.18.4) + ruby-lsp (= 0.19.1) sass-globbing (= 1.1.5) sassc (= 2.1.0) sinatra (= 4.0.0) diff --git a/_config.yml b/_config.yml index 2175e4512a88..853add2be688 100644 --- a/_config.yml +++ b/_config.yml @@ -107,9 +107,9 @@ social: # Home Assistant release details current_major_version: 2024 -current_minor_version: 9 -current_patch_version: 3 -date_released: 2024-09-24 +current_minor_version: 10 +current_patch_version: 1 +date_released: 2024-10-04 # 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 50755286ad23..77741826bffc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "remark-lint-prohibited-strings": "^4.0.0", "remark-lint-unordered-list-marker-style": "^4.0.0", "remark-stringify": "^11.0.0", - "textlint": "^14.2.0", + "textlint": "^14.2.1", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" @@ -416,65 +416,65 @@ "dev": true }, "node_modules/@textlint/ast-tester": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.2.0.tgz", - "integrity": "sha512-k7HAVjv5hUFNWUeb1h+3yaoSnwhjKJ55FaFVlUPsW5qFRIAkWaZ0Xpo2IEAyGaa5jgulWe8vEX6ZTmvwi6bzUA==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.2.1.tgz", + "integrity": "sha512-JQhZQToHYfHy/w/AyRg+03uxG53yp6OSbq7mpRhvgpwMk/N5GAtF+vLhfMAUAStJLXpq5xfFEvDNROZsgn2x7Q==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0", + "@textlint/ast-node-types": "^14.2.1", "debug": "^4.3.4" } }, "node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/ast-traverse": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.2.0.tgz", - "integrity": "sha512-qmB+bbLTndlgIObMxoXhdE/t1o6JUQxgw1pzLEtd7rvZO7sNH4Agui1ddlWjaIczj+K40tm8jsfi/74NJtJ9fg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.2.1.tgz", + "integrity": "sha512-MmYIRE3myWPgswJlq1Iu42o/Z9aKQkeHF7SS/toySc1iDpjS4lKTYcbzRoq+RD8Tjp35RCcxBIpufrrZrT7V0Q==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/config-loader": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.2.0.tgz", - "integrity": "sha512-LDIr0zykTVsIWz/q+NIiYXoF0Fqdl1X+JLGIAG6E2CTKJhsGW4naKvt2d9zWhCjSM7E9ZX6XAdvo16WDJALYlg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.2.1.tgz", + "integrity": "sha512-QfrALRn6ObeuTuwAl/bEtI9ScU2dTYDd+w3lB6JAQL+baAk8vclXnzbzI9L3p+YhmhGxOSNohZV09qSkhDYHZg==", "dev": true, "dependencies": { - "@textlint/kernel": "^14.2.0", - "@textlint/module-interop": "^14.2.0", - "@textlint/types": "^14.2.0", - "@textlint/utils": "^14.2.0", + "@textlint/kernel": "^14.2.1", + "@textlint/module-interop": "^14.2.1", + "@textlint/types": "^14.2.1", + "@textlint/utils": "^14.2.1", "debug": "^4.3.4", "rc-config-loader": "^4.1.3", "try-resolve": "^1.0.1" } }, "node_modules/@textlint/feature-flag": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.2.0.tgz", - "integrity": "sha512-KjO4ACoKhA10XUi4Wp3dKixfEMFQAE+WLgCDEB5k+cAKPkwaFYjN5vezA1TGe+fSHcQiBjv268F0r3hmtsPf8Q==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.2.1.tgz", + "integrity": "sha512-7fXZWh3UUH0LwPu2CWJOaSnYHVQojgQ/ulXQayMXf50x3/CGY/dqaBKpB+I/PW+60/pnKgUwJm9E/eHzwhVAqQ==", "dev": true }, "node_modules/@textlint/fixer-formatter": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.2.0.tgz", - "integrity": "sha512-Ji4Kq0hckDj1WranfNwnN87nUE4EldMyf7z2AEQ51vDSqLeYk+WCQo6/Gc+a+ytQt5s/QPyfcpiHItr75xHF8g==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.2.1.tgz", + "integrity": "sha512-AquSEaP0m0ZGlCzOHwRiAmnruFAngjLL5g/ZzE2REQ2qwSnUuxEII5SsucqTgT37LXOKBXNpU1OSPlKwtF2aJw==", "dev": true, "dependencies": { - "@textlint/module-interop": "^14.2.0", - "@textlint/types": "^14.2.0", + "@textlint/module-interop": "^14.2.1", + "@textlint/types": "^14.2.1", "chalk": "^4.1.2", "debug": "^4.3.4", "diff": "^5.2.0", @@ -485,39 +485,39 @@ } }, "node_modules/@textlint/kernel": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.2.0.tgz", - "integrity": "sha512-QYF2ZGnkLhd+GYGWL2wpZNjK0ec8HqwGjAsmc49E0g5NKMDvX3U/TYGwjsM8g6WCxGVGS625wr0tm6UxIAK5+Q==", - "dev": true, - "dependencies": { - "@textlint/ast-node-types": "^14.2.0", - "@textlint/ast-tester": "^14.2.0", - "@textlint/ast-traverse": "^14.2.0", - "@textlint/feature-flag": "^14.2.0", - "@textlint/source-code-fixer": "^14.2.0", - "@textlint/types": "^14.2.0", - "@textlint/utils": "^14.2.0", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.2.1.tgz", + "integrity": "sha512-PkCagYKlVLQvw9CBijJJ30Hmp9rk9oJJt9danoMhdR+v91SMQ7eeWk7HG8CqGbEnL0NehoOqgZV+O5Tfr8x38A==", + "dev": true, + "dependencies": { + "@textlint/ast-node-types": "^14.2.1", + "@textlint/ast-tester": "^14.2.1", + "@textlint/ast-traverse": "^14.2.1", + "@textlint/feature-flag": "^14.2.1", + "@textlint/source-code-fixer": "^14.2.1", + "@textlint/types": "^14.2.1", + "@textlint/utils": "^14.2.1", "debug": "^4.3.4", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" } }, "node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/linter-formatter": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.2.0.tgz", - "integrity": "sha512-9+5n3UIhbKGNCvI5s0BJexHrWqw/TZQnUQLpvbL04SnJqwSH2xlUQfEwPAybPO1Tb9coUGHYlBZObRxy9tRwig==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.2.1.tgz", + "integrity": "sha512-GHgNuQQAA/YyYeYcfF0JbFZZomrC0VtfldjKqCmTmPy7c89MTZPZFgyRbTKm1G8tUmxh4RuT1rkgwvX3IgT2VQ==", "dev": true, "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "^14.2.0", - "@textlint/types": "^14.2.0", + "@textlint/module-interop": "^14.2.1", + "@textlint/types": "^14.2.1", "chalk": "^4.1.2", "debug": "^4.3.4", "js-yaml": "^3.14.1", @@ -531,12 +531,12 @@ } }, "node_modules/@textlint/markdown-to-ast": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.2.0.tgz", - "integrity": "sha512-vDcj8fuo1ZJinLtDwMO8yh9hxWujDFQRJ/MDd4Y+vxGDJRnB0c9ZVPOOPlQjaumlVNI7CB1fDsz+jx8z6/d8iw==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.2.1.tgz", + "integrity": "sha512-IbxuCiGg2dQMg+PlLrSIvryEAngdvydF1MztRII9AjJNOMKomzYmZaNVRaANlhuFLnOwJbunNg0MV1q7oXz+iw==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0", + "@textlint/ast-node-types": "^14.2.1", "debug": "^4.3.4", "mdast-util-gfm-autolink-literal": "^0.1.3", "neotraverse": "^0.6.15", @@ -548,9 +548,9 @@ } }, "node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/markdown-to-ast/node_modules/bail": { @@ -780,73 +780,73 @@ } }, "node_modules/@textlint/module-interop": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.2.0.tgz", - "integrity": "sha512-1X3DfCwF3y07eVyK41K6As0L+Ekyn5lAh98hVoUNOGDJQtjRvM3aKZ8z0o0BtbCeH7nYTyExo31lUgURWuDWnQ==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.2.1.tgz", + "integrity": "sha512-xMkUYUDnP6le/s3oHyoAX6pvIESDlz7l+vUyDwQjKxnZwawdaO3K8aZIXkXDh4VNiBx9erFhsFoePm714VsPtA==", "dev": true }, "node_modules/@textlint/source-code-fixer": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.2.0.tgz", - "integrity": "sha512-xMFtpwcs5Z1WTiFBmLN2Fe2GQg3u0kEZgF42AvFHKphbmToKYlGUMw1jaMsEXaxrTOTjqwj3SycRR7rrgKgOxg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.2.1.tgz", + "integrity": "sha512-5VI+BLieZOrXVrqCkEIbvGu73gkKw52Ns8J1OPNqaCpbnmiKmKcRzBsbMxzwD4Pa7M0l4yhUzyd15/7i7hzmAg==", "dev": true, "dependencies": { - "@textlint/types": "^14.2.0", + "@textlint/types": "^14.2.1", "debug": "^4.3.4" } }, "node_modules/@textlint/text-to-ast": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.2.0.tgz", - "integrity": "sha512-i71ksLnlkb6epmeOiRv/xiHHLBWOtCx3gUBiTr8YC/9xbdhzBehFblJ6IjeikIJYPTfpzDECRmDqDNq7Cvos3Q==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.2.1.tgz", + "integrity": "sha512-SHZIroDA1Gabhfj/GEatuP3x7CeD0I2xqWaJTaXkmuAgj6ckrjF9130zTgRCmOgm174FDr//H1MO6nc30ly2sA==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/textlint-plugin-markdown": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.2.0.tgz", - "integrity": "sha512-TDd132D816R5q+/ZDfxe15Cxua6RNegkQzPv0iaZZKob6t8lhMND6lUHfbXEEGHCtyignxZUXQXZGZcjKtWL4A==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.2.1.tgz", + "integrity": "sha512-14ZKJ9xsmTM9fr7S+ybisnhfNwL9CH/qcIU4/yjoP73RL1MMX4ddb/THGDBVt5O/wm4kzSUFP0CiNtDVxFfskQ==", "dev": true, "dependencies": { - "@textlint/markdown-to-ast": "^14.2.0" + "@textlint/markdown-to-ast": "^14.2.1" } }, "node_modules/@textlint/textlint-plugin-text": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.2.0.tgz", - "integrity": "sha512-5E39BWG9T5c0XOz5Vxdffa17FDwu9Woud29bYyq3OQ+JjwMQXSz3JPQ1MTNsJbqn0R58+ZKXfaWEZ/Gsoau5UA==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.2.1.tgz", + "integrity": "sha512-9rKR6zFfcO80cOhgUbWtcGTETe35osoyxdV5wuwf2xQLy4KTr9p1X9Jox6NjfLq6OSnOKAsiM/s31QlT6Mczlg==", "dev": true, "dependencies": { - "@textlint/text-to-ast": "^14.2.0" + "@textlint/text-to-ast": "^14.2.1" } }, "node_modules/@textlint/types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.2.0.tgz", - "integrity": "sha512-lK8HCnkNg+spOHVw1HX0AvwP1BZVlJsbL4OLIHnwfvakfUxLQFXtJ6x2asAXMNMQGqwSWKQrLBCmWZWVsDtReg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.2.1.tgz", + "integrity": "sha512-SaJsPYn7mXbInU77wbvsW277hLwmyijCS6Gld3VjBxXBYpJb9fzDliKHt1GYTYNRMtI/jQudwl13Clyt3nju5w==", "dev": true, "dependencies": { - "@textlint/ast-node-types": "^14.2.0" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/@textlint/types/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/@textlint/utils": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.2.0.tgz", - "integrity": "sha512-eXRygFRC1CK+BHRqIe2RRFiC8VJMpV7NwsLdBKsFMcivgNRgL6hkhhbrMI6MbPg+jdWM+nK5Z9+QpPYL9c9/pg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.2.1.tgz", + "integrity": "sha512-I8rV2jJfiVSP8EtpVSXCqISqyRPwx3GdZIIXehWn5k86cnBMt5RkPI4lvxZEbLECHsUkhQx11rC2tkOpabgUTA==", "dev": true }, "node_modules/@types/concat-stream": { @@ -1418,9 +1418,9 @@ "dev": true }, "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz", + "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==", "dev": true }, "node_modules/fault": { @@ -6030,23 +6030,23 @@ "dev": true }, "node_modules/textlint": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.2.0.tgz", - "integrity": "sha512-f3vT1mwpHuP2IWNG7AiE7n4nRKiOI/4Rxz7wQSv6KWaCgigcwi9x4JCMWKn1gpEvC/bssKW1/G0XxzHvKybCKg==", - "dev": true, - "dependencies": { - "@textlint/ast-node-types": "^14.2.0", - "@textlint/ast-traverse": "^14.2.0", - "@textlint/config-loader": "^14.2.0", - "@textlint/feature-flag": "^14.2.0", - "@textlint/fixer-formatter": "^14.2.0", - "@textlint/kernel": "^14.2.0", - "@textlint/linter-formatter": "^14.2.0", - "@textlint/module-interop": "^14.2.0", - "@textlint/textlint-plugin-markdown": "^14.2.0", - "@textlint/textlint-plugin-text": "^14.2.0", - "@textlint/types": "^14.2.0", - "@textlint/utils": "^14.2.0", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.2.1.tgz", + "integrity": "sha512-dqzQ/VKQeofwCbVgpzoE1sRUQkIU4zquNFbvtBQpUbS121w8hB51BtomCKbB42V86kDHONQYlPz4nocdaZh7ww==", + "dev": true, + "dependencies": { + "@textlint/ast-node-types": "^14.2.1", + "@textlint/ast-traverse": "^14.2.1", + "@textlint/config-loader": "^14.2.1", + "@textlint/feature-flag": "^14.2.1", + "@textlint/fixer-formatter": "^14.2.1", + "@textlint/kernel": "^14.2.1", + "@textlint/linter-formatter": "^14.2.1", + "@textlint/module-interop": "^14.2.1", + "@textlint/textlint-plugin-markdown": "^14.2.1", + "@textlint/textlint-plugin-text": "^14.2.1", + "@textlint/types": "^14.2.1", + "@textlint/utils": "^14.2.1", "debug": "^4.3.4", "file-entry-cache": "^5.0.1", "get-stdin": "^5.0.1", @@ -6172,9 +6172,9 @@ } }, "node_modules/textlint/node_modules/@textlint/ast-node-types": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.0.tgz", - "integrity": "sha512-dOnBuqvsmiNkhHHp1ZaZed1uwvDpVNZWGvZlrckWaJpzsrTTNtxtd627MkMRCdGvIT3+RkfmV9OHqh51JfexRg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", "dev": true }, "node_modules/textlint/node_modules/brace-expansion": { diff --git a/package.json b/package.json index f1f9b2f6a356..01d1b30be43b 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "remark-lint-prohibited-strings": "^4.0.0", "remark-lint-unordered-list-marker-style": "^4.0.0", "remark-stringify": "^11.0.0", - "textlint": "^14.2.0", + "textlint": "^14.2.1", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" diff --git a/sass/homeassistant/_overrides.scss b/sass/homeassistant/_overrides.scss index 3afa6de89bec..3d289b8accf1 100644 --- a/sass/homeassistant/_overrides.scss +++ b/sass/homeassistant/_overrides.scss @@ -861,7 +861,6 @@ a.material-card:hover { } } - h1:hover a.title-link, h2:hover a.title-link, h3:hover a.title-link, @@ -1360,9 +1359,14 @@ a.my { } } +// Prevent headings from disappearing behind the site header when linked to +h1, h2, h3, h4, h5, h6 { + position: relative; +} + :target { display: block; - position: relative; + position: absolute; top: -100px; visibility: hidden; } diff --git a/source/_dashboards/heading.markdown b/source/_dashboards/heading.markdown new file mode 100644 index 000000000000..7ddeb9284e88 --- /dev/null +++ b/source/_dashboards/heading.markdown @@ -0,0 +1,111 @@ +--- +type: card +title: "Heading card" +sidebar_label: Heading +description: "The Heading card structures your dashboard by providing title, icon, navigation and badges." +related: + - docs: /dashboards/actions/ + title: Card actions + - docs: /dashboards/cards/ + title: Dashboard cards +--- + +The Heading card structures your dashboard by providing title, icon and navigation. This card supports [actions](/dashboards/actions/). + +

+ Screenshot of heading cards + Screenshot of a heading card with a title, badges, and a subtitle. +

+ +```yaml +type: heading +heading: Living room +icon: mdi:sofa +badges: + - type: entity + entity_id: sensor.living_room_sensor_temperature + color: red + - type: entity + entity: sensor.living_room_sensor_humidity + color: deep-purple +``` + +{% configuration entity %} +type: + required: true + description: "`heading`" + type: string +heading: + required: false + description: Heading text + type: string +heading_style: + required: false + description: Style of the heading. Can be either `title` or `subtitle`. + type: string + default: title +icon: + required: false + description: Icon displayed before the heading text. + type: string +tap_action: + required: false + description: Action taken on card tap. See [action documentation](/dashboards/actions/#tap-action). By default, it will do nothing. If an action is configured, a chevron will appear next to the heading text. + type: map +badges: + required: false + description: Additional small badges to display entity information. See [heading badges](/dashboards/heading/#heading-badges). + type: list +{% endconfiguration %} + +## Heading badges + +In addition to the heading text, each heading card can show small badges. They are smaller than regular [badges](/dashboards/badges/) and don't have a background. The heading badges can display sensor information in a compact and minimal style. + +```yaml +type: entity +entity: light.living_room +``` + +{% configuration entity %} +type: + required: true + description: "`entity`" + type: string +entity: + required: true + description: Entity ID. + type: string +name: + required: false + description: Overwrites the entity name. The name will be only displayed if `state_content` includes `name` token. + type: string +icon: + required: false + description: Overwrites the entity icon. + type: string +color: + required: false + description: Set the color when the entity is active. By default, it will not be colored. It can be set to the `state` special token to dynamically color the icon based on `state`, `domain`, and `device_class` of your entity. It also accepts [color token](/dashboards/tile/#available-colors) or hex color code. + type: string + default: none +show_icon: + required: false + description: Show the icon + type: boolean + default: "true" +show_state: + required: false + description: Show the state. + type: boolean + default: "false" +state_content: + required: false + description: > + Content to display for the state. Can be `state`, `name`, `last_changed`, `last_updated`, or any attribute of the entity. Can be either a string with a single item, or a list of string items. Default depends on the entity domain. + type: [string, list] +tap_action: + required: false + description: Action taken on card tap. See [action documentation](/dashboards/actions/#tap-action). By default, it will do nothing. + type: map +{% endconfiguration %} diff --git a/source/_dashboards/map.markdown b/source/_dashboards/map.markdown index 005f1ab39cf3..e955f7883173 100644 --- a/source/_dashboards/map.markdown +++ b/source/_dashboards/map.markdown @@ -10,18 +10,42 @@ related: title: Themes - docs: /dashboards/cards/ title: Dashboard cards + - docs: /docs/configuration/basic/#editing-the-general-settings + title: Edit your home location + - docs: /getting-started/presence-detection/ + title: Getting started tutorial on presence detection --- -The map card that allows you to display entities on a map. This card is used on the [Map dashboard](/dashboards/dashboards/#map-dashboard), which is one of the default dashboards. +The map card allows you to display your home zone, entities, and other predefined zones on a map. This card is used on the [Map dashboard](/dashboards/dashboards/#map-dashboard), which is one of the default dashboards.

Screenshot of the map card Screenshot of the map card.

-{% include dashboard/edit_dashboard.md %} +## Adding the map card to your dashboard -All options for this card can be configured via the user interface. +1. In the top right of the screen, select the edit {% icon "mdi:edit" %} button. + - If this is your first time editing a dashboard, the **Edit dashboard** dialog appears. + - By editing the dashboard, you are taking over control of this dashboard. + - This means that it is no longer automatically updated when new dashboard elements become available. + - Once you've taken control, you can't set this dashboard to update automatically anymore. However, you can create a new default dashboard. + - To continue, in the dialog, select the three dots {% icon "mdi:dots-vertical" %} menu, then select **Take control**. +2. [Add the map card](/dashboards/cards/#adding-cards-to-your-dashboard) to your dashboard. +3. By default, you see the house {% icon "mdi:house" %} icon on your map. It represents your [home zone](/integrations/zone/#about-the-home-zone). + - To change the location of your home, you need to [edit your home's location in the general settings](/docs/configuration/basic/#editing-the-general-settings). + + ![Edit map card settings](/images/dashboards/map_card_config.png) +4. To learn how to show additional zones on your map, follow the steps on [adding a new zone](/integrations/zone/#adding-a-new-zone-or-editing-zones). +5. To show other elements on the map, either add them under **Entities**, or use the **Geolocation sources**. + - For a description of the options, refer to the [YAML configuration](#yaml-configuration) section. It also applies to the options shown in the UI. + - {% icon "mdi:info" %} **Info**: The list of entities shows the device trackers available for your home, such as a mobile phone with the companion app. + - If you want to see a trace of the past locations of your entities, you need to define a time frame under **Hours to show**. + - For more information about presence detection, refer to the [getting started tutorial on presence detection](/getting-started/presence-detection/). + +## Configuration options + +All options for this card can be configured via the user interface. For a detailed description of the options, refer to the [YAML configuration](#yaml-configuration) section. It also applies to the options shown in the UI. ## YAML configuration @@ -42,7 +66,7 @@ geo_location_sources: type: list auto_fit: required: false - description: The map will follow moving `entities` by adjusting the viewport of the map each time an entity is updated. + description: The map will follow moving `entities` by adjusting the viewport of the map each time an entity is updated. type: boolean default: false fit_zones: @@ -60,7 +84,7 @@ aspect_ratio: type: string default_zoom: required: false - description: The default zoom level of the map. + description: The default zoom level of the map. Use a lower number to zoom out and a higher number to zoom in. type: integer default: 14 (or whatever zoom level is required to fit all visible markers) theme_mode: @@ -139,4 +163,3 @@ entities: focus: false hours_to_show: 48 ``` - diff --git a/source/_dashboards/sections.markdown b/source/_dashboards/sections.markdown index a96f998d8495..0cd8f945d620 100644 --- a/source/_dashboards/sections.markdown +++ b/source/_dashboards/sections.markdown @@ -23,7 +23,7 @@ The sections view lets you organize your cards in sections on a grid. You can group cards without using horizontal or vertical stack cards.

- A fully populated dashboard in Sections view layout + A fully populated dashboard in Sections view layout A fully populated dashboard in Sections view layout

@@ -37,8 +37,10 @@ It is not possible to migrate dashboards into sections view. 1. If you have multiple dashboards, in the left sidebar, select the dashboard to which you want to add the sections view. 2. Follow the steps on [adding a new view](/dashboards/views/#adding-a-view-to-a-dashboard). - Under **View type**, select **Sections (experimental)**. -3. Select the maximum number of columns you want to see in the new sections view. -4. When you are done, select **Save**. +3. Under **Max number of sections wide**, select the maximum number of columns you want to see in the new sections view. +4. Under **Dense section placement**, select if you want to allow the cards to be arranged automatically in order to fill gaps between cards. + - This will remove some gaps, but it also means you have less control over the order of the cards. +5. When you are done, select **Save**. - You are now presented with a new, empty view. - If you chose a background image, the page is filled with that image. @@ -49,19 +51,19 @@ Once you have created a sections view, you can populate it with sections and car 1. To add a card, select the **Add card** button. - Follow the [steps on adding cards](/dashboards/cards/#adding-cards-to-your-dashboard). - ![Add Section button](/images/dashboards/sections_view_add-card-or-section.png) + ![Add Section button](/images/dashboards/sections_view_add-card-or-section.png) 2. To add a new section, select the **Create section** button. -3. To edit the section title, select the edit {% icon "mdi:edit" %} button. - - If you leave the section title empty, this line will be hidden. +3. A [heading card](/dashboards/heading) will be automatically added to the top of the section. + - To edit it, select the card. + - If you don't want a heading title at the top of the section, delete this card. + - The title can be added again later, like any other card. 4. If you want this section to be visible only to specific users or under a certain condition, you can define those conditions: - On the **Visibility** tab, select **Add condition**. - Select the type of condition, and enter the parameters. - If you define multiple conditions, the section is only shown when all conditions are met. - If you did not define any conditions, the section is always shown, to all users. - ![Define visibility](/images/dashboards/section-visibility.png) - ## Deleting a section 1. To delete a section, go to the dashboard and in the top right corner, select the edit {% icon "mdi:edit" %} button. @@ -75,17 +77,17 @@ In the sections view, you can rearrange sections and cards by dragging them to a 1. To edit your dashboard, in the top right corner, select the edit {% icon "mdi:edit" %} button. 2. To rearrange sections, hold the move {% icon "mdi:cursor-move" %} button and move the card. -

- Rearranging sections by dragging - Rearranging sections by dragging -

+

+ Rearranging sections by dragging + Rearranging sections by dragging +

3. To rearrange cards, tap and hold the card and move it to your desired location. -

- Rearranging cards by dragging - Rearranging cards by dragging -

+

+ Rearranging cards by dragging + Rearranging cards by dragging +

## Show or hide section conditionally diff --git a/source/_dashboards/sidebar.markdown b/source/_dashboards/sidebar.markdown index 47815a9e52d6..6fdcf0dad6b0 100644 --- a/source/_dashboards/sidebar.markdown +++ b/source/_dashboards/sidebar.markdown @@ -8,6 +8,10 @@ related: title: Masonry view - docs: /dashboards/panel/ title: Panel view + - docs: /dashboards/sections/ + title: Sections view (experimental) + - docs: /dashboards/views/ + title: About views --- The sidebar view has 2 columns, a wide one and a smaller one on the right. @@ -17,18 +21,24 @@ The sidebar view has 2 columns, a wide one and a smaller one on the right. Screenshot of the sidebar view used for the energy dashboard.

-This view doesn't have support for badges. - -You can set if a card should be placed in the main (left) column of the sidebar column (right), by selecting the arrow right or left arrow in the bar underneath the card. +To move the card from the main column into the sidebar (right) (and vice versa), select the arrow {% icon "mdi:arrow-left-bold" %} {% icon "mdi:arrow-right-bold" %} button on the card.

-Screenshot showing how to move a card between sidebar and main view -Screenshot showing how to move a card between sidebar and main view. +Screenshot showing how to move a card +Screenshot showing the arrow buttons to move a card.

-On mobile, all cards are rendered in 1 column and kept in the order of the cards in the config. +On mobile, all cards are rendered in 1 column and kept in the order indicated in the YAML configuration. + +1. To view the YAML configuration, on the view tab, select the {% icon "mdi:pencil" %} icon to open the edit view. +2. In the configuration dialog, select the three dots {% icon "mdi:dots-vertical" %} menu, and **Edit in YAML**. + +

+Screenshot showing where to edit the view configuration +Screenshot showing where to edit the view configuration. +

-## View config: +## View configuration {% configuration %} type: @@ -37,7 +47,7 @@ type: type: string {% endconfiguration %} -## Cards config: +## Cards configuration {% configuration %} view_layout.position: @@ -58,4 +68,4 @@ cards: - media_player.lounge_room view_layout: position: sidebar -``` \ No newline at end of file +``` diff --git a/source/_dashboards/tile.markdown b/source/_dashboards/tile.markdown index ef962f719695..719c6cc247e3 100644 --- a/source/_dashboards/tile.markdown +++ b/source/_dashboards/tile.markdown @@ -79,6 +79,14 @@ icon_tap_action: required: false description: Action taken on icon card tap. See [action documentation](/dashboards/actions/#tap-action). By default, it will `toggle` the entity (if possible), otherwise, show the "more-info" dialog. type: map +icon_hold_action: + required: false + description: Action taken on icon tap-and-hold. See [action documentation](/dashboards/actions/#hold-action). + type: map +icon_double_tap_action: + required: false + description: Action taken on icon double tap. See [action documentation](/dashboards/actions/#double-tap-action). + type: map features: required: false description: Additional widgets to control your entity. See [available features](/dashboards/features). diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index 02521c59ec03..87f605a84e36 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -158,6 +158,8 @@ - term: Custom integration definition: >- A custom integration is an integration that has been created by someone from the Home Assistant community and has been published for others to use at their own risk. Custom integrations are not supported by the Home Assistant project. They are not reviewed or tested by the Home Assistant development team and thus may negatively impact the stability of your Home Assistant instance. An example of a custom integration is the [Spook](https://spook.boo/) integration. + aliases: + - custom integrations - term: Customize definition: >- Customization allows you to overwrite the default parameters of your devices @@ -582,9 +584,13 @@ Variables are used to store values in memory that can be processed for example, in a script. link: /docs/scripts/#variables +- term: YAML + definition: >- + YAML is a human-readable data serialization language. It is used to store and transmit data in a structured format. In Home Assistant, YAML is used for configuration, for example in the `configuration.yaml` or `automations.yaml` files. + link: /docs/configuration/yaml/ - term: Zone definition: >- - Zones are areas that can be used for presence detection. + Zones allow you to specify certain regions on a map. They enable zone presence-detection and can be used in automations. For example, to start the vacuum after you left home or start the heating at home when you leave the office. link: /integrations/zone/ aliases: - zones diff --git a/source/_docs/automation/action.markdown b/source/_docs/automation/action.markdown index 85705f0cd4f1..25c6d702c8f5 100644 --- a/source/_docs/automation/action.markdown +++ b/source/_docs/automation/action.markdown @@ -14,10 +14,10 @@ You can also perform the action to activate [a scene](/integrations/scene/) whic ```yaml automation: # Change the light in the kitchen and living room to 150 brightness and color red. - trigger: - - platform: sun + triggers: + - trigger: sun event: sunset - action: + actions: - action: light.turn_on target: entity_id: @@ -29,13 +29,13 @@ automation: automation 2: # Notify me on my mobile phone of an event - trigger: - - platform: sun + triggers: + - trigger: sun event: sunset offset: -00:30 variables: notification_action: notify.paulus_iphone - action: + actions: # Actions are scripts so can also be a list of actions - action: "{{ notification_action }}" data: @@ -53,11 +53,11 @@ Conditions can also be part of an action. You can combine multiple actions and c ```yaml automation: - alias: "Office at evening" - trigger: - - platform: state + triggers: + - trigger: state entity_id: sensor.office_occupancy to: "on" - action: + actions: - action: notify.notify data: message: "Testing conditional actions" diff --git a/source/_docs/automation/condition.markdown b/source/_docs/automation/condition.markdown index 6007e08d64a1..3b782367fd9d 100644 --- a/source/_docs/automation/condition.markdown +++ b/source/_docs/automation/condition.markdown @@ -16,11 +16,11 @@ Example of using condition: ```yaml automation: - alias: "Turn on office lights" - trigger: - - platform: state + triggers: + - trigger: state entity_id: sensor.office_motion_sensor to: "on" - condition: + conditions: - or: - condition: numeric_state entity_id: sun.sun @@ -29,7 +29,7 @@ automation: - condition: numeric_state entity_id: sensor.office_lux_sensor below: 10 - action: + actions: - action: scene.turn_on target: entity_id: scene.office_lights @@ -44,12 +44,12 @@ The `condition` option of an automation, also accepts a single condition templat ```yaml automation: - alias: "Turn on office lights" - trigger: - - platform: state + triggers: + - trigger: state entity_id: sensor.office_motion_sensor to: "on" - condition: "{{ state_attr('sun.sun', 'elevation') < 4 }}" - action: + conditions: "{{ state_attr('sun.sun', 'elevation') < 4 }}" + actions: - action: scene.turn_on target: entity_id: scene.office_lights diff --git a/source/_docs/automation/modes.markdown b/source/_docs/automation/modes.markdown index 83fc69517a62..0035254f1786 100644 --- a/source/_docs/automation/modes.markdown +++ b/source/_docs/automation/modes.markdown @@ -31,9 +31,9 @@ Some automations you only want to run every 5 minutes. This can be achieved usin automation: - mode: single max_exceeded: silent - trigger: + triggers: - ... - action: + actions: - ... - delay: 300 # seconds (=5 minutes) ``` @@ -46,8 +46,8 @@ Sometimes an automation is doing an action on a device that does not support mul automation: - mode: queued max: 25 - trigger: + triggers: - ... - action: + actions: - ... ``` diff --git a/source/_docs/automation/templating.markdown b/source/_docs/automation/templating.markdown index 514b5d96debd..bd18fa791257 100644 --- a/source/_docs/automation/templating.markdown +++ b/source/_docs/automation/templating.markdown @@ -201,11 +201,11 @@ These are the properties available for a [Zone trigger](/docs/automation/trigger ```yaml # Example configuration.yaml entries automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: device_tracker.paulus id: paulus_device - action: + actions: - action: notify.notify data: message: > @@ -215,19 +215,19 @@ automation: This was triggered by {{ trigger.id }} automation 2: - trigger: - - platform: mqtt + triggers: + - trigger: mqtt topic: "/notify/+" - action: - action: > - notify.{{ trigger.topic.split('/')[-1] }} - data: - message: "{{ trigger.payload }}" + actions: + - action: > + notify.{{ trigger.topic.split('/')[-1] }} + data: + message: "{{ trigger.payload }}" automation 3: - trigger: + triggers: # Multiple entities for which you want to perform the same action. - - platform: state + - trigger: state entity_id: - light.bedroom_closet - light.kiddos_closet @@ -235,27 +235,27 @@ automation 3: to: "on" # Trigger when someone leaves one of those lights on for 10 minutes. for: "00:10:00" - action: + actions: - action: light.turn_off target: # Turn off whichever entity triggered the automation. entity_id: "{{ trigger.entity_id }}" automation 4: - trigger: + triggers: # When an NFC tag is scanned by Home Assistant... - - platform: event + - trigger: event event_type: tag_scanned # ...By certain people context: user_id: - 06cbf6deafc54cf0b2ffa49552a396ba - 2df8a2a6e0be4d5d962aad2d39ed4c9c - condition: + conditions: # Check NFC tag (ID) is the one by the front door - condition: template value_template: "{{ trigger.event.data.tag_id == '8b6d6755-b4d5-4c23-818b-cf224d221ab7'}}" - action: + actions: # Turn off various lights - action: light.turn_off target: diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 6554d15ea95d..12b9e0871aa8 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -31,6 +31,8 @@ An {% term automation %} can be triggered by an {% term event %}, a certain {% t - [Sentence trigger](#sentence-trigger) - [Multiple triggers](#multiple-triggers) - [Multiple Entity IDs for the same Trigger](#multiple-entity-ids-for-the-same-trigger) +- [Disabling a trigger](#disabling-a-trigger) +- [Merging lists of triggers](#merging-lists-of-triggers) ## Trigger ID @@ -44,14 +46,14 @@ This video tutorial explains how trigger IDs work. ```yaml automation: - trigger: - - platform: event + triggers: + - trigger: event event_type: "MY_CUSTOM_EVENT" id: "custom_event" - - platform: mqtt + - trigger: mqtt topic: "living_room/switch/ac" id: "ac_on" - - platform: state # This trigger will be assigned id="2" + - trigger: state # This trigger will be assigned id="2" entity_id: - device_tracker.paulus - device_tracker.anne_therese @@ -72,8 +74,8 @@ The second variant is setting variables that are available when attaching a trig automation: trigger_variables: my_event: example_event - trigger: - - platform: event + triggers: + - trigger: event # Able to use `trigger_variables` event_type: "{{ my_event }}" # These variables are evaluated and set when this trigger is triggered @@ -91,8 +93,8 @@ Events can be fired by integrations or via the API. There is no limitation to th ```yaml automation: - trigger: - - platform: event + triggers: + - trigger: event event_type: "MY_CUSTOM_EVENT" # optional event_data: @@ -109,8 +111,8 @@ event that contain no, or similar, data and contexts. ```yaml automation: - trigger: - - platform: event + triggers: + - trigger: event event_type: - automation_reloaded - scene_reloaded @@ -130,8 +132,8 @@ automation: sub_event: ABC node: ac value: on - trigger: - - platform: event + triggers: + - trigger: event event_type: "{{ 'MY_CUSTOM_EVENT_' ~ sub_event }}" ``` @@ -143,8 +145,8 @@ Fires when Home Assistant starts up or shuts down. ```yaml automation: - trigger: - - platform: homeassistant + triggers: + - trigger: homeassistant # Event can also be 'shutdown' event: start ``` @@ -159,8 +161,8 @@ Fires when a specific message is received on given MQTT topic. Optionally can ma ```yaml automation: - trigger: - - platform: mqtt + triggers: + - trigger: mqtt topic: "living_room/switch/ac" # Optional payload: "on" @@ -174,8 +176,8 @@ The trigger in the example below will trigger only when the message received on ```yaml automation: - trigger: - - platform: mqtt + triggers: + - trigger: mqtt topic: "living_room/switch/ac" payload: "on" value_template: "{{ value_json.state }}" @@ -197,8 +199,8 @@ automation: room: "living_room" node: "ac" value: "on" - trigger: - - platform: mqtt + triggers: + - trigger: mqtt topic: "{{ room ~ '/switch/' ~ node}}" # Optional payload: "{{ 'state:' ~ value }}" @@ -220,8 +222,8 @@ If the current state of your entity is `50` and you set the threshold to `below: ```yaml automation: - trigger: - - platform: numeric_state + triggers: + - trigger: numeric_state entity_id: sensor.temperature # If given, will trigger when the value of the given attribute for the given entity changes.. attribute: attribute_name @@ -245,8 +247,8 @@ When the `attribute` option is specified the trigger is compared to the given `a ```yaml automation: - trigger: - - platform: numeric_state + triggers: + - trigger: numeric_state entity_id: climate.kitchen attribute: current_temperature above: 23 @@ -262,8 +264,8 @@ The state of the entity can be referenced like this: ```yaml automation: - trigger: - - platform: numeric_state + triggers: + - trigger: numeric_state entity_id: sensor.temperature value_template: "{{ state.state | float * 9 / 5 + 32 }}" above: 70 @@ -277,8 +279,8 @@ Attributes of the entity can be referenced like this: ```yaml automation: - trigger: - - platform: numeric_state + triggers: + - trigger: numeric_state entity_id: climate.kitchen value_template: "{{ state.attributes.current_temperature - state.attributes.temperature_set_point }}" above: 3 @@ -297,8 +299,8 @@ However, the comparison will only be made when the entity specified in the trigg ```yaml automation: - trigger: - - platform: numeric_state + triggers: + - trigger: numeric_state entity_id: sensor.outside_temperature # Other entity ids can be specified for above and/or below thresholds above: sensor.inside_temperature @@ -310,8 +312,8 @@ The `for:` can also be specified as `HH:MM:SS` like this: ```yaml automation: - trigger: - - platform: numeric_state + triggers: + - trigger: numeric_state entity_id: sensor.temperature # At least one of the following required above: 17 @@ -329,8 +331,8 @@ You can also use templates in the `for` option. ```yaml automation: - trigger: - - platform: numeric_state + triggers: + - trigger: numeric_state entity_id: - sensor.temperature_1 - sensor.temperature_2 @@ -338,7 +340,7 @@ automation: for: minutes: "{{ states('input_number.high_temp_min')|int }}" seconds: "{{ states('input_number.high_temp_sec')|int }}" - action: + actions: - action: persistent_notification.create data: message: > @@ -376,8 +378,8 @@ This automation triggers if either Paulus or Anne-Therese are home for one minut ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: - device_tracker.paulus - device_tracker.anne_therese @@ -396,8 +398,8 @@ It's possible to give a list of `from` states or `to` states: ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: vacuum.test from: - "cleaning" @@ -409,8 +411,8 @@ If you want to trigger on all state changes, but not on attribute changes, you c ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: vacuum.test to: ``` @@ -419,8 +421,8 @@ If you want to trigger on all state changes *except* specific ones, use `not_fro ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: vacuum.test not_from: - "unknown" @@ -440,8 +442,8 @@ For example, this trigger only fires when the boiler has been heating for 10 min ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: climate.living_room attribute: hvac_action to: "heating" @@ -452,8 +454,8 @@ This trigger fires whenever the boiler's `hvac_action` attribute changes: ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: climate.living_room attribute: hvac_action ``` @@ -467,8 +469,8 @@ state for 30 seconds: ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: light.office # Must stay "on" for 30 seconds to: "on" @@ -486,8 +488,8 @@ the time specified, but doesn't care about "playing" or "paused". ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: media_player.kitchen # Not "off" for 30 minutes from: "off" @@ -502,8 +504,8 @@ same for `for` the time specified, regardless of the current state value. ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: media_player.kitchen # The media player remained in its current state for 1 hour for: "01:00:00" @@ -515,8 +517,8 @@ You can also use templates in the `for` option. ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: - device_tracker.paulus - device_tracker.anne_therese @@ -524,7 +526,7 @@ automation: for: minutes: "{{ states('input_number.lock_min')|int }}" seconds: "{{ states('input_number.lock_sec')|int }}" - action: + actions: - action: lock.lock target: entity_id: lock.my_place @@ -554,8 +556,8 @@ Since the duration of twilight is different throughout the year, it is recommend ```yaml automation: - trigger: - - platform: sun + triggers: + - trigger: sun # Possible values: sunset, sunrise event: sunset # Optional time offset. This example will trigger 45 minutes before sunset. @@ -571,13 +573,13 @@ Sometimes you may want more granular control over an automation than simply suns ```yaml automation: - alias: "Exterior Lighting on when dark outside" - trigger: - - platform: numeric_state + triggers: + - trigger: numeric_state entity_id: sun.sun attribute: elevation # Can be a positive or negative number below: -4.0 - action: + actions: - action: switch.turn_on target: entity_id: switch.exterior_lighting @@ -605,8 +607,8 @@ scanned using the Home Assistant Companion mobile application. ```yaml automation: - trigger: - - platform: tag + triggers: + - trigger: tag tag_id: A7-6B-90-5F ``` @@ -615,8 +617,8 @@ device/scanner by setting the `device_id`: ```yaml automation: - trigger: - - platform: tag + triggers: + - trigger: tag tag_id: A7-6B-90-5F device_id: 0e19cd3cf2b311ea88f469a7512c307d ``` @@ -625,8 +627,8 @@ Or trigger on multiple possible devices for multiple tags: ```yaml automation: - trigger: - - platform: tag + triggers: + - trigger: tag tag_id: - "A7-6B-90-5F" - "A7-6B-15-AC" @@ -647,8 +649,8 @@ With template triggers you can also evaluate attribute changes by using is_state ```yaml automation: - trigger: - - platform: template + triggers: + - trigger: template value_template: "{% if is_state('device_tracker.paulus', 'home') %}true{% endif %}" # If given, will trigger when template remains true for X time. @@ -663,8 +665,8 @@ You can also use templates in the `for` option. ```yaml automation: - trigger: - - platform: template + triggers: + - trigger: template value_template: "{{ is_state('device_tracker.paulus', 'home') }}" for: minutes: "{{ states('input_number.minutes')|int(0) }}" @@ -692,8 +694,8 @@ A string that represents a time to fire on each day. Can be specified as `HH:MM` ```yaml automation: - - trigger: - - platform: time + - triggers: + - trigger: time # Military time format. This trigger will fire at 3:32 PM at: "15:32:00" ``` @@ -712,11 +714,11 @@ The entity ID of an [input datetime](/integrations/input_datetime/). ```yaml automation: - - trigger: - - platform: state + - triggers: + - trigger: state entity_id: binary_sensor.motion to: "on" - action: + actions: - action: climate.turn_on target: entity_id: climate.office @@ -727,10 +729,10 @@ automation: datetime: > {{ (now().timestamp() + 2*60*60) | timestamp_custom('%Y-%m-%d %H:%M:%S') }} - - trigger: - - platform: time + - triggers: + - trigger: time at: input_datetime.turn_off_ac - action: + actions: - action: climate.turn_off target: entity_id: climate.office @@ -744,26 +746,51 @@ The Entity ID of a [sensor](/integrations/sensor/) with the "timestamp" device c ```yaml automation: - - trigger: - - platform: time + - triggers: + - trigger: time at: sensor.phone_next_alarm - action: + actions: - action: light.turn_on target: entity_id: light.bedroom ``` +### Sensors of datetime device class with offsets + +When the time is provided using a sensor of the timestamp device class, an offset can be provided. This offset will be added to (or subtracted from when negative) the sensor value. + +For example, this trigger fires 5 minutes before the phone alarm goes off. + +```yaml +automation: + - triggers: + - trigger: time + at: + entity_id: sensor.phone_next_alarm + offset: -00:05:00 + actions: + - action: light.turn_on + target: + entity_id: light.bedroom +``` + +{% important %} +When using a positive offset the trigger might never fire. This is due to the sensor changing before the offset is reached. For example, when using a phone alarm as a trigger, the sensor value will change to the new alarm time when the alarm goes off, which means this trigger will change to the new time as well. +{% endimportant %} + ### Multiple times -Multiple times can be provided in a list. Both formats can be intermixed. +Multiple times can be provided in a list. All formats can be intermixed. ```yaml automation: - trigger: - - platform: time + triggers: + - trigger: time at: - input_datetime.leave_for_work - "18:30:00" + - entity_id: sensor.bus_arrival + offset: "-00:10:00" ``` ## Time pattern trigger @@ -772,21 +799,21 @@ With the time pattern trigger, you can match if the hour, minute or second of th ```yaml automation: - trigger: - - platform: time_pattern + triggers: + - trigger: time_pattern # Matches every hour at 5 minutes past whole minutes: 5 automation 2: - trigger: - - platform: time_pattern + triggers: + - trigger: time_pattern # Trigger once per minute during the hour of 3 hours: "3" minutes: "*" automation 3: - trigger: - - platform: time_pattern + triggers: + - trigger: time_pattern # You can also match on interval. This will match every 5 minutes minutes: "/5" ``` @@ -801,8 +828,8 @@ Persistent notification triggers are fired when a `persistent_notification` is ` ```yaml automation: - trigger: - - platform: persistent_notification + triggers: + - trigger: persistent_notification update_type: - added - removed @@ -817,8 +844,8 @@ Webhook trigger fires when a web request is made to the webhook endpoint: `/api/ ```yaml automation: - trigger: - - platform: webhook + triggers: + - trigger: webhook webhook_id: "some_hook_id" allowed_methods: - POST @@ -865,8 +892,8 @@ Zone trigger fires when an entity is entering or leaving the zone. The entity ca ```yaml automation: - trigger: - - platform: zone + triggers: + - trigger: zone entity_id: person.paulus zone: zone.home # Event is either enter or leave @@ -884,8 +911,8 @@ This isn't for use with `device_tracker` entities. For those look above at the ` ```yaml automation: - trigger: - - platform: geo_location + triggers: + - trigger: geo_location source: nsw_rural_fire_service_feed zone: zone.bushfire_alert_zone # Event is either enter or leave @@ -911,8 +938,8 @@ An optional time offset can be given to have it fire a set time before or after ```yaml automation: - trigger: - - platform: calendar + triggers: + - trigger: calendar # Possible values: start, end event: start # The calendar entity_id @@ -932,8 +959,8 @@ Sentences are allowed to use some basic [template syntax](https://developers.hom ```yaml automation: - trigger: - - platform: conversation + triggers: + - trigger: conversation command: - "[it's ]party time" - "happy (new year|birthday)" @@ -975,12 +1002,12 @@ It is possible to specify multiple triggers for the same rule. To do so just pre ```yaml automation: - trigger: + triggers: # first trigger - - platform: time_pattern + - trigger: time_pattern minutes: 5 # our second trigger is the sunset - - platform: sun + - trigger: sun event: sunset ``` @@ -990,8 +1017,8 @@ It is possible to specify multiple entities for the same trigger. To do so add m ```yaml automation: - trigger: - - platform: state + triggers: + - trigger: state entity_id: - sensor.one - sensor.two @@ -1006,15 +1033,15 @@ To do so, add `enabled: false` to the trigger. For example: ```yaml # Example script with a disabled trigger automation: - trigger: + triggers: # This trigger will not trigger, as it is disabled. # This automation does not run when the sun is set. - enabled: false - platform: sun + trigger: sun event: sunset # This trigger will fire, as it is not disabled. - - platform: time + - trigger: time at: "15:32:00" ``` @@ -1039,13 +1066,38 @@ blueprint: trigger_variables: _enable_number: !input input_number - trigger: - - platform: sun + triggers: + - trigger: sun event_type: sunrise enabled: !input input_boolean - - platform: sun + - trigger: sun event_type: sunset enabled: "{{ _enable_number < 50 }}" ``` {% endraw %} + +## Merging lists of triggers + +{% caution %} +This feature requires Home Assistant version 2024.10 or later. If using this in a blueprint, set the `min_version` for the blueprint to at least this version. +{% endcaution %} + +In some advanced cases (like for blueprints with trigger selectors), it may be necessary to insert a second list of triggers into the main trigger list. This can be done by adding a dictionary in the main trigger list with the sole key `triggers`, and the value for that key contains a second list of triggers. These will then be flattened into a single list of triggers. For example: + +```yaml +blueprint: + name: Nested Trigger Blueprint + domain: automation + input: + usertrigger: + selector: + trigger: + +triggers: + - trigger: event + event_type: manual_event + - triggers: !input usertrigger +``` + +This blueprint automation can then be triggered either by the fixed manual_event trigger, or additionally by any triggers selected in the trigger selector. This is also applicable for `wait_for_trigger` action. diff --git a/source/_docs/automation/using_blueprints.markdown b/source/_docs/automation/using_blueprints.markdown index 5b8452bcece5..ffa50ecdcb46 100644 --- a/source/_docs/automation/using_blueprints.markdown +++ b/source/_docs/automation/using_blueprints.markdown @@ -83,7 +83,7 @@ Blueprints created by the community may go through multiple revisions. Sometimes the community provides feedback, new functionality is added. If you do not want to [re-import the blueprint](/docs/automation/using_blueprints/#re-importing-a-blueprint) for some reason, you can manually edit -its YAML content to keep it up to date: +its {% term YAML %} content to keep it up to date: 1. Navigate to the blueprints directory (`blueprints/automation/`). The location of this directory depends on the installation method. It's @@ -91,7 +91,7 @@ its YAML content to keep it up to date: 2. Next, you must find the blueprint to update. The path name of a blueprint consists of: - The username of the user that created it. The name depends on the source of the blueprint: the forum, or GitHub. - - The name of the YAML file. For the forum it's the title of the topic in the URL, for GitHub + - The name of the {% term YAML %} file. For the forum it's the title of the topic in the URL, for GitHub it's the name of the YAML file. 3. Open the YAML file with your editor and update its contents. 4. Reload the automations for the changes to take effect. diff --git a/source/_docs/automation/yaml.markdown b/source/_docs/automation/yaml.markdown index f1f383ee0898..bda7a04e8328 100644 --- a/source/_docs/automation/yaml.markdown +++ b/source/_docs/automation/yaml.markdown @@ -3,11 +3,11 @@ 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 {% term automation %}, select the automation, click on the menu button in the top right then on **Edit in YAML**. +Automations are created in Home Assistant via the UI, but are stored in a {% term YAML %} format. If you want to edit the {% term YAML %} of an {% term 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. -It is also possible to write your automations directly inside {% term "`configuration.yaml`" %} or other YAML files. You can do this by adding a labeled `automation` block to your `configuration.yaml`: +It is also possible to write your automations directly inside {% term "`configuration.yaml`" %} or other {% term YAML %} files. You can do this by adding a labeled `automation` block to your `configuration.yaml`: ```yaml # The configuration required for the UI to work @@ -15,8 +15,8 @@ automation: !include automations.yaml # Labeled automation block automation kitchen: - - trigger: - - platform: ... + - triggers: + - trigger: ... ``` You can add as many labeled `automation` blocks as you want. @@ -52,7 +52,7 @@ trace: default: 5 required: false variables: - description: "Variables that will be available inside your templates, both in `condition` and `action`." + description: "Variables that will be available inside your templates, both in `conditions` and `actions`." required: false default: {} type: map @@ -84,7 +84,7 @@ max_exceeded: required: false type: string default: warning -trigger: +triggers: description: "The trigger(s) which will start the automation. Multiple triggers can be added and the automation will start when any of these triggers trigger." required: true type: list @@ -102,11 +102,11 @@ trigger: PARAMETER_NAME: description: "The value of the variable. Any YAML is valid. Templates can also be used to pass a value to the variable." type: any -condition: +conditions: description: Conditions that have to be `true` to start the automation. By default all conditions listed have to be `true`, you can use [logical conditions](/docs/scripts/conditions/#logical-conditions) to change this default behavior. required: false type: list -action: +actions: description: "The sequence of actions to be performed in the script." required: true type: list @@ -125,10 +125,9 @@ action:

- ## YAML example -Example of a YAML based automation that you can add to {% term "`configuration.yaml`" %}. +Example of a {% term YAML %} based automation that you can add to {% term "`configuration.yaml`" %}. {% raw %} @@ -138,16 +137,16 @@ automation my_lights: # Turns on lights 1 hour before sunset if people are home # and if people get home between 16:00-23:00 - alias: "Rule 1 Light on in the evening" - trigger: + triggers: # Prefix the first line of each trigger configuration # with a '-' to enter multiple - - platform: sun + - trigger: sun event: sunset offset: "-01:00:00" - - platform: state + - trigger: state entity_id: all to: "home" - condition: + conditions: # Prefix the first line of each condition configuration # with a '-'' to enter multiple - condition: state @@ -156,34 +155,34 @@ automation my_lights: - condition: time after: "16:00:00" before: "23:00:00" - action: - # With a single service entry, we don't need a '-' before service - though you can if you want to + actions: + # With a single action entry, we don't need a '-' before action - though you can if you want to - action: homeassistant.turn_on target: entity_id: group.living_room # Turn off lights when everybody leaves the house - alias: "Rule 2 - Away Mode" - trigger: - - platform: state + triggers: + - trigger: state entity_id: all to: "not_home" - action: + actions: - action: light.turn_off target: entity_id: all # Notify when Paulus leaves the house in the evening - alias: "Leave Home notification" - trigger: - - platform: zone + triggers: + - trigger: zone event: leave zone: zone.home entity_id: device_tracker.paulus - condition: + conditions: - condition: time after: "20:00" - action: + actions: - action: notify.notify data: message: "Paulus left the house" @@ -191,12 +190,12 @@ automation my_lights: # Send a notification via Pushover with the event of a Xiaomi cube. Custom event from the Xiaomi integration. - alias: "Xiaomi Cube Action" initial_state: false - trigger: - - platform: event + triggers: + - trigger: event event_type: cube_action event_data: entity_id: binary_sensor.cube_158d000103a3de - action: + actions: - action: notify.pushover data: title: "Cube event detected" @@ -207,7 +206,7 @@ automation my_lights: ## Extra options -When writing automations directly in YAML, you will have access to advanced options that are not available in the user interface. +When writing automations directly in {% term YAML %}, you will have access to advanced options that are not available in the user interface. ### Automation initial state @@ -217,21 +216,21 @@ At startup, automations by default restore their last state of when Home Assista automation: - alias: "Automation Name" initial_state: false - trigger: - - platform: ... + triggers: + - trigger: ... ``` ### Number of debug traces stored -When using YAML you can configure the number of debugging traces stored for an automation. This is controlled with the `stored_traces` option under `trace`. Set `stored_traces` to the number of traces you wish to store for the particular automation. If not specified the default value of 5 will be used. +When using {% term YAML %} you can configure the number of debugging traces stored for an automation. This is controlled with the `stored_traces` option under `trace`. Set `stored_traces` to the number of traces you wish to store for the particular automation. If not specified the default value of 5 will be used. ```yaml automation: - alias: "Automation Name" trace: stored_traces: 10 - trigger: - - platform: ... + triggers: + - trigger: ... ``` ## Migrating your YAML automations to `automations.yaml` @@ -244,18 +243,18 @@ If you want to migrate your manual automations to use the editor, you'll have to # Example automations.yaml entry. Note, automations.yaml is always a list! - id: my_unique_id # <-- Required for editor to work, for automations created with the editor the id will be automatically generated. alias: "Hello world" - trigger: - - platform: state + triggers: + - trigger: state entity_id: sun.sun from: below_horizon to: above_horizon - condition: + conditions: - condition: numeric_state entity_id: sensor.temperature above: 17 below: 25 value_template: "{{ float(state.state) + 2 }}" - action: + actions: - action: light.turn_on ``` @@ -263,7 +262,7 @@ If you want to migrate your manual automations to use the editor, you'll have to ### Deleting automations -When automations remain visible in the Home Assistant dashboard, even after having deleted in the YAML file, you have to delete them in the UI. +When automations remain visible in the Home Assistant dashboard, even after having deleted in the {% term YAML %} file, you have to delete them in the UI. To delete them completely, go to UI {% my entities title="**Settings** > **Devices & services** > **Entities**" %} and find the automation in the search field or by scrolling down. diff --git a/source/_docs/blueprint/schema.markdown b/source/_docs/blueprint/schema.markdown index f0046a1f33a8..8c7819321637 100644 --- a/source/_docs/blueprint/schema.markdown +++ b/source/_docs/blueprint/schema.markdown @@ -267,20 +267,20 @@ blueprint: mode: restart max_exceeded: silent -trigger: - - platform: state +triggers: + - trigger: state entity_id: !input motion_entity from: "off" to: "on" -action: +actions: - action: light.turn_on target: !input light_target - wait_for_trigger: - platform: state - entity_id: !input motion_entity - from: "on" - to: "off" + - trigger: state + entity_id: !input motion_entity + from: "on" + to: "off" - delay: !input no_motion_wait - action: light.turn_off target: !input light_target diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index 5015b5ca26ed..ca4ed195ee72 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -1381,7 +1381,7 @@ Targets are meant to be used with the `target` property of an action in a script sequence. For example: ```yaml -action: +actions: - action: light.turn_on target: !input lights ``` @@ -1535,7 +1535,7 @@ The output of this selector is a list of triggers. For example: ```yaml # Example trigger selector output result -- platform: numeric_state +- trigger: numeric_state entity_id: "sensor.outside_temperature" below: 20 ``` diff --git a/source/_docs/blueprint/tutorial.markdown b/source/_docs/blueprint/tutorial.markdown index 8ee36b28b4c1..f949fd135ddd 100644 --- a/source/_docs/blueprint/tutorial.markdown +++ b/source/_docs/blueprint/tutorial.markdown @@ -44,19 +44,19 @@ The automation we're going to use in this tutorial controls a light based on a m {% raw %} ```yaml -trigger: - platform: state - entity_id: binary_sensor.motion_kitchen - -action: - action: > - {% if trigger.to_state.state == "on" %} - light.turn_on - {% else %} - light.turn_off - {% endif %} - target: - entity_id: light.kitchen +triggers: + - trigger: state + entity_id: binary_sensor.motion_kitchen + +actions: + - action: > + {% if trigger.to_state.state == "on" %} + light.turn_on + {% else %} + light.turn_off + {% endif %} + target: + entity_id: light.kitchen ``` {% endraw %} @@ -91,9 +91,9 @@ Now we have to decide what steps we want to make configurable. We want to make i Configurable parts in blueprints are called [inputs](/docs/blueprint/schema/#blueprint-inputs). To make the motion sensor entity configurable, we're replacing the entity ID with a custom YAML tag `!input`. This YAML tag has to be combined with the name of the input: ```yaml -trigger: - platform: state - entity_id: !input motion_sensor +triggers: + - trigger: state + entity_id: !input motion_sensor ``` For the light, we can offer some more flexibility. We want to allow the user to be able to define any device or area as the target. The `target` property in the action can contain references to areas, devices, and/or entities, so that's what we will use. @@ -103,14 +103,14 @@ Inputs are not limited to strings. They can contain complex objects too. So in t {% raw %} ```yaml -action: - action: > - {% if trigger.to_state.state == "on" %} - light.turn_on - {% else %} - light.turn_off - {% endif %} - target: !input target_light +actions: + - action: > + {% if trigger.to_state.state == "on" %} + light.turn_on + {% else %} + light.turn_off + {% endif %} + target: !input target_light ``` {% endraw %} @@ -233,11 +233,11 @@ blueprint: entity: - domain: light -trigger: - - platform: state +triggers: + - trigger: state entity_id: !input motion_sensor -action: +actions: - action: > {% if trigger.to_state.state == "on" %} light.turn_on diff --git a/source/_docs/configuration/packages.markdown b/source/_docs/configuration/packages.markdown index 5465ddc9968c..466652fec799 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -17,7 +17,7 @@ homeassistant: The package configuration can include: `switch`, `light`, `automation`, `groups`, or most other Home Assistant integrations including hardware platforms. -It can be specified inline or in a separate YAML file using `!include`. +It can be specified inline or in a separate {% term YAML %} file using `!include`. Inline example, main {% term "`configuration.yaml`" %}: @@ -74,7 +74,7 @@ Integrations inside packages can only specify platform entries using configurati ## Create a packages folder -One way to organize packages is to create a folder named "packages" in your Home Assistant configuration directory. In the packages directory, you can store any number of packages in a YAML file. This entry in your {% term "`configuration.yaml`" %} will load all YAML-files in this _packages_ folder and its subfolders: +One way to organize packages is to create a folder named "packages" in your Home Assistant configuration directory. In the packages directory, you can store any number of packages in a {% term YAML %} file. This entry in your {% term "`configuration.yaml`" %} will load all {% term YAML %}-files in this _packages_ folder and its subfolders: ```yaml homeassistant: diff --git a/source/_docs/configuration/secrets.markdown b/source/_docs/configuration/secrets.markdown index 010db2271ac6..d7130f254dfe 100644 --- a/source/_docs/configuration/secrets.markdown +++ b/source/_docs/configuration/secrets.markdown @@ -12,7 +12,7 @@ related: The {% term "`configuration.yaml`" %} file is a plain-text file, thus it is readable by anyone who has access to the file. The file contains passwords and API tokens which need to be redacted if you want to share your configuration. -By using `!secret` you can remove any private information from your configuration files. This separation can also help you to keep easier track of your passwords and API keys, as they are all stored at one place and no longer spread across the {% term "`configuration.yaml`" %} file or even multiple YAML files if you [split up your configuration](/docs/configuration/splitting_configuration/). +By using `!secret` you can remove any private information from your configuration files. This separation can also help you to keep easier track of your passwords and API keys, as they are all stored at one place and no longer spread across the {% term "`configuration.yaml`" %} file or even multiple {% term YAML %} files if you [split up your configuration](/docs/configuration/splitting_configuration/). ## Using `secrets.yaml` @@ -48,7 +48,7 @@ rest_password: "YOUR_PASSWORD" When you start splitting your configuration into multiple files, you might end up with configuration in sub folders. Secrets will be resolved in this order: -- A `secrets.yaml` located in the same folder as the YAML file referencing the secret, +- A `secrets.yaml` located in the same folder as the {% term YAML %} file referencing the secret, - next, parent folders will be searched for a `secrets.yaml` file with the secret, stopping at the folder with the main {% term "`configuration.yaml`" %}. To see where secrets are being loaded from, you can either add an option to your `secrets.yaml` file or use the `check_config` script. The latter is only available for {% term "Home Assistant Core" %} installations given it's available through [`hass`](/docs/tools/hass/). diff --git a/source/_docs/configuration/splitting_configuration.markdown b/source/_docs/configuration/splitting_configuration.markdown index 229846561703..55ddb8a7aa83 100644 --- a/source/_docs/configuration/splitting_configuration.markdown +++ b/source/_docs/configuration/splitting_configuration.markdown @@ -267,23 +267,23 @@ These work recursively. As an example using `!include_dir_list automation`, will ```yaml automation: - alias: "Automation 1" - trigger: - platform: state - entity_id: device_tracker.iphone - to: "home" - action: - action: light.turn_on - target: - entity_id: light.entryway + triggers: + - trigger: state + entity_id: device_tracker.iphone + to: "home" + actions: + - action: light.turn_on + target: + entity_id: light.entryway - alias: "Automation 2" - trigger: - platform: state - entity_id: device_tracker.iphone - from: "home" - action: - action: light.turn_off - target: - entity_id: light.entryway + triggers: + - trigger: state + entity_id: device_tracker.iphone + from: "home" + actions: + - action: light.turn_off + target: + entity_id: light.entryway ``` can be turned into: @@ -298,28 +298,28 @@ automation: !include_dir_list automation/presence/ ```yaml alias: "Automation 1" -trigger: - platform: state - entity_id: device_tracker.iphone - to: "home" -action: - action: light.turn_on - target: - entity_id: light.entryway +triggers: + - trigger: state + entity_id: device_tracker.iphone + to: "home" +actions: + - action: light.turn_on + target: + entity_id: light.entryway ``` `automation/presence/automation2.yaml` ```yaml alias: "Automation 2" -trigger: - platform: state - entity_id: device_tracker.iphone - from: "home" -action: - action: light.turn_off - target: - entity_id: light.entryway +triggers: + - trigger: state + entity_id: device_tracker.iphone + from: "home" +actions: + - action: light.turn_off + target: + entity_id: light.entryway ``` It is important to note that each file must contain only **one** entry when using `!include_dir_list`. @@ -333,7 +333,7 @@ It is important to note that each file must contain only **one** entry when usin alexa: intents: LocateIntent: - action: + actions: action: notify.pushover data: message: "Your location has been queried via Alexa." @@ -371,7 +371,7 @@ alexa: ```yaml {% raw %} -action: +actions: action: notify.pushover data: message: "Your location has been queried via Alexa." @@ -408,20 +408,20 @@ speech: ```yaml automation: - alias: "Automation 1" - trigger: - - platform: state + triggers: + - trigger: state entity_id: device_tracker.iphone to: "home" - action: + actions: - action: light.turn_on target: entity_id: light.entryway - alias: "Automation 2" - trigger: - - platform: state + triggers: + - trigger: state entity_id: device_tracker.iphone from: "home" - action: + actions: - action: light.turn_off target: entity_id: light.entryway @@ -439,20 +439,20 @@ automation: !include_dir_merge_list automation/ ```yaml - alias: "Automation 1" - trigger: - - platform: state + triggers: + - trigger: state entity_id: device_tracker.iphone to: "home" - action: + actions: - action: light.turn_on target: entity_id: light.entryway - alias: "Automation 2" - trigger: - - platform: state + triggers: + - trigger: state entity_id: device_tracker.iphone from: "home" - action: + actions: - action: light.turn_off target: entity_id: light.entryway diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 749ca968641e..86a8b5fe6e5f 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -1180,6 +1180,178 @@ See: [Python regular expression operations](https://docs.python.org/3/library/re - Filter `value | regex_findall(find='', ignorecase=False)` will find all regex matches of the find expression in `value` and return the array of matches. - Filter `value | regex_findall_index(find='', index=0, ignorecase=False)` will do the same as `regex_findall` and return the match at index. +## Merge action responses + +Using action responses we can collect information from various entities at the same time. +Using the `merge_response` template we can merge several responses into one list. + +| Variable | Description | +| -------------- | ---------------------------------- | +| `value` | The incoming value (must be an action response). | + +The `entity_id` key is appended to each dictionary within the template output list as a reference of origin. If the input dictionary already contains an `entity_id` key, the template will fail. + +The `value_key` key is appended to each dictionary within the template output list as a reference of origin if the original service call was providing a list of dictionaries, for example, `calendar.get_events` or `weather.get_forecasts`. + +Examples of these two keys can be seen in [example merge calendar action response](#example-merge-calendar-action-response) template output. + + +### Example + +```yaml +{% raw %} + +{% set combined_forecast = merge_response(response) %} +{{ combined_forecast[0].precipitation | float(0) | round(1) }} + +{% endraw %} +``` + +### Example how to sort + +Sorting the dictionaries within the list based on a specific key can be done directly by using Jinja's `sort` filter. + +```yaml +{% raw %} + +{{ merge_response(calendar_response) | sort(attribute='start') | ... }} + +{% endraw %} +``` + +### Example merge calendar action response + +```json +{ + "calendar.sports": { + "events": [ + { + "start": "2024-02-27T17:00:00-06:00", + "end": "2024-02-27T18:00:00-06:00", + "summary": "Basketball vs. Rockets", + "description": "", + } + ] + }, + "calendar.local_furry_events": {"events": []}, + "calendar.yap_house_schedules": { + "events": [ + { + "start": "2024-02-26T08:00:00-06:00", + "end": "2024-02-26T09:00:00-06:00", + "summary": "Dr. Appt", + "description": "", + }, + { + "start": "2024-02-28T20:00:00-06:00", + "end": "2024-02-28T21:00:00-06:00", + "summary": "Bake a cake", + "description": "something good", + } + ] + }, +} +``` + +```yaml +{% raw %} +{{ merge_response(response_variable) }} +{% endraw %} +``` + +```json +[ + { + "description": "", + "end": "2024-02-27T18:00:00-06:00", + "entity_id": "calendar.sports", + "start": "2024-02-27T17:00:00-06:00", + "summary": "Basketball vs. Rockets", + "value_key": "events" + }, + { + "description": "", + "end": "2024-02-26T09:00:00-06:00", + "entity_id": "calendar.yap_house_schedules", + "start": "2024-02-26T08:00:00-06:00", + "summary": "Dr. Appt", + "value_key": "events" + }, + { + "description": "something good", + "end": "2024-02-28T21:00:00-06:00", + "entity_id": "calendar.yap_house_schedules", + "start": "2024-02-28T20:00:00-06:00", + "summary": "Bake a cake", + "value_key": "events" + } +] +``` + +### Example non-list action responses + +```json +{ + "vacuum.deebot_n8_plus_1": { + "header": { + "ver": "0.0.1", + }, + "payloadType": "j", + "resp": { + "body": { + "msg": "ok", + }, + }, + }, + "vacuum.deebot_n8_plus_2": { + "header": { + "ver": "0.0.1", + }, + "payloadType": "j", + "resp": { + "body": { + "msg": "ok", + }, + }, + }, +} +``` + +```yaml +{% raw %} +{{ merge_response(response_variable) }} +{% endraw %} +``` + +```json +[ + { + "entity_id": "vacuum.deebot_n8_plus_1", + "header": { + "ver": "0.0.1", + }, + "payloadType": "j", + "resp": { + "body": { + "msg": "ok", + }, + }, + }, + { + "entity_id": "vacuum.deebot_n8_plus_2", + "header": { + "ver": "0.0.1", + }, + "payloadType": "j", + "resp": { + "body": { + "msg": "ok", + }, + }, + }, +] +``` + ## Processing incoming data The other part of templating is processing incoming data. It allows you to modify incoming data and extract only the data you care about. This will only work for platforms and integrations that mention support for this in their documentation. diff --git a/source/_docs/configuration/troubleshooting.markdown b/source/_docs/configuration/troubleshooting.markdown index ad25fd6f0b8c..30a4f7a7b0b2 100644 --- a/source/_docs/configuration/troubleshooting.markdown +++ b/source/_docs/configuration/troubleshooting.markdown @@ -30,8 +30,8 @@ One of the most common problems with Home Assistant is an invalid {% term "`conf - [Supervised](/common-tasks/supervised/#configuration-check) - The configuration files, including {% term "`configuration.yaml`" %} must be UTF-8 encoded. If you see error like `'utf-8' codec can't decode byte`, edit the offending configuration and re-save it as UTF-8. -- You can verify your configuration's YAML structure using [this online YAML parser](https://yaml-online-parser.appspot.com/) or [YAML Validator](https://codebeautify.org/yaml-validator/). -- To learn more about the quirks of YAML, read [YAML IDIOSYNCRASIES](https://docs.saltproject.io/en/latest/topics/troubleshooting/yaml_idiosyncrasies.html) by SaltStack (the examples there are specific to SaltStack, but do explain YAML issues well). +- You can verify your configuration's {% term YAML %} structure using [this online YAML parser](https://yaml-online-parser.appspot.com/) or [YAML Validator](https://codebeautify.org/yaml-validator/). +- To learn more about the quirks of {% term YAML %}, read [YAML IDIOSYNCRASIES](https://docs.saltproject.io/en/latest/topics/troubleshooting/yaml_idiosyncrasies.html) by SaltStack (the examples there are specific to SaltStack, but do explain YAML issues well). `configuration.yaml` does not allow multiple sections to have the same name. If you want to load multiple platforms for one integration, you can append a number or string to the name or nest them: @@ -100,7 +100,7 @@ The only characters valid in entity names are: - Numbers - Underscores -The entity name must not start or end with an underscore. If you create an entity with other characters from the UI, Home Assistant validates the name. If you change the name directly in the YAML file, then Home Assistant may not generate an error for that entity. However, attempts to use that entity will generate errors (or possibly fail silently). +The entity name must not start or end with an underscore. If you create an entity with other characters from the UI, Home Assistant validates the name. If you change the name directly in the {% term YAML %} file, then Home Assistant may not generate an error for that entity. However, attempts to use that entity will generate errors (or possibly fail silently). For instructions on how to change an entity name, refer to the section on [customizing entities](/docs/configuration/customizing-devices/). diff --git a/source/_docs/scene.markdown b/source/_docs/scene.markdown index 9f23ca2093dc..87e63f72063f 100644 --- a/source/_docs/scene.markdown +++ b/source/_docs/scene.markdown @@ -29,7 +29,7 @@ scene: ## How to configure your scene -In the scene you define in your YAML files, please ensure you use +In the scene you define in your {% term YAML %} files, please ensure you use all required parameters as listed below. {% configuration %} @@ -57,15 +57,15 @@ Scenes can be activated using the action `scene.turn_on` (there is no 'scene.tur ```yaml # Example automation automation: - trigger: - platform: state - entity_id: device_tracker.sweetheart - from: "not_home" - to: "home" - action: - action: scene.turn_on - target: - entity_id: scene.romantic + triggers: + - trigger: state + entity_id: device_tracker.sweetheart + from: "not_home" + to: "home" + actions: + - action: scene.turn_on + target: + entity_id: scene.romantic ``` ## Applying a scene without defining it @@ -75,22 +75,22 @@ With the `scene.apply` action you are able to apply a scene without first defini ```yaml # Example automation automation: - trigger: - platform: state - entity_id: device_tracker.sweetheart - from: "not_home" - to: "home" - action: - action: scene.apply - data: - entities: - light.tv_back_light: - state: "on" - brightness: 100 - light.ceiling: off - media_player.sony_bravia_tv: - state: "on" - source: HDMI 1 + triggers: + - trigger: state + entity_id: device_tracker.sweetheart + from: "not_home" + to: "home" + actions: + - action: scene.apply + data: + entities: + light.tv_back_light: + state: "on" + brightness: 100 + light.ceiling: off + media_player.sony_bravia_tv: + state: "on" + source: "HDMI 1" ``` ## Using scene transitions @@ -104,17 +104,17 @@ light will transition to the scene in 2.5 seconds. ```yaml # Example automation automation: - trigger: - platform: state - entity_id: device_tracker.sweetheart - from: "not_home" - to: "home" - action: - action: scene.turn_on - target: - entity_id: scene.romantic - data: - transition: 2.5 + triggers: + - trigger: state + entity_id: device_tracker.sweetheart + from: "not_home" + to: "home" + actions: + - action: scene.turn_on + target: + entity_id: scene.romantic + data: + transition: 2.5 ``` Transitions are currently only support by lights, which in their turn, have diff --git a/source/_docs/scene/editor.markdown b/source/_docs/scene/editor.markdown index 63c2ff87fde9..eb32b7108278 100644 --- a/source/_docs/scene/editor.markdown +++ b/source/_docs/scene/editor.markdown @@ -78,5 +78,5 @@ For example: ``` {% note %} -Any comments in the YAML file will be lost and templates will be reformatted when you update a scene via the editor. +Any comments in the {% term YAML %} file will be lost and templates will be reformatted when you update a scene via the editor. {% endnote %} diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index aefb1391c85d..abbb96ba9905 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -146,7 +146,7 @@ The `condition` {% term action %} only stops executing the current sequence bloc ```yaml - alias: "Check if Paulus ishome AND temperature is below 20" - condition: + conditions: - condition: state entity_id: "device_tracker.paulus" state: "home" @@ -231,9 +231,9 @@ This {% term action %} can use the same triggers that are available in an automa # Wait for a custom event or light to turn on and stay on for 10 sec - alias: "Wait for MY_EVENT or light on" wait_for_trigger: - - platform: event + - trigger: event event_type: MY_EVENT - - platform: state + - trigger: state entity_id: light.LIGHT to: "on" for: 10 @@ -262,7 +262,7 @@ You can also get the script to abort after the timeout by using optional `contin # Wait for IFTTT event or abort after specified timeout. - wait_for_trigger: - - platform: event + - trigger: event event_type: ifttt_webhook_received event_data: action: connected_to_network @@ -312,7 +312,7 @@ This can be used to take different actions based on whether or not the condition target: entity_id: switch.some_light - wait_for_trigger: - - platform: state + - trigger: state entity_id: binary_sensor.door_2 to: "on" for: 2 @@ -360,11 +360,11 @@ The following {% term automation %} example shows how to raise a custom event ca ```yaml - alias: "Fire Event" - trigger: - - platform: state + triggers: + - trigger: state entity_id: switch.kitchen to: "on" - action: + actions: - event: event_light_state_changed event_data: state: "on" @@ -376,10 +376,10 @@ The following {% term automation %} example shows how to capture the custom even ```yaml - alias: "Capture Event" - trigger: - - platform: event + triggers: + - trigger: event event_type: event_light_state_changed - action: + actions: - action: notify.notify data: message: "kitchen light is turned {{ trigger.event.data.state }}" @@ -524,16 +524,15 @@ _until_ the condition(s) evaluate to true. ```yaml automation: - - trigger: - - platform: state + - triggers: + - trigger: state entity_id: binary_sensor.xyz to: "on" - condition: + conditions: - condition: state entity_id: binary_sensor.something state: "off" - mode: single - action: + actions: - alias: "Repeat the sequence UNTIL the conditions are true" repeat: sequence: @@ -621,12 +620,12 @@ The `choose` {% term action %} can be used like an "if/then/elseif/then.../else" ```yaml # Example with "if", "elif" and "else" automation: - - trigger: - - platform: state + - triggers: + - trigger: state entity_id: input_boolean.simulate to: "on" mode: restart - action: + actions: - choose: # IF morning - conditions: @@ -664,10 +663,10 @@ For example: ```yaml automation: - - trigger: - - platform: state + - triggers: + - trigger: state entity_id: input_select.home_mode - action: + actions: - choose: - conditions: > {{ trigger.to_state.state == 'Home' and @@ -706,12 +705,12 @@ When the sun goes below the horizon, the `porch` and `garden` lights must turn o # Example with "if" and "if" automation: - alias: "Turn lights on when the sun gets dim and if some room is occupied" - trigger: - - platform: numeric_state + triggers: + - trigger: numeric_state entity_id: sun.sun attribute: elevation below: 4 - action: + actions: # This must always apply - action: light.turn_on data: @@ -770,11 +769,11 @@ groups themselves. In total, four actions are executed, one after the other. ```yaml automation: - - trigger: - - platform: state + - triggers: + - trigger: state entity_id: binary_sensor.motion to: "on" - action: + actions: - alias: "Turn on devices" sequence: - action: light.turn_on @@ -807,11 +806,11 @@ The following example shows sending messages out at the same time (in parallel): ```yaml automation: - - trigger: - - platform: state + - triggers: + - trigger: state entity_id: binary_sensor.motion to: "on" - action: + actions: - parallel: - action: notify.person1 data: @@ -831,7 +830,7 @@ script: - parallel: - sequence: - wait_for_trigger: - - platform: state + - trigger: state entity_id: binary_sensor.motion to: "on" - action: notify.person1 @@ -966,7 +965,7 @@ blueprint: selector: boolean: - action: + actions: - delay: 0:35 enabled: !input input_boolean ``` diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index 34c89afb1d26..f6aa2c19e080 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -19,16 +19,16 @@ All conditions support an optional `alias`. Test multiple conditions in one condition statement. Passes if all embedded conditions are true. ```yaml -condition: - alias: "Paulus home AND temperature below 20" - condition: and - conditions: - - condition: state - entity_id: "device_tracker.paulus" - state: "home" - - condition: numeric_state - entity_id: "sensor.temperature" - below: 20 +conditions: + - alias: "Paulus home AND temperature below 20" + condition: and + conditions: + - condition: state + entity_id: "device_tracker.paulus" + state: "home" + - condition: numeric_state + entity_id: "sensor.temperature" + below: 20 ``` If you do not want to combine AND and OR conditions, you can list them sequentially. @@ -36,7 +36,7 @@ If you do not want to combine AND and OR conditions, you can list them sequentia The following configuration works the same as the one listed above: ```yaml -condition: +conditions: - condition: state entity_id: "device_tracker.paulus" state: "home" @@ -50,9 +50,9 @@ Currently you need to format your conditions like this to be able to edit them u The AND condition also has a shorthand form. The following configuration works the same as the ones listed above: ```yaml -condition: +conditions: alias: "Paulus home AND temperature below 20" - and: + - and: - condition: state entity_id: "device_tracker.paulus" state: "home" @@ -66,30 +66,30 @@ condition: Test multiple conditions in one condition statement. Passes if any embedded condition is true. ```yaml -condition: - alias: "Paulus home OR temperature below 20" - condition: or - conditions: - - condition: state - entity_id: "device_tracker.paulus" - state: "home" - - condition: numeric_state - entity_id: "sensor.temperature" - below: 20 +conditions: + - alias: "Paulus home OR temperature below 20" + condition: or + conditions: + - condition: state + entity_id: "device_tracker.paulus" + state: "home" + - condition: numeric_state + entity_id: "sensor.temperature" + below: 20 ``` The OR condition also has a shorthand form. The following configuration works the same as the one listed above: ```yaml -condition: - alias: "Paulus home OR temperature below 20" - or: - - condition: state - entity_id: "device_tracker.paulus" - state: "home" - - condition: numeric_state - entity_id: "sensor.temperature" - below: 20 +conditions: + - alias: "Paulus home OR temperature below 20" + or: + - condition: state + entity_id: "device_tracker.paulus" + state: "home" + - condition: numeric_state + entity_id: "sensor.temperature" + below: 20 ``` ### Mixed AND and OR conditions @@ -98,27 +98,27 @@ Test multiple AND and OR conditions in one condition statement. Passes if any em This allows you to mix several AND and OR conditions together. ```yaml -condition: - condition: and - conditions: - - condition: state - entity_id: "device_tracker.paulus" - state: "home" - - condition: or - conditions: - - condition: state - entity_id: sensor.weather_precip - state: "rain" - - condition: numeric_state - entity_id: "sensor.temperature" - below: 20 +conditions: + - condition: and + conditions: + - condition: state + entity_id: "device_tracker.paulus" + state: "home" + - condition: or + conditions: + - condition: state + entity_id: sensor.weather_precip + state: "rain" + - condition: numeric_state + entity_id: "sensor.temperature" + below: 20 ``` Or in shorthand form: ```yaml -condition: - and: +conditions: + - and: - condition: state entity_id: "device_tracker.paulus" state: "home" @@ -136,22 +136,22 @@ condition: Test multiple conditions in one condition statement. Passes if all embedded conditions are **not** true. ```yaml -condition: - alias: "Paulus not home AND alarm not disarmed" - condition: not - conditions: - - condition: state - entity_id: device_tracker.paulus - state: "home" - - condition: state - entity_id: alarm_control_panel.home_alarm - state: disarmed +conditions: + - alias: "Paulus not home AND alarm not disarmed" + condition: not + conditions: + - condition: state + entity_id: device_tracker.paulus + state: "home" + - condition: state + entity_id: alarm_control_panel.home_alarm + state: "disarmed" ``` The NOT condition also has a shorthand form. The following configuration works the same as the one listed above: ```yaml -condition: +conditions: alias: "Paulus not home AND alarm not disarmed" not: - condition: state @@ -169,12 +169,12 @@ This type of condition attempts to parse the state of the specified entity or th If both `below` and `above` are specified, both tests have to pass. ```yaml -condition: - alias: "Temperature between 17 and 25 degrees" - condition: numeric_state - entity_id: sensor.temperature - above: 17 - below: 25 +conditions: + - alias: "Temperature between 17 and 25 degrees" + condition: numeric_state + entity_id: sensor.temperature + above: 17 + below: 25 ``` You can optionally use a `value_template` to process the value of the state before testing it. @@ -182,13 +182,13 @@ You can optionally use a `value_template` to process the value of the state befo {% raw %} ```yaml -condition: - condition: numeric_state - entity_id: sensor.temperature - above: 17 - below: 25 - # If your sensor value needs to be adjusted - value_template: "{{ float(state.state) + 2 }}" +conditions: + - condition: numeric_state + entity_id: sensor.temperature + above: 17 + below: 25 + # If your sensor value needs to be adjusted + value_template: "{{ float(state.state) + 2 }}" ``` {% endraw %} @@ -197,24 +197,24 @@ It is also possible to test the condition against multiple entities at once. The condition will pass if **all** entities match the thresholds. ```yaml -condition: - condition: numeric_state - entity_id: - - sensor.kitchen_temperature - - sensor.living_room_temperature - below: 18 +conditions: + - condition: numeric_state + entity_id: + - sensor.kitchen_temperature + - sensor.living_room_temperature + below: 18 ``` Alternatively, the condition can test against a state attribute. The condition will pass if the attribute value of the entity matches the thresholds. ```yaml -condition: - condition: numeric_state - entity_id: climate.living_room_thermostat - attribute: temperature - above: 17 - below: 25 +conditions: + - condition: numeric_state + entity_id: climate.living_room_thermostat + attribute: temperature + above: 17 + below: 25 ``` Number helpers (`input_number` entities), `number`, `sensor`, and `zone` entities @@ -222,12 +222,12 @@ that contain a numeric value, can be used in the `above` and `below` options to make the condition more dynamic. ```yaml -condition: - condition: numeric_state - entity_id: climate.living_room_thermostat - attribute: temperature - above: input_number.temperature_threshold_low - below: input_number.temperature_threshold_high +conditions: + - condition: numeric_state + entity_id: climate.living_room_thermostat + attribute: temperature + above: input_number.temperature_threshold_low + below: input_number.temperature_threshold_high ``` ## State condition @@ -235,78 +235,78 @@ condition: Tests if an entity has a specified state. ```yaml -condition: - alias: "Paulus not home for an hour and a bit" - condition: state - entity_id: device_tracker.paulus - state: "not_home" - # optional: Evaluates to true only if state was this for last X time. - for: - hours: 1 - minutes: 10 - seconds: 5 +conditions: + - alias: "Paulus not home for an hour and a bit" + condition: state + entity_id: device_tracker.paulus + state: "not_home" + # optional: Evaluates to true only if state was this for last X time. + for: + hours: 1 + minutes: 10 + seconds: 5 ``` It is also possible to test the condition against multiple entities at once. The condition will pass if **all** entities match the state. ```yaml -condition: - condition: state - entity_id: - - light.kitchen - - light.living_room - state: "on" +conditions: + - condition: state + entity_id: + - light.kitchen + - light.living_room + state: "on" ``` Instead of matching all, it is also possible if one of the entities matches. In the following example the condition will pass if **any** entity matches the state. ```yaml -condition: - condition: state - entity_id: - - binary_sensor.motion_sensor_left - - binary_sensor.motion_sensor_right - match: any - state: "on" +conditions: + - condition: state + entity_id: + - binary_sensor.motion_sensor_left + - binary_sensor.motion_sensor_right + match: any + state: "on" ``` Testing if an entity is matching a set of possible conditions; The condition will pass if the entity matches one of the states given. ```yaml -condition: - condition: state - entity_id: alarm_control_panel.home - state: - - "armed_away" - - "armed_home" +conditions: + - condition: state + entity_id: alarm_control_panel.home + state: + - "armed_away" + - "armed_home" ``` Or, combine multiple entities with multiple states. In the following example, both media players need to be either paused or playing for the condition to pass. ```yaml -condition: - condition: state - entity_id: - - media_player.living_room - - media_player.kitchen - state: - - "playing" - - "paused" +conditions: + - condition: state + entity_id: + - media_player.living_room + - media_player.kitchen + state: + - "playing" + - "paused" ``` Alternatively, the condition can test against a state attribute. The condition will pass if the attribute matches the given state. ```yaml -condition: - condition: state - entity_id: climate.living_room_thermostat - attribute: fan_mode - state: "auto" +conditions: + - condition: state + entity_id: climate.living_room_thermostat + attribute: fan_mode + state: "auto" ``` Finally, the `state` option accepts helper entities (also known as `input_*` @@ -314,10 +314,10 @@ entities). The condition will pass if the state of the entity matches the state of the given helper entity. ```yaml -condition: - condition: state - entity_id: alarm_control_panel.home - state: input_select.guest_mode +conditions: + - condition: state + entity_id: alarm_control_panel.home + state: input_select.guest_mode ``` You can also use templates in the `for` option. @@ -325,13 +325,13 @@ You can also use templates in the `for` option. {% raw %} ```yaml -condition: - condition: state - entity_id: device_tracker.paulus - state: "home" - for: - minutes: "{{ states('input_number.lock_min')|int }}" - seconds: "{{ states('input_number.lock_sec')|int }}" +conditions: + - condition: state + entity_id: device_tracker.paulus + state: "home" + for: + minutes: "{{ states('input_number.lock_min')|int }}" + seconds: "{{ states('input_number.lock_sec')|int }}" ``` {% endraw %} @@ -345,19 +345,19 @@ The `for` template(s) will be evaluated when the condition is tested. The sun state can be used to test if the sun has set or risen. ```yaml -condition: - alias: "Sun up" - condition: state # 'day' condition: from sunrise until sunset - entity_id: sun.sun - state: "above_horizon" +conditions: + - alias: "Sun up" + condition: state # 'day' condition: from sunrise until sunset + entity_id: sun.sun + state: "above_horizon" ``` ```yaml -condition: - alias: "Sun down" - condition: state # from sunset until sunrise - entity_id: sun.sun - state: "below_horizon" +conditions: + - alias: "Sun down" + condition: state # from sunset until sunrise + entity_id: sun.sun + state: "below_horizon" ``` ### Sun elevation condition @@ -370,13 +370,13 @@ For an in-depth explanation of sun elevation, see [sun elevation trigger][sun_el {% raw %} ```yaml -condition: - condition: and # 'twilight' condition: dusk and dawn, in typical locations - conditions: - - condition: template - value_template: "{{ state_attr('sun.sun', 'elevation') < 0 }}" - - condition: template - value_template: "{{ state_attr('sun.sun', 'elevation') > -6 }}" +conditions: + - condition: and # 'twilight' condition: dusk and dawn, in typical locations + conditions: + - condition: template + value_template: "{{ state_attr('sun.sun', 'elevation') < 0 }}" + - condition: template + value_template: "{{ state_attr('sun.sun', 'elevation') > -6 }}" ``` {% endraw %} @@ -384,7 +384,7 @@ condition: {% raw %} ```yaml -condition: +conditions: condition: template # 'night' condition: from dusk to dawn, in typical locations value_template: "{{ state_attr('sun.sun', 'elevation') < -6 }}" ``` @@ -405,16 +405,16 @@ The sunset/sunrise conditions do not work in locations inside the polar circles, This is an example of 1 hour offset before sunset: ```yaml -condition: - condition: sun - after: sunset - after_offset: "-01:00:00" +conditions: + - condition: sun + after: sunset + after_offset: "-01:00:00" ``` This is 'when dark' - equivalent to a state condition on `sun.sun` of `below_horizon`: ```yaml -condition: +conditions: - condition: sun after: sunset before: sunrise @@ -423,7 +423,7 @@ condition: This is 'when light' - equivalent to a state condition on `sun.sun` of `above_horizon`: ```yaml -condition: +conditions: - condition: sun after: sunrise before: sunset @@ -440,10 +440,10 @@ The template condition tests if the [given template][template] renders a value e {% raw %} ```yaml -condition: - alias: "Iphone battery above 50%" - condition: template - value_template: "{{ (state_attr('device_tracker.iphone', 'battery_level')|int) > 50 }}" +conditions: + - alias: "Iphone battery above 50%" + condition: template + value_template: "{{ (state_attr('device_tracker.iphone', 'battery_level')|int) > 50 }}" ``` {% endraw %} @@ -487,13 +487,13 @@ and [`not`](#not-condition) conditions: {% raw %} ```yaml -condition: - condition: or - conditions: - - "{{ is_state('device_tracker.iphone', 'away') }}" - - condition: numeric_state - entity_id: "sensor.temperature" - below: 20 +conditions: + - condition: or + conditions: + - "{{ is_state('device_tracker.iphone', 'away') }}" + - condition: numeric_state + entity_id: "sensor.temperature" + below: 20 ``` {% endraw %} @@ -539,16 +539,16 @@ It's also supported in script or automation `condition` actions: The time condition can test if it is after a specified time, before a specified time or if it is a certain day of the week. ```yaml -condition: - alias: "Time 15~02" - condition: time - # At least one of the following is required. - after: "15:00:00" - before: "02:00:00" - weekday: - - mon - - wed - - fri +conditions: + - alias: "Time 15~02" + condition: time + # At least one of the following is required. + after: "15:00:00" + before: "02:00:00" + weekday: + - mon + - wed + - fri ``` Valid values for `weekday` are `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, `sun`. @@ -565,7 +565,7 @@ or another `sensor` entity containing a timestamp with the "timestamp" device class, can be used instead. ```yaml -condition: +conditions: - alias: "Example referencing a time helper" condition: time after: input_datetime.house_silent_hours_start @@ -586,32 +586,32 @@ date part is fully ignored. The trigger condition can test if an automation was triggered by a certain trigger, identified by the trigger's `id`. ```yaml -condition: - condition: trigger - id: event_trigger +conditions: + - condition: trigger + id: event_trigger ``` For a trigger identified by its index, both a string and integer is allowed: ```yaml -condition: - condition: trigger - id: "0" +conditions: + - condition: trigger + id: "0" ``` ```yaml -condition: - condition: trigger - id: 0 +conditions: + - condition: trigger + id: 0 ``` It is possible to give a list of triggers: ```yaml -condition: - condition: trigger - id: - - event_1_trigger - - event_2_trigger +conditions: + - condition: trigger + id: + - event_1_trigger + - event_2_trigger ``` ## Zone condition @@ -619,35 +619,35 @@ condition: Zone conditions test if an entity is in a certain zone. For zone automation to work, you need to have set up a device tracker platform that supports reporting GPS coordinates. ```yaml -condition: - alias: "Paulus at home" - condition: zone - entity_id: device_tracker.paulus - zone: zone.home +conditions: + - alias: "Paulus at home" + condition: zone + entity_id: device_tracker.paulus + zone: zone.home ``` It is also possible to test the condition against multiple entities at once. The condition will pass if all entities are in the specified zone. ```yaml -condition: - condition: zone - entity_id: - - device_tracker.frenck - - device_tracker.daphne - zone: zone.home +conditions: + - condition: zone + entity_id: + - device_tracker.frenck + - device_tracker.daphne + zone: zone.home ``` Testing if an entity is matching a set of possible zones; The condition will pass if the entity is in one of the zones. ```yaml -condition: - condition: zone - entity_id: device_tracker.paulus - state: - - zone.home - - zone.work +conditions: + - condition: zone + entity_id: device_tracker.paulus + state: + - zone.home + - zone.work ``` Or, combine multiple entities with multiple zones. In the following example, @@ -655,7 +655,7 @@ both entities need to be either in the home or the work zone for the condition to pass. ```yaml -condition: +conditions: condition: zone entity_id: - device_tracker.frenck @@ -670,7 +670,7 @@ condition: {% raw %} ```yaml -condition: +conditions: - condition: numeric_state entity_id: sun.sun value_template: "{{ state.attributes.elevation }}" @@ -700,11 +700,11 @@ For example: ```yaml # This condition will always pass, as it is disabled. -condition: - enabled: false - condition: state - entity_id: sun.sun - state: "above_horizon" +conditions: + - enabled: false + condition: state + entity_id: sun.sun + state: "above_horizon" ``` Conditions can also be disabled based on limited templates or blueprint inputs. @@ -728,7 +728,7 @@ blueprint: trigger_variables: _enable_number: !input input_number - condition: + conditions: - condition: state entity_id: sun.sun state: "above_horizon" diff --git a/source/_docs/scripts/perform-actions.markdown b/source/_docs/scripts/perform-actions.markdown index c51c09924168..ce1120cdd5e5 100644 --- a/source/_docs/scripts/perform-actions.markdown +++ b/source/_docs/scripts/perform-actions.markdown @@ -19,7 +19,8 @@ Perform the action `homeassistant.turn_on` on the {% term entity %} `group.livin ```yaml action: homeassistant.turn_on -entity_id: group.living_room +target: + entity_id: group.living_room ``` ### Targeting areas and devices @@ -51,7 +52,8 @@ You can also specify other parameters beside the entity to target. For example, ```yaml action: light.turn_on -entity_id: group.living_room +target: + entity_id: group.living_room data: brightness: 120 rgb_color: [255, 0, 0] diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown index d43548485192..c83eb0534ab7 100644 --- a/source/_docs/tools/dev-tools.markdown +++ b/source/_docs/tools/dev-tools.markdown @@ -104,10 +104,10 @@ If there is an automation that handles that event, it will be automatically trig ```yaml - alias: "Capture Event" - trigger: - platform: event - event_type: event_light_state_changed - action: + triggers: + - trigger: event + event_type: event_light_state_changed + actions: - action: notify.notify data: message: "Light is turned {{ trigger.event.data.state }}" diff --git a/source/_docs/troubleshooting_general.markdown b/source/_docs/troubleshooting_general.markdown index 07139cc1a304..cb5c31f04469 100644 --- a/source/_docs/troubleshooting_general.markdown +++ b/source/_docs/troubleshooting_general.markdown @@ -30,7 +30,7 @@ Recovery mode loads a minimum set of integrations to allow troubleshooting the c ### Resolution -You need to identify the issue in the configuration files and fix it there. The issue could be caused by something as simple as an invalid YAML file. +You need to identify the issue in the configuration files and fix it there. The issue could be caused by something as simple as an invalid {% term YAML %} file. - If you are running {% term "Home Assistant Operating System" %}, you can install an add-on such as Studio Code Server to edit the configuration file if needed. - If you are still logged in, you can [edit your configuration](/docs/configuration/#editing-configurationyaml). diff --git a/source/_includes/common-tasks/configuration_check.md b/source/_includes/common-tasks/configuration_check.md index 6341f9ba446c..993ef257afa7 100644 --- a/source/_includes/common-tasks/configuration_check.md +++ b/source/_includes/common-tasks/configuration_check.md @@ -9,12 +9,12 @@ After changing configuration or automation files, check if the configuration is 1. Go to {% my profile title="your user profile" %} and enable **Advanced Mode**. 2. Go to {% my server_controls title="**Developer tools** > **YAML**" %} and in the **Configuration validation** section, select the **Check configuration** button. - This is to make sure there are no syntax errors before restarting Home Assistant. - - It checks for valid YAML and valid config structures. + - It checks for valid {% term YAML %} and valid config structures. 3. If you need to do a more comprehensive configuration check, [run the check from the CLI](#to-run-a-configuration-check-from-the-cli). ### Running a configuration check from the CLI -Use the following command to check if the configuration is valid. The command line configuration check validates the YAML files and checks for valid config structures, as well as some other elements. +Use the following command to check if the configuration is valid. The command line configuration check validates the {% term YAML %} files and checks for valid config structures, as well as some other elements. ```bash ha core check diff --git a/source/_includes/installation/container.md b/source/_includes/installation/container.md index aab7e5e754b3..31a7ebf068d4 100644 --- a/source/_includes/installation/container.md +++ b/source/_includes/installation/container.md @@ -112,7 +112,7 @@ In order to use Zigbee or other integrations that require access to devices, you The Home Assistant Container is using an alternative memory allocation library [jemalloc](http://jemalloc.net/) for better memory management and Python runtime speedup. -As jemalloc can cause issues on certain hardware, it can be disabled by passing the environment variable `DISABLE_JEMALLOC` with any value, for example: +As the jemalloc configuration used can cause issues on certain hardware featuring a page size larger than 4K (like some specific ARM64-based SoCs), it can be disabled by passing the environment variable `DISABLE_JEMALLOC` with any value, for example: {% tabbed_block %} diff --git a/source/_integrations/3_day_blinds.markdown b/source/_integrations/3_day_blinds.markdown index 743c554cd76f..1cb0fbe27810 100644 --- a/source/_integrations/3_day_blinds.markdown +++ b/source/_integrations/3_day_blinds.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/acomax.markdown b/source/_integrations/acomax.markdown index 343360682393..c781f3dbe9be 100644 --- a/source/_integrations/acomax.markdown +++ b/source/_integrations/acomax.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/ads.markdown b/source/_integrations/ads.markdown index 99cdeaf23e75..9a0a2a26e107 100644 --- a/source/_integrations/ads.markdown +++ b/source/_integrations/ads.markdown @@ -8,6 +8,7 @@ ha_category: - Light - Sensor - Switch + - Valve ha_release: '0.60' ha_iot_class: Local Push ha_domain: ads @@ -15,12 +16,16 @@ ha_platforms: - binary_sensor - cover - light + - select - sensor - switch + - valve ha_integration_type: integration related: - docs: /docs/configuration/ title: Configuration file +ha_codeowners: + - '@mrpasztoradam' --- The ADS (automation device specification) describes a device-independent and fieldbus independent interface for communication between [Beckhoff](https://www.beckhoff.com/) automation devices running [TwinCAT](https://www.beckhoff.com/en-en/products/automation/twincat/) and other devices implementing this interface. @@ -32,7 +37,10 @@ There is currently support for the following device types within Home Assistant: - [Sensor](#sensor) - [Switch](#switch) - [Cover](#cover) +- [Select](#select) +- [Valve](#valve) + ## Configuration To enable ADS, add the following lines to your {% term "`configuration.yaml`" %} file. @@ -60,6 +68,7 @@ ip_address: type: string {% endconfiguration %} + ## Action The ADS integration will register the `write_by_name` action allowing you to write a value to a variable on your ADS device. @@ -139,7 +148,7 @@ name: ## Sensor -The `ads` sensor platform allows reading the value of a numeric variable on your ADS device. The variable can be of type *INT*, *UINT*, *BYTE*, *DINT* or *UDINT*. +The `ads` sensor platform allows reading the value of a numeric variable on your ADS device. The variable can be of type *BOOL*, *BYTE*, *INT*, *UINT*, *SINT*, *USINT*, *DINT*, *UDINT*, *WORD*, *DWORD*, *REAL*, or *LREAL*. To use your ADS device, you first have to set up your [ADS hub](#configuration) and then add the following to your {% term "`configuration.yaml`" %} file: @@ -160,7 +169,7 @@ adsvar: type: string adstype: required: false - description: The datatype of the ADS variable, possible values are int, uint, byte, dint, udint. + description: The datatype of the ADS variable, possible values are bool, byte, int, uint, sint, usint, dint, udint, word, dword, real and lreal. default: int type: string name: @@ -253,3 +262,56 @@ device_class: description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend. type: device_class {% endconfiguration %} + +## Select + +The `ads` select entity accesses an ENUM (int) variable on the connected ADS device. The variable is identified by its name. You have to set up a corresponding ENUM in the TwinCAT PLC. It is recommended to use explicit values starting from `0`. + +```yaml +TYPE E_SampleA : +( + e1 := 0, + e2 := 1, + e3 := 2, +); +END_TYPE +``` + +## Valve + +The `ads` valve entity accesses a boolean variable on the connected ADS device. The variable is identified by its name. + +To use your ADS device, you first have to set up your [ADS hub](#configuration) and then add the following to your {% term "`configuration.yaml`" %} +file: + +```yaml +# Example configuration.yaml entry +select: + - platform: ads + adsvar: MAIN.eMyEnum + options: + - "Off" + - "Setup" + - "Automatic" + - "Manual" + - "Guest" + - "Error" +valve: + - platform: ads + adsvar: MAIN.bValveControl +``` + +{% configuration %} +adsvar: + required: true + description: The name of the variable which you want to access on the ADS device. + type: string +options: + required: true + description: The available options to select from. + type: string +name: + required: false + description: An identifier for the valve in the frontend. + type: string +{% endconfiguration %} diff --git a/source/_integrations/airgradient.markdown b/source/_integrations/airgradient.markdown index cfc40711a6b2..34539dbfc51e 100644 --- a/source/_integrations/airgradient.markdown +++ b/source/_integrations/airgradient.markdown @@ -4,6 +4,7 @@ description: Instructions on how to setup AirGradient devices in Home Assistant. ha_category: - Health - Sensor + - Update ha_config_flow: true ha_release: 2024.6 ha_iot_class: Local Polling diff --git a/source/_integrations/alarm_control_panel.template.markdown b/source/_integrations/alarm_control_panel.template.markdown index 7bd048f92ae0..47bc9d9b3f65 100644 --- a/source/_integrations/alarm_control_panel.template.markdown +++ b/source/_integrations/alarm_control_panel.template.markdown @@ -10,6 +10,7 @@ ha_quality_scale: internal ha_codeowners: - '@home-assistant/core' ha_domain: template +ha_config_flow: true ha_platforms: - alarm_control_panel ha_integration_type: helper @@ -30,7 +31,9 @@ This can simplify the GUI and make it easier to write automations. In optimistic mode, the alarm control panel will immediately change state after every command. Otherwise, the alarm control panel will wait for state confirmation from the template. Try to enable it, if experiencing incorrect operation. -## Configuration +{% include integrations/config_flow.md %} + +## YAML Configuration To enable a template alarm control panel in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/alert.markdown b/source/_integrations/alert.markdown index 236933574d7d..41f30d117c85 100644 --- a/source/_integrations/alert.markdown +++ b/source/_integrations/alert.markdown @@ -285,12 +285,12 @@ but you will still receive the done message. ```yaml - alias: "Telegram callback to stop alerts for garage door" - trigger: - - platform: event + triggers: + - trigger: event event_type: telegram_callback event_data: data: "/garage_acknowledge" - action: + actions: - action: alert.turn_off target: entity_id: alert.garage_door diff --git a/source/_integrations/alexa.markdown b/source/_integrations/alexa.markdown index fd6a60df095e..cc090c7d003c 100644 --- a/source/_integrations/alexa.markdown +++ b/source/_integrations/alexa.markdown @@ -11,7 +11,7 @@ ha_codeowners: - '@ochlocracy' - '@jbouwh' ha_domain: alexa -ha_integration_type: integration +ha_integration_type: system ha_platforms: - diagnostics --- diff --git a/source/_integrations/amazon_polly.markdown b/source/_integrations/amazon_polly.markdown index b0c8284c4d6d..9e552cb010ed 100644 --- a/source/_integrations/amazon_polly.markdown +++ b/source/_integrations/amazon_polly.markdown @@ -54,7 +54,7 @@ profile_name: region_name: description: The region identifier to connect to. required: false - type: [string, list] + type: string default: us-east-1 text_type: description: "Whether to interpret messages as `text` or as [`ssml`](https://docs.aws.amazon.com/polly/latest/dg/ssml.html) by default." @@ -76,7 +76,7 @@ sample_rate: type: string default: 22050 for MP3 and Ogg Vorbis, 16000 for pcm engine: - description: "Override the default engine. Can be either of `standard` or `neural`. See Amazon documentation for compatible regions and voices." + description: "Override the default engine. Can be either of [`standard`](https://docs.aws.amazon.com/polly/latest/dg/standard-voices.html), [`neural`](https://docs.aws.amazon.com/polly/latest/dg/neural-voices.html), [`long-form`](https://docs.aws.amazon.com/polly/latest/dg/long-form-voices.html) or [`generative`](https://docs.aws.amazon.com/polly/latest/dg/generative-voices.html). See Amazon documentation for compatible regions and voices." required: false type: string default: standard @@ -127,6 +127,21 @@ Say with break: Amazon Polly ``` + +Say with specific voice and engine as options: + +```yaml +- service: tts.amazon_polly_say + data: + message: "Hello from Amazon Polly" + entity_id: media_player.living_room + language: en-GB + options: + voice: Amy + engine: generative +``` + + ## Advanced usage Amazon Polly supports accented bilingual voices and you may find that you'd prefer the voice you like be slowed down, or speeded up. If the speed of the voice is a concern, Amazon Polly provides the ability to modify this using SSML tags. First enable SSML in configuration: diff --git a/source/_integrations/amcrest.markdown b/source/_integrations/amcrest.markdown index 3a729edae661..10008bb9b6f7 100644 --- a/source/_integrations/amcrest.markdown +++ b/source/_integrations/amcrest.markdown @@ -434,16 +434,16 @@ Using this {% term trigger %} in an {% term automation %} will allow you to dete ```yaml # Example automations.yaml entry -alias: Doorbell Pressed +alias: "Doorbell Pressed" description: "Trigger when Amcrest Button Press Event Fires" -trigger: - - platform: event +triggers: + - trigger: event event_type: amcrest event_data: event: "CallNoAnswered" payload: action: "Start" -action: +actions: - type: flash entity_id: light.living_room domain: light diff --git a/source/_integrations/amp_motorization.markdown b/source/_integrations/amp_motorization.markdown index a57b076d08b9..6f38ce235f2a 100644 --- a/source/_integrations/amp_motorization.markdown +++ b/source/_integrations/amp_motorization.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/androidtv.markdown b/source/_integrations/androidtv.markdown index 8f1ba56ac349..bb6e1aeac1f7 100644 --- a/source/_integrations/androidtv.markdown +++ b/source/_integrations/androidtv.markdown @@ -146,12 +146,12 @@ The `androidtv.adb_command` action allows you to send either keys or ADB shell c In an [action](/getting-started/automation-action/) of your [automation setup](/getting-started/automation/) it could look like this: ```yaml -action: - action: androidtv.adb_command - target: - entity_id: media_player.androidtv_tv_living_room - data: - command: "HOME" +actions: + - action: androidtv.adb_command + target: + entity_id: media_player.androidtv_tv_living_room + data: + command: "HOME" ``` Available key commands include: diff --git a/source/_integrations/aps.markdown b/source/_integrations/aps.markdown new file mode 100644 index 000000000000..6c26486f4e47 --- /dev/null +++ b/source/_integrations/aps.markdown @@ -0,0 +1,20 @@ +--- +title: Arizona Public Service (APS) +description: Get energy usage from Arizona Public Service (APS) using the Opower integration +ha_category: + - Energy + - Sensor +ha_release: 2023.8 +ha_domain: aps +ha_integration_type: virtual +ha_supporting_domain: opower +ha_supporting_integration: Opower +ha_codeowners: + - '@tronikos' +ha_config_flow: true +ha_platforms: + - sensor +ha_iot_class: Cloud Polling +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/aqara.markdown b/source/_integrations/aqara.markdown new file mode 100644 index 000000000000..a418c8b7650b --- /dev/null +++ b/source/_integrations/aqara.markdown @@ -0,0 +1,24 @@ +--- +title: Aqara +description: Connect and control your Aqara Matter devices using the Matter integration +ha_release: '2024.10' +ha_iot_class: Local Push +ha_category: + - Lock +ha_domain: aqara +ha_integration_type: brand +works_with: + - matter +ha_platforms: + - lock +ha_iot_standard: matter +ha_brand: true +--- + +[Aqara](https://www.aqara.com/) is a member of the Works with Home Assistant partner program for their Matter products. Aqara is committed to making sure their products are up-to-date and ready to use in Home Assistant. + +Aqara Matter devices work locally and integrate seamlessly with the Matter integration in Home Assistant. As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant. + +{% my add_matter_device badge domain=page.ha_domain %} + +[Learn more about Matter in Home Assistant.](/integrations/matter/) \ No newline at end of file diff --git a/source/_integrations/assist_pipeline.markdown b/source/_integrations/assist_pipeline.markdown index 34f5984e3159..581228ce2b23 100644 --- a/source/_integrations/assist_pipeline.markdown +++ b/source/_integrations/assist_pipeline.markdown @@ -9,7 +9,7 @@ ha_codeowners: - '@balloob' - '@synesthesiam' ha_domain: assist_pipeline -ha_integration_type: integration +ha_integration_type: system ha_quality_scale: internal ha_platforms: - select diff --git a/source/_integrations/assist_satellite.markdown b/source/_integrations/assist_satellite.markdown new file mode 100644 index 000000000000..4b5e4f805830 --- /dev/null +++ b/source/_integrations/assist_satellite.markdown @@ -0,0 +1,45 @@ +--- +title: Assist Satellite +description: Remote satellites that use Assist. +ha_category: + - Voice +ha_release: '2024.10' +ha_codeowners: + - '@home-assistant/core' + - '@synesthesiam' +ha_domain: assist_satellite +ha_integration_type: entity +ha_quality_scale: internal +--- + +This is an {% term integration %} for remote satellites that use [Assist](/voice_control/) to control and interact with Home Assistant. This allows other integrations to represent these satellites in a consistent manner. + +{% include integrations/building_block_integration.md %} + +## Actions + +An Assist satellite entity exposes additional actions to remotely control the satellite in automations or scripts. These actions can be created via the UI, but are +also available in YAML (examples below). + +### Action `assist_satellite.announce` + +The {% my developer_call_service service="assist_satellite.announce" %} action announces a message or media id on the satellite. If a message is to be announced, it will first be converted to a media id using the [text-to-speech](/integrations/tts) system of the satellite's configured [pipeline](/voice_control/voice_remote_local_assistant/). + + +{% my developer_call_service badge service="assist_satellite.announce" %} + +Examples in YAML: + +```yaml +action: assist_satellite.announce +target: + entity_id: assist_satellite.my_entity + message: "Dinner is ready!" +``` + +```yaml +action: assist_satellite.announce +target: + entity_id: assist_satellite.my_entity + media_id: ITEM_ID +``` diff --git a/source/_integrations/asuswrt.markdown b/source/_integrations/asuswrt.markdown index 881b7cfc4911..ec46bc5dfb19 100644 --- a/source/_integrations/asuswrt.markdown +++ b/source/_integrations/asuswrt.markdown @@ -42,9 +42,18 @@ These sensors are automatically created and associated to the router device: - Upload sensor (unit_of_measurement: Gigabyte - *Daily accumulation*) - Upload Speed sensor (unit_of_measurement: Mbit/s) - Load average sensors (1min, 5min, 15min) -- Temperature sensors (2ghz, 5ghz, cpu). NB: only temperature sensors available on your router will be created +- Temperature sensors (2 GHz, 5 GHz, 6 GHz, CPU). Only temperature sensors available on your router will be created. -Only `Connected devices sensor` is created in status **enabled**, all other sensors are created in status **disabled**. To use them, simply **enable** on the devices page. +If the integration is configured to use the http(s) protocol, also the following sensors will be available: + +- CPU usage sensors (percentage for total and single core) +- Memory usage sensor (percentage) +- Free memory sensor (Megabyte) +- Memory used sensor (Megabyte) +- Last boot sensor (Timestamp) +- Uptime sensor (HH:MM:SS) + +Only `Connected devices sensor` and `Last boot sensor` are created in status **enabled**, all other sensors are created in status **disabled**. To use them, simply **enable** on the devices page. {% include integrations/option_flow.md %} {% configuration_basic %} diff --git a/source/_integrations/august.markdown b/source/_integrations/august.markdown index 68e33ed0f1cc..1b34cfd40bfd 100644 --- a/source/_integrations/august.markdown +++ b/source/_integrations/august.markdown @@ -147,17 +147,17 @@ Using the lock operation sensors, you can detect when a user operates a lock and - id: "1583706446906" alias: "joe_doe_front_door_operate" description: John Doe locks or unlocks the Front Door - trigger: - - entity_id: sensor.front_door_operator - platform: state - to: John Doe - condition: + triggers: + - trigger: state + entity_id: sensor.front_door_operator + to: "John Doe" + conditions: - condition: template value_template: "{{ not state_attr('sensor.front_door_operator', 'remote') }}" - action: - - data: {} + actions: + - action: camera.turn_off entity_id: camera.inside - action: camera.turn_off + ``` {% endraw %} diff --git a/source/_integrations/autarco.markdown b/source/_integrations/autarco.markdown index 339efdcf55f1..379d8aa27fc1 100644 --- a/source/_integrations/autarco.markdown +++ b/source/_integrations/autarco.markdown @@ -41,3 +41,16 @@ Gain insight into how much energy an inverter produces. The integration will cre - AC output power (W) - AC output energy total (kWh) + +### Battery + +If you have a battery connected to your system, you can monitor the battery status and see how much energy it charges or discharges. + +- Power flow (W) - Positive values indicate charging, negative values indicate discharging +- State of charge (%) +- Discharged energy today (kWh) +- Discharged energy this month (kWh) +- Discharged energy total (kWh) +- Charged energy today (kWh) +- Charged energy this month (kWh) +- Charged energy total (kWh) diff --git a/source/_integrations/azure_devops.markdown b/source/_integrations/azure_devops.markdown index 39013b176e7b..114004d3be24 100644 --- a/source/_integrations/azure_devops.markdown +++ b/source/_integrations/azure_devops.markdown @@ -33,4 +33,5 @@ This integration provides a sensor for Azure DevOps: - Latest build queue time - How long the latest build was queued. - Latest build start time - The time when the latest build actually started. - Latest build finish time - The time when the latest build finished. -- Latest build URL - The URL to the latest build. +- Latest build URL - The URL to the latest build. +- Work item count - The number of work items for each work item type and state in the project. diff --git a/source/_integrations/azure_service_bus.markdown b/source/_integrations/azure_service_bus.markdown index 2de31c694bd8..4d7140890606 100644 --- a/source/_integrations/azure_service_bus.markdown +++ b/source/_integrations/azure_service_bus.markdown @@ -81,20 +81,20 @@ See the example below for how an automation trigger translates to a message on t ```yaml automation: - alias: "Sunset Service Bus message" - trigger: - platform: sun - event: sunset - action: - action: notify.test_queue - data: - message: "Sun is going down" - title: "Good evening" + triggers: + - trigger: sun + event: sunset + actions: + - action: notify.test_queue data: - sun_direction: "Down" - custom_field: 123 - custom_object: - trigger_more: true - explain: "It's starting to get dark" + message: "Sun is going down" + title: "Good evening" + data: + sun_direction: "Down" + custom_field: 123 + custom_object: + trigger_more: true + explain: "It's starting to get dark" ``` The message that can be retrieved from a queue or topic subscription: diff --git a/source/_integrations/backup.markdown b/source/_integrations/backup.markdown index eddde8a6e0d8..3a4b2acc437f 100644 --- a/source/_integrations/backup.markdown +++ b/source/_integrations/backup.markdown @@ -51,12 +51,12 @@ at 3 AM: ```yaml automation: - alias: "Backup Home Assistant every night at 3 AM" - trigger: - platform: time - at: "03:00:00" - action: - alias: "Create backup now" - action: backup.create + triggers: + - trigger: time + at: "03:00:00" + actions: + - alias: "Create backup now" + action: backup.create ``` ## Restoring a backup diff --git a/source/_integrations/bayesian.markdown b/source/_integrations/bayesian.markdown index d5163843a0b9..2b8b61afa72c 100644 --- a/source/_integrations/bayesian.markdown +++ b/source/_integrations/bayesian.markdown @@ -125,6 +125,10 @@ observations: ## Full examples +These are a number of worked examples which you may find helpful for each of the state types. + +### State + The following is an example for the `state` observation platform. ```yaml @@ -163,6 +167,8 @@ binary_sensor: to_state: "ac" ``` +### Numeric State + Next up an example which targets the `numeric_state` observation platform, as seen in the configuration it requires `below` and/or `above` instead of `to_state`. @@ -181,7 +187,9 @@ binary_sensor: below: 50 ``` -Finally, here's an example for `template` observation platform, as seen in the configuration it requires `value_template`. This template will evaluate to true if the device tracker `device_tracker.paulus` shows `not_home` and it last changed its status more than 5 minutes ago. +### Template + +Here's an example for `template` observation platform, as seen in the configuration it requires `value_template`. This template will evaluate to true if the device tracker `device_tracker.paulus` shows `not_home` and it last changed its status more than 5 minutes ago. {% raw %} @@ -202,3 +210,66 @@ binary_sensor: ``` {% endraw %} + +### Multiple state and numeric entries per entity + +Lastly, an example illustrates how to configure Bayesian when there are more than two states of interest and several possible numeric ranges. When an entity can hold more than 2 values of interest (numeric ranges or states), then you may wish to specify probabilities for each possible value. Once you have specified more than one, Bayesian cannot infer anything about states or numeric values that are unspecified, like it usually does, so it is recommended that all possible values are included. As above, the `prob_given_true`s of all the possible states should sum to 1, as should the `prob_given_false`s. If a value that has not been specified is observed, then the observation will be ignored as it would be if the entity were `UNKNOWN` or `UNAVAILABLE`. + +When more than one range is specified, if a value falls on `below`, it will be included with the range that lists it in `below`. `below` then means "below or equal to". This is not true when only a single range is specified, where both `above` and `below` do not include "equal to". + +This is an example sensor that can detect if the bins have been left on the side of the road and need to be brought closer to the house. It combines a theoretical presence sensor that gives a numeric signal strength and an API sensor from local government that can have 3 possible states: `due` when collection is due in the next 24 hours, `collected` when collection has happened in the last 24 hours, and `not_due` at other times. + +```yaml +# Example configuration.yaml entry +binary_sensor: + name: "Bins need bringing in" + platform: "bayesian" + prior: 0.14 # bins are left out for usually about one day a week + probability_threshold: 0.5 + observations: + - platform: "numeric_state" + entity_id: "sensor.signal_strength" + prob_given_true: 0.01 # if the bins are out and need bringing in there is only a 1% chance we will get a strong signal of above 10 + prob_given_false: 0.3 # if the bins are not out, we still tend not to get a signal this strong + above: 10 + - platform: "numeric_state" + entity_id: "sensor.signal_strength" + prob_given_true: 0.02 + prob_given_false: 0.5 #if the bins are not out, we often get a signal this strong + above: 5 + below: 10 + - platform: "numeric_state" + entity_id: "sensor.signal_strength" + prob_given_true: 0.07 + prob_given_false: 0.1 + above: 0 + below: 5 + - platform: "numeric_state" + entity_id: "sensor.signal_strength" + prob_given_true: 0.3 + prob_given_false: 0.07 + above: -10 + below: 0 + - platform: "numeric_state" + entity_id: "sensor.signal_strength" + prob_given_true: 0.6 #if the bins are out, we often get a signal this weak or even weaker + prob_given_false: 0.03 + below: -10 + # then lets say we want to combine this with an imaginary sensor.bin_collection which reads a local government API that can have one of three values (collected, due, not due) + - platform: "state" + entity_id: "sensor.bin_collection" + prob_given_true: 0.8 # If the bins need bringing in, usually it's because they've just been collected + prob_given_false: 0.05 # + to_state: "collected" + - platform: "state" + entity_id: "sensor.bin_collection" + prob_given_true: 0.05 # If the bins need bringing in, then the sensor.bin_collection shouldn't be 'due' + prob_given_false: 0.11 # The sensor will be 'due' for about 1 day a week (the 24 hours before collection) + to_state: "due" + - platform: "state" + entity_id: "sensor.bin_collection" + prob_given_true: 0.15 #All the prob_given_true should add to 1 + prob_given_false: 0.84 # All the prob_given_false should add to 1 + to_state: "not due" +``` +To achieve a similar result for multiple `template` observations targeting a single entity, write your templates to return `True` or `None` rather than `True` or `False`. diff --git a/source/_integrations/binary_sensor.rest.markdown b/source/_integrations/binary_sensor.rest.markdown index 1d6eef7f6a95..27ea8469bb5b 100644 --- a/source/_integrations/binary_sensor.rest.markdown +++ b/source/_integrations/binary_sensor.rest.markdown @@ -16,8 +16,9 @@ The binary sensor has support for GET and POST requests. _Tip:_ If you want to create multiple `sensors` using the same endpoint, use the [RESTful](/integrations/rest) configuration instructions. -The JSON messages can contain different values like `1`, `"1"`, -`TRUE`, `true`, `on`, or `open`. If the value is nested then use a +If the endpoint returns one of the values of these pairs: `0`/`1`, +`"0"`/`"1"`, `FALSE`/`TRUE`, `false`/`true`, `off`/`on` or `closed`/`open` +it can be used as-is. If the return value differs, use a [template](/docs/configuration/templating/#processing-incoming-data). If the endpoint returns XML with the `text/xml`, `application/xml`, or `application/xhtml+xml` content type, it will automatically be converted diff --git a/source/_integrations/binary_sensor.xiaomi_aqara.markdown b/source/_integrations/binary_sensor.xiaomi_aqara.markdown index fa76c4353de7..08a9a3547f74 100644 --- a/source/_integrations/binary_sensor.xiaomi_aqara.markdown +++ b/source/_integrations/binary_sensor.xiaomi_aqara.markdown @@ -39,16 +39,16 @@ The requirement is that you have setup the [`xiaomi aqara` integration](/integra ```yaml - alias: "If there is motion and it's dark turn on the gateway light" - trigger: - platform: state - entity_id: binary_sensor.motion_sensor_158d000xxxxxc2 - from: "off" - to: "on" - condition: - condition: numeric_state - entity_id: sensor.illumination_34ce00xxxx11 - below: 300 - action: + triggers: + - trigger: state + entity_id: binary_sensor.motion_sensor_158d000xxxxxc2 + from: "off" + to: "on" + conditions: + - condition: numeric_state + entity_id: sensor.illumination_34ce00xxxx11 + below: 300 + actions: - action: light.turn_on target: entity_id: light.gateway_light_34ce00xxxx11 @@ -58,14 +58,14 @@ The requirement is that you have setup the [`xiaomi aqara` integration](/integra target: entity_id: automation.MOTION_OFF - alias: "If there no motion for 5 minutes turn off the gateway light" - trigger: - platform: state - entity_id: binary_sensor.motion_sensor_158d000xxxxxc2 - from: "on" - to: "off" - for: - minutes: 5 - action: + triggers: + - trigger: state + entity_id: binary_sensor.motion_sensor_158d000xxxxxc2 + from: "on" + to: "off" + for: + minutes: 5 + actions: - action: light.turn_off target: entity_id: light.gateway_light_34ce00xxxx11 @@ -78,42 +78,42 @@ The requirement is that you have setup the [`xiaomi aqara` integration](/integra ```yaml - alias: "If the window is open turn off the radiator" - trigger: - platform: state - entity_id: binary_sensor.door_window_sensor_158d000xxxxxc2 - from: "off" - to: "on" - action: - action: climate.set_operation_mode - target: - entity_id: climate.livingroom - data: - operation_mode: "Off" + triggers: + - trigger: state + entity_id: binary_sensor.door_window_sensor_158d000xxxxxc2 + from: "off" + to: "on" + actions: + - action: climate.set_operation_mode + target: + entity_id: climate.livingroom + data: + operation_mode: "Off" - alias: "If the window is closed for 5 minutes turn on the radiator again" - trigger: - platform: state - entity_id: binary_sensor.door_window_sensor_158d000xxxxxc2 - from: "on" - to: "off" - for: - minutes: 5 - action: - action: climate.set_operation_mode - target: - entity_id: climate.livingroom - data: - operation_mode: "Smart schedule" + triggers: + - trigger: state + entity_id: binary_sensor.door_window_sensor_158d000xxxxxc2 + from: "on" + to: "off" + for: + minutes: 5 + actions: + - action: climate.set_operation_mode + target: + entity_id: climate.livingroom + data: + operation_mode: "Smart schedule" - alias: "Notify if door is opened when away" - trigger: - platform: state - entity_id: binary_sensor.door_window_sensor_15xxxxxxc9xx6b - from: "off" - to: "on" - condition: + triggers: + - trigger: state + entity_id: binary_sensor.door_window_sensor_15xxxxxxc9xx6b + from: "off" + to: "on" + conditions: - condition: state entity_id: group.family state: "not_home" - action: + actions: - action: notify.notify_person data: message: "The door has been opened" @@ -123,16 +123,16 @@ The requirement is that you have setup the [`xiaomi aqara` integration](/integra ```yaml - alias: "Send notification on fire alarm" - trigger: - platform: state - entity_id: binary_sensor.smoke_sensor_158d0001574899 - from: "off" - to: "on" - action: + triggers: + - trigger: state + entity_id: binary_sensor.smoke_sensor_158d0001574899 + from: "off" + to: "on" + actions: - action: notify.html5 data: - title: Fire alarm! - message: Fire/Smoke detected! + title: "Fire alarm!" + message: "Fire/Smoke detected!" - action: xiaomi_aqara.play_ringtone data: gw_mac: xxxxxxxxxxxx @@ -146,15 +146,15 @@ The requirement is that you have setup the [`xiaomi aqara` integration](/integra ```yaml - alias: "Send notification on gas alarm" - trigger: - platform: state - entity_id: binary_sensor.natgas_sensor_158dxxxxxxxxxx - from: "off" - to: "on" - action: + triggers: + - trigger: state + entity_id: binary_sensor.natgas_sensor_158dxxxxxxxxxx + from: "off" + to: "on" + actions: - action: notify.html5 data: - title: Gas alarm! + title: "Gas alarm!" message: "Gas with a density of {{ state_attr('binary_sensor.natgas_sensor_158dxxxxxxxxxx', 'density') }} detected." ``` @@ -166,40 +166,40 @@ As indicated in the table on top of this page there are 3 versions of the button ```yaml - alias: "Toggle dining light on single press" - trigger: - platform: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.switch_158d000xxxxxc2 - click_type: single - action: - action: switch.toggle - target: - entity_id: switch.wall_switch_left_158d000xxxxx01 + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: single + actions: + - action: switch.toggle + target: + entity_id: switch.wall_switch_left_158d000xxxxx01 - alias: "Toggle couch light on double click" - trigger: - platform: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.switch_158d000xxxxxc2 - click_type: double - action: - action: switch.toggle - target: - entity_id: switch.wall_switch_right_158d000xxxxx01 + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: double + actions: + - action: switch.toggle + target: + entity_id: switch.wall_switch_right_158d000xxxxx01 - alias: "Let a dog bark on long press" - trigger: - platform: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.switch_158d000xxxxxc2 - click_type: long_click_press - action: - action: xiaomi_aqara.play_ringtone - data: - gw_mac: xxxxxxxxxxxx - ringtone_id: 8 - ringtone_vol: 8 + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: long_click_press + actions: + - action: xiaomi_aqara.play_ringtone + data: + gw_mac: xxxxxxxxxxxx + ringtone_id: 8 + ringtone_vol: 8 ``` #### Xiaomi Cube @@ -208,65 +208,65 @@ Available events are `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swi ```yaml - alias: "Cube event flip90" - trigger: - platform: event - event_type: xiaomi_aqara.cube_action - event_data: - entity_id: binary_sensor.cube_15xxxxxxxxxxxx - action_type: flip90 - action: + triggers: + - trigger: event + event_type: xiaomi_aqara.cube_action + event_data: + entity_id: binary_sensor.cube_15xxxxxxxxxxxx + action_type: flip90 + actions: - action: light.turn_on target: entity_id: light.gateway_light_28xxxxxxxxxx data: color_name: "springgreen" - alias: "Cube event flip180" - trigger: - platform: event - event_type: xiaomi_aqara.cube_action - event_data: - entity_id: binary_sensor.cube_15xxxxxxxxxxxx - action_type: flip180 - action: + triggers: + - trigger: event + event_type: xiaomi_aqara.cube_action + event_data: + entity_id: binary_sensor.cube_15xxxxxxxxxxxx + action_type: flip180 + actions: - action: light.turn_on target: entity_id: light.gateway_light_28xxxxxxxxxx data: color_name: "darkviolet" - alias: "Cube event move" - trigger: - platform: event - event_type: xiaomi_aqara.cube_action - event_data: - entity_id: binary_sensor.cube_15xxxxxxxxxxxx - action_type: move - action: + triggers: + - trigger: event + event_type: xiaomi_aqara.cube_action + event_data: + entity_id: binary_sensor.cube_15xxxxxxxxxxxx + action_type: move + actions: - action: light.turn_on target: entity_id: light.gateway_light_28xxxxxxxxxx data: color_name: "gold" - alias: "Cube event tap_twice" - trigger: - platform: event - event_type: xiaomi_aqara.cube_action - event_data: - entity_id: binary_sensor.cube_15xxxxxxxxxxxx - action_type: tap_twice - action: + triggers: + - trigger: event + event_type: xiaomi_aqara.cube_action + event_data: + entity_id: binary_sensor.cube_15xxxxxxxxxxxx + action_type: tap_twice + actions: - action: light.turn_on target: entity_id: light.gateway_light_28xxxxxxxxxx data: color_name: "deepskyblue" - alias: "Cube event shake_air" - trigger: - platform: event - event_type: xiaomi_aqara.cube_action - event_data: - entity_id: binary_sensor.cube_15xxxxxxxxxxxx - action_type: shake_air - action: + triggers: + - trigger: event + event_type: xiaomi_aqara.cube_action + event_data: + entity_id: binary_sensor.cube_15xxxxxxxxxxxx + action_type: shake_air + actions: - action: light.turn_on target: entity_id: light.gateway_light_28xxxxxxxxxx @@ -282,62 +282,62 @@ The Aqara Wireless Switch is available as single-key and double-key version. Eac ```yaml - alias: "Decrease brightness of the gateway light" - trigger: - platform: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.wall_switch_left_158xxxxxxxxx12 - click_type: single - action: - action: light.turn_on - target: - entity_id: light.gateway_light_34xxxxxxxx13 - data: - brightness: >- - {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') %} - {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') - 60 >= 10 %} - {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') - 60}} + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.wall_switch_left_158xxxxxxxxx12 + click_type: single + actions: + - action: light.turn_on + target: + entity_id: light.gateway_light_34xxxxxxxx13 + data: + brightness: >- + {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') %} + {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') - 60 >= 10 %} + {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') - 60}} + {% else %} + {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness')}} + {% endif %} {% else %} - {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness')}} + 10 {% endif %} - {% else %} - 10 - {% endif %} - alias: "Increase brightness of the gateway light" - trigger: - platform: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.wall_switch_right_158xxxxxxxxx12 - click_type: single - action: - action: light.turn_on - target: - entity_id: light.gateway_light_34xxxxxxxx13 - data: - brightness: >- - {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') %} - {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') + 60 <= 255 %} - {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') + 60}} + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.wall_switch_right_158xxxxxxxxx12 + click_type: single + actions: + - action: light.turn_on + target: + entity_id: light.gateway_light_34xxxxxxxx13 + data: + brightness: >- + {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') %} + {% if state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') + 60 <= 255 %} + {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness') + 60}} + {% else %} + {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness')}} + {% endif %} {% else %} - {{state_attr('light.gateway_light_34xxxxxxxx13', 'brightness')}} + 10 {% endif %} - {% else %} - 10 - {% endif %} - alias: "Turn off the gateway light" - trigger: - platform: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.wall_switch_both_158xxxxxxxxx12 - click_type: both - action: - action: light.turn_off - target: - entity_id: light.gateway_light_34xxxxxxxx13 + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.wall_switch_both_158xxxxxxxxx12 + click_type: both + actions: + - action: light.turn_off + target: + entity_id: light.gateway_light_34xxxxxxxx13 ``` {% endraw %} @@ -348,25 +348,25 @@ This automation toggles the living room lamp on vibration/tilt. ```yaml - alias: "Turn on Living Room Lamp on vibration" - trigger: - platform: event - event_type: xiaomi_aqara.movement - event_data: - entity_id: binary_sensor.vibration_xxxx000000 - movement_type: vibrate - action: - action: light.toggle - target: - entity_id: light.living_room_lamp + triggers: + - trigger: event + event_type: xiaomi_aqara.movement + event_data: + entity_id: binary_sensor.vibration_xxxx000000 + movement_type: vibrate + actions: + - action: light.toggle + target: + entity_id: light.living_room_lamp - alias: "Turn on Living Room Lamp on tilt" - trigger: - platform: event - event_type: xiaomi_aqara.movement - event_data: - entity_id: binary_sensor.vibration_xxxx000000 - movement_type: tilt - action: - action: light.toggle - target: - entity_id: light.living_room_lamp + triggers: + - trigger: event + event_type: xiaomi_aqara.movement + event_data: + entity_id: binary_sensor.vibration_xxxx000000 + movement_type: tilt + actions: + - action: light.toggle + target: + entity_id: light.living_room_lamp ``` diff --git a/source/_integrations/blink.markdown b/source/_integrations/blink.markdown index e8168832005e..ddfe6fc833b5 100644 --- a/source/_integrations/blink.markdown +++ b/source/_integrations/blink.markdown @@ -133,16 +133,15 @@ This example automation will arm your blink sync module to detect motion on any Here, this example assumes your blink module is named `My Sync Module` and that you have [device trackers](/integrations/device_tracker) set up for presence detection. ```yaml -- id: arm_blink_when_away - alias: "Arm Blink When Away" - trigger: - platform: state - entity_id: all - to: "not_home" - action: - action: alarm_control_panel.alarm_arm_away - target: - entity_id: alarm_control_panel.blink_my_sync_module +- alias: "Arm Blink When Away" + triggers: + - trigger: state + entity_id: all + to: "not_home" + actions: + - action: alarm_control_panel.alarm_arm_away + target: + entity_id: alarm_control_panel.blink_my_sync_module ``` ### Disarm Blink when home @@ -150,16 +149,15 @@ Here, this example assumes your blink module is named `My Sync Module` and that Similar to the previous example, this automation will disarm blink when arriving home. ```yaml -- id: disarm_blink_when_home - alias: "Disarm Blink When Home" - trigger: - platform: state - entity_id: all - to: "home" - action: - action: alarm_control_panel.alarm_disarm - target: - entity_id: alarm_control_panel.blink_my_sync_module +- alias: "Disarm Blink When Home" + triggers: + - trigger: state + entity_id: all + to: "home" + actions: + - action: alarm_control_panel.alarm_disarm + target: + entity_id: alarm_control_panel.blink_my_sync_module ``` ### Save most recent video locally when motion detected @@ -171,13 +169,12 @@ The following example assumes your camera's name (in the Blink app) is `My Camer {% raw %} ```yaml -- id: save_blink_video_on_motion - alias: "Save Blink Video on Motion" - trigger: - platform: state - entity_id: binary_sensor.blink_my_camera_motion_detected - to: "on" - action: +- alias: "Save Blink Video on Motion" + triggers: + - trigger: state + entity_id: binary_sensor.blink_my_camera_motion_detected + to: "on" + actions: - action: blink.save_video target: entity_id: camera.blink_my_camera @@ -200,12 +197,11 @@ The file will be saved to `/tmp/videos/YYYYMMDD_HHmmSS_MyCamera.mp4`. The file name of the downloaded video file is not configurable. ```yaml -- id: save_recent_clips_from_my_camera - alias: "Save Recent Clips from My Camera" - trigger: - - platform: time_pattern +- alias: "Save Recent Clips from My Camera" + triggers: + - trigger: time_pattern minutes: /3 - action: + actions: - action: blink.save_recent_clips target: entity_id: camera.my_camera diff --git a/source/_integrations/bliss_automation.markdown b/source/_integrations/bliss_automation.markdown index 4e11f761b730..086c1ca88ca6 100644 --- a/source/_integrations/bliss_automation.markdown +++ b/source/_integrations/bliss_automation.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/bloc_blinds.markdown b/source/_integrations/bloc_blinds.markdown index 2b8563404a18..0995a8d02792 100644 --- a/source/_integrations/bloc_blinds.markdown +++ b/source/_integrations/bloc_blinds.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/bmw_connected_drive.markdown b/source/_integrations/bmw_connected_drive.markdown index d78b5afca3c9..5ab08d0bd655 100644 --- a/source/_integrations/bmw_connected_drive.markdown +++ b/source/_integrations/bmw_connected_drive.markdown @@ -79,17 +79,17 @@ The name of the action is `notify.bmw_connected_drive_`. ```yaml ... -action: - action: notify.bmw_connected_drive_ - data: - message: The name of the POI # this is shown on the iDrive dashboard +actions: + - action: notify.bmw_connected_drive_ data: - latitude: 48.177024 - longitude: 11.559107 - street: Street name # Optional - city: City name # Optional - postal_code: Postal Code # Optional - country: Country # Optional + message: The name of the POI # this is shown on the iDrive dashboard + data: + latitude: 48.177024 + longitude: 11.559107 + street: Street name # Optional + city: City name # Optional + postal_code: Postal Code # Optional + country: Country # Optional ``` ## Lock diff --git a/source/_integrations/brel_home.markdown b/source/_integrations/brel_home.markdown index 7c01250f9bc1..e204927d9aa2 100644 --- a/source/_integrations/brel_home.markdown +++ b/source/_integrations/brel_home.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/bring.markdown b/source/_integrations/bring.markdown index 4e7487d31906..860b9ee60e6a 100644 --- a/source/_integrations/bring.markdown +++ b/source/_integrations/bring.markdown @@ -12,6 +12,8 @@ ha_codeowners: ha_domain: bring ha_integration_type: service ha_platforms: + - diagnostics + - sensor - todo related: - docs: /integrations/todo @@ -30,6 +32,13 @@ For authentication, the integration requires the `email` and `password` you used {% include integrations/config_flow.md %} +## Sensors + +- **Urgent:** Shows the number of items tagged with the **Urgent** badge on the shopping list. Completed items are excluded. +- **On occasion:** Displays the count of items marked with the **If convenient** badge. +- **Discount only:** Indicates the number of items tagged with the **Offer** badge. +- **Region & Language:** The sensor can be used for diagnostics. If everything is set correctly, it will display the selected region for the shopping list. If it shows **Unknown**, the region has not been set properly in the **Bring!** app. + ## Actions You can use the actions from the [to-do list](/integrations/todo/) to create, update, or delete items on your Bring! shopping lists. @@ -57,12 +66,12 @@ The **Bring** integration offers an action to send push notifications to the Bri ```yaml ... -action: - action: bring.send_message - target: - entity_id: todo.bring_shoppinglist - data: - message: going_shopping +actions: + - action: bring.send_message + target: + entity_id: todo.bring_shoppinglist + data: + message: going_shopping ``` ### Sending an urgent message notification @@ -71,11 +80,11 @@ Note that for the notification type `urgent_message` the attribute `item` is **r ```yaml ... -action: - action: bring.send_message - target: - entity_id: todo.bring_shoppinglist - data: - message: urgent_message - item: Cilantro +actions: + - action: bring.send_message + target: + entity_id: todo.bring_shoppinglist + data: + message: urgent_message + item: Cilantro ``` diff --git a/source/_integrations/bsblan.markdown b/source/_integrations/bsblan.markdown index dfee654e41ac..15fd9cf5fc94 100644 --- a/source/_integrations/bsblan.markdown +++ b/source/_integrations/bsblan.markdown @@ -3,6 +3,7 @@ title: BSB-Lan description: Instructions on how to integrate BSBLan device into Home Assistant. ha_category: - Climate + - Sensor ha_release: '0.110' ha_iot_class: Local Polling ha_config_flow: true @@ -12,31 +13,32 @@ ha_domain: bsblan ha_platforms: - climate - diagnostics + - sensor ha_integration_type: device --- The **BSB-Lan** {% term integration %} integrates [BSBLan](https://github.com/fredlcore/BSB-LAN) devices into Home Assistant. -BSBLan is a device that is made by `Frederik Holst` and `Ulf Dieckmann` for documentation and with +BSBLan is a device that is made by `Frederik Holst` and with the help of many other contributors. -The new board v3 is designed for an Arduino Due with an Ethernet-Shield for web-based controlling +The board v3 is designed for an Arduino Due with an Ethernet-Shield for web-based controlling of heating systems such as `Elco Thision`, `Brötje` and similar systems. +Also, available is an ESP32 version of the board. It can interface with the heating system over Boiler-System-Bus, Local Process Bus and PPS (Punkt-zu-Punkt Schnittstelle) -For more information of which system it supports, have a look at their [documentation](https://1coderookie.github.io/BSB-LPB-LAN_EN/). +For more information of which system it supports, take a look at their [documentation](https://docs.bsb-lan.de). {% include integrations/config_flow.md %} +{% include integrations/config_flow.md %}, For authentication HTTP authentication using a username and password, or using a passkey is supported. Use either one. -For more documentation of the BSBLan device, check the [manual](https://1coderookie.github.io/BSB-LPB-LAN_EN/). +For more documentation of the BSBLan device, check the [manual](https://docs.bsb-lan.de). -To see a more detailed listing of the reported systems which are successfully used with BSB-LAN please follow the corresponding link: +To see a more detailed listing of the reported systems which are successfully used with BSB-LAN, please follow the corresponding link: -- [`Brötje`](https://1coderookie.github.io/BSB-LPB-LAN_EN/chap03.html#311-broetje) -- [`Elco`](https://1coderookie.github.io/BSB-LPB-LAN_EN/chap03.html#312-elco) -- [`Other Manufacturers (e.g. Fujitsu, Atlantic, Weishaupt)`](https://1coderookie.github.io/BSB-LPB-LAN_EN/chap03.html#313-other-manufacturers) +[Supported heating systems](https://docs.bsb-lan.de/supported_heating_systems.html) -The integration is tested with the stable firmware version `1.00`. A newer firmware versions will not work, because the parameters are changed of the specific info that is needed. -Please use the latest release. [release 1.0](https://github.com/fredlcore/BSB-LAN/releases/tag/v1.0) +The integration is tested with the stable firmware version `3.1.6-20230327101530`. A newer firmware version may not work because the API could have changed. +Please use this release. [release 3.1](https://github.com/fredlcore/BSB-LAN/releases/tag/v3.1) diff --git a/source/_integrations/bthome.markdown b/source/_integrations/bthome.markdown index be6e82cce254..b095d9dab210 100644 --- a/source/_integrations/bthome.markdown +++ b/source/_integrations/bthome.markdown @@ -8,6 +8,7 @@ ha_release: 2022.9 ha_iot_class: Local Push ha_codeowners: - '@Ernst79' + - '@thecode' ha_domain: bthome ha_config_flow: true ha_platforms: diff --git a/source/_integrations/button.markdown b/source/_integrations/button.markdown index 460ed210238a..ac62dcc0ccf0 100644 --- a/source/_integrations/button.markdown +++ b/source/_integrations/button.markdown @@ -45,10 +45,10 @@ Because the {% term state %} of a button entity in Home Assistant is a timestamp means we can use it in our automations. For example: ```yaml -trigger: - - platform: state +triggers: + - trigger: state entity_id: button.my_button -action: +actions: - action: notify.frenck data: message: "My button has been pressed!" diff --git a/source/_integrations/calendar.markdown b/source/_integrations/calendar.markdown index 0956559d32f8..3a440c1f457a 100644 --- a/source/_integrations/calendar.markdown +++ b/source/_integrations/calendar.markdown @@ -63,8 +63,8 @@ An example of a calendar {% term trigger %} in YAML: ```yaml automation: - - trigger: - - platform: calendar + - triggers: + - trigger: calendar # Possible values: start, end event: start # The calendar entity_id @@ -98,12 +98,12 @@ This example automation consists of: {% raw %} ```yaml automation: - - alias: Calendar notification - trigger: - - platform: calendar + - alias: "Calendar notification" + triggers: + - trigger: calendar event: start entity_id: calendar.personal - action: + actions: - action: persistent_notification.create data: message: >- @@ -125,26 +125,28 @@ This example consists of: {% raw %} ```yaml automation: - - alias: Front Light Schedule - trigger: - - platform: calendar + - alias: "Front Light Schedule" + triggers: + - trigger: calendar event: start entity_id: calendar.device_automation - - platform: calendar + - trigger: calendar event: end entity_id: calendar.device_automation - condition: + conditions: - condition: template value_template: "{{ 'Front Lights' in trigger.calendar_event.summary }}" - action: + actions: - if: - "{{ trigger.event == 'start' }}" then: - action: light.turn_on - entity_id: light.front + target: + entity_id: light.front else: - action: light.turn_off - entity_id: light.front + target: + entity_id: light.front ``` {% endraw %} diff --git a/source/_integrations/cambridge_audio.markdown b/source/_integrations/cambridge_audio.markdown new file mode 100644 index 000000000000..5afd9171bc2a --- /dev/null +++ b/source/_integrations/cambridge_audio.markdown @@ -0,0 +1,67 @@ +--- +title: Cambridge Audio +description: Instructions on how to integrate Cambridge Audio Receivers into Home Assistant. +ha_category: + - Media player +ha_release: '2024.10' +ha_iot_class: Local Push +ha_domain: cambridge_audio +ha_platforms: + - diagnostics + - media_player +ha_codeowners: + - '@noahhusby' +ha_config_flow: true +ha_integration_type: device +ha_zeroconf: true +--- + +The **Cambridge Audio** {% term integration %} allows you to control all receivers and streamers that support the StreamMagic app. + +The integration automatically discovers all enabled zones and sources. Each zone is added as a media player device with the enabled sources available as inputs. Media information and controls (such as play, pause, skip) are supported if the selected source reports it. + +## Supported devices + +This integration allows you to connect the following devices: + +- Cambridge Audio Evo 75 +- Cambridge Audio Evo 150 +- Cambridge Audio CXN +- Cambridge Audio CXN (v2) +- Cambridge Audio CXR120 +- Cambridge Audio CXR200 +- Cambridge Audio 851N +- Cambridge Audio MXN10 +- Cambridge Audio AXN10 + +Older, RS-232 serial-based amplifiers like the [CXA series](https://www.cambridgeaudio.com/usa/en/products/hi-fi/cx-series-2/cxa81) +use a different protocol and are not currently supported. + +{% include integrations/config_flow.md %} + +{% configuration_basic %} +Host: + description: The IP address of your device can be found by navigating to the device on the [StreamMagic app](https://www.cambridgeaudio.com/usa/en/products/streammagic) and selecting `Settings` → `IP address`. + required: true + type: string +{% endconfiguration_basic %} + +## Troubleshooting + +### The buttons to skip, shuffle, and repeat the track are missing + +Control functionality depends on the source / service that is currently selected. +The interface automatically sets which controls are available depending on which source is selected. + +### The ability to change volume is missing + +Volume control is only supported on all-in-one amps, or streamers with pre-amp mode. +Likely, the device is not configured to be in pre-amp mode. +This can be changed by navigating to the IP address of the device in a web browser, +or selecting settings in the StreamMagic app and setting **Pre-Amp** to **On**. + +### Turning on the device doesn't work from Home Assistant + +Cambridge Audio devices come with ECO mode enabled by default, which disables the network interface when +the device is powered down. This can be changed by navigating to the IP address of the device in a web browser, +or selecting settings in the StreamMagic app and setting **Standby Mode** to **Network standby**. diff --git a/source/_integrations/camera.markdown b/source/_integrations/camera.markdown index 55c136754d49..7467a440339c 100644 --- a/source/_integrations/camera.markdown +++ b/source/_integrations/camera.markdown @@ -74,12 +74,12 @@ Play a live stream from a camera to selected media player(s). Requires [`stream` For example, the following action in an automation would send an `hls` live stream to your chromecast. ```yaml -action: - action: camera.play_stream - target: - entity_id: camera.yourcamera - data: - media_player: media_player.chromecast +actions: + - action: camera.play_stream + target: + entity_id: camera.yourcamera + data: + media_player: media_player.chromecast ``` ### Action `record` @@ -102,12 +102,12 @@ For example, the following action in an automation would take a recording from " {% raw %} ```yaml -action: - action: camera.record - target: - entity_id: camera.yourcamera - data: - filename: '/tmp/{{ entity_id.name }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.mp4' +actions: + - action: camera.record + target: + entity_id: camera.yourcamera + data: + filename: '/tmp/{{ entity_id.name }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.mp4' ``` {% endraw %} @@ -128,12 +128,12 @@ For example, the following action in an automation would take a snapshot from "y {% raw %} ```yaml -action: - action: camera.snapshot - target: - entity_id: camera.yourcamera - data: - filename: '/tmp/yourcamera_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg' +actions: + - action: camera.snapshot + target: + entity_id: camera.yourcamera + data: + filename: '/tmp/yourcamera_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg' ``` {% endraw %} diff --git a/source/_integrations/cast.markdown b/source/_integrations/cast.markdown index 61e35fc30b01..466ea28004ec 100644 --- a/source/_integrations/cast.markdown +++ b/source/_integrations/cast.markdown @@ -39,11 +39,11 @@ Home Assistant has its own Cast application to show the Home Assistant UI on any cast_downstairs_on_kitchen: alias: "Show Downstairs on kitchen" sequence: - - data: + - action: cast.show_lovelace_view + data: dashboard_path: lovelace-cast entity_id: media_player.kitchen view_path: downstairs - action: cast.show_lovelace_view ``` {% important %} @@ -242,7 +242,8 @@ Optional: 'cast_bubbleupnp_to_my_chromecast': alias: "Cast a video to My Chromecast using BubbleUPNP" sequence: - - target: + - action: media_player.play_media + target: entity_id: media_player.my_chromecast data: media_content_type: cast @@ -252,7 +253,6 @@ Optional: "media_id": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", "media_type": "video/mp4" }' - action: media_player.play_media ``` ### [NRK Radio](https://radio.nrk.no) @@ -277,7 +277,8 @@ Example values to cast the item at 'cast_supla_to_my_chromecast': alias: "Cast supla to My Chromecast" sequence: - - target: + - action: media_player.play_media + target: entity_id: media_player.my_chromecast data: media_content_type: cast @@ -376,7 +377,6 @@ Example values to cast the item at "app_name": "supla", "media_id": "3601824" }' - action: media_player.play_media ``` ### YouTube @@ -399,7 +399,8 @@ Optional: 'cast_youtube_to_my_chromecast': alias: "Cast YouTube to My Chromecast" sequence: - - target: + - action: media_player.play_media + target: entity_id: media_player.my_chromecast data: media_content_type: cast @@ -408,7 +409,6 @@ Optional: "app_name": "youtube", "media_id": "dQw4w9WgXcQ" }' - action: media_player.play_media ``` ## Troubleshooting automatic discovery diff --git a/source/_integrations/cisco_webex_teams.markdown b/source/_integrations/cisco_webex_teams.markdown index 1c7b5301ebd7..08f8a50f8083 100644 --- a/source/_integrations/cisco_webex_teams.markdown +++ b/source/_integrations/cisco_webex_teams.markdown @@ -65,59 +65,59 @@ Here are the automations for the above screenshot: # Rich Text Example 1. # Show a one line message with a red banner - alias: "Notify On Build Failing" - trigger: - - platform: webhook + triggers: + - trigger: webhook webhook_id: build_failed - action: - action: notify.cisco_webex_teams_notify - data: - message: "
Build 0.89.5 compile failed." + actions: + - action: notify.cisco_webex_teams_notify + data: + message: "
Build 0.89.5 compile failed." # Rich Text Example 2. # Show a title and multi-line message with a yellow banner, # with lists, a person mention and a link - alias: "Notify On Build Unstable" - trigger: - - platform: webhook + triggers: + - trigger: webhook webhook_id: build_unstable - action: - action: notify.cisco_webex_teams_notify - data: - title: "Build 0.89.6 is unstable." - message: "
Version 0.89.6 failed verifications. - -
    -
  • test_osx -
  • test_win_lint - -
  • ... and 4 more. -
-

<@personEmail:sparkbotjeeves@sparkbot.io>

-

View Test Report

- " + actions: + - action: notify.cisco_webex_teams_notify + data: + title: "Build 0.89.6 is unstable." + message: "
Version 0.89.6 failed verifications. + +
    +
  • test_osx +
  • test_win_lint + +
  • ... and 4 more. +
+

<@personEmail:sparkbotjeeves@sparkbot.io>

+

View Test Report

+ " # Rich Text Example 3. # Show a title and multi-line message with a blue banner, # with lists, a person mention and a link - alias: "Notify On Build Passing" - trigger: - - platform: webhook + triggers: + - trigger: webhook webhook_id: build_passed - action: - action: notify.cisco_webex_teams_notify - data: - title: "✅ Version 0.89.7 passed all tests and deployed to production!" - message: "
Version 0.89.7 passed all verifications. - -
    -
  • test_cov -
  • test_osx -
  • test_win -
  • test_linux -
  • ... and 45 more. -
- " + actions: + - action: notify.cisco_webex_teams_notify + data: + title: "✅ Version 0.89.7 passed all tests and deployed to production!" + message: "
Version 0.89.7 passed all verifications. + +
    +
  • test_cov +
  • test_osx +
  • test_win +
  • test_linux +
  • ... and 45 more. +
+ " ``` The following is a list of the allowed html tags and attributes: diff --git a/source/_integrations/clicksend_tts.markdown b/source/_integrations/clicksend_tts.markdown index baac22ad4f6b..8d75574c0425 100644 --- a/source/_integrations/clicksend_tts.markdown +++ b/source/_integrations/clicksend_tts.markdown @@ -61,10 +61,10 @@ ClickSend is a notify platform and thus can be controlled by calling the notify ```yaml alias: "The sun has set" -trigger: - - platform: sun +triggers: + - trigger: sun event: sunset -action: +actions: - action: notify.clicksend_tts data: message: "The sun has set" diff --git a/source/_integrations/climate.markdown b/source/_integrations/climate.markdown index 4867622b0040..576a4b7faec2 100644 --- a/source/_integrations/climate.markdown +++ b/source/_integrations/climate.markdown @@ -52,10 +52,10 @@ Turn auxiliary heater on/off for climate device ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: climate.set_aux_heat target: entity_id: climate.kitchen @@ -78,10 +78,10 @@ reflecting a situation where the climate device is set to save energy. For examp ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: climate.set_preset_mode target: entity_id: climate.kitchen @@ -106,10 +106,10 @@ Set target temperature of climate device ```yaml ### Set temperature to 24 in heat mode automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: climate.set_temperature target: entity_id: climate.kitchen @@ -121,10 +121,10 @@ automation: ```yaml ### Set temperature range to 20 to 24 in heat_cool mode automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: climate.set_temperature target: entity_id: climate.kitchen @@ -147,10 +147,10 @@ Set target humidity of climate device ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: climate.set_humidity target: entity_id: climate.kitchen @@ -171,10 +171,10 @@ Set fan operation for climate device ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: climate.set_fan_mode target: entity_id: climate.kitchen @@ -195,10 +195,10 @@ Set climate device's HVAC mode ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: climate.set_hvac_mode target: entity_id: climate.kitchen @@ -219,10 +219,10 @@ Set swing operation mode for climate device ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: climate.set_swing_mode target: entity_id: climate.kitchen diff --git a/source/_integrations/color_extractor.markdown b/source/_integrations/color_extractor.markdown index 8460369aef48..dcfd5c1de82a 100644 --- a/source/_integrations/color_extractor.markdown +++ b/source/_integrations/color_extractor.markdown @@ -29,7 +29,7 @@ Passing the key `color_extract_url` to the {% term action %} call will download | `entity_id` | `light.shelf_leds` | The RGB capable light we'll set the color of | {% important %} -Ensure any [external URLs](/integrations/homeassistant/#allowlist_external_urls) or [external files](/docs/integrations/homeassistant/#allowlist_external_dirs) are authorized for use. You will receive error messages if this {% term integration %} is not allowed access to these external resources. +Ensure any [external URLs](/integrations/homeassistant/#allowlist_external_urls) or [external files](/integrations/homeassistant/#allowlist_external_dirs) are authorized for use. You will receive error messages if this {% term integration %} is not allowed access to these external resources. {% endimportant %} ### URL Action @@ -54,11 +54,11 @@ Example usage in an {% term automation %}, taking the album art present on a Chr #automation.yaml - alias: "Chromecast to Shelf Lights" - trigger: - - platform: state + triggers: + - trigger: state entity_id: media_player.chromecast - action: + actions: - action: color_extractor.turn_on data_template: color_extract_url: "{{ states.media_player.chromecast.attributes.entity_picture }}" @@ -71,11 +71,11 @@ With a nicer transition period of 5 seconds and setting brightness to 100% each #automation.yaml - alias: "Nicer Chromecast to Shelf Lights" - trigger: - - platform: state + triggers: + - trigger: state entity_id: media_player.chromecast - action: + actions: - action: color_extractor.turn_on data_template: color_extract_url: "{{ states.media_player.chromecast.attributes.entity_picture }}" diff --git a/source/_integrations/comelit.markdown b/source/_integrations/comelit.markdown index 1864b138f10f..c0cc86022a72 100644 --- a/source/_integrations/comelit.markdown +++ b/source/_integrations/comelit.markdown @@ -17,6 +17,7 @@ ha_codeowners: ha_iot_class: Local Polling ha_platforms: - alarm_control_panel + - binary_sensor - climate - cover - humidifier @@ -38,4 +39,4 @@ There is support for the following platform types within Home Assistant: ## Alarm control panel -The integration will create an alarm entity for each area and a sensor for each zone. +The integration will create an alarm entity for each area. Additionally, it will create a sensor and a presence detection binary sensor for each zone, enhancing monitoring capabilities. diff --git a/source/_integrations/counter.markdown b/source/_integrations/counter.markdown index 3a819288d9b3..72ec128c7f11 100644 --- a/source/_integrations/counter.markdown +++ b/source/_integrations/counter.markdown @@ -147,17 +147,16 @@ system_log: ```yaml # Example configuration.yaml entry automation: -- id: 'errorcounterautomation' - alias: "Error Counting Automation" - trigger: - platform: event - event_type: system_log_event - event_data: - level: ERROR - action: - action: counter.increment - target: - entity_id: counter.error_counter +- alias: "Error Counting Automation" + triggers: + - trigger: event + event_type: system_log_event + event_data: + level: ERROR + actions: + - action: counter.increment + target: + entity_id: counter.error_counter counter: error_counter: diff --git a/source/_integrations/cover.markdown b/source/_integrations/cover.markdown index 488f519b56da..b0d8000d2214 100644 --- a/source/_integrations/cover.markdown +++ b/source/_integrations/cover.markdown @@ -75,10 +75,10 @@ Available actions: `cover.open_cover`, `cover.close_cover`, `cover.stop_cover`, ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: cover.open_cover target: entity_id: cover.demo @@ -97,10 +97,10 @@ Set cover position of one or multiple covers. ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: cover.set_cover_position target: entity_id: cover.demo @@ -121,10 +121,10 @@ Set cover tilt position of one or multiple covers. ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: cover.set_cover_tilt_position target: entity_id: cover.demo diff --git a/source/_integrations/cover.template.markdown b/source/_integrations/cover.template.markdown index f39088e13b84..c24773e2854e 100644 --- a/source/_integrations/cover.template.markdown +++ b/source/_integrations/cover.template.markdown @@ -291,11 +291,11 @@ script: automation: - alias: "Close covers at night" - trigger: - - platform: sun + triggers: + - trigger: sun event: sunset offset: "+00:30:00" - action: + actions: - action: cover.set_cover_position target: entity_id: cover.cover_group diff --git a/source/_integrations/deako.markdown b/source/_integrations/deako.markdown new file mode 100644 index 000000000000..462290d0df2a --- /dev/null +++ b/source/_integrations/deako.markdown @@ -0,0 +1,36 @@ +--- +title: Deako Smart Lighting +description: Instructions on how to integrate Deako Smart Lighting into Home Assistant. +ha_category: + - Switch +ha_iot_class: Local Polling +ha_release: "2024.10" +ha_domain: deako +ha_config_flow: true +ha_platforms: + - light +ha_codeowners: + - '@sebirdman' + - '@balake' + - '@deakolights' +ha_zeroconf: true +ha_integration_type: integration +--- + +The **Deako Smart Lighting** integration allows you to control your [Deako](https://deako.com) devices from Home Assistant. + +## Prerequisites + +For this integration to work, your devices must be listed **online**, viewable in the Deako app. Once devices have been onboarded and are online, the Deako app is no longer needed. Devices will continue to work without the app. + +{% include integrations/config_flow.md %} + +## Supported devices + +- all smart Deako devices + +Features not currently supported: + +- Deako groups +- Deako scenes + diff --git a/source/_integrations/deconz.markdown b/source/_integrations/deconz.markdown index a40eb61f9be7..44005df3412e 100644 --- a/source/_integrations/deconz.markdown +++ b/source/_integrations/deconz.markdown @@ -194,26 +194,26 @@ If you have a Zigbee remote that is not yet supported you can request support fo automation: - alias: "'Toggle lamp from dimmer'" initial_state: "on" - trigger: - - platform: event + triggers: + - trigger: event event_type: deconz_event event_data: id: remote_control_1 event: 1002 - action: + actions: - action: light.toggle target: entity_id: light.lamp - alias: "Increase brightness of lamp from dimmer" initial_state: "on" - trigger: - - platform: event + triggers: + - trigger: event event_type: deconz_event event_data: id: remote_control_1 event: 2002 - action: + actions: - action: light.turn_on target: entity_id: light.lamp @@ -224,13 +224,13 @@ automation: - alias: "Decrease brightness of lamp from dimmer" initial_state: "on" - trigger: - - platform: event + triggers: + - trigger: event event_type: deconz_event event_data: id: remote_control_1 event: 3002 - action: + actions: - action: light.turn_on target: entity_id: light.lamp @@ -241,13 +241,13 @@ automation: - alias: 'Turn lamp on when turning cube clockwise' initial_state: "on" - trigger: - - platform: event + triggers: + - trigger: event event_type: deconz_event event_data: id: remote_control_1 gesture: 7 - action: + actions: - action: light.turn_on target: entity_id: light.lamp @@ -262,13 +262,13 @@ automation: ```yaml automation: - alias: "React to color wheel changes" - trigger: - - platform: event + triggers: + - trigger: event event_type: deconz_event event_data: id: tint_remote_1 event: 6002 - action: + actions: - action: light.turn_on data: xy_color: @@ -287,12 +287,11 @@ Note: Requires `on: true` to change color while the Philips Hue bulb is off. If ```yaml automation: - alias: "Flash Hue Bulb with Doorbell Motion" - mode: single - trigger: - - platform: state + triggers: + - trigger: state entity_id: binary_sensor.doorbell_motion to: "on" - action: + actions: - action: deconz.configure data: entity: light.hue_lamp diff --git a/source/_integrations/derivative.markdown b/source/_integrations/derivative.markdown index 38675da77c24..07fc32a3744b 100644 --- a/source/_integrations/derivative.markdown +++ b/source/_integrations/derivative.markdown @@ -21,7 +21,7 @@ ha_integration_type: helper The derivative ([Wikipedia](https://en.wikipedia.org/wiki/Derivative)) integration creates a sensor that estimates the derivative of the values provided by another sensor (the **source sensor**). Derivative sensors are updated upon changes of the **source sensor**. -For sensors that reset to zero after a power interruption and need a "non-negative derivative", such as bandwidth counters in routers, or rain gauges, consider using the [Utility Meter](/integrations/utility_meter/) integration instead. Otherwise, each reset will register a significant change in the derivative sensor. +For sensors that reset to zero after a power interruption and need a "non-negative derivative", such as bandwidth counters in routers, or rain gauges, you can now use this integration directly. Ensure that the input sensor has a `total_increasing` state class, as this is necessary for the integration to handle resets correctly without registering significant changes in the derivative sensor. {% include integrations/config_flow.md %} {% configuration_basic %} diff --git a/source/_integrations/device_automation.markdown b/source/_integrations/device_automation.markdown index 03264ab4032a..708e5b7df7e6 100644 --- a/source/_integrations/device_automation.markdown +++ b/source/_integrations/device_automation.markdown @@ -20,14 +20,13 @@ Device automations are meant to be configured via the UI. Example: ```yaml -- id: "123456789" - alias: "Light turns off" - trigger: - - platform: device +- alias: "Light turns off" + triggers: + - trigger: device device_id: 7a92d5ee74014a0b86903fc669b0bcd6 domain: light type: turn_off entity_id: light.bowl - action: + actions: - action: camera.turn_off ``` diff --git a/source/_integrations/devolo_home_network.markdown b/source/_integrations/devolo_home_network.markdown index 3c32f23cd682..7389f469dd96 100755 --- a/source/_integrations/devolo_home_network.markdown +++ b/source/_integrations/devolo_home_network.markdown @@ -77,6 +77,9 @@ Currently the following device types within Home Assistant are supported. - PLC PHY rates - Updates every 5 minutes - PHY rates to/from the device attached to the router are enabled by default. PHY rates between all other devices are disabled by default. +- Last restart of the device + - Updates every 15 seconds + - Is disabled by default because it's of lower interest to most users. ### Switch diff --git a/source/_integrations/dexcom.markdown b/source/_integrations/dexcom.markdown index 33238cc7ff10..a31e6d65f251 100644 --- a/source/_integrations/dexcom.markdown +++ b/source/_integrations/dexcom.markdown @@ -44,18 +44,18 @@ If you have a sensor session running, and once you have enabled the Dexcom integ ## Example automation ```yaml -- id: '1234567890123' - alias: "overnight_low_kitchen_lights" - description: Turn on the lights in the kitchen if my blood sugar drops low overnight - trigger: - - below: '65' - entity_id: sensor.dexcom_YOUR_USERNAME_glucose_value - platform: numeric_state - condition: time - after: "22:00:00" - before: "06:00:00" - action: - - action: light.turn_on - target: - entity_id: light.kitchen +- alias: "Overnight low kitchen lights" + description: "Turn on the lights in the kitchen if my blood sugar drops low overnight" + triggers: + - trigger: numeric_state + entity_id: sensor.dexcom_YOUR_USERNAME_glucose_value + below: 65 + conditions: + - condition: time + after: "22:00:00" + before: "06:00:00" + actions: + - action: light.turn_on + target: + entity_id: light.kitchen ``` diff --git a/source/_integrations/dialogflow.markdown b/source/_integrations/dialogflow.markdown index 72b27600714a..c210706199f0 100644 --- a/source/_integrations/dialogflow.markdown +++ b/source/_integrations/dialogflow.markdown @@ -108,7 +108,7 @@ intent_script: TurnLights: speech: text: Turning {{ Room }} lights {{ OnOff }} - action: + actions: - action: notify.pushbullet data: message: Someone asked via apiai to turn {{ Room }} lights {{ OnOff }} diff --git a/source/_integrations/diaz.markdown b/source/_integrations/diaz.markdown index 644eb0ab524c..9fd52c8ebab7 100644 --- a/source/_integrations/diaz.markdown +++ b/source/_integrations/diaz.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/doods.markdown b/source/_integrations/doods.markdown index 51bae78c2b22..b781c3b7c9c9 100644 --- a/source/_integrations/doods.markdown +++ b/source/_integrations/doods.markdown @@ -215,11 +215,11 @@ image_processing: ```yaml # Example advanced automations.yaml entry - alias: "Doods scanning" - trigger: - - platform: state + triggers: + - trigger: state entity_id: - binary_sensor.driveway - action: + actions: - action: image_processing.scan target: entity_id: image_processing.doods_camera_driveway diff --git a/source/_integrations/doorbird.markdown b/source/_integrations/doorbird.markdown index 52de7a2ce322..6d8f769487a7 100644 --- a/source/_integrations/doorbird.markdown +++ b/source/_integrations/doorbird.markdown @@ -104,11 +104,11 @@ The example automation below shows how to turn on a light when somebody presses ```yaml - alias: "Doorbird Ring" - trigger: - platform: event - event_type: doorbird_driveway_gate_somebody_pressed_the_button - action: - action: light.turn_on + triggers: + - trigger: event + event_type: doorbird_driveway_gate_somebody_pressed_the_button + actions: + - action: light.turn_on target: entity_id: light.side_entry_porch ``` diff --git a/source/_integrations/dooya.markdown b/source/_integrations/dooya.markdown index 552f79c02616..af7be4033f1a 100644 --- a/source/_integrations/dooya.markdown +++ b/source/_integrations/dooya.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/dovado.markdown b/source/_integrations/dovado.markdown index 25e6c7eadefc..d26b55fd3856 100644 --- a/source/_integrations/dovado.markdown +++ b/source/_integrations/dovado.markdown @@ -76,14 +76,14 @@ This is a notify platform and thus can be controlled by calling the notify actio # Example automation notification entry automation: - alias: "The sun has set" - trigger: - platform: sun - event: sunset - action: - action: notify.dovado - data: - message: "The sun has set" - target: "+14151234567" + triggers: + - trigger: sun + event: sunset + actions: + - action: notify.dovado + data: + message: "The sun has set" + target: "+14151234567" ``` ## Sensor diff --git a/source/_integrations/downloader.markdown b/source/_integrations/downloader.markdown index 87eb8328ad4f..2b2639d9f417 100644 --- a/source/_integrations/downloader.markdown +++ b/source/_integrations/downloader.markdown @@ -51,12 +51,12 @@ Along with the event the following payload parameters are available: ```yaml - alias: "Download Failed Notification" - trigger: - platform: event - event_type: downloader_download_failed - action: - action: persistent_notification.create - data: - message: "{{trigger.event.data.filename}} download failed" - title: "Download Failed" + triggers: + - trigger: event + event_type: downloader_download_failed + actions: + - action: persistent_notification.create + data: + message: "{{trigger.event.data.filename}} download failed" + title: "Download Failed" ``` diff --git a/source/_integrations/dsmr.markdown b/source/_integrations/dsmr.markdown index dd07b4598447..50009f3d4ec9 100644 --- a/source/_integrations/dsmr.markdown +++ b/source/_integrations/dsmr.markdown @@ -9,7 +9,6 @@ ha_config_flow: true ha_domain: dsmr ha_codeowners: - '@Robbie1221' - - '@frenck' ha_platforms: - diagnostics - sensor diff --git a/source/_integrations/duke_energy.markdown b/source/_integrations/duke_energy.markdown new file mode 100644 index 000000000000..dcc84ccbb5e7 --- /dev/null +++ b/source/_integrations/duke_energy.markdown @@ -0,0 +1,39 @@ +--- +title: Duke Energy +description: Instructions on how to integrate Duke Energy within Home Assistant. +ha_category: + - Energy +ha_release: '2024.10' +ha_iot_class: Cloud Polling +ha_codeowners: + - '@hunterjm' +ha_domain: duke_energy +ha_config_flow: true +ha_integration_type: integration +--- + +The **Duke Energy** {% term integration %} allows you to get energy information from [Duke Energy](https://www.duke-energy.com/). + +## Supported devices + +Currently, this integration only supports electric meters. + +## Prerequisites + +You need a Duke Energy account to use this integration. During installation of the integration, you will need the username and password to access your account. + +{% include integrations/config_flow.md %} + +## Energy + +Because Duke Energy only releases usage data with around a 48-hour delay, the integration inserts data into statistic objects. +You can find the statistics in {% my developer_statistics title="**Developer Tools** > **Statistics**"%} and search for "duke_energy". +**This delay means that there will be no data in the energy dashboard for today and likely yesterday** (depending on time of day you are checking). + +At the initial setup, the integration pulls historical hourly usage since the account activation. Duke Energy typically only keeps this data for the past 3 years. +After the initial setup, the integration keeps pulling data (twice per day) for the past 30 days to allow for any corrections in the data. + +In the configuration of the energy dashboard ({% my config_energy title="**Settings** > **Dashboards** > **Energy**" %}): + +1. Select **Add consumption** for the **Electricity grid**. +2. Select **Duke Energy Electric {meter serial number} Consumption** for the **consumed energy**. diff --git a/source/_integrations/easyenergy.markdown b/source/_integrations/easyenergy.markdown index 432aeb0e19bc..ea7bfd8e1b61 100644 --- a/source/_integrations/easyenergy.markdown +++ b/source/_integrations/easyenergy.markdown @@ -167,10 +167,10 @@ You can use the response data in a template sensor that is updated every hour: ```yaml template: - - trigger: - - platform: time_pattern + - triggers: + - trigger: time_pattern seconds: "*" - action: + actions: - action: easyenergy.get_energy_usage_prices response_variable: response data: diff --git a/source/_integrations/econet.markdown b/source/_integrations/econet.markdown index f036a5c0a76a..8ada75431158 100644 --- a/source/_integrations/econet.markdown +++ b/source/_integrations/econet.markdown @@ -5,6 +5,7 @@ ha_category: - Binary sensor - Climate - Sensor + - Switch - Water heater ha_release: 0.61 ha_iot_class: Cloud Push @@ -16,6 +17,7 @@ ha_platforms: - binary_sensor - climate - sensor + - switch - water_heater ha_integration_type: integration --- @@ -31,6 +33,7 @@ EcoNet devices may be represented by one or more platforms. - [Binary sensor](#binary-sensor) - [Climate](#climate) - [Sensor](#sensor) +- [Switch](#switch) - [Water heater](#water-heater) ### Binary sensor @@ -45,6 +48,10 @@ The EcoNet Climate platform lets you control your EcoNet thermostat. Multi-zone The EcoNet Sensor platform lets you view sensors associated with your EcoNet thermostat or water heater. For example, alert count or available hot water. +### Switch + +The EcoNet Switch platform let's you control the EcoNet thermostat emergency heat. + ### Water heater The EcoNet water heater platform lets you control your EcoNet water heater. Water heaters do not report the current water temperature. diff --git a/source/_integrations/eddystone_temperature.markdown b/source/_integrations/eddystone_temperature.markdown index 02375677339e..debbb1d6028f 100644 --- a/source/_integrations/eddystone_temperature.markdown +++ b/source/_integrations/eddystone_temperature.markdown @@ -15,7 +15,7 @@ related: --- The `eddystone_temperature` sensor {% term integration %} reads temperature information from Bluetooth LE advertisements transmitted by [Eddystone](https://en.wikipedia.org/wiki/Eddystone_(Google)) beacons. Your beacons must be configured to transmit UID frames (for identification) and TLM frames (for temperature). -All beacons that support the Eddystone protocol, have a temperature sensor and can transmit TLM frames are compatible with this {% term integration %}. For example [Gimbal](https://store.gimbal.com/collections/beacons/), [Estimote](https://estimote.com/) or [kontakt.io](https://kontakt.io/). For more manufacturers see [this overview](https://developers.google.com/beacons/eddystone#beacon_manufacturers) by Google. +All beacons that support the Eddystone protocol, have a temperature sensor and can transmit TLM frames are compatible with this {% term integration %}. For example [Gimbal](https://store.gimbal.com/collections/beacons/), [Estimote](https://estimote.com/) or [kontakt.io](https://kontakt.io/). ## Requirements diff --git a/source/_integrations/edl21.markdown b/source/_integrations/edl21.markdown index 93a579d4c09e..9808e8b6c009 100644 --- a/source/_integrations/edl21.markdown +++ b/source/_integrations/edl21.markdown @@ -20,7 +20,6 @@ Compatible transceivers: - [DIY](https://wiki.volkszaehler.org/hardware/controllers/ir-schreib-lesekopf-rs232-ausgang) - [Weidmann Elektronik Schreib-/Lesekopf USB](https://shop.weidmann-elektronik.de/index.php?page=product&info=24) -- [USB IR Lesekopf EHZ Lese-Schreib-Kopf Volkszähler Hichi Smartmeter](https://www.ebay.de/itm/313884760667) Tested smart meters: diff --git a/source/_integrations/elevenlabs.markdown b/source/_integrations/elevenlabs.markdown index 72f958ce6de6..e5ff68d2f02d 100644 --- a/source/_integrations/elevenlabs.markdown +++ b/source/_integrations/elevenlabs.markdown @@ -1,15 +1,17 @@ --- -title: ElevenLabs text-to-speech +title: ElevenLabs description: Instructions on how to setup ElevenLabs text-to-speech with Home Assistant. ha_category: - Text-to-speech ha_release: 2024.8 -ha_iot_class: Cloud Push +ha_iot_class: Cloud Polling ha_domain: elevenlabs ha_platforms: - tts ha_config_flow: true -ha_integration_type: integration +ha_integration_type: service +ha_codeowners: + - '@sorgfresser' --- The **ElevenLabs** text-to-speech {% term integrations %} adds support for [ElevenLabs](https://elevenlabs.io/) as text-to-speech to read a text with natural sounding voices. diff --git a/source/_integrations/elgato.markdown b/source/_integrations/elgato.markdown index 31cdeb7c84e3..f3bf6ab82d17 100644 --- a/source/_integrations/elgato.markdown +++ b/source/_integrations/elgato.markdown @@ -81,12 +81,12 @@ Example automation, in YAML format, that triggers a visual notification when a binary sensor (a doorbell) is triggered: ```yaml -- alias: Visual doorbell notification example - trigger: - - platform: state +- alias: "Visual doorbell notification example" + triggers: + - trigger: state entity_id: binary_sensor.doorbell to: "on" - action: + actions: - action: elgato.identify target: entity_id: light.elgato_key_light diff --git a/source/_integrations/emoncms.markdown b/source/_integrations/emoncms.markdown index 3f923a92f5c7..a7f3f8232206 100644 --- a/source/_integrations/emoncms.markdown +++ b/source/_integrations/emoncms.markdown @@ -15,181 +15,26 @@ ha_integration_type: integration related: - docs: /docs/configuration/ title: Configuration file +ha_config_flow: true --- The `emoncms` sensor {% term integration %} creates sensors for the feeds available in your local or cloud based version of [Emoncms](https://emoncms.org). -To enable this {% term integration %}, add the following lines to your {% term "`configuration.yaml`" %} file. It will list all feeds as a sensor. -{% include integrations/restart_ha_after_config_inclusion.md %} - -```yaml -# Example configuration.yaml entry using cloud based Emoncms -sensor: - - platform: emoncms - api_key: API_KEY - url: https://emoncms.org - id: 1 -``` - -As of Feb 2020, the integration will discover all sensors from Emoncms and will use the unit of measurement specified in the Feed from Emoncms, in preference to the one set in the configuration. Tested with [Emoncms](https://github.com/emoncms/emoncms) V10.1.13 - `unit` was added to the API around version V9.9.1. - To write information from Home Assistant to Emoncms, you can use the [`emoncms_history`](/integrations/emoncms_history) {% term integration %}. -## Configuration variables - -{% configuration %} -api_key: - description: The read API key for your Emoncms user. - required: true - type: string -url: - description: "The base URL of Emoncms, use for the cloud-based version. For self-hosted Emoncms or EmonPi you may need to use a URL of `http://x.x.x.x/emoncms`." - required: true - type: string -id: - description: Positive integer identifier for the sensor. Must be unique if you specify multiple Emoncms sensors. - required: true - type: integer -include_only_feed_id: - description: Positive integer list of Emoncms feed IDs. Only the feeds with feed IDs specified here will be displayed. Can not be specified if `exclude_feed_id` is specified. - required: false - type: list -exclude_feed_id: - description: Positive integer list of Emoncms feed IDs. All the feeds will be displayed as sensors except the ones listed here. Can not be specified if `include_only_feed_id` is specified. - required: false - type: list -sensor_names: - description: "Dictionary of names for the sensors created that are created based on feed ID. The dictionary consists of `feedid: name` pairs. Sensors for feeds with their feed ID mentioned here will get the chosen name instead of the default name." - required: false - type: [integer, list] -value_template: - description: Defines a [template](/docs/configuration/templating/#processing-incoming-data) to alter the feed value. - required: false - type: template -scan_interval: - description: Defines the update interval of the sensor in seconds. - required: false - type: integer -unit_of_measurement: - description: Defines the unit of measurement to be used for any sensor where the unit is *not* set in Emoncms. If no unit is set in Emoncms or in the configuration, the default (W) will be used. - required: false - default: W - type: string -{% endconfiguration %} - -## Default naming scheme - -The names of the sensors created by this integration will use the feed names defined in Emoncms if available, -or the feed ID otherwise, and will be prefixed with "Emoncms", e.g., "Emoncms Total Power" or "Emoncms Feed 5". -If the `id` property is anything but `1`, the ID will be shown as well, e.g., "Emoncms 2 Feed 5". - -If `sensor_names` is used, any feeds with defined names will get those names exactly, with no prefix. - -### Examples - -In this section you find some more examples of how this sensor can be used. - -Minimal configuration. All feeds are added as sensors with the unit of measurement being set by the Emoncms Feed or the default unit. - -```yaml -sensor: - - platform: emoncms - api_key: API_KEY - url: https://emoncms.org - id: 1 -``` - -Display only feeds with their feed IDs specified in `include_only_feed_id`. - -```yaml -# Example configuration.yaml entry -sensor: - - platform: emoncms - api_key: API_KEY - url: https://emoncms.org - id: 1 - unit_of_measurement: "W" - include_only_feed_id: - - 107 - - 105 -``` - -Display all feeds except feeds with their feed ID specified in `exclude_feed_id`. - -```yaml -# Example configuration.yaml entry -sensor: - - platform: emoncms - api_key: API_KEY - url: https://emoncms.org - id: 1 - unit_of_measurement: "kWh" - exclude_feed_id: - - 107 - - 105 -``` - -Display only feeds with their feed IDs specified in `include_only_feed_id` and give the feed sensors a name using `sensor_names`. You don't have to specify all feeds names in `sensor_names`, the remaining sensor names will be chosen based on `id` and the Emoncms `feedid`. - -```yaml -# Example configuration.yaml entry -sensor: - - platform: emoncms - api_key: API_KEY - url: https://emoncms.org - id: 1 - unit_of_measurement: "kW" - include_only_feed_id: - - 5 - - 120 - sensor_names: - 5: "feed 1" - 48: "kWh feed" - 61: "amp feed" - 110: "watt feed" -``` - -Use a `value_template` to add 1500 to the feed value for all specified feed IDs in `include_feed_id`. - -{% raw %} +## Prerequisites -```yaml -# Example configuration.yaml entry -sensor: - - platform: emoncms - api_key: API_KEY - url: https://emoncms.org - scan_interval: 15 - id: 1 - value_template: "{{ value | float + 1500 }}" - include_only_feed_id: - - 107 - - 106 -``` + To use this service, you need an Emoncms account and an API key. You can find the API key in your local or cloud-based Emoncms account settings. -{% endraw %} +{% include integrations/config_flow.md %} -Display feeds from the same Emoncms instance with 2 groups of feeds, where one has a differing `scan_interval` and the other a differing `unit_of_measurement`. +## Sensors -```yaml -# Example configuration.yaml entry -sensor: - - platform: emoncms - api_key: API_KEY - url: https://emoncms.org - scan_interval: 30 - id: 1 - unit_of_measurement: "W" - include_only_feed_id: - - 107 - - 106 - - platform: emoncms - api_key: API_KEY - url: https://emoncms.org - id: 2 - scan_interval: 60 - unit_of_measurement: "A" - include_only_feed_id: - - 108 - - 61 -``` +- **energy** in Wh, kWh +- **power** in W +- **voltage** in V +- **current** in A +- **apparent power** in VA +- **temperature** in °C, °F or K +- **frequency** in Hz +- **pressure** in hPa diff --git a/source/_integrations/emulated_roku.markdown b/source/_integrations/emulated_roku.markdown index 5d4de089809b..0047b5d35de8 100644 --- a/source/_integrations/emulated_roku.markdown +++ b/source/_integrations/emulated_roku.markdown @@ -116,14 +116,14 @@ The following is an example implementation of an automation: # Example automation - id: amp_volume_up alias: "Increase amplifier volume" - trigger: - - platform: event + triggers: + - trigger: event event_type: roku_command event_data: source_name: Home Assistant type: keypress key: Fwd - action: + actions: - action: media_player.volume_up target: entity_id: media_player.amplifier diff --git a/source/_integrations/energyzero.markdown b/source/_integrations/energyzero.markdown index 2d6d42c33175..d9d3a12a116a 100644 --- a/source/_integrations/energyzero.markdown +++ b/source/_integrations/energyzero.markdown @@ -136,10 +136,10 @@ The response data can be added to a template sensor: ```yaml template: - - trigger: - - platform: time_pattern + - triggers: + - trigger: time_pattern hours: "*" - action: + actions: - action: energyzero.get_energy_prices response_variable: prices data: diff --git a/source/_integrations/enocean.markdown b/source/_integrations/enocean.markdown index 602b2a33e082..16722a07b6d7 100644 --- a/source/_integrations/enocean.markdown +++ b/source/_integrations/enocean.markdown @@ -111,16 +111,16 @@ Sample automation to switch lights on and off: # Example automation to turn lights on/off on button release automation: - alias: "Hall light switches" - trigger: - platform: event - event_type: button_pressed - event_data: - id: [0xYY, 0xYY, 0xYY, 0xYY] - pushed: 0 - action: - action: "{% if trigger.event.data.onoff %} light.turn_on {% else %} light.turn_off {%endif %}" - target: - entity_id: "{% if trigger.event.data.which == 1 %} light.hall_left {% else %} light.hall_right {%endif %}" + triggers: + - trigger: event + event_type: button_pressed + event_data: + id: [0xYY, 0xYY, 0xYY, 0xYY] + pushed: 0 + actions: + - action: "{% if trigger.event.data.onoff %} light.turn_on {% else %} light.turn_off {%endif %}" + target: + entity_id: "{% if trigger.event.data.which == 1 %} light.hall_left {% else %} light.hall_right {%endif %}" ``` {% endraw %} diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown index 44ec60ddb1d5..d1240d33ea4c 100644 --- a/source/_integrations/enphase_envoy.markdown +++ b/source/_integrations/enphase_envoy.markdown @@ -53,10 +53,13 @@ For Envoy S Metered / IQ Gateway Metered with installed and configured current t - Sensors for net production (grid export) and net consumption (grid import) if the consumption CT is a net-consumption CT. - Disabled sensors for: + - `Balanced net power consumption` and `lifetime balanced net energy consumption` (grid import - grid export) if either a net-consumption or total-consumption CT is installed. The `balanced net power consumption` value is calculated by the Envoy if a total-consumption CT is used. When a net-consumption CT is installed, it is the same value as the `current net power consumption`, which is enabled by default if the CT is present. - Production and consumption sensors for each phase, if CT are installed on more than 1 phase. - Phase net production and net consumption, if CT are installed on more than 1 phase. - - Frequency net consumption CT (aggregate and phase). - - Voltage net consumption CT (aggregate and phase).[^1] + - Frequency for production and net consumption CT (aggregate and phase). + - Voltage for production and net consumption CT (aggregate and phase).[^1] + - Current for production and net consumption CT (aggregate and phase).[^1] + - Powerfactor for production and net consumption CT (aggregate and phase).[^1] - Metering status for net consumption and production CT (`normal` | `not-metering` | `check-wiring`) (aggregate and phase). - Count of meter status flags active for net consumption and production CT (aggregate and phase).[^2] @@ -68,22 +71,27 @@ For Envoy S Metered / IQ Gateway Metered with installed and configured current t For Enphase Ensemble systems with the Enpower/IQ System Controller and Encharge/IQ Batteries installed, additional features are available: - Sensors for battery status and usage -- Sensors for grid status (*) -- Sensors for the state of the Enpower's four load-shedding relays (*) -- A switch allowing you to take your system on-grid and off-grid. Note that the Enpower has a slight delay built-in between receiving these commands and actually switching the system on or off grid. (*) -- A switch allowing you to enable or disable charging the Encharge/IQ batteries from the power grid. (*) -- Support for changing the battery storage mode between full backup, self-consumption, and savings mode and setting the reserve battery level for outages. +- Sensors for grid status * +- Sensors for the state of the Enpower's four load-shedding relays * +- A switch allowing you to take your system on-grid and off-grid. Note that the Enpower has a slight delay built-in between receiving these commands and actually switching the system on or off grid. * +- A switch allowing you to enable or disable charging the Encharge/IQ batteries from the power grid. ** +- Support for changing the battery storage mode between full backup, self-consumption, and savings mode, and setting the reserve battery level for outages. ** - If a storage CT is installed: - Sensors for battery storage energy charged and discharged and current active power discharge/charge - Disabled sensors for: - Phase battery storage energy charged and discharged and current power discharge/charge - - Voltage storage CT (aggregate and phase) + - Voltage for storage CT (aggregate and phase) + - Current for storage CT (aggregate and phase) + - Frequency for storage CT (aggregate and phase) + - Powerfactor for storage CT (aggregate and phase) - Metering status for storage CT (aggregate and phase) - Count of meter status flags active storage CT (aggregate and phase) -The load shedding and on/off-grid functions marked (*) are only available with the Enpower/IQ System Controller installed. In battery installations without off-grid functionality, used in many EU countries, these off-grid related sensors and switches are not available. +*: The load shedding and on/off-grid functions are only available with the Enpower/IQ System Controller installed. In battery installations without load-shedding and off-grid functionality, used in many EU countries, these sensors and switches are not available. -In multiphase installations with batteries, in countries with phase-balancing grid meters, the battery will export to the grid on one phase the amount it lacks on another phase, as if it is using the grid as a 'transport' between phases. Since the grid meter will balance the amount in and exported on the two phases, the net result is zero. The Envoy multiphase consumption CTs, however, will report the amounts on both phases, resulting in too high export on one and too high import on the other. One needs to use the sum of grid import and export to eliminate this effect. +**: When used with Enpower/IQ System Controller, the entities to charge from the grid, battery storage mode, and reserve battery level are connected to the Enpower device with the Enpower serial number in their entity and unique IDs. When no Enpower is installed, these are connected to the Envoy itself and the Envoy serial number is used in the IDs. + +In multiphase installations with batteries, in countries with phase-balancing grid meters, the battery will export to the grid on one phase the amount it lacks on another phase which pulls the amount from the grid, as if it is using the grid as a 'transport' between phases. Since the grid meter will balance the amount imported and exported on the two phases, the net result is zero. The Envoy multiphase consumption CTs, however, will report the amounts on both phases, resulting in too high export on one and too high import on the other. One may consider using the `lifetime balanced net energy consumption` which is the sum of grid import and export to eliminate this effect. This would require some templating to split these values into import and export values. Alternatively, use the `current net power consumption` or `balanced net power consumption` with a Riemann integral sum helper. ## Envoy authentication requirements diff --git a/source/_integrations/epson.markdown b/source/_integrations/epson.markdown index e89a645d235f..aca9d8e1a32f 100644 --- a/source/_integrations/epson.markdown +++ b/source/_integrations/epson.markdown @@ -20,7 +20,7 @@ When you want to add a device for the first time, turn it on before following th {% include integrations/config_flow.md %} -### Supported features +## Supported features - turn on/off - set input @@ -29,7 +29,7 @@ When you want to add a device for the first time, turn it on before following th - mute/unmute audio - send next/previous track -### Supported devices +## Supported devices - Epson projectors supporting ESC/VP21 protocol. @@ -38,6 +38,29 @@ When you want to add a device for the first time, turn it on before following th - Epson EH-TW5350 - Epson EH-TW7000 - Epson EH-TW9400W (shares platform with 7400/8400/9400(w)) +- Epson EH-TW3200 -To make this module work you need to connect your projector to your LAN. -The best is to use iProjection app by Epson to test if it is working. +## Configuration + +This integration supports connecting to an Epson projector via LAN or Serial. + +### LAN connection + +Connect the projector to your LAN and enter the IP address of the projector when prompted, selecting either HTTP or TCP depending on what the projector model supports. +The iProjection app by Epson can be used to test if it is working. + +### Serial connection + +Connect projector directly to Home Assistant via a serial cable, or ser2net can be used as a Serial to network proxy. + +#### ser2net configuration + +A ser2net configuration similar to below can be used to expose the projector connected to `/dev/ttyUSB0` on port `3629`. + +```yaml +connection: &con1 + accepter: tcp,3629 + connector: serialdev,/dev/ttyUSB0,9600n81 +``` + +Then the projector can be added to the integration using `socket://:3629`. diff --git a/source/_integrations/event.markdown b/source/_integrations/event.markdown index f300023f924c..ab51a6093a58 100644 --- a/source/_integrations/event.markdown +++ b/source/_integrations/event.markdown @@ -45,10 +45,10 @@ In addition, the entity can have the following states: Because the state of an event entity in Home Assistant is a timestamp, it means we can use it in our automations. For example: ```yaml -trigger: - - platform: state +triggers: + - trigger: state entity_id: event.doorbell -action: +actions: - action: notify.frenck data: message: "Ding Dong! Someone is at the door!" @@ -63,10 +63,10 @@ This allows you, for example, to trigger a different action when the button on a When combining that with the [choose action](/docs/scripts/#choose-a-group-of-actions) script, you can assign multiple different actions to a single event entity. In the following example, short- or long-pressing the button on the remote will trigger a different scene: ```yaml -trigger: - - platform: state +triggers: + - trigger: state entity_id: event.hue_remote_control -action: +actions: - alias: "Choose an action based on the type of event" choose: - conditions: diff --git a/source/_integrations/evohome.markdown b/source/_integrations/evohome.markdown index ae3b93c19e08..b60952716d69 100644 --- a/source/_integrations/evohome.markdown +++ b/source/_integrations/evohome.markdown @@ -129,7 +129,7 @@ This action call will set the operating `mode` of the system for a specified per For **AutoWithEco**, the period of time is a `duration` is up to 24 hours. ```yaml -- action: +- actions: - action: evohome.set_system_mode data: mode: AutoWithEco @@ -139,7 +139,7 @@ For **AutoWithEco**, the period of time is a `duration` is up to 24 hours. For the other modes, such as **Away**, the duration is a `period` of days, where 1 day will revert at midnight tonight, and 2 days reverts at midnight tomorrow. ```yaml -- action: +- actions: - action: evohome.set_system_mode data: mode: Away @@ -161,7 +161,7 @@ This action will immediately pull the latest state data from the vendor's server This action will set the `setpoint` of a zone, as identified by its `entity_id`, for a specified period of time (**TemporaryOverride**). However, if no period of time is provided (c.f. a duration of 0, below), then the change is permanent (**PermanentOverride**). ```yaml -- action: +- actions: - action: evohome.set_zone_override target: entity_id: climate.loungeroom @@ -172,7 +172,7 @@ This action will set the `setpoint` of a zone, as identified by its `entity_id`, The `duration` can be up to 24 hours, after which the zone mode will revert to schedule (**FollowSchedule**). If the `duration` is 0 hours, then the change will be until the next setpoint. ```yaml -- action: +- actions: - action: evohome.set_zone_override target: entity_id: climate.loungeroom diff --git a/source/_integrations/facebook.markdown b/source/_integrations/facebook.markdown index a17d66030445..a1411180d033 100644 --- a/source/_integrations/facebook.markdown +++ b/source/_integrations/facebook.markdown @@ -48,16 +48,16 @@ The phone number used in **target** should be registered with Facebook messenger # Example automation notification entry automation: - alias: "Evening Greeting" - trigger: - platform: sun - event: sunset - action: - action: notify.facebook - data: - message: "Good Evening" - target: - - '+919413017584' - - '+919784516314' + triggers: + - trigger: sun + event: sunset + actions: + - action: notify.facebook + data: + message: "Good Evening" + target: + - '+919413017584' + - '+919784516314' ``` You can also send messages to users that do not have stored their phone number on Facebook, but this requires a bit more work. The Messenger platform uses page-specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specific ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID: diff --git a/source/_integrations/fan.markdown b/source/_integrations/fan.markdown index 8841f6a2a51d..fdff7b9de416 100644 --- a/source/_integrations/fan.markdown +++ b/source/_integrations/fan.markdown @@ -50,10 +50,10 @@ Sets the speed percentage for fan device. ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: fan.set_percentage target: entity_id: fan.kitchen @@ -74,10 +74,10 @@ Sets a preset mode for the fan device. Available preset modes are defined by the ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: fan.set_preset_mode target: entity_id: fan.kitchen @@ -98,10 +98,10 @@ Sets the rotation for fan device. ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: fan.set_direction target: entity_id: fan.kitchen @@ -122,10 +122,10 @@ Sets the oscillation for fan device. ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: fan.oscillate target: entity_id: fan.kitchen @@ -156,10 +156,10 @@ Turn fan device off. This is only supported if the fan device supports being tur ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: fan.turn_off target: entity_id: fan.kitchen @@ -180,13 +180,13 @@ Increases the speed of the fan device. ```yaml automation: - trigger: - - platform: device + triggers: + - trigger: device device_id: 097cd9f706a86e9163acb64ba7d630da domain: lutron_caseta type: press subtype: raise - action: + actions: - action: fan.increase_speed target: entity_id: fan.dining_room_fan_by_front_door @@ -205,13 +205,13 @@ Decreases the speed of the fan device. ```yaml automation: - trigger: - - platform: device + triggers: + - trigger: device device_id: 097cd9f706a86e9163acb64ba7d630da domain: lutron_caseta type: press subtype: lower - action: + actions: - action: fan.decrease_speed target: entity_id: fan.dining_room_fan_by_front_door diff --git a/source/_integrations/feedreader.markdown b/source/_integrations/feedreader.markdown index 784a0d823e8b..ef4cd5504b25 100644 --- a/source/_integrations/feedreader.markdown +++ b/source/_integrations/feedreader.markdown @@ -29,13 +29,13 @@ Feedreader events can be used out of the box to trigger automation actions, e.g. ```yaml automation: - alias: "Trigger action when new element(s) in RSS feed" - trigger: - platform: event - event_type: feedreader - action: - action: script.turn_on - target: - entity_id: script.my_action + triggers: + - trigger: event + event_type: feedreader + actions: + - action: script.turn_on + target: + entity_id: script.my_action ``` {% raw %} @@ -43,17 +43,17 @@ automation: ```yaml automation: - alias: "Send notification of RSS feed title when updated" - trigger: - platform: event - event_type: feedreader - event_data: - feed_url: "https://hasspodcast.io/feed/podcast" - action: - action: persistent_notification.create - data: - title: "New HA Podcast available" - message: "New Podcast available - {{ as_timestamp(now()) | timestamp_custom('%I:%M:%S %p %d%b%Y', true) }}" - notification_id: "{{ trigger.event.data.title }}" + triggers: + - trigger: event + event_type: feedreader + event_data: + feed_url: "https://hasspodcast.io/feed/podcast" + actions: + - action: persistent_notification.create + data: + title: "New HA Podcast available" + message: "New Podcast available - {{ as_timestamp(now()) | timestamp_custom('%I:%M:%S %p %d%b%Y', true) }}" + notification_id: "{{ trigger.event.data.title }}" ``` {% endraw %} diff --git a/source/_integrations/ffmpeg.markdown b/source/_integrations/ffmpeg.markdown index dacc5224b286..37d2584ca826 100644 --- a/source/_integrations/ffmpeg.markdown +++ b/source/_integrations/ffmpeg.markdown @@ -7,7 +7,7 @@ ha_release: 0.29 ha_domain: ffmpeg ha_platforms: - camera -ha_integration_type: integration +ha_integration_type: system --- The FFmpeg integration allows other Home Assistant integrations to process diff --git a/source/_integrations/fireservicerota.markdown b/source/_integrations/fireservicerota.markdown index 2fd2f03d56ba..a1166295b7a3 100644 --- a/source/_integrations/fireservicerota.markdown +++ b/source/_integrations/fireservicerota.markdown @@ -117,52 +117,52 @@ These are documented below. ```yaml automation: - alias: "Switch on a light when incident is received" - trigger: - platform: state - entity_id: sensor.incidents - action: - action: light.turn_on - target: - entity_id: light.bedroom + triggers: + - trigger: state + entity_id: sensor.incidents + actions: + - action: light.turn_on + target: + entity_id: light.bedroom - alias: "Play TTS incident details when incident is received" - trigger: - platform: state - entity_id: sensor.incidents - attribute: message_to_speech_url - condition: + triggers: + - trigger: state + entity_id: sensor.incidents + attribute: message_to_speech_url + conditions: - condition: not conditions: - condition: state entity_id: sensor.incidents attribute: message_to_speech_url state: None - action: + actions: - action: media_player.play_media - data_template: + data: entity_id: media_player.nest_hub_bedroom media_content_id: > {{ state_attr('sensor.incidents','message_to_speech_url') }} media_content_type: "audio/mp4" - alias: "Send response acknowledgement when a button is pressed" - trigger: - platform: state - entity_id: switch.response_button - action: - action: homeassistant.turn_on - target: - entity_id: switch.incident_response + triggers: + - trigger: state + entity_id: switch.response_button + actions: + - action: homeassistant.turn_on + target: + entity_id: switch.incident_response - alias: "Cast FireServiceRota dashboard to Nest Hub" - trigger: - platform: homeassistant - event: start - action: - action: cast.show_lovelace_view - data: - entity_id: media_player.nest_hub_bedroom - view_path: fsr + triggers: + - trigger: homeassistant + event: start + actions: + - action: cast.show_lovelace_view + data: + entity_id: media_player.nest_hub_bedroom + view_path: fsr ``` diff --git a/source/_integrations/flic.markdown b/source/_integrations/flic.markdown index 747c52c83cca..82ff8df1064c 100644 --- a/source/_integrations/flic.markdown +++ b/source/_integrations/flic.markdown @@ -78,16 +78,16 @@ The flic integration fires `flic_click` events on the bus. You can capture the e # Example configuration.yaml automation entry automation: - alias: "Turn on lights in the living room when flic is pressed once" - trigger: - platform: event - event_type: flic_click - event_data: - button_name: flic_81e4ac74b6d2 - click_type: single - action: - action: homeassistant.turn_on - target: - entity_id: group.lights_livingroom + triggers: + - trigger: event + event_type: flic_click + event_data: + button_name: flic_81e4ac74b6d2 + click_type: single + actions: + - action: homeassistant.turn_on + target: + entity_id: group.lights_livingroom ``` Event data: @@ -104,10 +104,10 @@ To help detect and debug flic button clicks, you can use this automation that se ```yaml automation: - alias: "FLIC Html5 notify on every click" - trigger: - platform: event - event_type: flic_click - action: + triggers: + - trigger: event + event_type: flic_click + actions: - action: notify.html5 data: title: "flic click" diff --git a/source/_integrations/flipr.markdown b/source/_integrations/flipr.markdown index b509644bf5a5..f3ae9864ad5c 100644 --- a/source/_integrations/flipr.markdown +++ b/source/_integrations/flipr.markdown @@ -11,24 +11,20 @@ ha_codeowners: ha_domain: flipr ha_platforms: - binary_sensor + - select - sensor + - switch ha_integration_type: integration --- -[Flipr](https://www.goflipr.com) is a smart pool monitor that publishes data to the cloud via SigFox. -Flipr sends data like pH, chlorine or temperature to a cloud server on a regular basis in order to monitor your pool. -This integration gives you access to this information on Home Assistant in addition to the vendor's smartphone application. +[Go flipr](https://www.goflipr.com) company sells smart pool monitor and management devices. The Flipr and Flipr Hub devices publish data to the cloud via Wi-Fi and SigFox. +This {% term integration %} gives you access on Home Assistant to the information measured by your Flipr with the same data as the vendor's smartphone application. +This {% term integration %} gives you also access to the Flipr Hub to control your pool equipments like pump, heater, light, etc. -There is currently support for the following information within Home Assistant: +There is currently support for the following device types within Home Assistant: -- Chlorine Level -- pH -- Water Temperature -- Red OX Level -- Last measure date -- pH Status Indicator -- Chlorine Status Indicator -- Battery Level +- [Flipr](#flipr) +- [Hub](#hub) ## Prerequisites @@ -39,6 +35,39 @@ You will need to use the standalone app for this device to register a username a {% include integrations/config_flow.md %} +## Flipr + +Flipr sends data like pH, chlorine or temperature to a cloud server on a regular basis in order to monitor your pool. + +There is currently support for the following information within Home Assistant via **sensors** and **binary_sensors** : + +## Entities + +### Sensors + +- **Chlorine**: the chlorine level +- **pH**: the pH level of the water +- **Water temperature**: the temperature of the water +- **Red OX**: the redox level of the water in mV +- **Last measure date**: the date of the last measure taken by the flipr +- **Battery level**: the battery level of the flipr in percentage + +### Binary sensors + +- **pH Status**: an indicator if the pH level is normal, too low, or too high +- **Chlorine status**: an indicator if the chlorine level is normal, too low, or too high + +## Hub + +The Hub lets you handle your equipment (pump, heater, light, etc.) from Home Assistant and all of the automation you can imagine. + +- **Turn on/off** the switch inside the Hub and automatically set the Hub in manual mode. +- **Choose** the mode of the Hub between auto, planning and manual. + +## Actions + +The cloud data is polled every 15 minutes. If you want to force a refresh of the data, you can use the `homeassistant.update_entity` action. + ## Tips It is recommended that you create your own card with the following sensors where \[fliprid\] is the id of your flipr: diff --git a/source/_integrations/flume.markdown b/source/_integrations/flume.markdown index 200f9ef6204b..526043b72720 100644 --- a/source/_integrations/flume.markdown +++ b/source/_integrations/flume.markdown @@ -49,10 +49,10 @@ Example of an automation that sends a Home Assistant notification of the most re ```yaml alias: "Notify: flume" -trigger: - - platform: time_pattern +triggers: + - trigger: time_pattern minutes: /5 -action: +actions: - action: flume.list_notifications data: config_entry: 1234 # replace this with your config entry id diff --git a/source/_integrations/folder_watcher.markdown b/source/_integrations/folder_watcher.markdown index 4d6dd3ce2146..7819d53e28a5 100644 --- a/source/_integrations/folder_watcher.markdown +++ b/source/_integrations/folder_watcher.markdown @@ -53,16 +53,16 @@ Automations can be triggered on file system events data using a template. The fo #Send notification for new image (including the image itself) automation:  alias: "New file alert" - trigger: -   platform: state - entity_id: event.created - action: -   action: notify.notify -   data: -     title: New image captured! -     message: "Created {{ trigger.to_state.attributes.file }} in {{ trigger.to_state.attributes.folder }}" -     data: -       file: "{{ trigger.to_state.attributes.file }}" + triggers: + - trigger: state + entity_id: event.created + actions: + - action: notify.notify + data: + title: New image captured! + message: "Created {{ trigger.to_state.attributes.file }} in {{ trigger.to_state.attributes.folder }}" + data: + file: "{{ trigger.to_state.attributes.file }}" ``` {% endraw %} diff --git a/source/_integrations/foursquare.markdown b/source/_integrations/foursquare.markdown index b09830bb3f47..44815abbb94d 100644 --- a/source/_integrations/foursquare.markdown +++ b/source/_integrations/foursquare.markdown @@ -58,13 +58,13 @@ Foursquare check-in events can be used out of the box to trigger automation acti ```yaml automation: - alias: "Trigger action when you check into a venue." - trigger: - platform: event - event_type: foursquare.push - action: - action: script.turn_on - target: - entity_id: script.my_action + triggers: + - trigger: event + event_type: foursquare.push + actions: + - action: script.turn_on + target: + entity_id: script.my_action ``` ### Check ins diff --git a/source/_integrations/fritz.markdown b/source/_integrations/fritz.markdown index dbeedcb45b54..a0b957e0dfb0 100644 --- a/source/_integrations/fritz.markdown +++ b/source/_integrations/fritz.markdown @@ -116,10 +116,10 @@ fritz_box_reconnect: ```yaml automation: - alias: "Reconnect FRITZ!Box" - trigger: - - platform: time + triggers: + - trigger: time at: "05:00:00" - action: + actions: - action: button.press target: entity_id: button.fritzbox_7530_reconnect @@ -131,11 +131,11 @@ automation: ```yaml automation: - alias: "Guests Wi-Fi Turned On -> Send Password To Phone" - trigger: - - platform: state + triggers: + - trigger: state entity_id: switch.fritzbox_7530_wifi_myssid to: "on" - action: + actions: - action: notify.notify data: title: "Guest Wi-Fi is enabled" diff --git a/source/_integrations/fritzbox_callmonitor.markdown b/source/_integrations/fritzbox_callmonitor.markdown index d22246789e9e..2f46bc406449 100644 --- a/source/_integrations/fritzbox_callmonitor.markdown +++ b/source/_integrations/fritzbox_callmonitor.markdown @@ -52,10 +52,10 @@ This example shows how to send notifications whenever the sensor's state changes # Example configuration.yaml entry. automation: - alias: "Notify about phone state" - trigger: - - platform: state + triggers: + - trigger: state entity_id: sensor.phone - action: + actions: - action: notify.notify data: title: "Phone" diff --git a/source/_integrations/frontier_silicon.markdown b/source/_integrations/frontier_silicon.markdown index 85963dd323e8..3b1fbbecec70 100644 --- a/source/_integrations/frontier_silicon.markdown +++ b/source/_integrations/frontier_silicon.markdown @@ -49,15 +49,15 @@ In case your device (friendly name) is called *badezimmer*, an example automatio ```yaml # Example configuration.yaml automation alias: "Bathroom Motion Detected" -trigger: - platform: state - entity_id: binary_sensor.motion_sensor_166d0001171111 - from: "off" - to: "on" -action: - action: media_player.turn_on - target: - entity_id: "media_player.badezimmer" +triggers: + - trigger: state + entity_id: binary_sensor.motion_sensor_166d0001171111 + from: "off" + to: "on" +actions: + - action: media_player.turn_on + target: + entity_id: "media_player.badezimmer" ``` ## Screenshots: diff --git a/source/_integrations/gardena_bluetooth.markdown b/source/_integrations/gardena_bluetooth.markdown index 9e368a61b261..09fee793103c 100644 --- a/source/_integrations/gardena_bluetooth.markdown +++ b/source/_integrations/gardena_bluetooth.markdown @@ -30,8 +30,8 @@ See device section for support information: [water control](#water-control), [ir ## Water control -- Water Control Bluetooth ([01889-20](https://www.gardena.com/int/products/watering/water-controls/water-control-bluetooth)) -- Soil Moisture Sensors ([1867-20](https://www.gardena.com/int/products/watering/water-controls/soil-moisture-sensor/)) +- Water Control Bluetooth ([01889-20](https://www.gardena.com/int/products/watering/water-controls/water-control-bluetooth/970481101.html)) +- Soil Moisture Sensors ([1867-20](https://www.gardena.com/int/products/watering/water-controls/soil-moisture-sensor/967926801.html)) The paring of the device may require a [factory reset](#factory-reset) before it allows a connection. diff --git a/source/_integrations/gaviota.markdown b/source/_integrations/gaviota.markdown index 489895bc4ba9..3215d3dd7a74 100644 --- a/source/_integrations/gaviota.markdown +++ b/source/_integrations/gaviota.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/gdacs.markdown b/source/_integrations/gdacs.markdown index c9db78baf423..1f10169fd0ec 100644 --- a/source/_integrations/gdacs.markdown +++ b/source/_integrations/gdacs.markdown @@ -11,6 +11,7 @@ ha_codeowners: - '@exxamalte' ha_domain: gdacs ha_platforms: + - diagnostics - geo_location - sensor ha_integration_type: service diff --git a/source/_integrations/geniushub.markdown b/source/_integrations/geniushub.markdown index 9664ac157a6b..58d1c8413ae5 100644 --- a/source/_integrations/geniushub.markdown +++ b/source/_integrations/geniushub.markdown @@ -91,17 +91,17 @@ Each such entity has a state attribute that will contain a list of any such issu ```yaml - alias: "GeniusHub Error Alerts" - trigger: - platform: numeric_state - entity_id: sensor.geniushub_errors - above: 0 - action: - - action: notify.pushbullet_notifier - data: - title: "Genius Hub has errors" - message: >- - Genius Hub has the following {{ states('sensor.geniushub_errors') }} errors: - {{ state_attr('sensor.geniushub_errors', 'error_list') }} + triggers: + - trigger: numeric_state + entity_id: sensor.geniushub_errors + above: 0 + actions: + - action: notify.pushbullet_notifier + data: + title: "Genius Hub has errors" + message: >- + Genius Hub has the following {{ states('sensor.geniushub_errors') }} errors: + {{ state_attr('sensor.geniushub_errors', 'error_list') }} ``` {% endraw %} @@ -112,16 +112,16 @@ This alert may be useful to see if the CH is being turned on whilst you're on a ```yaml - alias: "GeniusHub CH State Change Alert" - trigger: - platform: state - entity_id: binary_sensor.dual_channel_receiver_2_1 - action: - - action: notify.pushbullet_notifier - data: - title: "Warning: CH State Change!" - message: >- - {{ trigger.to_state.attributes.friendly_name }} has changed - from {{ trigger.from_state.state }} to {{ trigger.to_state.state }}. + triggers: + - trigger: state + entity_id: binary_sensor.dual_channel_receiver_2_1 + actions: + - action: notify.pushbullet_notifier + data: + title: "Warning: CH State Change!" + message: >- + {{ trigger.to_state.attributes.friendly_name }} has changed + from {{ trigger.from_state.state }} to {{ trigger.to_state.state }}. ``` {% endraw %} diff --git a/source/_integrations/geo_location.markdown b/source/_integrations/geo_location.markdown index d6b3f44cc538..105e8a2aed69 100644 --- a/source/_integrations/geo_location.markdown +++ b/source/_integrations/geo_location.markdown @@ -56,15 +56,15 @@ zone: automation: - alias: "Bush Fire Alert" - trigger: - platform: geo_location - source: nsw_rural_fire_service_feed - zone: zone.bush_fire_alert_zone - event: enter - condition: - condition: template - value_template: "{{ trigger.to_state.attributes.type == 'Bush Fire' }}" - action: + triggers: + - trigger: geo_location + source: nsw_rural_fire_service_feed + zone: zone.bush_fire_alert_zone + event: enter + conditions: + - condition: template + value_template: "{{ trigger.to_state.attributes.type == 'Bush Fire' }}" + actions: - action: persistent_notification.create data: message: "{{ trigger.to_state.name }} - {{ trigger.to_state.attributes.status }}" diff --git a/source/_integrations/geonetnz_quakes.markdown b/source/_integrations/geonetnz_quakes.markdown index 2e167a4f4297..5935be1b5b21 100644 --- a/source/_integrations/geonetnz_quakes.markdown +++ b/source/_integrations/geonetnz_quakes.markdown @@ -11,6 +11,7 @@ ha_codeowners: - '@exxamalte' ha_domain: geonetnz_quakes ha_platforms: + - diagnostics - geo_location - sensor ha_integration_type: service diff --git a/source/_integrations/github.markdown b/source/_integrations/github.markdown index 5eaf673e69e2..d71970070b51 100644 --- a/source/_integrations/github.markdown +++ b/source/_integrations/github.markdown @@ -128,10 +128,10 @@ This example uses the [Latest release](#latest-release) entity provided by this {% raw %} ```yaml -trigger: - - platform: state +triggers: + - trigger: state entity_id: sensor.awesome_repository_latest_release -action: +actions: - action: notify.notify data: title: "New github/repository release" @@ -150,10 +150,10 @@ This example uses the [Stars](#diagnostic-entities) diagnostic entity provided b {% raw %} ```yaml -trigger: - - platform: state +triggers: + - trigger: state entity_id: sensor.awesome_repository_stars -action: +actions: - action: notify.notify data: title: "New github/repository new star" diff --git a/source/_integrations/goodwe.markdown b/source/_integrations/goodwe.markdown index f058617268dc..006b02312154 100644 --- a/source/_integrations/goodwe.markdown +++ b/source/_integrations/goodwe.markdown @@ -45,12 +45,12 @@ The integration will poll the inverter for new values every 10 seconds. If you w ```yaml - alias: "Goodwe inverter data polling" - trigger: - - platform: time_pattern + triggers: + - trigger: time_pattern hours: "*" minutes: "*" seconds: "/30" - action: + actions: - action: homeassistant.update_entity target: entity_id: sensor.ppv diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown index de87ba2143c5..210e6b2f6b5f 100644 --- a/source/_integrations/google_assistant.markdown +++ b/source/_integrations/google_assistant.markdown @@ -9,7 +9,7 @@ ha_iot_class: Cloud Push ha_codeowners: - '@home-assistant/cloud' ha_domain: google_assistant -ha_integration_type: integration +ha_integration_type: system ha_platforms: - button - diagnostics diff --git a/source/_integrations/google_cloud.markdown b/source/_integrations/google_cloud.markdown index d0428de15c04..0eab263d3923 100644 --- a/source/_integrations/google_cloud.markdown +++ b/source/_integrations/google_cloud.markdown @@ -1,40 +1,28 @@ --- -title: Google Cloud Platform +title: Google Cloud description: Google Cloud Platform integration. ha_category: + - Speech-to-text - Text-to-speech + - Voice ha_release: 0.95 +ha_config_flow: true ha_iot_class: Cloud Push ha_codeowners: - '@lufton' + - '@tronikos' ha_domain: google_cloud ha_platforms: + - stt - tts -ha_integration_type: integration +ha_integration_type: service --- -The `google_cloud` platform allows you to use [Google Cloud Platform](https://cloud.google.com/) API and integrate them into Home Assistant. +The Google Cloud integration allows you to use [Google Cloud Platform](https://cloud.google.com/) APIs and integrate them into Home Assistant. -## Configuration +{% include integrations/config_flow.md %} -To use Google Cloud Platform, you need to provide `config` directory relative path of [`API key`](#obtaining-an-api-key) file you are going to use. Place it under `config` folder and set `key_file` parameter in {% term "`configuration.yaml`" %}: - -```yaml -# Example configuration.yaml entry -tts: - - platform: google_cloud - key_file: googlecloud.json -``` - -## Obtaining an API key - -API key obtaining process described in corresponding documentation: - -- [Text-to-speech](https://cloud.google.com/text-to-speech/docs/quickstart-protocol) -- [Speech-to-text](https://cloud.google.com/speech-to-text/docs/quickstart-protocol) -- [Geocoding](https://developers.google.com/maps/documentation/geocoding/start) - -Basic instruction for all APIs: +## Obtaining service account file 1. Visit [Cloud Resource Manager](https://console.cloud.google.com/cloud-resource-manager). 2. Click `CREATE PROJECT` button at the top. @@ -45,7 +33,6 @@ Basic instruction for all APIs: - [Text-to-speech](https://console.cloud.google.com/flows/enableapi?apiid=texttospeech.googleapis.com) - [Speech-to-text](https://console.cloud.google.com/flows/enableapi?apiid=speech.googleapis.com) - - [Geocoding](https://console.cloud.google.com/flows/enableapi?apiid=geocoding-backend.googleapis.com) 6. Set up authentication: 1. Visit [this link](https://console.cloud.google.com/apis/credentials/serviceaccountkey) @@ -61,31 +48,22 @@ Basic instruction for all APIs: 8. In the `Add Key` dropdown, select `Create New Key`. 9. Specify a `JSON` key type and click `Create`. 10. A `[serviceaccountname].json` file will download to your browser. + 11. Upload this file when asked in the integration setup. ## Google Cloud text-to-speech -[Google Cloud text-to-speech](https://cloud.google.com/text-to-speech/) converts text into human-like speech in more than 100 voices across 20+ languages and variants. It applies groundbreaking research in speech synthesis (WaveNet) and Google's powerful neural networks to deliver high-fidelity audio. With this easy-to-use API, you can create lifelike interactions with your users that transform customer service, device interaction, and other applications. +[Google Cloud text-to-speech](https://cloud.google.com/text-to-speech/) converts text into human-like speech in [380+ voices across 50+ languages and variants](https://cloud.google.com/text-to-speech/docs/voices). It applies groundbreaking research in speech synthesis and Google's powerful neural networks to deliver high-fidelity audio. With this easy-to-use API, you can create lifelike interactions with your users that transform customer service, device interaction, and other applications. ### Pricing -The Cloud text-to-speech API is priced monthly based on the amount of characters to synthesize into audio sent to the service. - -| Voice | Monthly free tier | Paid usage | -| ------------------ | ------------------------- | --------------------------------- | -| Neural2 | 0 to 1 million bytes | $16.00 USD / 1 million bytes | -| Polyglot (Preview) | 0 to 1 million bytes | $16.00 USD / 1 million bytes | -| Studio (Preview) | 0 to 100 thousand bytes | $160.00 USD / 1 million bytes | -| Standard | 0 to 4 million characters | $4.00 USD / 1 million characters | -| WaveNet | 0 to 1 million characters | $16.00 USD / 1 million characters | +The Cloud text-to-speech API is priced monthly based on the number of characters to synthesize into audio sent to the service. For up-to-date pricing, see [here](https://cloud.google.com/text-to-speech/pricing). ### Text-to-speech configuration +Below settings can be configured in the options of the integration and in the `options` parameter of the `tts.speak` service. + {% configuration %} -key_file: - description: "The [`API key`](#obtaining-an-api-key) file to use with Google Cloud Platform. If not specified `os.environ['GOOGLE_APPLICATION_CREDENTIALS']` path will be used." - required: false - type: string language: description: "Default language of the voice, e.g., `en-US`. Supported languages, genders and voices listed [here](https://cloud.google.com/text-to-speech/docs/voices). Also there are extra not documented but supported languages (see dropdown [here](https://cloud.google.com/text-to-speech/#streaming_demo_section))." required: false @@ -132,16 +110,20 @@ text_type: default: "text" {% endconfiguration %} -### Full configuration example +### Full example -The Google Cloud text-to-speech configuration can look like: +A `tts.speak` service call can look like: ```yaml -# Example configuration.yaml entry -tts: - - platform: google_cloud - key_file: googlecloud.json - language: en-US +service: tts.speak +target: + entity_id: tts.google_cloud +data: + cache: true + media_player_entity_id: media_player.living_room_display + message: this is a test + language: en-US + options: gender: male voice: en-US-Wavenet-F encoding: linear16 @@ -153,3 +135,20 @@ tts: - telephony-class-application - wearable-class-device ``` + +## Google Cloud speech-to-text + +[Google Cloud speech-to-text](https://cloud.google.com/speech-to-text) converts audio into text transcriptions for [125 languages and variants](https://cloud.google.com/speech-to-text/docs/speech-to-text-supported-languages). + +### Pricing + +Speech-to-text is priced based on the amount of audio successfully processed by the service each month, measured in increments of one second. For up-to-date pricing, see [here](https://cloud.google.com/speech-to-text/pricing) under the Speech-to-text v1 API. + +### Speech-to-text configuration + +{% configuration %} +stt_model: + description: "One of the transcription models [here](https://cloud.google.com/speech-to-text/docs/transcription-model). Defaults to `latest_short`." + required: false + type: string +{% endconfiguration %} diff --git a/source/_integrations/google_photos.markdown b/source/_integrations/google_photos.markdown new file mode 100644 index 000000000000..542b240ec11e --- /dev/null +++ b/source/_integrations/google_photos.markdown @@ -0,0 +1,99 @@ +--- +title: Google Photos +description: Instructions on how to use Google Photos in Home Assistant. +ha_category: + - Media source +ha_iot_class: Cloud Polling +ha_release: '2024.10' +ha_config_flow: true +ha_domain: google_photos +ha_codeowners: + - '@allenporter' +ha_integration_type: integration +ha_platforms: + - media_source +related: + - docs: /integrations/media_source + title: Media source integration documentation + - url: https://photos.google.com/ + title: Google Photos + - url: https://console.cloud.google.com/apis/library/photoslibrary.googleapis.com + title: Google Developers Console +--- + +The **Google Photos** integration allows you to upload photos to your [Google Photos](https://photos.google.com/) using Home Assistant. The integration adds an action for uploading photos and a +[media source](/integrations/media_source) to view or cast the content uploaded by +Home Assistant. This integration does not give Home Assistant access to your +entire Google Photos library. + +## 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), [Google Tasks](/integrations/google_tasks), and [Google Mail](/integrations/google_mail). +These are not the same as *Device Auth* credentials previously recommended for [Google Calendar](/integrations/google). + +If you have already set up the correct 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/photoslibrary.googleapis.com). + +1. First, go to the Google Developers Console to enable [Google Photos Library API](https://console.cloud.google.com/apis/library/photoslibrary.googleapis.com) +2. The wizard will ask you to choose a project to manage your application. Select a project and select **Continue**. +3. Verify that your Google Photos Library API was enabled and select **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, for example to *Home Assistant*. +8. You then need to select a **Support email**. To do this, from the dropdown menu, 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 select **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 select **Save and Continue** to move to the **Optional info** page. You do not need to add anything to the **Optional info** page, so select **Save and Continue**, which will take you to the **Summary** page. Select **Back to Dashboard**. +12. Select **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. Select **Credentials** in the menu on the left-hand side of the screen, then select **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 select **Create**. This is not a placeholder and is the URI that must be used. +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 them shortly. Once you have noted these strings, select **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**, select 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 **Google Photos Library API** has been automatically enabled. To do this, select **Library** from the menu, then search for **Google Photos Library 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 Photos. + +{% 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. Select **Continue**. Keep in mind this is giving sensitive access to your private Photo Library. + +4. The page will now display **Link account to Home Assistant?**, note **Your instance URL**. If this is not correct, refer to [My Home Assistant](/integrations/my). If everything looks good, select **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 %} + + +### Action `google_photos.upload` + +You can use the `google_photos.upload` action to upload Photos from Home Assistant +to Google Photos. + +{% details "Create event action details" %} + +| Data attribute | Optional | Description | Example | +| ---------------------- | -------- | ----------- | --------| +| `filename` | no | Path to the image to upload. | /mnt/image.jpg +| `config_entry_id` | no | The ID of the Google Photos config entry. | a1bee602deade2b09bc522749bbce48e | + +{% enddetails %} + + +## Troubleshooting + +If you have an error with your credentials, you can delete them in the [Application Credentials](/integrations/application_credentials/) user interface. diff --git a/source/_integrations/google_travel_time.markdown b/source/_integrations/google_travel_time.markdown index cf779066813a..0d844ccd1fb9 100644 --- a/source/_integrations/google_travel_time.markdown +++ b/source/_integrations/google_travel_time.markdown @@ -67,13 +67,12 @@ Using automatic polling can lead to calls that exceed your API limit, especially You can use the `homeassistant.update_entity` action to update the sensor on-demand. For example, if you want to update `sensor.morning_commute` every 2 minutes on weekday mornings, you can use the following automation: ```yaml -- id: update_morning_commute_sensor - alias: "Commute - Update morning commute sensor" +- alias: "Commute - Update morning commute sensor" initial_state: "on" - trigger: - - platform: time_pattern + triggers: + - trigger: time_pattern minutes: "/2" - condition: + conditions: - condition: time after: "08:00:00" before: "11:00:00" @@ -84,7 +83,7 @@ You can use the `homeassistant.update_entity` action to update the sensor on-dem - wed - thu - fri - action: + actions: - action: homeassistant.update_entity target: entity_id: sensor.morning_commute diff --git a/source/_integrations/govee_ble.markdown b/source/_integrations/govee_ble.markdown index 53f98d6676ba..3b3d42b25eaa 100644 --- a/source/_integrations/govee_ble.markdown +++ b/source/_integrations/govee_ble.markdown @@ -58,4 +58,4 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot - 5183 Meat Thermometer - 5184 Meat Thermometer - 5185 Meat Thermometer -- [5198 Meat Thermometer](https://us.govee.com/products/govee-wi-fi-grilling-meat-thermometer-with-4-probes) +- 5198 Meat Thermometer diff --git a/source/_integrations/govee_light_local.markdown b/source/_integrations/govee_light_local.markdown index d025249d8c6f..720b032f9903 100644 --- a/source/_integrations/govee_light_local.markdown +++ b/source/_integrations/govee_light_local.markdown @@ -33,23 +33,33 @@ H6062, H6065, H6066, H6067, +H606A, H6072, H6073, H6076, H6078, +H6079, +H607C, H6087, H6088, H608A, H608B, H610A, H610B, +H6110, H6117, H6159, +H615A, +H615B, +H615C, +H615D, H615E, H6163, H6168, H6172, H6173, +H6175, +H6176, H618A, H618C, H618E, @@ -68,25 +78,40 @@ H61A5, H61A8, H61B2, H61B5, +H61BA, H61BE, H61C3, +H61C5, H61D3, +H61D5, +H61E0, H61E1, H7012, H7013, H7020, H7021, H7028, +H7033, +H7037, +H7038, +H7039, H7041, H7042, H7050, H7051, +H7052, H7055, H705A, H705B, +H705C, H7060, H7061, H7062, +H7063, H7065, -H706A, -H70C1 +H7066, +H7075, +H70A1, +H70B1, +H70C1, +H70C2 \ No newline at end of file diff --git a/source/_integrations/gtfs.markdown b/source/_integrations/gtfs.markdown index 6d8f520957c0..3f736aaaae2d 100644 --- a/source/_integrations/gtfs.markdown +++ b/source/_integrations/gtfs.markdown @@ -16,7 +16,7 @@ related: The `gtfs` {% term integration %} will give you the next departure time and associated data from your public transit station/stop. The data comes from your chosen public transit authority and is formatted as [General Transit Feed Specification](https://developers.google.com/transit/gtfs/) data, commonly known as GTFS. -You need to find a valid GTFS data set, which you can usually find just by searching the internet. Most public transit authorities have GTFS available somewhere, as Google requires public transit authorities to provide the data if they wish to appear on Google Maps. You may also be able to find data at [TransitFeeds](https://transitfeeds.com/feeds). +You need to find a valid GTFS data set, which you can usually find just by searching the internet. Most public transit authorities have GTFS available somewhere, as Google requires public transit authorities to provide the data if they wish to appear on Google Maps. You may also be able to find data at [Mobility Database](https://mobilitydatabase.org/). Here are some examples: diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index 03faae79d252..4eea9a0034ac 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -2,7 +2,7 @@ title: Habitica description: Instructions on enabling Habitica support for your Home Assistant ha_category: - - Hub + - To-do list - Sensor ha_release: 0.78 ha_iot_class: Cloud Polling @@ -18,9 +18,26 @@ ha_codeowners: - '@tr4nt0r' ha_config_flow: true ha_integration_type: integration +related: + - docs: /integrations/todo + title: To-do list integration documentation + - docs: /integrations/#to-do-list + title: List of to-do list integrations + - docs: /dashboards/todo-list/ + title: To-do list card + - url: https://habitica.com/ + title: Habitica --- -The Habitca {% term integration %} enables you to monitor your adventurer's progress and stats in Home Assistant and seamlessly integrates your to-do's and daily tasks. +The Habitca {% term integration %} enables you to monitor your adventurer's progress and stats in Home Assistant and seamlessly integrates your to-do's and daily tasks. + +## Prerequisites for Habitica integration + +- To set up the Habitica integration, you must first have an active Habitica account. You can register for an account at [Habitica.com](https://habitica.com/). +- During the setup process in Home Assistant, you can choose between two login options: + - "Login to Habitica", which allows you to log in with your *username* or *email* and *password*. + - "Login to other instances", which requires your `User ID` and `API Token`. The `User ID` and `API Token` can be retrieved by logging into your Habitica account, navigating to the **Settings** menu, and selecting **Site Data**. + - Additionally, you will need to provide the URL for the Habitica instance you wish to connect to; the default URL is `https://habitica.com`, but you can specify a different URL if you are using an alternative Habitica instance or a self-hosted instance. {% include integrations/config_flow.md %} diff --git a/source/_integrations/harmony.markdown b/source/_integrations/harmony.markdown index 5c5dfcd0df9c..cb02f63214d9 100644 --- a/source/_integrations/harmony.markdown +++ b/source/_integrations/harmony.markdown @@ -80,7 +80,7 @@ In the file 'harmony_REMOTENAME.conf' you can find the available activities, for Using the activity name 'Watch TV', you can perform an action via automation to switch this activity on: ```yaml -action: +actions: - action: remote.turn_on target: entity_id: remote.bed_room_hub @@ -205,27 +205,27 @@ The example below shows how to control an `input_boolean` switch using the Harmo ```yaml automation: - alias: "Watch TV started from harmony hub" - trigger: - platform: state - entity_id: remote.family_room - condition: - condition: template - value_template: '{{ trigger.to_state.attributes.current_activity == "Kodi" }}' - action: - action: input_boolean.turn_on - target: - entity_id: input_boolean.notify + triggers: + - trigger: state + entity_id: remote.family_room + conditions: + - condition: template + value_template: '{{ trigger.to_state.attributes.current_activity == "Kodi" }}' + actions: + - action: input_boolean.turn_on + target: + entity_id: input_boolean.notify - alias: "PowerOff started from harmony hub" - trigger: - platform: state - entity_id: remote.family_room - condition: - condition: template - value_template: '{{ trigger.to_state.attributes.current_activity == "PowerOff" }}' - action: - action: input_boolean.turn_off - target: - entity_id: input_boolean.notify + triggers: + - trigger: state + entity_id: remote.family_room + conditions: + - condition: template + value_template: '{{ trigger.to_state.attributes.current_activity == "PowerOff" }}' + actions: + - action: input_boolean.turn_off + target: + entity_id: input_boolean.notify ``` {% endraw %} diff --git a/source/_integrations/havana_shade.markdown b/source/_integrations/havana_shade.markdown index 868f53707cb6..581446f1141b 100644 --- a/source/_integrations/havana_shade.markdown +++ b/source/_integrations/havana_shade.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/hdmi_cec.markdown b/source/_integrations/hdmi_cec.markdown index 31e3dec4532b..b069195b830e 100644 --- a/source/_integrations/hdmi_cec.markdown +++ b/source/_integrations/hdmi_cec.markdown @@ -170,8 +170,8 @@ Use the `hdmi_cec.select_device` action with the name of the device from configu So an Automation action using the example above would look something like this. ```yaml -action: - action: hdmi_cec.select_device +actions: + - action: hdmi_cec.select_device data: device: Chromecast ``` @@ -183,8 +183,8 @@ Use the `hdmi_cec.power_on` action (no arguments) to power on any devices that s An Automation action using the example above would look something like this. ```yaml -action: - action: hdmi_cec.power_on +actions: + - action: hdmi_cec.power_on ``` ### Standby @@ -194,8 +194,8 @@ Use the `hdmi_cec.standby` action (no arguments) to place in standby any devices An Automation action using the example above would look something like this. ```yaml -action: - action: hdmi_cec.standby +actions: + - action: hdmi_cec.standby ``` ### Change volume level diff --git a/source/_integrations/here_travel_time.markdown b/source/_integrations/here_travel_time.markdown index 93f6601a888e..22f420aaa822 100644 --- a/source/_integrations/here_travel_time.markdown +++ b/source/_integrations/here_travel_time.markdown @@ -68,13 +68,12 @@ You can also use the `homeassistant.update_entity` action to update the sensor o ```yaml automation: -- id: update_morning_commute_sensor - alias: "Commute - Update morning commute sensor" +- alias: "Commute - Update morning commute sensor" initial_state: "on" - trigger: - - platform: time_pattern + triggers: + - trigger: time_pattern minutes: "/2" - condition: + conditions: - condition: time after: "08:00:00" before: "11:00:00" @@ -85,7 +84,7 @@ automation: - wed - thu - fri - action: + actions: - action: homeassistant.update_entity target: entity_id: sensor.morning_commute diff --git a/source/_integrations/homeassistant.markdown b/source/_integrations/homeassistant.markdown index 3d510f27d9f6..962600282061 100644 --- a/source/_integrations/homeassistant.markdown +++ b/source/_integrations/homeassistant.markdown @@ -313,12 +313,12 @@ Update the location of the Home Assistant default zone (usually "Home"). #### Example ```yaml -action: - action: homeassistant.set_location - data: - latitude: 32.87336 - longitude: 117.22743 - elevation: 120 +actions: + - action: homeassistant.set_location + data: + latitude: 32.87336 + longitude: 117.22743 + elevation: 120 ``` ### Action `homeassistant.toggle` @@ -335,12 +335,12 @@ for example, a light and a switch can be toggled in a single action. #### Example ```yaml -action: - action: homeassistant.toggle - target: - entity_id: - - light.living_room - - switch.tv +actions: + - action: homeassistant.toggle + target: + entity_id: + - light.living_room + - switch.tv ``` ### Action `homeassistant.turn_on` @@ -357,12 +357,12 @@ for example, a light and a switch can be turned on in a single action. #### Example ```yaml -action: - action: homeassistant.turn_on - target: - entity_id: - - light.living_room - - switch.tv +actions: + - action: homeassistant.turn_on + target: + entity_id: + - light.living_room + - switch.tv ``` ### Action `homeassistant.turn_off` @@ -379,12 +379,12 @@ for example, a light and a switch can be turned off in a single action. #### Example ```yaml -action: - action: homeassistant.turn_off - target: - entity_id: - - light.living_room - - switch.tv +actions: + - action: homeassistant.turn_off + target: + entity_id: + - light.living_room + - switch.tv ``` ### Action `homeassistant.update_entity` @@ -398,12 +398,12 @@ Force one or more entities to update its data rather than wait for the next sche #### Example ```yaml -action: - action: homeassistant.update_entity - target: - entity_id: - - light.living_room - - switch.coffe_pot +actions: + - action: homeassistant.update_entity + target: + entity_id: + - light.living_room + - switch.coffe_pot ``` ### Action `homeassistant.save_persistent_states` diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index 455dec8c8158..4551f8e35844 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -454,17 +454,17 @@ The key name will be available in the event data in the `key_name` field. Exampl ```yaml automation: - trigger: - platform: event - event_type: homekit_tv_remote_key_pressed - event_data: - key_name: arrow_right + triggers: + - trigger: event + event_type: homekit_tv_remote_key_pressed + event_data: + key_name: arrow_right # Send the arrow right key via a broadlink IR blaster - action: - action: broadlink.send - host: 192.168.1.55 - packet: XXXXXXXX + actions: + - action: broadlink.send + host: 192.168.1.55 + packet: XXXXXXXX ``` ## Events @@ -474,13 +474,13 @@ The HomeKit integration emits `homekit_state_change` events. These events can be ```yaml # Example for handling a HomeKit event automation: - trigger: - - platform: event + triggers: + - trigger: event event_type: homekit_state_change event_data: entity_id: cover.garage_door action: open_cover - action: + actions: - action: persistent_notification.create data: message: "The garage door got opened via HomeKit" diff --git a/source/_integrations/homematic.markdown b/source/_integrations/homematic.markdown index 63af5ad4c355..dcbe79985e49 100644 --- a/source/_integrations/homematic.markdown +++ b/source/_integrations/homematic.markdown @@ -252,17 +252,17 @@ Here's an example of how to use these events for automations: ```yaml automation: - trigger: - platform: event - event_type: homematic.keypress - event_data: - name: "Kitchen Switch" - channel: 1 - param: PRESS_SHORT - action: - action: switch.turn_on - target: - entity_id: switch.Kitchen_Ambience + triggers: + - trigger: event + event_type: homematic.keypress + event_data: + name: "Kitchen Switch" + channel: 1 + param: PRESS_SHORT + actions: + - action: switch.turn_on + target: + entity_id: switch.Kitchen_Ambience ``` The channel parameter is equal to the channel of the button you are configuring the automation for. You can view the available channels in the UI you use to pair your devices. @@ -306,37 +306,37 @@ Simulate a button being pressed: ```yaml ... -action: - action: homematic.virtualkey - data: - address: "BidCoS-RF" - channel: 1 - param: PRESS_LONG +actions: + - action: homematic.virtualkey + data: + address: "BidCoS-RF" + channel: 1 + param: PRESS_LONG ``` Open KeyMatic: ```yaml ... -action: - action: homematic.virtualkey - data: - address: "LEQ1234567" - channel: 1 - param: OPEN +actions: + - action: homematic.virtualkey + data: + address: "LEQ1234567" + channel: 1 + param: OPEN ``` Set boolean variable to true: ```yaml ... -action: - action: homematic.set_variable_value - target: - entity_id: homematic.ccu2 - data: - name: "Variablename" - value: true +actions: + - action: homematic.set_variable_value + target: + entity_id: homematic.ccu2 + data: + name: "Variablename" + value: true ``` #### Advanced examples @@ -348,69 +348,69 @@ Manually turn on a switch actor: ```yaml ... -action: - action: homematic.set_device_value - data: - address: "LEQ1234567" - channel: 1 - param: STATE - value: true +actions: + - action: homematic.set_device_value + data: + address: "LEQ1234567" + channel: 1 + param: STATE + value: true ``` Manually set temperature on thermostat: ```yaml ... -action: - action: homematic.set_device_value - data: - address: "LEQ1234567" - channel: 4 - param: SET_TEMPERATURE - value: 23.0 +actions: + - action: homematic.set_device_value + data: + address: "LEQ1234567" + channel: 4 + param: SET_TEMPERATURE + value: 23.0 ``` Manually set the active profile on thermostat: ```yaml ... -action: - action: homematic.set_device_value - data: - address: "LEQ1234567" - channel: 1 - param: ACTIVE_PROFILE - value: 1 - value_type: int +actions: + - action: homematic.set_device_value + data: + address: "LEQ1234567" + channel: 1 + param: ACTIVE_PROFILE + value: 1 + value_type: int ``` Set the week program of a wall thermostat: ```yaml ... -action: - action: homematic.put_paramset - data: - interface: wireless - address: "LEQ1234567" - paramset_key: MASTER - paramset: - WEEK_PROGRAM_POINTER: 1 +actions: + - action: homematic.put_paramset + data: + interface: wireless + address: "LEQ1234567" + paramset_key: MASTER + paramset: + WEEK_PROGRAM_POINTER: 1 ``` Set the week program of a wall thermostat with explicit `rx_mode` (BidCos-RF only): ```yaml ... -action: - action: homematic.put_paramset - data: - interface: wireless - address: "LEQ1234567" - paramset_key: MASTER - rx_mode: WAKEUP - paramset: - WEEK_PROGRAM_POINTER: 1 +actions: + - action: homematic.put_paramset + data: + interface: wireless + address: "LEQ1234567" + paramset_key: MASTER + rx_mode: WAKEUP + paramset: + WEEK_PROGRAM_POINTER: 1 ``` BidCos-RF devices have an optional parameter for put_paramset which defines the way the configuration data is sent to the device. @@ -423,20 +423,20 @@ Manually set lock on KeyMatic devices: ```yaml ... -action: - action: lock.lock - target: - entity_id: lock.leq1234567 +actions: + - action: lock.lock + target: + entity_id: lock.leq1234567 ``` Manually set unlock on KeyMatic devices: ```yaml ... -action: - action: lock.unlock - target: - entity_id: lock.leq1234567 +actions: + - action: lock.unlock + target: + entity_id: lock.leq1234567 ``` @@ -488,13 +488,13 @@ template: automation: - alias: "Homematic Reconnect" - trigger: - platform: state - entity_id: binary_sensor.homematic_is_sending_updates - to: "off" - action: + triggers: + - trigger: state + entity_id: binary_sensor.homematic_is_sending_updates + to: "off" + actions: # Reconnect, if sensor has not been updated for over 10 minutes - action: homematic.reconnect + - action: homematic.reconnect ``` {% endraw %} @@ -534,11 +534,11 @@ automation: ```yaml automation: - alias: "Homematic CCU Reboot" - trigger: - platform: state - entity_id: sensor.v_last_reboot - action: - action: homematic.reconnect + triggers: + - trigger: state + entity_id: sensor.v_last_reboot + actions: + - action: homematic.reconnect ``` ## Notifications diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown index 5b5b696539a4..69251181372d 100644 --- a/source/_integrations/homematicip_cloud.markdown +++ b/source/_integrations/homematicip_cloud.markdown @@ -234,54 +234,54 @@ Activate eco mode with duration. ```yaml ... -action: - action: homematicip_cloud.activate_eco_mode_with_duration - data: - duration: 60 - accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +actions: + - action: homematicip_cloud.activate_eco_mode_with_duration + data: + duration: 60 + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx ``` Activate eco mode with period. ```yaml ... -action: - action: homematicip_cloud.activate_eco_mode_with_period - data: - endtime: 2019-09-17 18:00 - accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +actions: + - action: homematicip_cloud.activate_eco_mode_with_period + data: + endtime: 2019-09-17 18:00 + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx ``` Activates the vacation mode until the given time. ```yaml ... -action: - action: homematicip_cloud.activate_vacation - data: - endtime: 2019-09-17 18:00 - temperature: 18.5 - accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +actions: + - action: homematicip_cloud.activate_vacation + data: + endtime: 2019-09-17 18:00 + temperature: 18.5 + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx ``` Deactivates the eco mode immediately. ```yaml ... -action: - action: homematicip_cloud.deactivate_eco_mode - data: - accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +actions: + - action: homematicip_cloud.deactivate_eco_mode + data: + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx ``` Deactivates the vacation mode immediately. ```yaml ... -action: - action: homematicip_cloud.deactivate_vacation - data: - accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +actions: + - action: homematicip_cloud.deactivate_vacation + data: + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx ``` Set the active climate profile index. @@ -291,43 +291,43 @@ You can get the required index from the native Homematic IP App. ```yaml ... -action: - action: homematicip_cloud.set_active_climate_profile - target: - entity_id: climate.livingroom - data: - climate_profile_index: 1 +actions: + - action: homematicip_cloud.set_active_climate_profile + target: + entity_id: climate.livingroom + data: + climate_profile_index: 1 ``` Dump the configuration of the Homematic IP Access Point(s). ```yaml ... -action: - action: homematicip_cloud.dump_hap_config - data: - anonymize: True +actions: + - action: homematicip_cloud.dump_hap_config + data: + anonymize: True ``` Reset energy counter of measuring actuators. ```yaml ... -action: - action: homematicip_cloud.reset_energy_counter - target: - entity_id: switch.livingroom +actions: + - action: homematicip_cloud.reset_energy_counter + target: + entity_id: switch.livingroom ``` Enable (or disable) Cooling mode for the entire home. Disabling Cooling mode will revert to Heating. ```yaml ... -action: - action: homematicip_cloud.set_home_cooling_mode - data: - cooling: True - accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx +actions: + - action: homematicip_cloud.set_home_cooling_mode + data: + cooling: True + accesspoint_id: 3014xxxxxxxxxxxxxxxxxxxx ``` ## Additional info diff --git a/source/_integrations/honeywell.markdown b/source/_integrations/honeywell.markdown index 0f27d9479634..425a0607073b 100644 --- a/source/_integrations/honeywell.markdown +++ b/source/_integrations/honeywell.markdown @@ -55,13 +55,13 @@ Due to the instability of the Honeywell total connect system, actions within aut ```yaml alias: "No one home" description: "Everyone has left home" -trigger: - - platform: numeric_state +triggers: + - trigger: numeric_state entity_id: zone.home for: minutes: 10 below: 1 -action: +actions: - repeat: sequence: - action: climate.set_temperature diff --git a/source/_integrations/html5.markdown b/source/_integrations/html5.markdown index da7d2cb19c63..b1c425cb28e1 100644 --- a/source/_integrations/html5.markdown +++ b/source/_integrations/html5.markdown @@ -4,6 +4,7 @@ description: Instructions on how to use the HTML5 push notifications platform fr ha_category: - Notifications ha_release: 0.27 +ha_config_flow: true ha_iot_class: Cloud Push ha_domain: html5 ha_platforms: @@ -12,6 +13,8 @@ ha_integration_type: integration related: - docs: /docs/configuration/ title: Configuration file +ha_codeowners: + - '@alexyao2015' --- The `html5` notification {% term integration %} enables you to receive push notifications to Chrome or Firefox, no matter where you are in the world. `html5` also supports Chrome and Firefox on Android, which enables native-app-like integrations without actually needing a native app. @@ -20,35 +23,6 @@ The `html5` notification {% term integration %} enables you to receive push noti HTML5 push notifications **do not** work on iOS versions below 16.4. {% endimportant %} -## Configuration - -To enable this platform, add the following lines to your {% term "`configuration.yaml`" %} file. -{% include integrations/restart_ha_after_config_inclusion.md %} - -```yaml -# Example configuration.yaml entry -notify: - - platform: html5 - vapid_pub_key: YOUR_PUBLIC_KEY - vapid_prv_key: YOUR_PRIVATE_KEY - vapid_email: YOUR_EMAIL -``` - -{% configuration %} -vapid_pub_key: - description: The VAPID public key generated by Google (this is the key that is immediately visible under "webpush certificates"), [see configuring the platform](#configuring-the-platform). - required: true - type: string -vapid_prv_key: - description: The VAPID private key generated by Google, [see configuring the platform](#configuring-the-platform). - required: true - type: string -vapid_email: - description: The email account of your Google account associated with your Firebase project, [see configuring the platform](#configuring-the-platform). - required: true - type: string -{% endconfiguration %} - ### Requirements The `html5` platform can only function if all of the following requirements are met: @@ -60,15 +34,8 @@ The `html5` platform can only function if all of the following requirements are - You have configured SSL/TLS for your Home Assistant. It doesn't need to be configured in Home Assistant though, e.g., you can be running NGINX in front of Home Assistant and this will still work. The certificate must be trustworthy (i.e., not self-signed). - You are willing to accept the notification permission in your browser. -### Configuring the platform -1. Create a new project at [https://console.cloud.google.com/home/dashboard](https://console.cloud.google.com/home/dashboard), this project will be imported into Firebase later (alternatively, the project can also be created in the next step). -2. Go to [https://console.firebase.google.com](https://console.firebase.google.com), and click the "Add project" button -3. Choose your Google Cloud project for the name field (or create a new one). Decline analytics. -4. Then, click the cogwheel on top left and select "Project settings". -5. Select the "Cloud Messaging" tab. -6. Generate a new key pair in "Web configuration" at the bottom of the page. Add the public key as `vapid_pub_key` in the config, then choose the 3 dots, and copy the private key for `vapid_prv_key` in the config. -7. Input your Google email as `vapid_email` in the config. +{% include integrations/config_flow.md %} ### Setting up your browser @@ -142,15 +109,15 @@ Example of adding a tag to your notification. This won't create new notification ```yaml - alias: "Push/update notification of sensor state with tag" - trigger: - - platform: state + triggers: + - trigger: state entity_id: sensor.sensor - action: - action: notify.html5 - data: - message: "Last known sensor state is {{ states('sensor.sensor') }}." + actions: + - action: notify.html5 data: - tag: "notification-about-sensor" + message: "Last known sensor state is {{ states('sensor.sensor') }}." + data: + tag: "notification-about-sensor" ``` {% endraw %} @@ -242,9 +209,9 @@ notification is received on the device. ```yaml - alias: "HTML5 push notification received and displayed on device" - trigger: - platform: event - event_type: html5_notification.received + triggers: + - trigger: event + event_type: html5_notification.received ``` #### clicked event @@ -253,20 +220,20 @@ You will receive an event named `html5_notification.clicked` when the notificati ```yaml - alias: "HTML5 push notification clicked" - trigger: - platform: event - event_type: html5_notification.clicked + triggers: + - trigger: event + event_type: html5_notification.clicked ``` or ```yaml - alias: "HTML5 push notification action button clicked" - trigger: - platform: event - event_type: html5_notification.clicked - event_data: - action: open_door + triggers: + - trigger: event + event_type: html5_notification.clicked + event_data: + action: open_door ``` #### closed event @@ -275,9 +242,9 @@ You will receive an event named `html5_notification.closed` when the notificatio ```yaml - alias: "HTML5 push notification clicked" - trigger: - platform: event - event_type: html5_notification.closed + triggers: + - trigger: event + event_type: html5_notification.closed ``` ### Making notifications work with NGINX proxy diff --git a/source/_integrations/humidifier.markdown b/source/_integrations/humidifier.markdown index cc0f8fad3f81..7798a5297c80 100644 --- a/source/_integrations/humidifier.markdown +++ b/source/_integrations/humidifier.markdown @@ -69,10 +69,10 @@ Set mode for the humidifier device. This action is only available if the device ```yaml automation: - trigger: - - platform: time + triggers: + - trigger: time at: "07:15:00" - action: + actions: - action: humidifier.set_mode target: entity_id: humidifier.bedroom @@ -93,10 +93,10 @@ Set target humidity of the humidifier device ```yaml automation: - trigger: - - platform: time + triggers: + - trigger: time at: "07:15:00" - action: + actions: - action: humidifier.set_humidity target: entity_id: humidifier.bedroom diff --git a/source/_integrations/hunterdouglas_powerview.markdown b/source/_integrations/hunterdouglas_powerview.markdown index cd8566d514dc..aed1a8530453 100644 --- a/source/_integrations/hunterdouglas_powerview.markdown +++ b/source/_integrations/hunterdouglas_powerview.markdown @@ -224,10 +224,10 @@ Velocity controls the speed of the shade. The default speed from Hunter Douglas ``` yaml alias: "Blinds closed at night" -trigger: - platform: time - at: "18:00:00" -action: +triggers: + - trigger: time + at: "18:00:00" +actions: - action: scene.turn_on target: entity_id: scene.10877 @@ -238,13 +238,12 @@ action: This automation is not recommended for battery-powered shades. ``` yaml -alias: Force Update -description: 'Update the position of defined shades' -mode: single -trigger: - - platform: time_pattern - hours: '1' -action: +alias: "Force Update" +description: "Update the position of defined shades" +triggers: + - trigger: time_pattern + hours: 1 +actions: - action: homeassistant.update_entity target: entity_id: diff --git a/source/_integrations/hurrican_shutters_wholesale.markdown b/source/_integrations/hurrican_shutters_wholesale.markdown index 68d1123622c2..ee2d175e91ae 100644 --- a/source/_integrations/hurrican_shutters_wholesale.markdown +++ b/source/_integrations/hurrican_shutters_wholesale.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown index 9aac9c28ac95..b842f1e616bc 100644 --- a/source/_integrations/husqvarna_automower.markdown +++ b/source/_integrations/husqvarna_automower.markdown @@ -4,6 +4,7 @@ description: Instructions on how to integrate Husqvarna Automower lawn mowers in ha_category: - Binary sensor - Button + - Calendar - Device tracker - Lawn Mower - Number @@ -18,6 +19,7 @@ ha_codeowners: ha_platforms: - binary_sensor - button + - calendar - device_tracker - diagnostics - lawn_mower @@ -121,7 +123,14 @@ The integration will create the following binary sensors: ### Button (if available) -The integration will create a button entity for confirming minor mower errors. +The integration will create the following buttons: + +- **Confirm Error** (if available): For confirming minor mower errors. +- **Sync clock**: Syncs the clock of the mower with the time set in Home Assistant. + +### Calendar + +The integration will create a calendar entity for all mowers. The calendar shows all current and upcoming schedules. ### Device tracker (if available) @@ -179,6 +188,10 @@ The integration will create a switch for each stay-out zone defined for your mow The integration will create a switch to enable or disable the schedule of the mower. If the switch is on, the mower will mow according to the schedule. If the switch is off the mower will return to the dock and park until further notice. +#### Work area (if available) + +The integration will create a switch for each work area defined for your mower. When the switch is on, the mower mows the corresponding area. When the switch is off, the mower doesn't mow the corresponding area. + ## Actions The integration offers the following actions: @@ -208,7 +221,7 @@ This will override all your schedules during this time. The duration can be give ```yaml # Replace with the name of your mower. -service: husqvarna_automower.override_schedule +service: husqvarna_automower.override_schedule_work_area target: entity_id: lawn_mower. data: diff --git a/source/_integrations/hyperion.markdown b/source/_integrations/hyperion.markdown index 78bf19893063..98a6ff2689a6 100644 --- a/source/_integrations/hyperion.markdown +++ b/source/_integrations/hyperion.markdown @@ -111,13 +111,12 @@ To start Hyperion with an effect, use the following automation: ```yaml automation: -- id: one - alias: "Turn Hyperion effect on when light goes on" - trigger: - - platform: state +- alias: "Turn Hyperion effect on when light goes on" + triggers: + - trigger: state entity_id: light.hyperion to: "on" - action: + actions: - action: light.turn_on target: entity_id: light.hyperion @@ -129,17 +128,17 @@ To have the lights playing an effect when pausing, idle or turn off a media play ```yaml - alias: "Set hyperion effect after playback" - trigger: - - platform: state + triggers: + - trigger: state entity_id: media_player.plex to: "off" - - platform: state + - trigger: state entity_id: media_player.plex.plex to: "paused" - - platform: state + - trigger: state entity_id: media_player.plex.plex to: "idle" - action: + actions: - action: light.turn_on target: entity_id: light.hyperion @@ -151,11 +150,11 @@ To capture the screen on a USB capture device, when playing something on a media ```yaml - alias: "Set hyperion when playback starts" - trigger: - - platform: state + triggers: + - trigger: state entity_id: media_player.plex to: "playing" - action: + actions: - action: switch.turn_on target: entity_id: switch.[instance]_component_usb_capture @@ -165,17 +164,17 @@ To toggle the LED device together with the light entity in order to turn light o ```yaml - alias: "Turn LED device on when Hyperion light is activated" - trigger: - - platform: state + triggers: + - trigger: state entity_id: - light.hyperion from: "off" to: "on" - condition: + conditions: - condition: state entity_id: switch.[instance]_component_led_device state: "off" - action: + actions: - action: switch.turn_on target: entity_id: switch.[instance]_component_led_device diff --git a/source/_integrations/ibeacon.markdown b/source/_integrations/ibeacon.markdown index ef44d6fadc59..38e771d94e89 100644 --- a/source/_integrations/ibeacon.markdown +++ b/source/_integrations/ibeacon.markdown @@ -70,12 +70,12 @@ To get the Estimated distance sensor to work, in most cases, it has to be calibr - [Blue Charm Beacons BC-U1-USB-Powered-MultiBeacon](https://bluecharmbeacons.com/product/bluetooth-ble-ibeacon-bc-u1-multibeacon-usb-powered/) - [Blue Charm Beacons BC011-MultiBeacon](https://bluecharmbeacons.com/product/bluetooth-ble-multi-beacon-bc011/) - [Blue Charm Beacons BC021-MultiBeacon](https://bluecharmbeacons.com/product/bluetooth-ble-ibeacon-bc021-multibeacon-with-button-trigger-and-motion-sensor/) -- [Blue Charm Beacons BC037G-GeoPattern-iBeacon](https://bluecharmbeacons.com/product/blue-charm-bc037-ibeacon/) -- [Blue Charm Beacons BC037S-SmoothPattern-iBeacon](https://bluecharmbeacons.com/product/bluetooth-ble-ibeacon-bc037s-ibeacon/) -- [Blue Charm Beacons BC08-MultiBeacon](https://bluecharmbeacons.com/product/blue-charm-beacons-bluetooth-ble-ibeacon-bc08-multibeacon-w-motion-sensor-and-button-trigger-ble-5-0/) - Blue Charm Beacons BC037G-GeoPattern-iBeacon (discontinued) - Blue Charm Beacons BC037S-SmoothPattern-iBeacon (discontinued) -- [Blue SLIM ID](https://elainnovation.com/en/product/blue-slim-id-en/) +- Blue Charm Beacons BC08-MultiBeacon (discontinued) +- Blue Charm Beacons BC037G-GeoPattern-iBeacon (discontinued) +- Blue Charm Beacons BC037S-SmoothPattern-iBeacon (discontinued) +- [Blue SLIM ID](https://elainnovation.com/en/catalogue/blue-slim-id-en/) - [Feasycom FSC-BP103B](https://www.feasycom.com/bluetooth-ibeacon-da14531) - [Feasycom FSC-BP104D](https://www.feasycom.com/dialog-da14531-bluetooth-low-energy-beacon) - [Feasycom FSC-BP106](https://www.feasycom.com/fsc-bp106) @@ -91,23 +91,22 @@ To get the Estimated distance sensor to work, in most cases, it has to be calibr ```yaml alias: "The black trash can has left the building" -mode: single -trigger: - - platform: state +triggers: + - trigger: state entity_id: sensor.black_trash_bin_estimated_distance to: "unavailable" for: hours: 0 minutes: 5 seconds: 0 - - platform: numeric_state + - trigger: numeric_state entity_id: sensor.black_trash_bin_estimated_distance for: hours: 0 minutes: 5 seconds: 0 above: 20 -action: +actions: - action: notify.notify data: message: "The black trash can has left the building" diff --git a/source/_integrations/ifttt.markdown b/source/_integrations/ifttt.markdown index 4d56b864deb8..065c535ca095 100644 --- a/source/_integrations/ifttt.markdown +++ b/source/_integrations/ifttt.markdown @@ -36,18 +36,16 @@ You then need to consume that incoming information with the following automation ```yaml automation: -- id: this_is_the_automation_id - alias: "The optional automation alias" - trigger: - - platform: event - event_type: ifttt_webhook_received - event_data: - action: call_service # the same action 'name' you used in the Body section of the IFTTT recipe - condition: [] - action: - - action: '{{ trigger.event.data.service }}' - target: - entity_id: '{{ trigger.event.data.entity_id }}' +- alias: "The optional automation alias" + triggers: + - trigger: event + event_type: ifttt_webhook_received + event_data: + action: call_service # the same action 'name' you used in the Body section of the IFTTT recipe + actions: + - action: '{{ trigger.event.data.service }}' + target: + entity_id: '{{ trigger.event.data.entity_id }}' ``` @@ -143,12 +141,12 @@ Add the *Then That* action. The below example sends a notification to the IFTTT # Example configuration.yaml Automation entry automation: alias: "Startup Notification" - trigger: - platform: homeassistant - event: start - action: - action: ifttt.trigger - data: {"event":"TestHA_Trigger", "value1":"Hello World!"} + triggers: + - trigger: homeassistant + event: start + actions: + - action: ifttt.trigger + data: {"event":"TestHA_Trigger", "value1":"Hello World!"} ``` {% endraw %} @@ -161,15 +159,15 @@ IFTTT can also be used in scripts and with templates. Here is the above automati # Example configuration.yaml Automation entry automation: alias: "Startup Notification" - trigger: - platform: homeassistant - event: start - action: - action: script.ifttt_notify - data: - value1: "HA Status:" - value2: "{{ trigger.event.data.entity_id.split('_')[1] }} is " - value3: "{{ trigger.event.data.to_state.state }}" + triggers: + - trigger: homeassistant + event: start + actions: + - action: script.ifttt_notify + data: + value1: "HA Status:" + value2: "{{ trigger.event.data.entity_id.split('_')[1] }} is " + value3: "{{ trigger.event.data.to_state.state }}" ``` {% endraw %} diff --git a/source/_integrations/image_processing.markdown b/source/_integrations/image_processing.markdown index 9cb3e8f28249..799f1e18d9f1 100644 --- a/source/_integrations/image_processing.markdown +++ b/source/_integrations/image_processing.markdown @@ -34,12 +34,12 @@ The `found_plate` event is triggered after OpenALPR has found a new license plat # Example configuration.yaml automation entry automation: - alias: "Open garage door" - trigger: - platform: event - event_type: image_processing.found_plate - event_data: - entity_id: openalpr.camera_garage_1 - plate: BE2183423 + triggers: + - trigger: event + event_type: image_processing.found_plate + event_data: + entity_id: openalpr.camera_garage_1 + plate: BE2183423 ... ``` @@ -55,12 +55,12 @@ The `detect_face` event is triggered after a Face entity has found a face. # Example configuration.yaml automation entry automation: - alias: "Known person in front of my door" - trigger: - platform: event - event_type: image_processing.detect_face - event_data: - entity_id: image_processing.door - name: "Hans Maier" + triggers: + - trigger: event + event_type: image_processing.detect_face + event_data: + entity_id: image_processing.door + name: "Hans Maier" ... ``` @@ -78,11 +78,11 @@ sensor: ... automation: - alias: "Scan for faces when motion detected" - trigger: - - platform: state + triggers: + - trigger: state entity_id: sensor.door_motion_sensor to: "on" - action: + actions: - action: image_processing.scan target: entity_id: image_processing.door diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown index ef205fc0666e..c1403b4e91d1 100644 --- a/source/_integrations/imap.markdown +++ b/source/_integrations/imap.markdown @@ -145,8 +145,8 @@ Increasing the default maximum message size (2048 bytes) could have a negative i ```yaml template: - - trigger: - - platform: event + - triggers: + - trigger: event event_type: "imap_content" id: "custom_event" sensor: @@ -194,17 +194,17 @@ The example below filters the event trigger by `entry_id`, fetches the message a {% raw %} ```yaml -alias: imap fetch and seen example -description: Fetch and mark an incoming message as seen -trigger: - - platform: event +alias: "imap fetch and seen example" +description: "Fetch and mark an incoming message as seen" +triggers: + - trigger: event event_type: imap_content event_data: entry_id: 91fadb3617c5a3ea692aeb62d92aa869 -condition: +conditions: - condition: template value_template: "{{ trigger.event.data['sender'] == 'info@example.com' }}" -action: +actions: - action: imap.fetch data: entry: 91fadb3617c5a3ea692aeb62d92aa869 @@ -215,10 +215,8 @@ action: entry: 91fadb3617c5a3ea692aeb62d92aa869 uid: "{{ trigger.event.data['uid'] }}" - action: persistent_notification.create - metadata: {} data: message: "{{ message_text['subject'] }}" -mode: single ``` {% endraw %} @@ -231,8 +229,8 @@ The following example shows the usage of the IMAP email content sensor to scan t ```yaml template: - - trigger: - - platform: event + - triggers: + - trigger: event event_type: "imap_content" id: "custom_event" event_data: @@ -269,8 +267,8 @@ Below is the template sensor which extracts the information from the body of the ```yaml template: - - trigger: - - platform: event + - triggers: + - trigger: event event_type: "imap_content" id: "custom_event" event_data: @@ -318,8 +316,8 @@ The example below will only set the state to the subject of the email of templat ```yaml template: - - trigger: - - platform: event + - triggers: + - trigger: event event_type: "imap_content" id: "custom_event" event_data: diff --git a/source/_integrations/incomfort.markdown b/source/_integrations/incomfort.markdown index 483197614f81..f35e7fe31843 100644 --- a/source/_integrations/incomfort.markdown +++ b/source/_integrations/incomfort.markdown @@ -48,17 +48,17 @@ To send an alert if the CV pressure is too low or too high, consider the followi ```yaml - alias: "Low CV Pressure Alert" - trigger: - platform: numeric_state - entity_id: sensor.cv_pressure - below: 1.0 - action: - - action: notify.pushbullet_notifier - data: - title: "Warning: Low CH Pressure" - message: >- - {{ trigger.to_state.attributes.friendly_name }} - is low, {{ trigger.to_state.state }} bar. + triggers: + - trigger: numeric_state + entity_id: sensor.cv_pressure + below: 1.0 + actions: + - action: notify.pushbullet_notifier + data: + title: "Warning: Low CH Pressure" + message: >- + {{ trigger.to_state.attributes.friendly_name }} + is low, {{ trigger.to_state.state }} bar. ``` {% endraw %} diff --git a/source/_integrations/input_boolean.markdown b/source/_integrations/input_boolean.markdown index 2c9597b0e39e..c1c2c624f02f 100644 --- a/source/_integrations/input_boolean.markdown +++ b/source/_integrations/input_boolean.markdown @@ -88,15 +88,15 @@ will only occur if the `input_boolean` is on. ```yaml automation: alias: "Arriving home" - trigger: - - platform: state + triggers: + - trigger: state entity_id: binary_sensor.motion_garage to: "on" - condition: + conditions: - condition: state entity_id: input_boolean.notify_home state: "on" - action: + actions: - action: notify.pushbullet data: title: "" diff --git a/source/_integrations/input_button.markdown b/source/_integrations/input_button.markdown index 805636c71aa2..4b583a0d04b5 100644 --- a/source/_integrations/input_button.markdown +++ b/source/_integrations/input_button.markdown @@ -67,10 +67,10 @@ Because the state of a input button entity in Home Assistant is a timestamp, it means we can use it in our automations. For example: ```yaml -trigger: - - platform: state +triggers: + - trigger: state entity_id: input_button.my_button -action: +actions: - action: notify.frenck data: message: "My button has been pressed!" diff --git a/source/_integrations/input_datetime.markdown b/source/_integrations/input_datetime.markdown index 4d72f439c616..cffda094677a 100644 --- a/source/_integrations/input_datetime.markdown +++ b/source/_integrations/input_datetime.markdown @@ -117,13 +117,13 @@ automation: # Example configuration.yaml entry # Turns on bedroom light at the time specified. automation: - trigger: - platform: time - at: input_datetime.bedroom_alarm_clock_time - action: - action: light.turn_on - target: - entity_id: light.bedroom + triggers: + - trigger: time + at: input_datetime.bedroom_alarm_clock_time + actions: + - action: light.turn_on + target: + entity_id: light.bedroom ``` To dynamically set the `input_datetime` you can call diff --git a/source/_integrations/input_number.markdown b/source/_integrations/input_number.markdown index 3ae736e31454..56fb95be0376 100644 --- a/source/_integrations/input_number.markdown +++ b/source/_integrations/input_number.markdown @@ -125,12 +125,13 @@ input_number: min: 0 max: 254 step: 1 + automation: - alias: "Bedroom Light - Adjust Brightness" - trigger: - platform: state - entity_id: input_number.bedroom_brightness - action: + triggers: + - trigger: state + entity_id: input_number.bedroom_brightness + actions: - action: light.turn_on target: entity_id: light.bedroom @@ -157,6 +158,7 @@ input_select: - Relax - 'OFF' initial: "Select" + input_number: bedroom_brightness: name: Brightness @@ -164,13 +166,14 @@ input_number: min: 0 max: 254 step: 1 + automation: - alias: "Bedroom Light - Custom" - trigger: - platform: state - entity_id: input_select.scene_bedroom - to: CUSTOM - action: + triggers: + - trigger: state + entity_id: input_select.scene_bedroom + to: "CUSTOM" + actions: - action: light.turn_on target: entity_id: light.bedroom @@ -199,28 +202,28 @@ input_number: # It sets the value slider on the GUI. This slides also had its own automation when the value is changed. automation: - alias: "Set temp slider" - trigger: - platform: mqtt - topic: "setTemperature" - action: - action: input_number.set_value - target: - entity_id: input_number.target_temp - data: - value: "{{ trigger.payload }}" + triggers: + - trigger: mqtt + topic: "setTemperature" + actions: + - action: input_number.set_value + target: + entity_id: input_number.target_temp + data: + value: "{{ trigger.payload }}" # This second automation script runs when the target temperature slider is moved. # It publishes its value to the same MQTT topic it is also subscribed to. - alias: "Temp slider moved" - trigger: - platform: state - entity_id: input_number.target_temp - action: - action: mqtt.publish - data: - topic: "setTemperature" - retain: true - payload: "{{ states('input_number.target_temp') | int }}" + triggers: + - trigger: state + entity_id: input_number.target_temp + actions: + - action: mqtt.publish + data: + topic: "setTemperature" + retain: true + payload: "{{ states('input_number.target_temp') | int }}" ``` {% endraw %} @@ -249,16 +252,16 @@ input_number: step: 10 automation: - - alias: "turn something off after x time after turning it on" - trigger: - platform: state - entity_id: switch.something - to: "on" - action: - - delay: "00:{{ states('input_number.minutes') | int }}:{{ states('input_number.seconds') | int }}" - - action: switch.turn_off - target: - entity_id: switch.something + - alias: "turn something off after x time after turning it on" + triggers: + - trigger: state + entity_id: switch.something + to: "on" + actions: + - delay: "00:{{ states('input_number.minutes') | int }}:{{ states('input_number.seconds') | int }}" + - action: switch.turn_off + target: + entity_id: switch.something ``` {% endraw %} diff --git a/source/_integrations/input_select.markdown b/source/_integrations/input_select.markdown index 3c416aaf829a..a31e21b26021 100644 --- a/source/_integrations/input_select.markdown +++ b/source/_integrations/input_select.markdown @@ -135,15 +135,15 @@ The following example shows the usage of the `input_select.select_option` action # Example configuration.yaml entry automation: - alias: "example automation" - trigger: - platform: event - event_type: MY_CUSTOM_EVENT - action: + triggers: + - trigger: event + event_type: MY_CUSTOM_EVENT + actions: - action: input_select.select_option target: entity_id: input_select.who_cooks data: - option: Paulus + option: "Paulus" ``` To dynamically set the `input_select` options you can call `input_select.set_options` in an automation: @@ -152,10 +152,10 @@ To dynamically set the `input_select` options you can call `input_select.set_opt # Example configuration.yaml entry automation: - alias: "example automation" - trigger: - platform: event - event_type: MY_CUSTOM_EVENT - action: + triggers: + - trigger: event + event_type: MY_CUSTOM_EVENT + actions: - action: input_select.set_options target: entity_id: input_select.who_cooks @@ -185,29 +185,29 @@ input_select: # This automation script runs when a value is received via MQTT on retained topic: thermostatMode # It sets the value selector on the GUI. This selector also had its own automation when the value is changed. - alias: "Set Thermostat Mode Selector" - trigger: - platform: mqtt - topic: "thermostatMode" + triggers: + - trigger: mqtt + topic: "thermostatMode" # entity_id: input_select.thermostat_mode - action: - action: input_select.select_option - target: - entity_id: input_select.thermostat_mode - data: - option: "{{ trigger.payload }}" + actions: + - action: input_select.select_option + target: + entity_id: input_select.thermostat_mode + data: + option: "{{ trigger.payload }}" # This automation script runs when the thermostat mode selector is changed. # It publishes its value to the same MQTT topic it is also subscribed to. - alias: "Set Thermostat Mode" - trigger: - platform: state - entity_id: input_select.thermostat_mode - action: - action: mqtt.publish - data: - topic: "thermostatMode" - retain: true - payload: "{{ states('input_select.thermostat_mode') }}" + triggers: + - trigger: state + entity_id: input_select.thermostat_mode + actions: + - action: mqtt.publish + data: + topic: "thermostatMode" + retain: true + payload: "{{ states('input_select.thermostat_mode') }}" ``` {% endraw %} diff --git a/source/_integrations/input_text.markdown b/source/_integrations/input_text.markdown index 414c22bd29cf..737e796618b3 100644 --- a/source/_integrations/input_text.markdown +++ b/source/_integrations/input_text.markdown @@ -129,10 +129,10 @@ input_text: automation: - alias: "Bedroom Light - Custom" - trigger: - platform: state - entity_id: input_select.scene_bedroom - action: + triggers: + - trigger: state + entity_id: input_select.scene_bedroom + actions: - action: input_text.set_value target: entity_id: input_text.bedroom diff --git a/source/_integrations/inspired_shades.markdown b/source/_integrations/inspired_shades.markdown index 6305a38ac2fb..f5a6b735a18e 100644 --- a/source/_integrations/inspired_shades.markdown +++ b/source/_integrations/inspired_shades.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/insteon.markdown b/source/_integrations/insteon.markdown index a51ddb2ae08e..2a39cf79d74b 100644 --- a/source/_integrations/insteon.markdown +++ b/source/_integrations/insteon.markdown @@ -132,9 +132,8 @@ Triggering an Insteon scene on or off is done via automations. Two actions are p ```yaml automation: # Trigger an Insteon scene 25 - - id: trigger_scene_25_on - alias: "Turn on scene 25" - action: + - alias: "Turn on scene 25" + actions: - action: insteon.scene_on group: 25 ``` @@ -155,36 +154,34 @@ This allows the mini-remotes to be configured as triggers for automations. Here ```yaml automation: # 4 or 8 button remote with button c pressed - - id: light_on - alias: "Turn a light on" - trigger: - - platform: event + - alias: "Turn a light on" + triggers: + - trigger: event event_type: insteon.button_on event_data: address: 1a2b3c button: c - condition: + conditions: - condition: state entity_id: light.some_light state: "off" - action: + actions: - action: light.turn_on target: entity_id: light.some_light # single button remote - - id: light_off - alias: "Turn a light off" - trigger: - - platform: event + - alias: "Turn a light off" + triggers: + - trigger: event event_type: insteon.button_on event_data: address: 1a2b3c - condition: + conditions: - condition: state entity_id: light.some_light state: "off" - action: + actions: - action: light.turn_on target: entity_id: light.some_light diff --git a/source/_integrations/intent_script.markdown b/source/_integrations/intent_script.markdown index d8a70a8f69ee..d6188ae35d29 100644 --- a/source/_integrations/intent_script.markdown +++ b/source/_integrations/intent_script.markdown @@ -46,7 +46,7 @@ intent: description: List of domains that the entity supports. required: false type: list - action: + actions: description: Defines an action to run to intents. required: false type: action @@ -109,7 +109,7 @@ conversation: intent_script: EventCountToday: - action: + actions: - action: calendar.get_events target: entity_id: calendar.my_calendar diff --git a/source/_integrations/iotty.markdown b/source/_integrations/iotty.markdown index 821016c8d446..52b85e19e19c 100644 --- a/source/_integrations/iotty.markdown +++ b/source/_integrations/iotty.markdown @@ -3,41 +3,52 @@ title: iotty description: Instructions on how to connect iotty Smart Devices to Home Assistant. ha_release: '2024.8' ha_category: + - Cover - Switch ha_iot_class: Cloud Polling ha_config_flow: true ha_codeowners: - '@pburgio' + - '@shapournemati-iotty' ha_domain: iotty ha_platforms: + - cover - switch ha_integration_type: device --- -The iotty {% term integration%} lets you integrate iotty devices into Home Assistant. The iotty family includes the smart switch for lights and gates, the smart shades switch for blinds and shutters, and the smart outlet. - - -{% include integrations/config_flow.md %} +The iotty {% term integration%} lets you integrate iotty devices into Home Assistant. The iotty family includes the smart switch for lights and gates, the smart shades switch for blinds and shutters, and the smart outlet. ## Prerequisites In order to use this integration, you must have an iotty account, and enter its credentials during account pairing. To create an iotty account, you need to get the App from the [App Store](https://apps.apple.com/it/app/iotty-smart-home/id1230937401) or [Play Store](https://play.google.com/store/apps/details?id=com.dynamicait.iotty&hl=en). +{% include integrations/config_flow.md %} + ## Supported devices This integration currently supports the following iotty devices: -- iotty Smart Switch \ - US version: - - [1-Switch Controller](https://iottysmarthome.com/products/1-switch-controller?variant=43630747058389) - - [2-Switch Controller](https://iottysmarthome.com/products/2-switch-controller?variant=43630751219925) - - [3-Switch Controller](https://iottysmarthome.com/products/3-switch-controller?variant=43630760493269) - - [4-Switch Controller](https://iottysmarthome.com/products/4-switch-controller?variant=43630774386901) - EU version: - - [iotty Smart Switch](https://iotty.uk/collections/frontpage/products/iotty-smart-switch) - - [iotty Smart Switch (variant)](https://iotty.uk/collections/frontpage/products/iotty-smart-switch?variant=40820222460082) - - [iotty Plus Interruttore Intelligente](https://iotty.it/collections/frontpage/products/iotty-plus-interruttore-intelligente-per-luci-e-cancelli) +### iotty Smart Switch + +US version: + +- [1-Switch Controller](https://iottysmarthome.com/products/1-switch-controller?variant=43630747058389) +- [2-Switch Controller](https://iottysmarthome.com/products/2-switch-controller?variant=43630751219925) +- [3-Switch Controller](https://iottysmarthome.com/products/3-switch-controller?variant=43630760493269) +- [4-Switch Controller](https://iottysmarthome.com/products/4-switch-controller?variant=43630774386901) + +EU version: + +- [iotty Smart Switch](https://iotty.uk/collections/frontpage/products/iotty-smart-switch) +- [iotty Smart Switch (variant)](https://iotty.uk/collections/frontpage/products/iotty-smart-switch?variant=40820222460082) +- [iotty Plus Interruttore Intelligente](https://iotty.it/collections/frontpage/products/iotty-plus-interruttore-intelligente-per-luci-e-cancelli) + +### iotty Shutter + +- [iotty Smart Shades Switch](https://iotty.uk/collections/frontpage/products/e2s-plus-smart-shades-switch-for-shutters-and-blinds) +- [iotty Plus Interruttore Intelligente per Tende e Tapparelle](https://iotty.it/collections/prodotti-singoli/products/i3s-plus-interruttore-intelligente-per-tende-e-tapparelle) (currently only available for the Italian market) ## Supported entities @@ -46,3 +57,7 @@ Each iotty device gets mapped into one Home Assistant device per gang, each with ### Switches The main, unnamed, switch entity controls the light switch, turning it on or off the gang related to it. + +### Covers + +The main, unnamed, cover entity controls the shutter, opening, closing, stopping, and moving to a specific position the target. diff --git a/source/_integrations/iskra.markdown b/source/_integrations/iskra.markdown new file mode 100644 index 000000000000..f67297045244 --- /dev/null +++ b/source/_integrations/iskra.markdown @@ -0,0 +1,80 @@ +--- +title: Iskra +description: Instructions on how to connect your Iskra energy meters to Home Assistant. +ha_release: '2024.10' +ha_category: + - Energy + - Sensor +ha_codeowners: + - '@iskramis' +ha_config_flow: true +ha_domain: iskra +ha_iot_class: Local Polling +ha_platforms: + - sensor +ha_integration_type: hub +--- + +The [Iskra](https://www.iskra.eu/) {% term integration %} allows you to connect Iskra energy meters and power quality analyzers to Home Assistant. Data is polled using Modbus TCP or the Iskra Smart Gateway's REST API. + +## Supported devices + +This integration supports Iskra's devices, which should not be confused with Iskraemeco, another manufacturer of energy meters commonly used by electrical distributors for billing purposes. + +### Energy meters + +Most Iskra's DIN rail mountable energy meters support Modbus RTU over RS485 and IR. To integrate them, you will need a Modbus TCP gateway or Iskra's Smart Gateway: + +- Impact series ([IE38XX / IE14XX](https://www.iskra.eu/en/Iskra-Energy-meters/)) +- WM series ([WM3XX / WM1XX](https://www.iskra.eu/en/Iskra-Energy-meters/)) + +### Power quality analyzers + +These devices typically support Ethernet connections and use Modbus TCP for data polling: + +- iMT/MT series ([MTXXX / iMTXXX](https://www.iskra.eu/en/NEW_SERIES_Universal_measuring_devices_/)) +- iMC/MC series ([MCXXX / iMCXXX](https://www.iskra.eu/en/NEW_SERIES_Universal_measuring_devices_/)) + +## Configuration options + +There are two ways to configure your devices with Home Assistant: +- [Using a Smart Gateway with REST API](#smart-gateway-with-rest-api) +- [Using a Modbus TCP connection](#modbus-tcp-connection) + +### Smart Gateway with REST API + +If your device supports Modbus RTU over RS485/IR, you can use Iskra's Smart Gateway to connect them via the REST API: + +- **Smart Gateway**: Connect your devices to the Smart Gateway and add your devices to the Smart Gateway's configuration. It's also recommended to set a static IP on your smart gateway. +- **Home Assistant**: Add the Iskra integration, enter the Smart Gateway's **IP address**, and select **RestAPI** as the connection type within the Home Assistant integration. If authentication is required, Home Assistant will prompt you to enter the Smart Gateway's **credentials**. All devices configured on the Smart Gateway will be automatically added to your Home Assistant. + +### Modbus TCP connection + +If your device supports a direct internet connection, such as PQ meters (iMC/MC series/ iMT/MT series usually), you can use Modbus TCP: + +- **Device**: Find your device using the [MiQen](https://www.iskra.si/sl/Programska-oprema/MiQen/) software and configure it to use a static IP. +- **Home Assistant**: Add the Iskra integration, enter the device's **IP address**, and select **Modbus TCP** as the connection type within the Home Assistant integration. Home Assistant will prompt you to enter the Modbus TCP port and Modbus address of your device. + +{% include integrations/config_flow.md %} + +## Sensors + +The integration provides detailed information about power, current, and voltage for each phase. The data is updated every minute. + +| Name | Unit | Description | +| ------------------------ | ------------ | ------------------------------------------------------ | +| total_active_power | W | Total active power | +| total_reactive_power | var | Total reactive power | +| total_apparent_power | VA | Total apparent power | +| phase1_power | W | Phase 1 active power | +| phase2_power | W | Phase 2 active power | +| phase3_power | W | Phase 3 active power | +| phase1_voltage | V | Phase 1 voltage | +| phase2_voltage | V | Phase 2 voltage | +| phase3_voltage | V | Phase 3 voltage | +| phase1_current | A | Phase 1 current | +| phase2_current | A | Phase 2 current | +| phase3_current | A | Phase 3 current | +| frequency | Hz | Frequency | +| non_resettable_counter_x | Wh/varh/VAh | Non-resettable energy counters as configured on device | +| resettable_counter_x | Wh/varh/VAh | Resettable energy counters as configured on device | diff --git a/source/_integrations/ismartwindow.markdown b/source/_integrations/ismartwindow.markdown index 45ade76ccb92..7716b4ee0f28 100644 --- a/source/_integrations/ismartwindow.markdown +++ b/source/_integrations/ismartwindow.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/isy994.markdown b/source/_integrations/isy994.markdown index 8c1ffcdc8fde..af81c6740a3a 100644 --- a/source/_integrations/isy994.markdown +++ b/source/_integrations/isy994.markdown @@ -92,20 +92,20 @@ A Home Assistant `isy994_control` event is emitted for every "control" event in ```yaml automation: - alias: "turn off living room on double tap lightswitch" - trigger: - platform: event - event_type: isy994_control - event_data: - entity_id: light.lr_track_lights_front - control: "DFON" - value: 255 - formatted: "On" - uom: "100" - prec: "0" - action: - action: light.turn_off - target: - entity_id: light.lr_track_lights_rear + triggers: + - trigger: event + event_type: isy994_control + event_data: + entity_id: light.lr_track_lights_front + control: "DFON" + value: 255 + formatted: "On" + uom: "100" + prec: "0" + actions: + - action: light.turn_off + target: + 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 ISY documentation for the list of every possible control type, but the common ones are: diff --git a/source/_integrations/kaleidescape.markdown b/source/_integrations/kaleidescape.markdown index 7780582f554c..835a7145b886 100644 --- a/source/_integrations/kaleidescape.markdown +++ b/source/_integrations/kaleidescape.markdown @@ -228,12 +228,12 @@ Additional details about the values provided by the sensors can be found in Kale A typical automation might look like the example below, which turns up the lights when the _media_location_ sensor leaves the _content_ state. ```yaml -- alias: kaleidescape_theater_lights_up - trigger: - - platform: state +- alias: "Kaleidescape theater lights up" + triggers: + - trigger: state entity_id: sensor.kaleidescape_theater_media_location from: content - action: + actions: - action: scene.turn_on target: entity_id: scene.theater_lights diff --git a/source/_integrations/keyboard_remote.markdown b/source/_integrations/keyboard_remote.markdown index 9d5bec04c050..ed02e3db7ba6 100644 --- a/source/_integrations/keyboard_remote.markdown +++ b/source/_integrations/keyboard_remote.markdown @@ -93,18 +93,18 @@ And an automation rule to breathe life into it: ```yaml automation: alias: "Keyboard all lights on" - trigger: - platform: event - event_type: keyboard_remote_command_received - event_data: - device_descriptor: "/dev/input/event0" - key_code: 107 # inspect log to obtain desired keycode - type: key_down # only trigger on key_down events (optional) - - action: - action: light.turn_on - target: - entity_id: light.all + triggers: + - trigger: event + event_type: keyboard_remote_command_received + event_data: + device_descriptor: "/dev/input/event0" + key_code: 107 # inspect log to obtain desired keycode + type: key_down # only trigger on key_down events (optional) + + actions: + - action: light.turn_on + target: + entity_id: light.all ``` `device_descriptor` or `device_name` may be specified in the trigger so the automation will be fired only for that keyboard. This is especially useful if you wish to use several Bluetooth remotes to control different devices. Omit them to ensure the same key triggers the automation for all keyboards/remotes. @@ -124,10 +124,10 @@ Here's an automation example that plays a sound through a media player whenever ```yaml automation: - alias: "Keyboard Connected" - trigger: - platform: event - event_type: keyboard_remote_connected - action: + triggers: + - trigger: event + event_type: keyboard_remote_connected + actions: - action: media_player.play_media target: entity_id: media_player.speaker @@ -136,12 +136,12 @@ automation: media_content_type: music - alias: "Bluetooth Keyboard Disconnected" - trigger: - platform: event - event_type: keyboard_remote_disconnected - event_data: - device_name: "00:58:56:4C:C0:91" - action: + triggers: + - trigger: event + event_type: keyboard_remote_disconnected + event_data: + device_name: "00:58:56:4C:C0:91" + actions: - action: media_player.play_media target: entity_id: media_player.speaker diff --git a/source/_integrations/kira.markdown b/source/_integrations/kira.markdown index faa9296929c9..321651c244e9 100644 --- a/source/_integrations/kira.markdown +++ b/source/_integrations/kira.markdown @@ -208,32 +208,29 @@ Example automation using these IR codes to toggle a Sonoff plug. ```yaml # Example kira_sensor -- id: "1583339338363" - alias: "Panasonic On" - description: Turn on sonoff s20 relay - trigger: - - entity_id: sensor.kira_wireless - platform: state - to: PanaOne - condition: [] - action: - - device_id: 3628b4f34df943b3b721ead954cf3ca7 - domain: switch - entity_id: switch.plug2_relay - type: turn_on -- id: "1584035716024" - alias: "Panaxonic Off " - description: Turn off sonoff s20 relay - trigger: - - entity_id: sensor.kira_wireless - platform: state - to: PanaTwo - condition: [] - action: - - device_id: 3628b4f34df943b3b721ead954cf3ca7 - domain: switch - entity_id: switch.plug2_relay - type: turn_off +- alias: "Panasonic on" + description: "Turn on sonoff s20 relay" + triggers: + - trigger: state + entity_id: sensor.kira_wireless + to: "PanaOne" + actions: + - device_id: 3628b4f34df943b3b721ead954cf3ca7 + domain: switch + entity_id: switch.plug2_relay + type: turn_on + +- alias: "Panaxonic off" + description: "Turn off sonoff s20 relay" + triggers: + - trigger: state + entity_id: sensor.kira_wireless + to: "PanaTwo" + actions: + - device_id: 3628b4f34df943b3b721ead954cf3ca7 + domain: switch + entity_id: switch.plug2_relay + type: turn_off ``` ### Code types diff --git a/source/_integrations/knocki.markdown b/source/_integrations/knocki.markdown index 4af8438eb5ca..37516e56db06 100644 --- a/source/_integrations/knocki.markdown +++ b/source/_integrations/knocki.markdown @@ -13,7 +13,7 @@ ha_codeowners: ha_domain: knocki ha_platforms: - event -ha_integration_type: device +ha_integration_type: hub --- The **Knocki** {% term integration %} can receive events for the triggers set up from your [Knocki devices](https://knocki.com/). diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown index 9842ce0270e5..c65ab302bdb8 100644 --- a/source/_integrations/knx.markdown +++ b/source/_integrations/knx.markdown @@ -241,16 +241,14 @@ Example automation configuration {% raw %} ```yaml -- alias: Single group address trigger - description: '' - trigger: - - platform: knx.telegram - destination: 1/2/3 - group_value_read: false - outgoing: false - condition: "{{ trigger.value == 0 }}" - action: [] - mode: single +- alias: "Single group address trigger" + triggers: + - trigger: knx.telegram + destination: 1/2/3 + group_value_read: false + outgoing: false + conditions: "{{ trigger.value == 0 }}" + actions: [] ``` {% endraw %} @@ -259,7 +257,7 @@ Example trigger data ```yaml variables: - trigger: + triggers: id: "0" idx: "0" alias: null @@ -352,7 +350,7 @@ response: ```yaml # Example script to send a fixed value and the state of an entity -alias: My Script +alias: "My Script" sequence: - action: knx.send data: @@ -395,21 +393,21 @@ address: ```yaml # Example automation to update a cover position after 10 seconds of movement initiation automation: - - trigger: - - platform: knx.telegram + - triggers: + - trigger: knx.telegram # Cover move trigger destination: "0/4/20" - action: + actions: - delay: 0:0:10 - action: knx.read data: # Cover position address address: "0/4/21" - - trigger: - - platform: homeassistant + - triggers: + - trigger: homeassistant event: start - action: + actions: # Register the group address to trigger a knx_event - action: knx.event_register data: @@ -622,34 +620,37 @@ Let's pretend you have a binary sensor with the name `Livingroom.Switch` and you ```yaml # Example automation.yaml entry automation: - - trigger: - platform: numeric_state - entity_id: binary_sensor.livingroom_switch - attribute: counter - above: 0 - below: 2 - condition: + - triggers: + - trigger: numeric_state + entity_id: binary_sensor.livingroom_switch + attribute: counter + above: 0 + below: 2 + condition: - condition: state entity_id: binary_sensor.cover_abstell state: "on" - action: - - entity_id: light.hue_color_lamp_1 - action: light.turn_on - - trigger: - platform: numeric_state - entity_id: binary_sensor.livingroom_switch - attribute: counter - above: 1 - below: 3 - condition: + actions: + - action: light.turn_on + entity_id: light.hue_color_lamp_1 + + - triggers: + - trigger: numeric_state + entity_id: binary_sensor.livingroom_switch + attribute: counter + above: 1 + below: 3 + conditions: - condition: state entity_id: binary_sensor.cover_abstell state: "on" - action: - - entity_id: light.hue_bloom_1 - action: homeassistant.turn_on - - entity_id: light.hue_bloom_2 - action: homeassistant.turn_on + actions: + - action: light.turn_on + target: + entity_id: + - light.hue_bloom_1 + - light.hue_bloom_2 + ``` {% configuration %} @@ -973,6 +974,29 @@ max_temp: description: Override the maximum temperature. required: false type: float +fan_speed_address: + description: KNX group address for setting the percentage or step of the fan. *DPT 5.001* or *DPT 5.010* + required: false + type: [string, list] +fan_speed_state_address: + description: KNX group address for retrieving the percentage or step of the fan. *DPT 5.001* or *DPT 5.010* + required: false + type: [string, list] +fan_max_step: + description: The maximum amount of steps for the fan. + required: false + type: integer + default: 3 +fan_speed_mode: + description: Fan speed group address data type. `percent` for *DPT 5.001* and `step` for *DPT 5.010*. + required: false + type: string + default: percent +fan_zero_mode: + description: The fan mode for the zero speed, either `off` or `auto`. This affects the fan modes displayed in the UI. + required: false + type: string + default: "off" entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false diff --git a/source/_integrations/kodi.markdown b/source/_integrations/kodi.markdown index 30a3ef1f0bfb..6244048b0f18 100644 --- a/source/_integrations/kodi.markdown +++ b/source/_integrations/kodi.markdown @@ -43,26 +43,24 @@ These automations can be configured through the UI (see [device triggers](/docs/ ```yaml automation: - - id: kodi_turn_on - alias: "Kodi: turn on" - trigger: - - platform: device + - alias: "Kodi: turn on" + triggers: + - trigger: device device_id: !secret kodi_device_id domain: kodi entity_id: media_player.kodi type: turn_on - action: + actions: - action: script.kodi_turn_on - - id: kodi_turn_off - alias: "Kodi: turn off" - trigger: - - platform: device + - alias: "Kodi: turn off" + triggers: + - trigger: device device_id: !secret kodi_device_id domain: kodi entity_id: media_player.kodi type: turn_off - action: + actions: - action: script.kodi_turn_off ``` @@ -434,12 +432,12 @@ A example of a automation to turn up/down the volume of a receiver using the eve alias: Kodi keypress mode: parallel max: 10 -trigger: - - platform: event +triggers: + - trigger: event event_type: kodi_keypress event_data: entity_id: media_player.kodi_livingroom -action: +actions: - choose: - conditions: - condition: template diff --git a/source/_integrations/krispol.markdown b/source/_integrations/krispol.markdown index 90da192622cd..d8226c7e563f 100644 --- a/source/_integrations/krispol.markdown +++ b/source/_integrations/krispol.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/lametric.markdown b/source/_integrations/lametric.markdown index 3616b58b5ee7..cf0522296170 100644 --- a/source/_integrations/lametric.markdown +++ b/source/_integrations/lametric.markdown @@ -164,21 +164,21 @@ To add a notification sound, icon, cycles, or priority override, ```yaml - alias: "Send notification on arrival at school" - trigger: - platform: state - entity_id: device_tracker.tom_mobile - from: "not_home" - to: "school" - action: - action: notify.my_lametric - data: - message: "Tom has arrived at school!" + triggers: + - trigger: state + entity_id: device_tracker.tom_mobile + from: "not_home" + to: "school" + actions: + - action: notify.my_lametric data: - sound: "notification" - icon: "51" - cycles: 0 - priority: "critical" - icon_type: "info" + message: "Tom has arrived at school!" + data: + sound: "notification" + icon: "51" + cycles: 0 + priority: "critical" + icon_type: "info" ``` ## List of notification sounds diff --git a/source/_integrations/landisgyr_heat_meter.markdown b/source/_integrations/landisgyr_heat_meter.markdown index ab3ba2bc931d..f902cd056157 100644 --- a/source/_integrations/landisgyr_heat_meter.markdown +++ b/source/_integrations/landisgyr_heat_meter.markdown @@ -76,10 +76,10 @@ If you're comfortable with YAML, this code could be used: ```yaml alias: "Heat Meter manual update" -trigger: - - platform: time +triggers: + - trigger: time at: "23:30:00" -action: +actions: - action: homeassistant.update_entity target: entity_id: sensor.heat_meter_heat_usage_gj diff --git a/source/_integrations/laundrify.markdown b/source/_integrations/laundrify.markdown index ed0637eed1a4..593e412f9fb2 100644 --- a/source/_integrations/laundrify.markdown +++ b/source/_integrations/laundrify.markdown @@ -8,6 +8,7 @@ ha_iot_class: Cloud Polling ha_domain: laundrify ha_platforms: - binary_sensor + - sensor ha_codeowners: - '@xLarry' ha_config_flow: true @@ -16,9 +17,13 @@ ha_integration_type: integration Monitor the status of your washing machine or dryer within Home Assistant using a [laundrify](https://laundrify.de/) WiFi power plug. -The following device types are currently supported by the integration: +The following platforms/entities are currently supported by the integration: - Binary sensor + - Wash Cycle (_running_/_not running_) +- Sensor + - Power (latest measurement in _Watts_) + - Energy (total consumption in _kWh_) ## Generate an Auth Code diff --git a/source/_integrations/lcn.markdown b/source/_integrations/lcn.markdown index 9814e43dbb6d..aae0d7d856bf 100644 --- a/source/_integrations/lcn.markdown +++ b/source/_integrations/lcn.markdown @@ -162,11 +162,11 @@ Trigger on a transponder event and ensure that the received code is in the given ```yaml automation: - trigger: - - platform: event + triggers: + - trigger: event event_type: lcn_transponder - condition: "{{ trigger.event.data.code in ['aabbcc', 'ddeeff', '112233'] }}" - action: + conditions: "{{ trigger.event.data.code in ['aabbcc', 'ddeeff', '112233'] }}" + actions: ... ``` @@ -245,8 +245,8 @@ receiver hardware is connected to module 7 in segment 0. ```yaml automation: - trigger: - - platform: event + triggers: + - trigger: event event_type: lcn_transmitter event_data: segment_id: 0 @@ -270,8 +270,8 @@ any hardware module. ```yaml automation: - trigger: - - platform: event + triggers: + - trigger: event event_type: lcn_transponder event_data: code: 123abc @@ -292,8 +292,8 @@ any hardware module. ```yaml automation: - trigger: - - platform: event + triggers: + - trigger: event event_type: lcn_fingerprint event_data: code: 123abc @@ -314,8 +314,8 @@ any hardware module. ```yaml automation: - trigger: - - platform: event + triggers: + - trigger: event event_type: lcn_codelock event_data: code: 123abc @@ -337,8 +337,8 @@ key `a1`. ```yaml automation: - trigger: - - platform: event + triggers: + - trigger: event event_type: lcn_send_keys event_data: key: a1 diff --git a/source/_integrations/lektrico.markdown b/source/_integrations/lektrico.markdown new file mode 100644 index 000000000000..d3424f048d26 --- /dev/null +++ b/source/_integrations/lektrico.markdown @@ -0,0 +1,122 @@ +--- +title: Lektrico Charging Station +description: Instructions on how to integrate a Lektrico Chargering Station with Home Assistant. +ha_category: + - Sensor +ha_release: '2024.10' +ha_iot_class: Local Polling +ha_config_flow: true +ha_codeowners: + - '@lektrico' +ha_domain: lektrico +ha_zeroconf: true +ha_platforms: + - button + - number + - select + - sensor +ha_integration_type: device +--- + +The **Lektrico Charging Station** integration integrates your [Lektrico Charging Station](https://lektri.co) into your Home Assistant and allows you to monitor it. + +The Lektrico Charging Station device will be added as a sensor in Home Assistant. + +{% include integrations/config_flow.md %} + +## Sensors + +Sensors available in the library: + +### Single-phase charger + +| Condition | Unit | Description | +| :------------------ | :--- | :-------------------------------------------------------- | +| state | | State of the charger. | +| charging_time | s | Indicates the current session charging time. | +| power | kW | Current instant power. | +| energy | kWh | Total charged energy for the current charging session. | +| temperature | °C | Board temperature. | +| lifetime_energy | kWh | Total charged energy since installation. | +| installation_current| A | Current value [A] to be limited by software. | +| limit_reason | | Current limit reason. | +| voltage | V | Measured voltage. | +| current | A | Measured current. | + +### Three-phase charger + +| Condition | Unit | Description | +| :------------------ | :--- | :-------------------------------------------------------- | +| state | | State of the charger. | +| charging_time | s | Indicates the current session charging time. | +| power | kW | Current instant power. | +| energy | kWh | Total charged energy for the current charging session. | +| temperature | °C | Board temperature. | +| lifetime_energy | kWh | Total charged energy since installation. | +| installation_current| A | Current value [A] to be limited by software. | +| limit_reason | | Current limit reason. | +| voltage_l1 | V | Measured voltage on L1. | +| voltage_l2 | V | Measured voltage on L2. | +| voltage_l3 | V | Measured voltage on L3. | +| current_l1 | A | Measured current on L1. | +| current_l2 | A | Measured current on L2. | +| current_l3 | A | Measured current on L3. | + +### Single-phase energy meter + +| Condition | Unit | Description | +| :------------------ | :--- | :-------------------------------------------------------- | +| breaker_current | A | Main breaker current. | +| power | kW | Measured active power. | +| pf | | Power factor. | + +### Three-phase energy meter + +| Condition | Unit | Description | +| :------------------ | :--- | :-------------------------------------------------------- | +| breaker_current | A | Main breaker current. | +| power_l1 | kW | Measured active power on L1. | +| power_l2 | kW | Measured active power on L2. | +| power_l3 | kW | Measured active power on L3. | +| pf_l1 | | Power factor on L1. | +| pf_l2 | | Power factor on L2. | +| pf_l3 | | Power factor on L3. | + +## Buttons + +Buttons available in the library: + +### Chargers + +| Button | Description | +| :------------------ | :--------------------------------- | +| charge_start | Command charger to start charging. | +| charge_stop | Command charger to stop charging. | +| reboot | Reboot charger. | + +### Energy meters + +| Button | Description | +| :------------------ | :--------------------------------- | +| reboot | Reboot energy meter. | + +## Numbers + +Numbers available in the library: + +### Chargers + +| Number | Unit | Range | Description | +| :----------------- | :--- | :------ | :---------------------------------------- | +| led_max_brightness | % | 0 - 100 | Set the LED brightness of the charger. | +| dynamic_limit | A | 0 - 32 | Set the maximum allowed charging current. | + +## Selects + +Selects available in the library: + +### Energy meters + +| Select | Description | +| :------------------ | :-------------------------------------- | +| lb_mode | Select the load balancing mode of the energy meter. The options are **Disabled**, **Power**, **Hybrid**, and **Green**. | diff --git a/source/_integrations/lg_netcast.markdown b/source/_integrations/lg_netcast.markdown index 08897bd4b7c7..88d1e6a680ec 100644 --- a/source/_integrations/lg_netcast.markdown +++ b/source/_integrations/lg_netcast.markdown @@ -39,10 +39,10 @@ wake_on_lan: # enables `wake_on_lan` integration # Enables the `lg_netcast` media player automation: - alias: "Turn On Living Room TV with WakeOnLan" - trigger: - - platform: lg_netcast.turn_on + triggers: + - trigger: lg_netcast.turn_on entity_id: media_player.lg_netcast_smart_tv - action: + actions: - action: wake_on_lan.send_magic_packet data: mac: AA-BB-CC-DD-EE-FF diff --git a/source/_integrations/lifx.markdown b/source/_integrations/lifx.markdown index eee75ca67554..6b1f8a312e1c 100644 --- a/source/_integrations/lifx.markdown +++ b/source/_integrations/lifx.markdown @@ -95,9 +95,9 @@ The LIFX platform supports several software-controlled light effects and one har ```yaml automation: - alias: "..." - trigger: + triggers: # ... - action: + actions: - action: light.turn_on target: entity_id: light.office, light.kitchen diff --git a/source/_integrations/light.markdown b/source/_integrations/light.markdown index 02d464fb8c17..ed2824aee6fe 100644 --- a/source/_integrations/light.markdown +++ b/source/_integrations/light.markdown @@ -77,13 +77,12 @@ In order to apply attributes to an entity, you will need to add `data:` to the c ```yaml # Example configuration.yaml entry automation: -- id: one - alias: "Turn on light when motion is detected" - trigger: - - platform: state +- alias: "Turn on light when motion is detected" + triggers: + - trigger: state entity_id: binary_sensor.motion_1 to: "on" - action: + actions: - action: light.turn_on target: entity_id: light.living_room @@ -93,12 +92,11 @@ automation: ``` ```yaml # Ledlist morning on, red -- id: llmor - alias: "Stair morning on" - trigger: - - at: '05:00' - platform: time - action: +- alias: "Stair morning on" + triggers: + - trigger: time + at: '05:00' + actions: - action: light.turn_on target: entity_id: light.ledliststair diff --git a/source/_integrations/limitlessled.markdown b/source/_integrations/limitlessled.markdown index 41f267e39f5c..93f61d4633ac 100644 --- a/source/_integrations/limitlessled.markdown +++ b/source/_integrations/limitlessled.markdown @@ -111,9 +111,9 @@ Note that the `brightness`, `color` and `temperature` attributes cannot be used ```yaml automation: - alias: "..." - trigger: + triggers: # ... - action: + actions: - action: light.turn_on target: entity_id: diff --git a/source/_integrations/linkplay.md b/source/_integrations/linkplay.md index 0a9d5c68c3e9..d2aa397cecfc 100644 --- a/source/_integrations/linkplay.md +++ b/source/_integrations/linkplay.md @@ -16,4 +16,22 @@ ha_iot_class: Local Polling --- The LinkPlay {% term integrations %} for Home Assistant allows you to control various media players based on the LinkPlay protocol. The integration supports auto-discovery on your local network through [Zeroconf](/integrations/zeroconf). -{% include integrations/config_flow.md %} \ No newline at end of file + +{% include integrations/config_flow.md %} + +## Actions + +The LinkPlay integration makes various custom actions available in addition to the [standard media player actions](/integrations/media_player/#actions). + +### Action `linkplay.play_preset` + +Play a preset on a LinkPlay media player. + +{% note %} +Companion apps, such as 4stream, allow to save music presets (for example, Spotify playlists). This action can be used to start playing these presets. +{% endnote %} + +| Data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | The speakers to target. To target all LinkPlay devices, use `all`. +| `preset_number` | no | The number of the preset to play. diff --git a/source/_integrations/lirc.markdown b/source/_integrations/lirc.markdown index 8ab3bf283584..97ed4511e905 100644 --- a/source/_integrations/lirc.markdown +++ b/source/_integrations/lirc.markdown @@ -84,15 +84,15 @@ The LIRC integration fires `ir_command_received` events on the bus. You can capt # Example configuration.yaml automation entry automation: - alias: "Off on Remote" - trigger: - platform: event - event_type: ir_command_received - event_data: - button_name: KEY_0 - action: - action: homeassistant.turn_off - target: - entity_id: group.a_lights + triggers: + - trigger: event + event_type: ir_command_received + event_data: + button_name: KEY_0 + actions: + - action: homeassistant.turn_off + target: + entity_id: group.a_lights ``` The `button_name` data values (e.g., `KEY_0`) are set by you in the `.lircrc` file. diff --git a/source/_integrations/litejet.markdown b/source/_integrations/litejet.markdown index bc94e8acf56c..a878d875e676 100644 --- a/source/_integrations/litejet.markdown +++ b/source/_integrations/litejet.markdown @@ -43,7 +43,7 @@ The trigger will activate at the earliest moment both `held_more_than` and `held ```yaml automation: -- trigger: +- triggers: platform: litejet number: 55 held_more_than: diff --git a/source/_integrations/lock.markdown b/source/_integrations/lock.markdown index c87e011e1ecd..7116ff7c587f 100644 --- a/source/_integrations/lock.markdown +++ b/source/_integrations/lock.markdown @@ -46,7 +46,7 @@ Lock your door, the attribute should appear under a 'data' attribute for the act #### Example ```yaml -action: +actions: action: lock.lock target: entity_id: lock.my_place @@ -63,7 +63,7 @@ Unlock your door, the attribute should appear under a 'data' attribute for the a #### Example ```yaml -action: +actions: action: lock.unlock target: entity_id: lock.my_place diff --git a/source/_integrations/lock.xiaomi_aqara.markdown b/source/_integrations/lock.xiaomi_aqara.markdown deleted file mode 100644 index eaa1c9b847c9..000000000000 --- a/source/_integrations/lock.xiaomi_aqara.markdown +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Xiaomi Aqara Lock" -description: "Instructions on how to setup the Xiaomi Aqara Lock within Home Assistant." -ha_category: - - Lock -ha_release: 0.71 -ha_iot_class: Local Push -ha_domain: xiaomi_aqara ---- - - -The `xiaomi aqara` lock platform allows you to get data (`changed_by` property, `verified_wrong_times` attribute) from your [Xiaomi](https://www.mi.com/en/) Aqara locks. - -An Aqara lock cannot be controlled by Home Assistant. - -The property `changed_by` provides the user/key ID of the last successful unlock. - -If someone tries to unlock the device but fails more than 3 times the `verified_wrong_times` attribute will be incremented. The counter resets on a successful unlock. - -Use of this platform requires that you have set up the [Xiaomi Aqara](/integrations/xiaomi_aqara/) component. - - diff --git a/source/_integrations/lutron.markdown b/source/_integrations/lutron.markdown index 86bde3b589f4..b089e3a39545 100644 --- a/source/_integrations/lutron.markdown +++ b/source/_integrations/lutron.markdown @@ -74,13 +74,13 @@ Any configured Powr Savr occupancy sensors will be added as occupancy binary sen ``` yaml - alias: "keypad button pressed notification" - trigger: - - platform: event + triggers: + - trigger: event event_type: lutron_event event_data: id: office_pico_on action: single - action: + actions: - action: notify.telegram data: message: "pico just turned on!" diff --git a/source/_integrations/lutron_caseta.markdown b/source/_integrations/lutron_caseta.markdown index 00cec8951744..d1cc03f0345d 100644 --- a/source/_integrations/lutron_caseta.markdown +++ b/source/_integrations/lutron_caseta.markdown @@ -17,7 +17,6 @@ ha_domain: lutron_caseta ha_config_flow: true ha_codeowners: - '@swails' - - '@bdraco' - '@danaues' - '@eclair4151' ha_zeroconf: true diff --git a/source/_integrations/madeco.markdown b/source/_integrations/madeco.markdown index a85bf0cf92d8..fa4694d87390 100644 --- a/source/_integrations/madeco.markdown +++ b/source/_integrations/madeco.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/madvr.markdown b/source/_integrations/madvr.markdown index 8779851362ee..f3efe2626850 100644 --- a/source/_integrations/madvr.markdown +++ b/source/_integrations/madvr.markdown @@ -13,6 +13,7 @@ ha_codeowners: ha_domain: madvr ha_platforms: - binary_sensor + - diagnostics - remote - sensor ha_integration_type: device diff --git a/source/_integrations/mailgun.markdown b/source/_integrations/mailgun.markdown index 587a4d71b6be..b4d72e235568 100644 --- a/source/_integrations/mailgun.markdown +++ b/source/_integrations/mailgun.markdown @@ -53,15 +53,15 @@ You can then consume that information with the following automation: ```yaml automation: - trigger: - platform: event - event_type: mailgun_message_received - event_data: - action: call_service - action: - action: light.turn_on - target: - entity_id: light.office + triggers: + - trigger: event + event_type: mailgun_message_received + event_data: + action: call_service + actions: + - action: light.turn_on + target: + entity_id: light.office ``` ## Notifications @@ -102,16 +102,16 @@ The following automation reacts to an event by sending out an email with two att ```yaml # Example automation using Mailgun notifications automation: - trigger: - platform: event - event_type: SPECIAL_EVENT - action: - action: notify.mailgun - data: - title: "Something special has happened" - message: "This a test message from Home Assistant" + triggers: + - trigger: event + event_type: SPECIAL_EVENT + actions: + - action: notify.mailgun data: - images: - - /home/pi/pic_test1.png - - /home/pi/pic_test2.png + title: "Something special has happened" + message: "This a test message from Home Assistant" + data: + images: + - /home/pi/pic_test1.png + - /home/pi/pic_test2.png ``` diff --git a/source/_integrations/manual.markdown b/source/_integrations/manual.markdown index e08e4c85ac3f..3bf9a84598b3 100644 --- a/source/_integrations/manual.markdown +++ b/source/_integrations/manual.markdown @@ -3,13 +3,14 @@ title: Manual Alarm control panel description: Instructions on how to integrate manual alarms into Home Assistant. ha_category: - Alarm + - Helper ha_release: 0.7.6 ha_quality_scale: internal ha_domain: manual ha_iot_class: Calculated ha_platforms: - alarm_control_panel -ha_integration_type: integration +ha_integration_type: helper related: - docs: /docs/configuration/ title: Configuration file @@ -175,27 +176,27 @@ Using sensors to trigger the alarm. ```yaml automation: - alias: 'Trigger alarm while armed away' - trigger: - - platform: state + triggers: + - trigger: state entity_id: sensor.pir1 to: "active" - - platform: state + - trigger: state entity_id: sensor.pir2 to: "active" - - platform: state + - trigger: state entity_id: sensor.door to: "open" - - platform: state + - trigger: state entity_id: sensor.window to: "open" - condition: + conditions: - condition: state entity_id: alarm_control_panel.home_alarm state: armed_away - action: - action: alarm_control_panel.alarm_trigger - target: - entity_id: alarm_control_panel.home_alarm + actions: + - action: alarm_control_panel.alarm_trigger + target: + entity_id: alarm_control_panel.home_alarm ``` Sending a notification when the alarm is triggered. @@ -203,11 +204,11 @@ Sending a notification when the alarm is triggered. ```yaml automation: - alias: 'Send notification when alarm triggered' - trigger: - - platform: state + triggers: + - trigger: state entity_id: alarm_control_panel.home_alarm to: "triggered" - action: + actions: - action: notify.notify data: message: "ALARM! The alarm has been triggered" @@ -218,12 +219,12 @@ Disarming the alarm when the door is properly unlocked. ```yaml automation: - alias: 'Disarm alarm when door unlocked by keypad' - trigger: - - platform: state + triggers: + - trigger: state entity_id: sensor.front_door_lock_alarm_type to: "19" # many z-wave locks use Alarm Type 19 for 'Unlocked by Keypad' - action: + actions: - action: alarm_control_panel.alarm_disarm target: entity_id: alarm_control_panel.home_alarm @@ -235,11 +236,11 @@ Sending a Notification when the Alarm is Armed (Away/Home), Disarmed and in Pend ```yaml - alias: 'Send notification when alarm is Disarmed' - trigger: - - platform: state + triggers: + - trigger: state entity_id: alarm_control_panel.home_alarm to: "disarmed" - action: + actions: - action: notify.notify data: message: "ALARM! The alarm is Disarmed at {{ states('sensor.date_time') }}" @@ -247,11 +248,11 @@ Sending a Notification when the Alarm is Armed (Away/Home), Disarmed and in Pend ```yaml - alias: 'Send notification when alarm is in pending status' - trigger: - - platform: state + triggers: + - trigger: state entity_id: alarm_control_panel.home_alarm to: "pending" - action: + actions: - action: notify.notify data: message: "ALARM! The alarm is in pending status at {{ states('sensor.date_time') }}" @@ -259,11 +260,11 @@ Sending a Notification when the Alarm is Armed (Away/Home), Disarmed and in Pend ```yaml - alias: 'Send notification when alarm is Armed in Away mode' - trigger: - - platform: state + triggers: + - trigger: state entity_id: alarm_control_panel.home_alarm to: "armed_away" - action: + actions: - action: notify.notify data: message: "ALARM! The alarm is armed in Away mode {{ states('sensor.date_time') }}" @@ -271,11 +272,11 @@ Sending a Notification when the Alarm is Armed (Away/Home), Disarmed and in Pend ```yaml - alias: 'Send notification when alarm is Armed in Home mode' - trigger: - - platform: state + triggers: + - trigger: state entity_id: alarm_control_panel.home_alarm to: "armed_home" - action: + actions: - action: notify.notify data: # Using multi-line notation allows for easier quoting diff --git a/source/_integrations/martec.markdown b/source/_integrations/martec.markdown index 8d45b550d1a2..e9f5434d2e9e 100644 --- a/source/_integrations/martec.markdown +++ b/source/_integrations/martec.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/mastodon.markdown b/source/_integrations/mastodon.markdown index fa7e597b420a..40149c2e01e1 100644 --- a/source/_integrations/mastodon.markdown +++ b/source/_integrations/mastodon.markdown @@ -8,7 +8,7 @@ ha_codeowners: - '@fabaff' - '@andrew-codechimp' ha_domain: mastodon -ha_iot_class: Cloud Push +ha_iot_class: Cloud Polling ha_platforms: - diagnostics - notify diff --git a/source/_integrations/matrix.markdown b/source/_integrations/matrix.markdown index 6d21fdd2b78c..c90b07e88c41 100644 --- a/source/_integrations/matrix.markdown +++ b/source/_integrations/matrix.markdown @@ -128,26 +128,27 @@ notify: default_room: "#hasstest:matrix.org" automation: - - alias: 'React to !testword' - trigger: - platform: event - event_type: matrix_command - event_data: - command: testword - action: - action: notify.matrix_notify - data: - message: "It looks like you wrote !testword" - - alias: 'React to an introduction' - trigger: - platform: event - event_type: matrix_command - event_data: - command: introduction - action: - action: notify.matrix_notify - data: - message: "Hello {{trigger.event.data.args['name']}}" + - alias: "React to !testword" + triggers: + - trigger: event + event_type: matrix_command + event_data: + command: testword + actions: + - action: notify.matrix_notify + data: + message: "It looks like you wrote !testword" + + - alias: "React to an introduction" + triggers: + - trigger: event + event_type: matrix_command + event_data: + command: introduction + actions: + - action: notify.matrix_notify + data: + message: "Hello {{trigger.event.data.args['name']}}" ``` {% endraw %} @@ -196,13 +197,13 @@ Supported formats are: `text` (default), and `html`. ```yaml # Example of notification as HTML -action: - action: notify.matrix_notify - data: - message: >- -

Hello, world!

+actions: + - action: notify.matrix_notify data: - format: "html" + message: >- +

Hello, world!

+ data: + format: "html" ``` ### Images in notification @@ -211,13 +212,13 @@ It is possible to send images with notifications. To do so, add a list of paths ```yaml # Example of notification with images -action: - action: notify.matrix_notify - data: - message: "Test with images" +actions: + - action: notify.matrix_notify data: - images: - - /path/to/picture.jpg + message: "Test with images" + data: + images: + - /path/to/picture.jpg ``` {% important %} diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown index 94b36e365b56..ac314f118012 100644 --- a/source/_integrations/matter.markdown +++ b/source/_integrations/matter.markdown @@ -3,6 +3,7 @@ title: Matter (BETA) description: Instructions on how to integrate Matter with Home Assistant. ha_category: - Binary sensor + - Button - Climate - Cover - Fan @@ -13,6 +14,7 @@ ha_category: - Sensor - Switch - Update + - Valve ha_release: '2022.12' ha_iot_class: Local Push ha_config_flow: true @@ -21,6 +23,7 @@ ha_codeowners: ha_domain: matter ha_platforms: - binary_sensor + - button - climate - cover - diagnostics @@ -33,6 +36,7 @@ ha_platforms: - sensor - switch - update + - valve ha_integration_type: integration related: - docs: /integrations/thread/ diff --git a/source/_integrations/mealie.markdown b/source/_integrations/mealie.markdown index e00b3dd4dc7b..4ecf532504f7 100644 --- a/source/_integrations/mealie.markdown +++ b/source/_integrations/mealie.markdown @@ -132,10 +132,10 @@ Example template sensor that contains today's dinner meal plan entries: ```yaml template: - - trigger: - - platform: time_pattern + - triggers: + - trigger: time_pattern hours: /1 - action: + actions: - action: mealie.get_mealplan data: config_entry_id: YOUR_MEALIE_CONFIG_ENTITY_ID diff --git a/source/_integrations/mediaroom.markdown b/source/_integrations/mediaroom.markdown index 3d59cdee745f..e97a707895a8 100644 --- a/source/_integrations/mediaroom.markdown +++ b/source/_integrations/mediaroom.markdown @@ -69,12 +69,12 @@ The `play_media` function can be used in scripts to change channels: # change_channel: sequence: - action: media_player.play_media - target: - entity_id: media_player.mediaroom_stb - data: - media_content_id: "{{ channel_number }}" - media_content_type: "channel" + - action: media_player.play_media + target: + entity_id: media_player.mediaroom_stb + data: + media_content_id: "{{ channel_number }}" + media_content_type: "channel" ``` {% endraw %} @@ -88,12 +88,12 @@ The `play_media` function can also be used to trigger actions on the set-up-box # press_button: sequence: - action: media_player.play_media - target: - entity_id: media_player.mediaroom_stb - data: - media_content_id: "{{ action }}" - media_content_type: "mediaroom" + - action: media_player.play_media + target: + entity_id: media_player.mediaroom_stb + data: + media_content_id: "{{ action }}" + media_content_type: "mediaroom" ``` {% endraw %} diff --git a/source/_integrations/mercury_nz.markdown b/source/_integrations/mercury_nz.markdown index 011ace75672b..2ad15fe82a04 100644 --- a/source/_integrations/mercury_nz.markdown +++ b/source/_integrations/mercury_nz.markdown @@ -4,7 +4,7 @@ description: Get energy usage from Mercury NZ Limited using the Opower integrati ha_category: - Energy - Sensor -ha_release: 2024.8 +ha_release: 2023.8 ha_domain: mercury_nz ha_integration_type: virtual ha_supporting_domain: opower diff --git a/source/_integrations/meteoalarm.markdown b/source/_integrations/meteoalarm.markdown index ca806f6cfd4a..547c1a0af316 100644 --- a/source/_integrations/meteoalarm.markdown +++ b/source/_integrations/meteoalarm.markdown @@ -91,11 +91,11 @@ Example automation ```yaml automation: - alias: "Alert me about weather warnings" - trigger: - platform: state - entity_id: binary_sensor.meteoalarm - from: 'off' - action: + triggers: + - trigger: state + entity_id: binary_sensor.meteoalarm + from: "off" + actions: - action: notify.notify data: title: "{{state_attr('binary_sensor.meteoalarm', 'headline')}}" diff --git a/source/_integrations/mini_connected.markdown b/source/_integrations/mini_connected.markdown index c4c2b11f3160..2a44ffe97de5 100644 --- a/source/_integrations/mini_connected.markdown +++ b/source/_integrations/mini_connected.markdown @@ -12,7 +12,7 @@ ha_category: - Select - Sensor - Switch -ha_release: 2024.8 +ha_release: 0.64 ha_integration_type: virtual ha_supporting_domain: bmw_connected_drive ha_supporting_integration: BMW Connected Drive diff --git a/source/_integrations/minio.markdown b/source/_integrations/minio.markdown index a4000de99422..ecdc07c09205 100644 --- a/source/_integrations/minio.markdown +++ b/source/_integrations/minio.markdown @@ -88,12 +88,12 @@ Automations can be triggered on new files created on the Minio server using the #Automatically upload new local files automation: - alias: "Upload camera snapshot" - trigger: - platform: event - event_type: folder_watcher - event_data: - event_type: created - action: + triggers: + - trigger: event + event_type: folder_watcher + event_data: + event_type: created + actions: - delay: "00:00:01" - action: minio.put data: @@ -106,17 +106,17 @@ automation: file: "{{ trigger.event.data.path }}" - alias: "Download new Minio file" - trigger: - - platform: event - event_type: minio - - condition: [] - action: - - action: minio.get - data: - bucket: "{{trigger.event.data.bucket}}" - key: "{{trigger.event.data.key}}" - file_path: "/tmp/{{ trigger.event.data.file_name }}" + triggers: + - trigger: event + event_type: minio + + conditions: [] + actions: + - action: minio.get + data: + bucket: "{{trigger.event.data.bucket}}" + key: "{{trigger.event.data.key}}" + file_path: "/tmp/{{ trigger.event.data.file_name }}" ``` {% endraw %} diff --git a/source/_integrations/modem_callerid.markdown b/source/_integrations/modem_callerid.markdown index 9f847bf5582b..fe7407060898 100644 --- a/source/_integrations/modem_callerid.markdown +++ b/source/_integrations/modem_callerid.markdown @@ -39,34 +39,36 @@ An example automation: ```yaml automation: - - alias: Notify CallerID - trigger: - platform: state - entity_id: sensor.phone_modem - to: "callerid" - action: - action: notify.notify - data: - message: "Call from {{ state_attr('sensor.phone_modem', 'cid_name') }} at {{ state_attr('sensor.phone_modem', 'cid_number') }} " - - alias: Notify CallerID webui - trigger: - platform: state - entity_id: sensor.phone_modem - to: "callerid" - action: - action: persistent_notification.create - data: - title: "Call from" - message: "{{ state_attr('sensor.phone_modem', 'cid_time').strftime("%I:%M %p") }} {{ state_attr('sensor.phone_modem', 'cid_name') }} {{ state_attr('sensor.phone_modem', 'cid_number') }} " - - alias: Say CallerID - trigger: - platform: state - entity_id: sensor.phone_modem - to: "callerid" - action: - action: tts.google_say - data: - message: "Call from {{ state_attr('sensor.phone_modem', 'cid_name') }}" + - alias: "Notify CallerID" + triggers: + - trigger: state + entity_id: sensor.phone_modem + to: "callerid" + actions: + - action: notify.notify + data: + message: "Call from {{ state_attr('sensor.phone_modem', 'cid_name') }} at {{ state_attr('sensor.phone_modem', 'cid_number') }} " + + - alias: "Notify CallerID webui" + triggers: + - trigger: state + entity_id: sensor.phone_modem + to: "callerid" + actions: + - action: persistent_notification.create + data: + title: "Call from" + message: "{{ state_attr('sensor.phone_modem', 'cid_time').strftime("%I:%M %p") }} {{ state_attr('sensor.phone_modem', 'cid_name') }} {{ state_attr('sensor.phone_modem', 'cid_number') }} " + + - alias: "Say CallerID" + triggers: + - trigger: state + entity_id: sensor.phone_modem + to: "callerid" + actions: + - action: tts.google_say + data: + message: "Call from {{ state_attr('sensor.phone_modem', 'cid_name') }}" ``` {% endraw %} diff --git a/source/_integrations/modern_forms.markdown b/source/_integrations/modern_forms.markdown index cff02a1c20a3..59cd8bfc5487 100644 --- a/source/_integrations/modern_forms.markdown +++ b/source/_integrations/modern_forms.markdown @@ -16,6 +16,7 @@ ha_domain: modern_forms ha_zeroconf: true ha_platforms: - binary_sensor + - diagnostics - fan - light - sensor diff --git a/source/_integrations/mold_indicator.markdown b/source/_integrations/mold_indicator.markdown index 45b97b01247d..6c89ff6f0c4d 100644 --- a/source/_integrations/mold_indicator.markdown +++ b/source/_integrations/mold_indicator.markdown @@ -3,13 +3,15 @@ title: Mold Indicator description: How to use the mold growth indication integration in Home Assistant ha_category: - Environment + - Helper ha_release: '0.20' -ha_iot_class: Local Polling +ha_iot_class: Calculated ha_quality_scale: internal ha_domain: mold_indicator +ha_config_flow: true ha_platforms: - sensor -ha_integration_type: integration +ha_integration_type: helper related: - docs: /docs/configuration/ title: Configuration file @@ -19,7 +21,24 @@ The Mold Indicator sensor {% term integration %} uses data from two temperature The sensor data may be used, for example, to detect bad air quality (high humidity) or automate the operation of indoor air humidifiers to keep the indoor humidity at an optimum. -## Configuration +{% include integrations/config_flow.md %} + +Further information about these configuration options can be found under the [YAML configuration](#yaml-configuration) + +{% configuration_basic %} +Name: + description: The name of the sensor. +Indoor temperature sensor: + description: The entity ID of the indoor temperature sensor. +Indoor humidity sensor: + description: The entity ID of the indoor humidity sensor. +Outdoor temperature sensor: + description: The entity ID of the outdoor temperature sensor. +Calibration factor: + description: Needs to be calibrated to the critical point in the room. +{% endconfiguration_basic %} + +## YAML Configuration To use the Mold Indicator sensor in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/monarch_money.markdown b/source/_integrations/monarch_money.markdown new file mode 100644 index 000000000000..1ec47f7c175d --- /dev/null +++ b/source/_integrations/monarch_money.markdown @@ -0,0 +1,34 @@ +--- +title: Monarch Money +description: Instructions on the Monarch Money Integration for personal finance. +ha_category: + - Finance + - Sensor +ha_iot_class: Cloud Polling +ha_release: '2024.10' +ha_codeowners: + - '@jeeftor' +ha_domain: monarch_money +ha_config_flow: true +ha_platforms: + - sensor +ha_integration_type: integration +--- + +[Monarch Money](https://www.monarchmoney.com) is a personal finance aggregation and budgeting service that integrates with Plaid, MX, and FinCity, the three major financial backends. + +## Prerequisites + +- You need a Monarch Money account to use this integration. +- You need account credentials. This integration supports both `username` and `password` login, as well as accounts configured with `MFA`. + +{% include integrations/config_flow.md %} + +### Accounts & devices + +Each `account` is set up as a device in Home Assistant and contain the following sensors: + +|Sensor|Description| +|-------|---------------| +|Balance|Account balance| +|Age| This sensor shows when the data was retrieved by Monarch's back end | diff --git a/source/_integrations/motion_blinds.markdown b/source/_integrations/motion_blinds.markdown index 2da10880ab4e..8c12591a52a7 100644 --- a/source/_integrations/motion_blinds.markdown +++ b/source/_integrations/motion_blinds.markdown @@ -64,6 +64,7 @@ The following bridges are reported to work with this integration: - SIRO Connect SI7002 - SIRO Connect SI7005 - Heicko Smart Stick 1ST +- DD7006A Smart Home bridge {% include integrations/config_flow.md %} @@ -212,12 +213,11 @@ You only have to create one automation with only one Motionblinds cover as entit Example YAML automation for custom polling interval (every minute): ```yaml -alias: Motionblinds polling automation -mode: single -trigger: - - platform: time_pattern +alias: "Motionblinds polling automation" +triggers: + - trigger: time_pattern minutes: "/1" -action: +actions: - action: homeassistant.update_entity target: entity_id: cover.motion_shade diff --git a/source/_integrations/motionblinds_ble.markdown b/source/_integrations/motionblinds_ble.markdown index 867abe2d3657..4ca25e31265f 100644 --- a/source/_integrations/motionblinds_ble.markdown +++ b/source/_integrations/motionblinds_ble.markdown @@ -13,6 +13,7 @@ ha_config_flow: true ha_platforms: - button - cover + - diagnostics - select - sensor ha_integration_type: device @@ -60,12 +61,11 @@ Since Motionblinds Bluetooth motors require a Bluetooth connection to control th This can also be automated using a YAML automation. For instance, the following automation connects to your Motionblind every 24 hours to update its state in Home Assistant: ```yaml -alias: Motionblinds Bluetooth polling automation -mode: single -trigger: - - platform: time_pattern +alias: "Motionblinds Bluetooth polling automation" +triggers: + - trigger: time_pattern hours: "/24" -action: +actions: - action: homeassistant.update_entity target: entity_id: cover.motion_shade diff --git a/source/_integrations/motioneye.markdown b/source/_integrations/motioneye.markdown index 000431dd4ff5..512fb2cbc092 100644 --- a/source/_integrations/motioneye.markdown +++ b/source/_integrations/motioneye.markdown @@ -351,11 +351,11 @@ must be switched on for this automation to work (controllable via `switch. ```yaml - alias: "Set camera text overlay to armed" - trigger: - - platform: state + triggers: + - trigger: state entity_id: alarm_control_panel.home_alarm to: "armed_away" - action: + actions: - action: motioneye.set_text_overlay target: entity_id: camera.living_room @@ -364,11 +364,11 @@ must be switched on for this automation to work (controllable via `switch. custom_left_text: "Alarm is ARMED" - alias: "Set camera text overlay to disarmed" - trigger: - - platform: state + triggers: + - trigger: state entity_id: alarm_control_panel.home_alarm to: "disarmed" - action: + actions: - action: motioneye.set_text_overlay target: entity_id: camera.living_room @@ -385,13 +385,13 @@ An automation to cast stored movie clips to a TV as they arrive. ```yaml - alias: "Cast motionEye movie clips" - trigger: - - platform: event + triggers: + - trigger: event event_type: motioneye.file_stored event_data: # Only cast video. file_type: "8" - action: + actions: - action: media_player.play_media target: entity_id: media_player.kitchen_tv diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index ccb9af6d7c7c..71486e19b5e0 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -1062,15 +1062,15 @@ Use as [`script`](/integrations/script/) in automations. ```yaml automation: alias: "Send me a message when I get home" - trigger: - platform: state - entity_id: device_tracker.me - to: "home" - action: - action: script.notify_mqtt - data: - target: "me" - message: "I'm home" + triggers: + - trigger: state + entity_id: device_tracker.me + to: "home" + actions: + - action: script.notify_mqtt + data: + target: "me" + message: "I'm home" script: notify_mqtt: diff --git a/source/_integrations/msteams.markdown b/source/_integrations/msteams.markdown index d1350c73d1d4..876e7d0e86dd 100644 --- a/source/_integrations/msteams.markdown +++ b/source/_integrations/msteams.markdown @@ -15,6 +15,12 @@ ha_integration_type: integration The `Microsoft Teams` platform allows you to send notifications from Home Assistant to a team channel in [Microsoft Teams](https://www.microsoft.com/microsoft-teams/group-chat-software). +{% note %} + +Please note that Microsoft announced the retirement of the Office 365 connectors within Microsoft Teams. Existing connectors will [continue to work until December 2025](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/). + +{% endnote %} + ## Setup To send a notification to teams, you need to add the Incoming Webhook app to your team channel. When the app is added, you will receive a webhook URL that needs to be added to your {% term "`configuration.yaml`" %}. diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown index 69b5bbe35d4c..cf7a5cb88e83 100644 --- a/source/_integrations/nest.markdown +++ b/source/_integrations/nest.markdown @@ -410,7 +410,6 @@ data: data: image: "{{ trigger.event.data.attachment.image }}" video: "{{ trigger.event.data.attachment.video }}" -mode: single ``` {% endraw %} diff --git a/source/_integrations/netatmo.markdown b/source/_integrations/netatmo.markdown index c4a0b94203f4..622a7d624471 100644 --- a/source/_integrations/netatmo.markdown +++ b/source/_integrations/netatmo.markdown @@ -204,14 +204,12 @@ Example: # Example automation for webhooks based Netatmo events - alias: "Netatmo event example" description: "Count all events pushed by the Netatmo API" - trigger: - - event_data: {} + triggers: + - trigger: event event_type: netatmo_event - platform: event - action: - - data: {} + actions: + - action: counter.increment entity_id: counter.event_counter - action: counter.increment ``` Example: @@ -222,18 +220,18 @@ Example: # Example automation for Netatmo Welcome - alias: "Motion at home" description: "Motion detected at home" - trigger: - - event_type: netatmo_event - platform: event + triggers: + - trigger: event + event_type: netatmo_event event_data: type: movement - action: - - data: + actions: + - action: persistent_notification.create + data: message: > {{ trigger.event.data["data"]["message"] }} at {{ trigger.event.data["data"]["home_name"] }} - title: Netatmo event - action: persistent_notification.create + title: "Netatmo event" ``` {% endraw %} @@ -246,18 +244,18 @@ Example: # Example automation for Netatmo Presence - alias: "Motion at home" description: "Motion detected at home" - trigger: - - event_type: netatmo_event - platform: event + triggers: + - trigger: event + event_type: netatmo_event event_data: type: human # other possible types: animal, vehicle - action: - - data: + actions: + - action: persistent_notification.create + data: message: > {{ trigger.event.data["data"]["message"] }} at {{ trigger.event.data["data"]["home_name"] }} title: Netatmo event - action: persistent_notification.create ``` {% endraw %} @@ -270,25 +268,25 @@ Example: # Example automation - alias: "Door or window open or movement" description: "Notifies which door or window is open or was moved" - trigger: - - event_type: netatmo_event - platform: event + triggers: + - trigger: event + event_type: netatmo_event event_data: type: tag_open - - event_type: netatmo_event - platform: event + - trigger: event + event_type: netatmo_event event_data: type: tag_big_move - - event_type: netatmo_event - platform: event + - trigger: event + event_type: netatmo_event event_data: type: tag_small_move - action: - - data: + actions: + - action: persistent_notification.create + data: message: > {{ trigger.event.data["data"]["message"] }} - title: Netatmo event - action: persistent_notification.create + title: "Netatmo event" ``` {% endraw %} diff --git a/source/_integrations/netgear_lte.markdown b/source/_integrations/netgear_lte.markdown index 1742878da293..6cf806cab25e 100644 --- a/source/_integrations/netgear_lte.markdown +++ b/source/_integrations/netgear_lte.markdown @@ -98,10 +98,10 @@ The following automation example processes incoming SMS messages with the [Conve ```yaml automation: - alias: "SMS conversation" - trigger: - - platform: event + triggers: + - trigger: event event_type: netgear_lte_sms - action: + actions: - action: conversation.process data: text: "{{ trigger.event.data.message }}" diff --git a/source/_integrations/nice_go.markdown b/source/_integrations/nice_go.markdown index b26348d53e43..c448b3497e89 100644 --- a/source/_integrations/nice_go.markdown +++ b/source/_integrations/nice_go.markdown @@ -18,7 +18,7 @@ ha_platforms: - event - light - switch -ha_integration_type: integration +ha_integration_type: hub --- The **Nice G.O.** {% term integration %} lets you control Nice G.O. garage doors through Home Assistant. Device names in Home Assistant are generated based on the names defined in your Nice G.O. mobile app. diff --git a/source/_integrations/nightscout.markdown b/source/_integrations/nightscout.markdown index f4b32b5aec72..d67e5233e180 100644 --- a/source/_integrations/nightscout.markdown +++ b/source/_integrations/nightscout.markdown @@ -31,18 +31,17 @@ The state is the last reading from Nightscout, and you can see other information ### Example automation ```yaml -- id: "1234567890123" - alias: "overnight_low_kitchen_lights" +- alias: "overnight_low_kitchen_lights" description: Turn on the lights in the kitchen if my blood sugar drops low overnight - trigger: - - platform: numeric_state + triggers: + - trigger: numeric_state entity_id: sensor.blood_glucose below: "65" - condition: + conditions: - condition: time after: "22:00:00" before: "06:00:00" - action: + actions: - action: light.turn_on target: entity_id: light.kitchen diff --git a/source/_integrations/nissan_leaf.markdown b/source/_integrations/nissan_leaf.markdown index d9238a1aff1b..9628acf17172 100644 --- a/source/_integrations/nissan_leaf.markdown +++ b/source/_integrations/nissan_leaf.markdown @@ -112,14 +112,14 @@ You can also use the `nissan_leaf.update` action to request an on-demand update. - id: update_when_driver_not_home alias: "Update when driver not home" initial_state: on - trigger: - - platform: time_pattern + triggers: + - trigger: time_pattern minutes: "/30" - condition: + conditions: - condition: state entity_id: device_tracker.drivername # replace state: "not_home" - action: + actions: - action: nissan_leaf.update data: vin: "1HGBH41JXMN109186" # replace diff --git a/source/_integrations/notify.markdown b/source/_integrations/notify.markdown index 7264b8c0c73e..7856277dd29e 100644 --- a/source/_integrations/notify.markdown +++ b/source/_integrations/notify.markdown @@ -96,7 +96,7 @@ The notify integration supports specifying [templates](/docs/configuration/templ {% raw %} ```yaml -action: +actions: action: notify.send_message data: entity_id: notify.my_direct_message_notifier @@ -126,10 +126,10 @@ The notify integration supports specifying [templates](/docs/configuration/templ {% raw %} ```yaml -action: - action: notify.persistent_notification - data: - message: "You have {{ states('todo.shopping_list') }} items on your shopping list." +actions: + - action: notify.persistent_notification + data: + message: "You have {{ states('todo.shopping_list') }} items on your shopping list." ``` {% endraw %} @@ -137,10 +137,10 @@ action: {% raw %} ```yaml -action: - action: notify.persistent_notification - data: - message: "The sun is {% if is_state('sun.sun', 'above_horizon') %}up{% else %}down{% endif %}!" +actions: + - action: notify.persistent_notification + data: + message: "The sun is {% if is_state('sun.sun', 'above_horizon') %}up{% else %}down{% endif %}!" ``` {% endraw %} diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown index 9eaaa1e497c2..61e1ced41417 100644 --- a/source/_integrations/number.markdown +++ b/source/_integrations/number.markdown @@ -74,7 +74,7 @@ The following device classes are supported for numbers: - **reactive_power**: Reactive power in var - **signal_strength**: Signal strength in dB or dBm - **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 +- **speed**: Generic speed in ft/s, in/d, in/h, in/s, km/h, kn, m/s, mph, mm/d, or mm/s - **sulphur_dioxide**: Concentration of sulphur dioxide in µg/m³ - **temperature**: Temperature in °C, °F or K - **volatile_organic_compounds**: Concentration of volatile organic compounds in µg/m³ diff --git a/source/_integrations/nyt_games.markdown b/source/_integrations/nyt_games.markdown new file mode 100644 index 000000000000..43dcbb79afdf --- /dev/null +++ b/source/_integrations/nyt_games.markdown @@ -0,0 +1,30 @@ +--- +title: NYT Games +description: Instructions on how to setup NYT Games in Home Assistant. +ha_category: + - Sensor +ha_config_flow: true +ha_release: '2024.10' +ha_iot_class: Cloud Polling +ha_codeowners: + - '@joostlek' +ha_domain: nyt_games +ha_platforms: + - sensor +ha_integration_type: service +--- + +The [NYT Games](https://www.nytimes.com/crosswords) integration fetches data about your progress on their daily puzzles. + +## Prerequisites + +Before setting up the integration, you need to fetch the token from the dev tools of your browser. + +1. On your computer, go to [NYT Games](https://www.nytimes.com/crosswords). +2. Login with your account. +3. Open the developer tools via right-click or by pressing F12. +4. Open the network tab and refresh the page. +5. Select a request with `.json` in the name and go to the cookie tab. +6. The token can be found in the `NYT-S` cookie. + +{% include integrations/config_flow.md %} diff --git a/source/_integrations/nzbget.markdown b/source/_integrations/nzbget.markdown index fd24cbcea7dc..c4c8b773475e 100644 --- a/source/_integrations/nzbget.markdown +++ b/source/_integrations/nzbget.markdown @@ -51,16 +51,16 @@ Example automation to send a Telegram message on a completed download: ```yaml - alias: "Completed Torrent" - trigger: - platform: event - event_type: nzbget_download_complete - - event_data: - category: tv - action: - action: notify.telegram_notifier - data: - title: "Download completed!" - message: "{{trigger.event.data.name}}" + triggers: + - trigger: event + event_type: nzbget_download_complete + event_data: + category: tv + actions: + - action: notify.telegram_notifier + data: + title: "Download completed!" + message: "{{trigger.event.data.name}}" ``` {% endraw %} diff --git a/source/_integrations/onvif.markdown b/source/_integrations/onvif.markdown index 84c90c7e3d2a..e7b73a3013ad 100644 --- a/source/_integrations/onvif.markdown +++ b/source/_integrations/onvif.markdown @@ -66,6 +66,7 @@ To help with development of this integration, enable `info` level logging for `h | Motion alarm | Binary sensor | Motion | Generic motion alarm. | | Field detection | Binary sensor | Motion | Polygonal field detection determines if each object in the scene is inside or outside the polygon. | | Cell motion detection | Binary sensor | Motion | Cell based motion detection determined by placing a grid over the video source and determining changes. | +| Human shape detection | Binary sensor | Motion | Detection of human shapes by on-camera recognition algorithm. | | Motion region detector | Binary sensor | Motion | Detects any motion against the specified motion region. The rule is configured for an area defined by a polygon. | | Detected sound | Binary sensor | Sound | Device detected sound. | | Digital input | Binary sensor | None | A digital input was triggered on the device. Amcrest is known to use this as a doorbell button press on the AD410. | diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown index 18ccd9e23d7e..870f232c9474 100644 --- a/source/_integrations/openai_conversation.markdown +++ b/source/_integrations/openai_conversation.markdown @@ -129,10 +129,10 @@ Select **YAML Mode** to reveal the *config_entry* value to be used in the below ```yaml automation: - alias: "Update image when weather changes" - trigger: - - platform: state + triggers: + - trigger: state entity_id: weather.home - action: + actions: - alias: "Ask OpenAI to generate an image" action: openai_conversation.generate_image response_variable: generated_image @@ -148,10 +148,10 @@ automation: url: '{{ generated_image.url }}' template: - - trigger: - alias: "Update image when a new weather image is generated" - platform: event - event_type: new_weather_image + - triggers: + - alias: "Update image when a new weather image is generated" + trigger: event + event_type: new_weather_image image: name: "AI generated image of New York" url: "{{ trigger.event.data.url }}" diff --git a/source/_integrations/openhome.markdown b/source/_integrations/openhome.markdown index fee7af0c2246..bc358bb377a2 100644 --- a/source/_integrations/openhome.markdown +++ b/source/_integrations/openhome.markdown @@ -24,7 +24,7 @@ The Linn / OpenHome integration allows you to connect an [Openhome Compliant Ren ### Example local audio playback action ```yaml -action: +actions: - action: media_player.play_media target: entity_id: media_player.linn_bedroom diff --git a/source/_integrations/opensky.markdown b/source/_integrations/opensky.markdown index d5d52773fff5..65c35aa121bb 100644 --- a/source/_integrations/opensky.markdown +++ b/source/_integrations/opensky.markdown @@ -59,13 +59,13 @@ To receive notifications of the entering flights using the [Home Assistant Compa ```yaml automation: - alias: "Flight entry notification" - trigger: - platform: event - event_type: opensky_entry - action: - action: notify.mobile_app_ - data: - message: "Flight entry of {{ trigger.event.data.callsign }}" + triggers: + - trigger: event + event_type: opensky_entry + actions: + - action: notify.mobile_app_ + data: + message: "Flight entry of {{ trigger.event.data.callsign }}" ``` {% endraw %} @@ -76,19 +76,19 @@ One can also get a direct link to the OpenSky website to see the flight using th ```yaml automation: - alias: "Flight entry notification" - trigger: - platform: event - event_type: opensky_entry - action: - action: notify.mobile_app_ - data: - message: "Flight entry of {{ trigger.event.data.callsign }}" + triggers: + - trigger: event + event_type: opensky_entry + actions: + - action: notify.mobile_app_ data: - actions: - - action: URI - title: Track the flight - uri: >- - https://opensky-network.org/aircraft-profile?icao24={{ - trigger.event.data.icao24 }} + message: "Flight entry of {{ trigger.event.data.callsign }}" + data: + actions: + - action: URI + title: "Track the flight" + uri: >- + https://opensky-network.org/aircraft-profile?icao24={{ + trigger.event.data.icao24 }} ``` {% endraw %} diff --git a/source/_integrations/opentherm_gw.markdown b/source/_integrations/opentherm_gw.markdown index 415377465299..f4c2949651ef 100644 --- a/source/_integrations/opentherm_gw.markdown +++ b/source/_integrations/opentherm_gw.markdown @@ -3,8 +3,10 @@ title: OpenTherm Gateway description: Control your OpenTherm Gateway from Home Assistant. ha_category: - Binary sensor + - Button - Climate - Hub + - Select - Sensor ha_release: 0.81 ha_iot_class: Local Push @@ -14,20 +16,17 @@ ha_codeowners: ha_domain: opentherm_gw ha_platforms: - binary_sensor + - button - climate + - select - sensor + - switch ha_integration_type: integration --- The `opentherm_gw` integration is used to control the [OpenTherm Gateway](https://otgw.tclcode.com/) from Home Assistant. -The following device types are currently supported within Home Assistant: - -- Binary sensor -- Climate -- Sensor - -This integration will add a single `climate` entity to Home Assistant for each configured gateway. Each gateway also has a collection of `sensor` and `binary_sensor` entities, which are disabled by default. These can be enabled from the `Devices` panel in the `Configuration` page of the web interface. +This integration will add three devices to Home Assistant for each configured gateway. The main control of the integration is a single `climate` entity which can be found on the added `OpenTherm Thermostat` device. All added devices have a collection of `sensor` and `binary_sensor` entities, which are disabled by default. To enable them, follow the steps on [enabling entities](/common-tasks/general/#enabling-or-disabling-entities). {% note %} The OpenTherm protocol is based on polling. The thermostat sends requests to the boiler at specific intervals. As a result, it may take some time for changes to propagate between Home Assistant and the thermostat. @@ -70,6 +69,16 @@ Floor Temperature: description: "Some thermostats round all temperatures down to the lower value according to their precision. Default behavior for Home Assistant is to round temperatures to the nearest value. Enable this setting to override this behavior and round to the lower value according to the configured precision." {% endconfiguration_basic %} +## Entities + +### Button + +The restart button on the `OpenTherm Gateway` device can be used to restart the OpenTherm Gateway. + +### Select + +Several `select` configuration entities can be found on the `OpenTherm Gateway` device. These can be used to configure the LEDs and GPIO pins of the OpenTherm Gateway. More information about the available modes can be found in the sections [LED modes](#led-modes) and [GPIO modes](#gpio-modes) or in the [commands documentation](https://otgw.tclcode.com/firmware.html#configuration) of the OpenTherm Gateway. + ## Actions ### Action `opentherm_gw.reset_gateway` @@ -222,315 +231,6 @@ Send a transparent [command](https://otgw.tclcode.com/firmware.html) to the Open | `transp_cmd` | no | The serial command to be sent to the OpenTherm Gateway. | | `transp_arg` | no | The serial command argument to be sent to the OpenTherm Gateway. | -## Sensors - -The following `sensor` entities will be created for each configured gateway. The `entity_id` of every sensor will have a suffix containing the data source (`boiler`, `gateway` or `thermostat`) and the `gateway_id` of the gateway to which it belongs. All `sensor` entities are disabled by default. -{% note %} -Not all boilers and thermostats properly support all OpenTherm features, so not all of the sensors will have useful values. -{% endnote %} - -- **burner_hours** - Boiler flame on time. - -- **burner_starts** - Number of burner starts. - -- **ch_pump_hours** - Central heating pump running time. - -- **ch_pump_starts** - Number of central heating pump starts. - -- **ch_water_pressure** - Central heating water pressure. - -- **ch_water_temp** - Central heating water temperature. - -- **ch_water_temp_2** - Central heating 2 water temperature. - -- **control_setpoint** - Central heating water target temperature. - -- **control_setpoint_2** - Central heating 2 water target temperature. - -- **cooling_control** - Cooling control signal value. - -- **dhw_burner_hours** - Hot water flame on time. - -- **dhw_burner_starts** - Number of hot water burner starts. - -- **dhw_flow_rate** - Hot water flow rate. - -- **dhw_pump_hours** - Hot water pump running time. - -- **dhw_pump_starts** - Number of hot water pump starts. - -- **dhw_setpoint** - Hot water target temperature. - -- **dhw_temp** - Hot water temperature. - -- **dhw_temp_2** - Hot water 2 temperature. - -- **exhaust_temp** - Boiler exhaust temperature. - -- **master_memberid** - Thermostat member ID. - -- **master_ot_version** - Thermostat OpenTherm protocol version. - -- **master_product_type** - Thermostat product type. - -- **master_product_version** - Thermostat product version. - -- **max_ch_setpoint** - Boiler maximum central heating water temperature. - -- **oem_diag** - OEM diagnostic information. - -- **otgw_about** - OpenTherm Gateway firmware version. - -- **otgw_build** - OpenTherm Gateway firmware build date and time. - -- **otgw_clockmhz** - OpenTherm Gateway firmware design clock speed. - -- **otgw_dhw_ovrd** - OpenTherm Gateway hot water override status. - -- **otgw_gpio_a** - OpenTherm Gateway GPIO port A operating mode. - -- **otgw_gpio_b** - OpenTherm Gateway GPIO port B operating mode. - -- **otgw_led_a** - OpenTherm Gateway LED A operating mode. - -- **otgw_led_b** - OpenTherm Gateway LED B operating mode. - -- **otgw_led_c** - OpenTherm Gateway LED C operating mode. - -- **otgw_led_d** - OpenTherm Gateway LED D operating mode. - -- **otgw_led_e** - OpenTherm Gateway LED E operating mode. - -- **otgw_led_f** - OpenTherm Gateway LED F operating mode. - -- **otgw_mode** - OpenTherm Gateway operating mode. - -- **otgw_setback_temp** - OpenTherm Gateway setback temperature for `away mode`. - -- **otgw_setpoint_ovrd_mode** - OpenTherm Gateway central heating setpoint override mode. - -- **otgw_smart_pwr** - OpenTherm Gateway smart power operating mode. - -- **otgw_thermostat_detect** - OpenTherm Gateway automatic thermostat detection status. - -- **otgw_vref** - OpenTherm Gateway voltage reference setting. - -- **outside_temp** - Outside temperature as reported in the OpenTherm protocol. - -- **relative_mod_level** - Relative modulation level. - -- **return_water_temp** - Boiler return water temperature. - -- **room_setpoint** - Room target temperature. - -- **room_setpoint_2** - Room 2 target temperature. - -- **room_setpoint_ovrd** - Room target temperature override value. - -- **room_temp** - Current room temperature. - -- **slave_ch_max_setp** - Maximum boiler supported central heating water target temperature. - -- **slave_ch_min_setp** - Minimum boiler supported central heating water target temperature. - -- **slave_dhw_max_setp** - Maximum boiler supported hot water target temperature. - -- **slave_dhw_min_setp** - Minimum boiler supported hot water target temperature. - -- **slave_max_capacity** - Maximum boiler capacity. - -- **slave_max_relative_modulation** - Maximum boiler supported relative modulation. - -- **slave_memberid** - Boiler member ID. - -- **slave_min_mod_level** - Minimum boiler supported modulation level. - -- **slave_oem_fault** - Boiler OEM fault indication. - -- **slave_ot_version** - Boiler OpenTherm protocol version. - -- **slave_product_type** - Boiler product type. - -- **slave_product_version** - Boiler product version. - -- **solar_coll_temp** - Solar collector temperature. - -- **solar_storage_temp** - Solar storage unit temperature. - - -## Binary sensors - -The following `binary_sensor` entities will be created for each configured gateway. The `entity_id` of every sensor will have a suffix containing the data source (`boiler`, `gateway` or `thermostat`) and the `gateway_id` of the gateway to which it belongs. All `binary_sensor` entities are disabled by default. -{% note %} -Not all boilers and thermostats properly support all OpenTherm features, so not all of the sensors will have useful values. -{% endnote %} - -- **master_ch2_enabled** - Thermostat requests central heating 2 on. - -- **master_ch_enabled** - Thermostat requests central heating on. - -- **master_cooling_enabled** - Thermostat requests cooling. - -- **master_dhw_enabled** - Thermostat requests hot water to be heated. - -- **master_otc_enabled** - Thermostat is using outside temperature correction. - -- **otgw_gpio_a_state** - OpenTherm Gateway GPIO A state. - -- **otgw_gpio_b_state** - OpenTherm Gateway GPIO B state. - -- **otgw_ignore_transitions** - OpenTherm Gateway ignores ripples in the signal during high/low transitions. - -- **otgw_ovrd_high_byte** - OpenTherm Gateway overrides high byte with message ID 100. - -- **remote_rw_dhw** - Boiler supports writing hot water setpoint. - -- **remote_rw_max_ch** - Boiler supports writing maximum central heating setpoint. - -- **remote_transfer_dhw** - Boiler supports reading hot water setpoint. - -- **remote_transfer_max_ch** - Boiler supports reading maximum central heating setpoint. - -- **rovrd_auto_prio** - Programmed room setpoint change takes priority over remote override setting. - -- **rovrd_man_prio** - Manual room setpoint change takes priority over remote override setting. - -- **slave_air_pressure_fault** - Boiler reports air pressure fault. - -- **slave_ch2_active** - Boiler reports central heating 2 active. - -- **slave_ch2_present** - Boiler has a central heating 2 circuit. - -- **slave_ch_active** - Boiler reports central heating active. - -- **slave_control_type** - Boiler control type ('off' is modulating, 'on' is on/off). - -- **slave_cooling_active** - Boiler reports cooling active. - -- **slave_cooling_supported** - Boiler supports cooling. - -- **slave_dhw_active** - Boiler reports hot water active. - -- **slave_dhw_config** - Boiler hot water mode ('off' is instantaneous or unspecified, 'on' is storage tank). - -- **slave_dhw_present** - Boiler reports hot water present. - -- **slave_diagnostic_indication** - Boiler diagnostic indication. - -- **slave_fault_indication** - Boiler fault indication. - -- **slave_flame_on** - Boiler reports flame on. - -- **slave_gas_fault** - Boiler reports gas fault. - -- **slave_low_water_pressure** - Boiler reports low water pressure. - -- **slave_master_low_off_pump** - Boiler supports low-off and pump control commands (this sensor is inverted, 'on' is not supported, 'off' is supported) - -- **slave_remote_reset** - Boiler reports 'lockout-reset' supported. - -- **slave_service_required** - Boiler reports service required. - -- **slave_water_overtemp** - Boiler reports water overtemperature. - ## GPIO modes Possible modes and their meaning for the GPIO pins are listed here: @@ -563,3 +263,11 @@ Possible LED modes and their meaning are listed here: - E. Transmission error has been detected. - M. Boiler requires maintenance. - P. Raised power mode active on thermostat interface. + +## Disabled configuration entities + +{% warning %} +Please read [this information](http://otgw.tclcode.com/standalone.html) from the designer of the OpenTherm Gateway before considering using the information in this section. +{% endwarning %} +For advanced control of your heating system, some `switch` configuration entities can be found on the added `OpenTherm Gateway` device. +These entities are disabled by default, as they can cause your heating system to run continuously and/or increase your energy consumption significantly if used improperly. In most setups, these entities are not needed and should be left disabled. diff --git a/source/_integrations/openuv.markdown b/source/_integrations/openuv.markdown index 34e8dc8ac211..8f96087e145d 100644 --- a/source/_integrations/openuv.markdown +++ b/source/_integrations/openuv.markdown @@ -101,18 +101,18 @@ horizon: ```yaml automation: - alias: "Update OpenUV" - trigger: - platform: time_pattern - minutes: "/20" - condition: - condition: numeric_state - entity_id: sun.sun - value_template: "{{ state.attributes.elevation }}" - above: 10 - action: - action: homeassistant.update_entity - target: - entity_id: sensor.LATITUDE_LONGITUDE_current_uv_index + triggers: + - trigger: time_pattern + minutes: "/20" + conditions: + - condition: numeric_state + entity_id: sun.sun + value_template: "{{ state.attributes.elevation }}" + above: 10 + actions: + - action: homeassistant.update_entity + target: + entity_id: sensor.LATITUDE_LONGITUDE_current_uv_index ``` {% endraw %} @@ -121,13 +121,13 @@ Update the protection window once a day at 12:00pm: ```yaml automation: - alias: "Update OpenUV" - trigger: - platform: time - at: "12:00:00" - action: - action: homeassistant.update_entity - target: - entity_id: binary_sensor.LATITUDE_LONGITUDE_protection_window + triggers: + - trigger: time + at: "12:00:00" + actions: + - action: homeassistant.update_entity + target: + entity_id: binary_sensor.LATITUDE_LONGITUDE_protection_window ``` To perform an optimal amount of API calls in locations where the amount of daylight @@ -139,13 +139,13 @@ running into the 50 API call limit per day: ```yaml automation: - alias: "Update OpenUV" - trigger: + triggers: # Time pattern of /45 will not work as expected, as it will sometimes be true # twice per hour (on the whole hour and on the whole hour + 45 minutes); use a # more frequent time pattern and a condition to get the intended behavior: - - platform: time_pattern + - trigger: time_pattern minutes: "/15" - condition: + conditions: - condition: sun after: sunrise before: sunset @@ -164,13 +164,13 @@ automation: now() - state_attr('automation.update_openuv', 'last_triggered') ) >= timedelta(hours = 0, minutes = 40) }} - action: - action: homeassistant.update_entity - target: - entity_id: - # Update both UV and protection window data: - - binary_sensor.LATITUDE_LONGITUDE_protection_window - - sensor.LATITUDE_LONGITUDE_current_uv_index + actions: + - action: homeassistant.update_entity + target: + entity_id: + # Update both UV and protection window data: + - binary_sensor.LATITUDE_LONGITUDE_protection_window + - sensor.LATITUDE_LONGITUDE_current_uv_index ``` {% endraw %} diff --git a/source/_integrations/openweathermap.markdown b/source/_integrations/openweathermap.markdown index f9d23b100d48..fc975c064e7b 100644 --- a/source/_integrations/openweathermap.markdown +++ b/source/_integrations/openweathermap.markdown @@ -34,7 +34,7 @@ You need an API key, it requires a [subscription](https://openweathermap.org/api ### OpenWeatherMap API V2.5 Deprecation -OpenWeatherMap API V2.5 will be closed in June 2024. After this date, you will need to use API V3.0. +OpenWeatherMap API V2.5 will be closed on October 7th 2024. After this date, you will need to use API V3.0. To continue using the service: diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown index 9d4f620ac7c0..3f4513382627 100644 --- a/source/_integrations/opower.markdown +++ b/source/_integrations/opower.markdown @@ -27,6 +27,7 @@ More than 175 utilities use Opower. Currently only the following utilities are s - Kentucky Power - Public Service Company of Oklahoma (PSO) - Southwestern Electric Power Company (SWEPCO) +- Arizona Public Service (APS) - City of Austin Utilities - Consolidated Edison (ConEd) and subsidiaries - Orange & Rockland Utilities (ORU) diff --git a/source/_integrations/persistent_notification.markdown b/source/_integrations/persistent_notification.markdown index e34273ffe3c7..dda66e1a033f 100644 --- a/source/_integrations/persistent_notification.markdown +++ b/source/_integrations/persistent_notification.markdown @@ -30,8 +30,8 @@ An example of a persistent notification trigger in YAML: ```yaml automation: - - trigger: - - platform: persistent_notification + - triggers: + - trigger: persistent_notification # Optional. Possible values: added, removed, updated, current update_type: - added @@ -56,11 +56,11 @@ The `persistent_notification.create` action takes in `message`, `title`, and `no Here is how an [action](/docs/automation/action) of your [automation setup](/getting-started/automation/) with static content could look like. ```yaml -action: - action: persistent_notification.create - data: - message: "Your message goes here" - title: "Custom subject" +actions: + - action: persistent_notification.create + data: + message: "Your message goes here" + title: "Custom subject" ``` If you want to show some runtime information, you have to use [templates](/docs/configuration/templating/). @@ -68,12 +68,12 @@ If you want to show some runtime information, you have to use [templates](/docs/ {% raw %} ```yaml -action: - action: persistent_notification.create - data: - title: > - Thermostat is {{ state_attr('climate.thermostat', 'hvac_action') }} - message: "Temperature {{ state_attr('climate.thermostat', 'current_temperature') }}" +actions: + - action: persistent_notification.create + data: + title: > + Thermostat is {{ state_attr('climate.thermostat', 'hvac_action') }} + message: "Temperature {{ state_attr('climate.thermostat', 'current_temperature') }}" ``` {% endraw %} @@ -87,17 +87,17 @@ The `persistent_notification.dismiss` action requires a `notification_id`. This action allows you to remove a notifications by script or automation. ```yaml -action: - action: persistent_notification.dismiss - data: - notification_id: "1234" +actions: + - action: persistent_notification.dismiss + data: + notification_id: "1234" ``` The `persistent_notification.dismiss_all` action allows you to remove all notifications. ```yaml -action: - action: persistent_notification.dismiss_all +actions: + - action: persistent_notification.dismiss_all ``` ### Markdown support diff --git a/source/_integrations/pilight.markdown b/source/_integrations/pilight.markdown index 3fb287d2cd49..69937333391f 100644 --- a/source/_integrations/pilight.markdown +++ b/source/_integrations/pilight.markdown @@ -8,8 +8,6 @@ ha_category: - Switch ha_release: 0.26 ha_iot_class: Local Push -ha_codeowners: - - '@trekky12' ha_domain: pilight ha_platforms: - binary_sensor diff --git a/source/_integrations/pinecil.markdown b/source/_integrations/pinecil.markdown index dfe653911315..f8a7e293fdb7 100644 --- a/source/_integrations/pinecil.markdown +++ b/source/_integrations/pinecil.markdown @@ -2,6 +2,7 @@ title: Pinecil description: Connect and control your Pinecil devices using the IronOS integration ha_category: + - Number - Sensor ha_release: 2024.8 ha_domain: pinecil diff --git a/source/_integrations/plex.markdown b/source/_integrations/plex.markdown index 8359925364b9..c64c6238530b 100644 --- a/source/_integrations/plex.markdown +++ b/source/_integrations/plex.markdown @@ -77,19 +77,19 @@ In addition to the item count, the last added media item (movie, album, or episo Example automation to use the `last_added_item` attribute on library sensors to notify when new media has been added: ```yaml -alias: Plex - New media added -trigger: - - platform: state +alias: "Plex - New media added" +triggers: + - trigger: state entity_id: sensor.plex_library_movies id: movie - - platform: state + - trigger: state entity_id: sensor.plex_library_music id: album - - platform: state + - trigger: state entity_id: sensor.plex_library_tv_shows id: episode -action: +actions: - action: notify.mobile_app_phone data: title: "New {{ trigger.id }} added" @@ -117,7 +117,7 @@ play_plex_on_tv: data: source: "Plex" - wait_for_trigger: - - platform: state + - trigger: state entity_id: media_player.smart_tv to: "on" timeout: @@ -160,6 +160,7 @@ Required fields within the `media_content_id` payloads are marked as such, other - `resume`: Resumes playback at the last partially watched position if available, otherwise plays at the beginning. - `offset`: The desired playback start position in seconds. - `allow_multiple`: A search must find one specific item to succeed. This parameter accepts multiple matches in a search and enqueues all found items for playback. Accepts `1` or `true` to enable. +- `username`: A username for a local Plex user account. This is only required if the Plex server has multiple users and you wish to play media for a specific user. Simplified examples are provided for [music](#music), [TV episodes](#tv-episode), and [movies](#movie). See [advanced searches](#advanced-searches) for complex/smart search capabilities. diff --git a/source/_integrations/point.markdown b/source/_integrations/point.markdown index 15aff89863ac..5e2a4d603e3b 100644 --- a/source/_integrations/point.markdown +++ b/source/_integrations/point.markdown @@ -19,44 +19,32 @@ ha_platforms: - sensor ha_integration_type: integration related: - - docs: /docs/configuration/ - title: Configuration file + - docs: /integrations/application_credentials/ + title: Application credentials --- -The Point hub enables integration with the [Minut Point](https://minut.com/). To connect with Point, you will have to [sign up for a developer account and have a Pro subscription](https://minut.com/community/developers/) and get a `client_id` and `client_secret` with the `callback url` configured as your Home Assistant URL + `/api/minut`, e.g., `http://homeassistant.local:8123/api/minut`. The `client_id` and `client_secret` should be used as below. +The Point hub enables integration with the [Minut Point](https://minut.com/). -Once Home Assistant is started, a configurator will pop up asking you to Authenticate your Point account via a link. When you follow the link and click on **Accept** you will be redirected to the `callback url` and the Point integration will be automatically configured and you can go back to the original dialog and press **Submit**. -There is currently support for the following device types within Home Assistant: +## Prerequisites -- [Alarm](#alarm) -- [Binary sensor](#binary-sensor) -- [Sensor](#sensor) +Before adding the integration to Home Assistant, you need to get Minut Point application credentials. -### Configuration +1. Navigate to the [API-client | Minut](https://web.minut.com/settings/api-clients) dashboard and **Create client**: -To use the Minut Point {% term integration %} in your installation, add it to your {% term "`configuration.yaml`" %} file. -{% include integrations/restart_ha_after_config_inclusion.md %} + - Enter a **Name** for your client (this is just an identifier). + - Enter `https://my.home-assistant.io/redirect/oauth` in the **Redirect URI** field. +2. Get the **ClientID** and **ClientSecret** for the new client and store them in a safe place. You need them to complete the integration setup in Home Assistant. -```yaml -# Example configuration.yaml entry -point: - client_id: CLIENT_ID - client_secret: CLIENT_SECRET -``` +
+ +If you are a Kickstarter backer, you need to send an email to hello@minut.com to retrieve the **ClientID** and **ClientSecret**. Don't forget to mention that the **Redirect URI** should be `https://my.home-assistant.io/redirect/oauth`. + +
-{% configuration %} -client_id: - description: Your Minut Point developer client ID. - required: true - type: string -client_secret: - description: Your Minut Point developer client secret. - required: true - type: string -{% endconfiguration %} +{% include integrations/config_flow.md %} -# Device types +## Device types The integration supports the following device types within Home Assistant: - [Alarm](#alarm) @@ -107,11 +95,11 @@ The following example show how to implement an automation for the **button_press # Example configuration.yaml Automation entry automation: alias: "Point button press" - trigger: - - platform: state + triggers: + - trigger: state entity_id: binary_sensor.point_button_press # Change this accordingly to: "on" - action: + actions: - action: persistent_notification.create data: title: Point button press @@ -128,14 +116,14 @@ The events shown as [binary sensors](#binary-sensor) are sent to Home Assistant # Example configuration.yaml Automation entry automation: alias: "Point button press (webhook)" - trigger: - - platform: event + triggers: + - trigger: event event_type: point_webhook_received event_data: {} - condition: - condition: template - value_template: "{{ trigger.event.data.event.type == 'short_button_press' }}" - action: + conditions: + - condition: template + value_template: "{{ trigger.event.data.event.type == 'short_button_press' }}" + actions: - action: persistent_notification.create data: title: Point button press (webhook) diff --git a/source/_integrations/prusalink.markdown b/source/_integrations/prusalink.markdown index e782883e9de6..1e0a380f0751 100644 --- a/source/_integrations/prusalink.markdown +++ b/source/_integrations/prusalink.markdown @@ -8,7 +8,6 @@ ha_release: '2022.9' ha_config_flow: true ha_codeowners: - '@balloob' - - '@Skaronator' ha_domain: prusalink ha_integration_type: integration ha_platforms: diff --git a/source/_integrations/pushbullet.markdown b/source/_integrations/pushbullet.markdown index a70dc87eb0a6..75e29e3d943c 100644 --- a/source/_integrations/pushbullet.markdown +++ b/source/_integrations/pushbullet.markdown @@ -85,13 +85,13 @@ To use notifications, please see the [getting started with automation page](/get ### URL support ```yaml -action: - action: notify.NOTIFIER_NAME - data: - title: Send URL - message: This is an url +actions: + - action: notify.NOTIFIER_NAME data: - url: google.com + title: "Send URL" + message: "This is an url" + data: + url: "google.com" ``` - `url` (*Required*): Page URL to send with Pushbullet. @@ -99,13 +99,13 @@ action: ### File support ```yaml -action: - action: notify.NOTIFIER_NAME - data: - title: Send file - message: This is a file +actions: + - action: notify.NOTIFIER_NAME data: - file: /path/to/my/file + title: "Send file" + message: "This is a file" + data: + file: /path/to/my/file ``` - `file` (*Required*): File to send with Pushbullet. @@ -113,13 +113,13 @@ action: ### File URL support ```yaml -action: - action: notify.NOTIFIER_NAME - data: - title: Send file - message: This is a file URL +actions: + - action: notify.NOTIFIER_NAME data: - file_url: https://cdn.pixabay.com/photo/2014/06/03/19/38/test-361512_960_720.jpg + title: "Send file" + message: "This is a file URL" + data: + file_url: https://cdn.pixabay.com/photo/2014/06/03/19/38/test-361512_960_720.jpg ``` - `file_url` (*Required*): File to send with Pushbullet. @@ -127,8 +127,8 @@ action: ### Single target ```yaml - action: - action: notify.NOTIFIER_NAME +actions: + - action: notify.NOTIFIER_NAME data: title: "Send to one device" message: "This only goes to one specific device" diff --git a/source/_integrations/pushsafer.markdown b/source/_integrations/pushsafer.markdown index 4e487d4ca4d8..e92328848def 100644 --- a/source/_integrations/pushsafer.markdown +++ b/source/_integrations/pushsafer.markdown @@ -46,67 +46,67 @@ private_key: Message to two devices with formatted text. ```yaml -action: - action: notify.notify - data: - title: "Test to 2 devices" - message: "Attention [b]bold[/b] text[br][url=https://www.pushsafer.com]Link to Pushsafer[/url]" +actions: + - action: notify.notify data: - icon: "2" - iconcolor: "#FF0000" - sound: "2" - vibration: "1" - url: "https://www.home-assistant.io/" - urltitle: "Open Home Assistant" - time2live: "0" + title: "Test to 2 devices" + message: "Attention [b]bold[/b] text[br][url=https://www.pushsafer.com]Link to Pushsafer[/url]" + data: + icon: "2" + iconcolor: "#FF0000" + sound: "2" + vibration: "1" + url: "https://www.home-assistant.io/" + urltitle: "Open Home Assistant" + time2live: "0" ``` Message to one device with formatted text and image from an external URL. ```yaml -action: - action: notify.notify - data: - title: "Test to 1 device with image from an url" - message: "Attention [i]italic[/i] Text[br][url=https://www.home-assistant.io/]Testlink[/url]" +actions: + - action: notify.notify data: - icon: "14" - iconcolor: "#FFFF00" - sound: "22" - vibration: "31" - url: "https://www.home-assistant.io/" - urltitle: "Open Home Assistant" - time2live: "60" - picture1: - url: "https://www.home-assistant.io/images/integrations/alexa/alexa-512x512.png" + title: "Test to 1 device with image from an url" + message: "Attention [i]italic[/i] Text[br][url=https://www.home-assistant.io/]Testlink[/url]" + data: + icon: "14" + iconcolor: "#FFFF00" + sound: "22" + vibration: "31" + url: "https://www.home-assistant.io/" + urltitle: "Open Home Assistant" + time2live: "60" + picture1: + url: "https://www.home-assistant.io/images/integrations/alexa/alexa-512x512.png" ``` Message to two devices and one device group with formatted text and local image. ```yaml -action: - action: notify.notify - data: - title: "Test to 3 devices with local image" - message: "Attention [i]italic[/i] Text[br][url=https://www.home-assistant.io/]Testlink[/url]" - target: ["1111","2222","gs3333"], +actions: + - action: notify.notify data: - icon: "20" - iconcolor: "#FF00FF" - sound: "33" - vibration: "0" - url: "https://www.home-assistant.io/" - urltitle: "Open Home Assistant" - time2live: "10" - priority: "2" - retry: "60" - expire: "600" - confirm: "10" - answer: "1" - answeroptions: "yes|no|maybe" - answerforce: "1" - picture1: { - path: "C:\\Users\\Kevin\\AppData\\Roaming\\.homeassistant\\image-760-testimage.jpg" + title: "Test to 3 devices with local image" + message: "Attention [i]italic[/i] Text[br][url=https://www.home-assistant.io/]Testlink[/url]" + target: ["1111","2222","gs3333"], + data: + icon: "20" + iconcolor: "#FF00FF" + sound: "33" + vibration: "0" + url: "https://www.home-assistant.io/" + urltitle: "Open Home Assistant" + time2live: "10" + priority: "2" + retry: "60" + expire: "600" + confirm: "10" + answer: "1" + answeroptions: "yes|no|maybe" + answerforce: "1" + picture1: { + path: "C:\\Users\\Kevin\\AppData\\Roaming\\.homeassistant\\image-760-testimage.jpg" ``` To customize your push-notification you can take a look at the [Pushsafer API description](https://www.pushsafer.com/en/pushapi). diff --git a/source/_integrations/qrcode.markdown b/source/_integrations/qrcode.markdown index 06bf10229a5c..41f0377a6b0a 100644 --- a/source/_integrations/qrcode.markdown +++ b/source/_integrations/qrcode.markdown @@ -52,11 +52,11 @@ An automation using this integration could look like this: ```yaml automation: - alias: "Catch QR code and arm the alarm system" - trigger: - - platform: state + triggers: + - trigger: state entity_id: image_processing.qr_front_door to: ARM_QR_CODE_VALUE - action: + actions: - action: alarm_control_panel.alarm_arm_away target: entity_id: alarm_control_panel.home_alarm diff --git a/source/_integrations/qwikswitch.markdown b/source/_integrations/qwikswitch.markdown index 20b747f0cf5f..80bc692e9200 100644 --- a/source/_integrations/qwikswitch.markdown +++ b/source/_integrations/qwikswitch.markdown @@ -108,9 +108,9 @@ QwikSwitch devices (i.e., transmitter buttons) will fire events on the Home Assi ```yaml automation: - alias: "Action - Respond to A button press" - trigger: - platform: event - event_type: qwikswitch.button.@12df34 + triggers: + - trigger: event + event_type: qwikswitch.button.@12df34 ``` `event_type` names should be in the format **qwikswitch.button.@_QS_id_**. where **@_QS_id_** will be captured in the Home Assistant log when pressing the button. Alternatively, you can also get the device ID from the QS Mobile application or by using the listen API call by browsing to `http://127.0.0.1:2020/&listen` and then pressing the button. diff --git a/source/_integrations/rainbird.markdown b/source/_integrations/rainbird.markdown index 5c27d954d281..20da8718c758 100644 --- a/source/_integrations/rainbird.markdown +++ b/source/_integrations/rainbird.markdown @@ -76,10 +76,10 @@ zone switch entity and allows a custom duration unlike the switch. # Example configuration.yaml automation entry automation: - alias: "Turn irrigation on" - trigger: - - platform: time + triggers: + - trigger: time at: "5:30:00" - action: + actions: - action: rainbird.start_irrigation data: entity_id: switch.rain_bird_sprinkler_1 diff --git a/source/_integrations/raven_rock_mfg.markdown b/source/_integrations/raven_rock_mfg.markdown index 1c68f35c6b73..45f59bf4bf07 100644 --- a/source/_integrations/raven_rock_mfg.markdown +++ b/source/_integrations/raven_rock_mfg.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/recorder.markdown b/source/_integrations/recorder.markdown index 23abe79278fb..95dca003352e 100644 --- a/source/_integrations/recorder.markdown +++ b/source/_integrations/recorder.markdown @@ -235,15 +235,14 @@ The below automation will remove history for `sensor.power_sensor_0` older than ```yaml alias: "Purge noisy power sensors" -trigger: - - platform: time +triggers: + - trigger: time at: "04:15:00" -action: +actions: - action: recorder.purge_entities data: keep_days: 5 entity_id: sensor.power_sensor_0 -mode: single ``` ### Action `disable` diff --git a/source/_integrations/remember_the_milk.markdown b/source/_integrations/remember_the_milk.markdown index cceed1872843..87f83606a1a4 100644 --- a/source/_integrations/remember_the_milk.markdown +++ b/source/_integrations/remember_the_milk.markdown @@ -91,22 +91,20 @@ Here's an example for an automation that creates a new task whenever `sensor.mys {% raw %} ```yaml -- id: mysensor_on - trigger: - platform: state - entity_id: sensor.mysensor - to: on - action: +- triggers: + - trigger: state + entity_id: sensor.mysensor + to: "on" + actions: - action: remember_the_milk.myaccount_create_task data: name: "Please switch off {{trigger.entity_id}}" id: "{{trigger.entity_id}}" -- id: mysensor_off - trigger: - platform: state - entity_id: sensor.mysensor - to: off - action: +- triggers: + - trigger: state + entity_id: sensor.mysensor + to: "off" + actions: - action: remember_the_milk.myaccount_complete_task data: id: "{{trigger.entity_id}}" diff --git a/source/_integrations/renault.markdown b/source/_integrations/renault.markdown index 84e7d51731b7..138f4b0d56a3 100644 --- a/source/_integrations/renault.markdown +++ b/source/_integrations/renault.markdown @@ -58,6 +58,37 @@ Cancel A/C on vehicle. | ---------------------- | -------- | ----------- | | `vehicle`| yes | device_id of the vehicle | +### Action `renault.ac_set_schedules` + +Update AC schedule on vehicle. + + | Data attribute | Required | Description | Example | + | ---------------------- | -------- | ----------- | ------- | + | `vehicle`| yes | device_id of the vehicle | | + | `schedules` | yes | Schedule details. Can be a single schedule or a list of schedules | see [example below](#ac_schedule_example) | + +Notes: + +- `schedules` can contain one or more schedules which are set within the same call. +- The `id` is compulsory on each `schedule` (should be 1 to 5, depending on the vehicle). +- The `activated` flag is an optional boolean. If it is not provided, then the existing flag will be kept as is. +- The `monday` to `sunday` elements are optional. If they are not provided, then the existing settings will be kept for each day. If they are provided as None, then the existing setting will be cleared. If a value is provided, it must contain the key `readyAtTime` (in UTC format). + +Example: + +```yaml +- id: 1 + activated: true + monday: + readyAtTime: 'T12:00Z' +- id: 2 + activated: false + monday: + readyAtTime: 'T12:00Z' + tuesday: + readyAtTime: 'T12:00Z' +``` + ### Action `renault.charge_set_schedules` Update charge schedule on vehicle. @@ -69,24 +100,22 @@ Update charge schedule on vehicle. Notes: -- `schedules` can be in the form `{'id':1,...}` when updating a single schedules, or in the form `[{'id':1,...},{'id':2,...},...]` when updating multiple schedules within the same call +- `schedules` can contain one or more schedules which are set within the same call - the `id` is compulsory on each `schedule` (should be 1 to 5 depending on the vehicle) - the `activated` flag is an optional boolean. If it is not provided, then the existing flag will be kept as is. -- the `monday` to `sunday` elements are optional. If they are not provided, then the existing settings will be kept for each day. If they are provided as None, then the existing setting will be cleared. If a value is provided, it must conform to this format `{'startTime':'T12:00Z','duration':15}` where start time is in UTC format and the duration is in minutes. +- the `monday` to `sunday` elements are optional. If they are not provided, then the existing settings will be kept for each day. If they are provided as None, then the existing setting will be cleared. If a value is provided, it must contain the keys `startTime` (in UTC format) and `duration` (in minutes). Example: ```yaml -[ - { - 'id': 1, - 'activated': true, - 'monday': {'startTime':'T12:00Z', 'duration':15} - }, - { - 'id': 2, - 'activated': false, - 'monday': {'startTime':'T12:00Z', 'duration':240} - }, -] +- id: 1 + activated: true + monday: + startTime: 'T12:00Z' + duration: 15 +- id: 1 + activated: false + monday: + startTime: 'T12:00Z' + duration: 15 ``` diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown index a2cf9a8eab7d..b50776bd7e05 100644 --- a/source/_integrations/reolink.markdown +++ b/source/_integrations/reolink.markdown @@ -90,7 +90,10 @@ Depending on the supported features of the camera, number entities are added for - Optical zoom control - Focus control - Floodlight turn on brightness -- Volume +- Volume (Camera) +- Alarm volume (Home Hub) +- Message volume (Home Hub) +- Chime volume - Guard return time - Motion sensitivity - PIR sensitivity @@ -117,7 +120,6 @@ Depending on the supported features of the camera, number entities are added for - Image saturation* (default 128) - Image sharpness* (default 128) - Image hue* (default 128) -- Chime volume **Floodlight turn on brightness** controls the brightness of the floodlight when it is turned on internally by the camera (see **Floodlight mode** select entity) or when using the **Floodlight** light entity. @@ -173,6 +175,8 @@ Depending on the supported features of the camera, select entities are added for - Chime motion ringtone - Chime person ringtone - Chime visitor ringtone +- Hub alarm ringtone +- Hub visitor ringtone **PTZ preset** positions can be set in the Reolink app/windows/web client, the names of the presets will be loaded into Home Assistant at the start of the integration. When adding new preset positions, please restart the Reolink integration. @@ -209,7 +213,7 @@ Depending on the supported features of the camera, switch entities are added for - Record - Manual record - Push notifications -- Buzzer on event +- Hub ringtone on event - Email on event - FTP upload - PIR enabled* @@ -218,7 +222,7 @@ Depending on the supported features of the camera, switch entities are added for When the **Infrared lights in night mode** entity is set to OFF, the infrared LEDs are always OFF. When the **Infrared lights in night mode** entity is set to ON, the infrared LEDs will be on when the camera is in night vision mode. For more information, see the **Day night mode** select entity. -For NVRs, a global switch for **Record**, **Push**, **Buzzer**, **Email**, and **FTP** will be available under the NVR device as well as a switch per channel of the NVR under the camera device. The respective feature will only be active for a given channel if both the global and that channel switch are enabled (as is also the case in the Reolink app/client). +For NVRs, a global switch for **Record**, **Push**, **Hub ringtone on event**, **Email**, and **FTP** will be available under the NVR device as well as a switch per channel of the NVR under the camera device. The respective feature will only be active for a given channel if both the global and that channel switch are enabled (as is also the case in the Reolink app/client). **Push** notifications to a phone will only be provided if the following conditions are met: - The **Push notifications** switch in Home Assistant is ON. @@ -244,6 +248,7 @@ Depending on the supported features of the camera, the following sensor entities - PTZ pan position - Wi-Fi signal* +- CPU usage* - HDD/SD storage* - Battery percentage - Battery temperature* @@ -296,6 +301,7 @@ The following models have been tested and confirmed to work with a direct link t - [RLC-823A](https://reolink.com/product/rlc-823a/) - [RLC-830A](https://reolink.com/product/rlc-830a/) - [RLC-833A](https://reolink.com/product/rlc-833a/) +- [RLC-843A](https://reolink.com/product/rlc-843a/) - [RLC-1212A](https://reolink.com/product/rlc-1212a/) - [RLC-1224A](https://reolink.com/product/rlc-1224a/) - [RLN8-410 NVR](https://reolink.com/product/rln8-410/) diff --git a/source/_integrations/rest_command.markdown b/source/_integrations/rest_command.markdown index ec57ba55fa06..6824535e3843 100644 --- a/source/_integrations/rest_command.markdown +++ b/source/_integrations/rest_command.markdown @@ -105,9 +105,9 @@ The following example shows how the REST command response may be used in automat # Create a ToDo notification based on file contents automation: - alias: "Check API response" - trigger: + triggers: - ... - action: + actions: - action: rest_command.traefik_get_rawdata response_variable: traefik_response - if: "{{ traefik_response['status'] == 200 }}" @@ -183,12 +183,12 @@ Call the new action from [developer tools](/docs/tools/dev-tools/) in the sideba ```yaml automation: - alias: "Arrive at Work" - trigger: - platform: zone - entity_id: device_tracker.my_device - zone: zone.work - event: enter - action: + triggers: + - trigger: zone + entity_id: device_tracker.my_device + zone: zone.work + event: enter + actions: - action: rest_command.my_request data: status: "At Work" diff --git a/source/_integrations/rfxtrx.markdown b/source/_integrations/rfxtrx.markdown index 08115f65dfcb..083a2a508284 100644 --- a/source/_integrations/rfxtrx.markdown +++ b/source/_integrations/rfxtrx.markdown @@ -296,7 +296,7 @@ So, for example, to trigger an action when somebody presses the doorbell, you wo *Automation trigger:* ```yaml -- platform: event +- trigger: event event_type: rfxtrx_event event_data: packet_type: 22 @@ -320,8 +320,8 @@ scene: automation: - alias: "Use doorbell button to trigger scene" - trigger: - - platform: event + triggers: + - trigger: event event_type: rfxtrx_event event_data: packet_type: 22 @@ -329,10 +329,10 @@ automation: id_string: "00:90" values: Sound: 9 - action: - action: scene.turn_on - target: - entity_id: scene.welcomescene + actions: + - action: scene.turn_on + target: + entity_id: scene.welcomescene ``` ## Actions @@ -345,10 +345,10 @@ Simulate a button being pressed: ```yaml ... -action: - action: rfxtrx.send - data: - event: 0b1111e003af16aa10000060 +actions: + - action: rfxtrx.send + data: + event: 0b1111e003af16aa10000060 ``` Alternatively: diff --git a/source/_integrations/ring.markdown b/source/_integrations/ring.markdown index beede8e2c26b..208e2b198148 100644 --- a/source/_integrations/ring.markdown +++ b/source/_integrations/ring.markdown @@ -6,7 +6,9 @@ ha_category: - Button - Camera - Doorbell + - Event - Light + - Number - Sensor - Switch ha_release: 0.42 @@ -20,7 +22,9 @@ ha_platforms: - button - camera - diagnostics + - event - light + - number - sensor - siren - switch @@ -40,6 +44,7 @@ There is currently support for the following device types within Home Assistant: - [Sensor](#sensor) - [Switch](#switch) - [Light](#light) +- [Number](#number) {% note %} This integration does NOT allow for live viewing of your Ring camera within Home Assistant. @@ -49,7 +54,9 @@ This integration does NOT allow for live viewing of your Ring camera within Home ## Binary sensor -Once you have enabled the [Ring integration](/integrations/ring), you can start using a binary sensor. Currently, it supports doorbell, external chimes and stickup cameras. +The binary sensor switches off and on when motion, doorbell rings, and intercom unlock events occur. + +The binary sensor is being replaced with the event entity, and you should migrate any automations to the event entity by release 2025.4.0. ## Button @@ -79,11 +86,11 @@ Then you can use the following automation, with the entities from your system, w ```yaml automation: alias: "Save the video when the doorbell is pushed" - trigger: - - platform: state + triggers: + - trigger: state entity_id: binary_sensor.front_doorbell_ding to: "on" - action: + actions: - action: downloader.download_file data: url: "{{ state_attr('camera.front_door', 'video_url') }}" @@ -93,7 +100,7 @@ automation: {% endraw %} -You may consider some modifications in the subdirectory and the filename to suit your needs. For example, you can add the date and the time and extension to the downloaded file: +You may consider some modifications in the subdirectory and the filename to suit your needs. For example, you can add the date and the time and extension to the downloaded file: {% raw %} ```yaml @@ -132,9 +139,25 @@ data = { hass.services.call("downloader", "download_file", data) ``` +## Event + +The event entity captures events like doorbell rings, motion alerts, and intercom unlocking. + +### Realtime event stability + +If you are experiencing issues with receiving ring alerts, the reason could be that you have too many authenticated devices on your ring account. +Prior to version 2023.12.0, the Home Assistant ring integration would register a new entry in `Authorized Client Devices` in the `Control Centre` at [ring.com](https://account.ring.com/account/control-center/authorized-devices) every time it restarted. +If you have been using the ring integration before this, you may have many `Authorized Client Devices` in the `Control Centre` on [ring.com](https://account.ring.com/account/control-center/authorized-devices). +This can cause issues receiving ring alerts. +You should delete all authorised devices from [ring.com](https://account.ring.com/account/control-center/authorized-devices) `Control Centre` which are from Home Assistant +(i.e. do not delete those named `iPhone` or `Android`; Home Assistant authorized devices are named `ring-doorbell:HomeAssistant/something` or `Python`). +If you have too many `Authorised Client Devices` to delete them individually, it might be easier to `Remove all devices` and then re-authorize your required devices. + ## Sensor -Once you have enabled the [Ring integration](/integrations/ring), you can start using the sensor platform. Currently, it supports doorbell, external chimes and stickup cameras. +Once you have enabled the [Ring integration](/integrations/ring), you can start using the sensor platform. Currently, it supports battery level and Wi-Fi signal. + +The volume sensors are being replaced with the number entity which allows setting the volume. You should migrate any automations using the volume sensors to the number entity by release 2025.4.0. ## Switch @@ -143,3 +166,8 @@ Once you have enabled the [Ring integration](/integrations/ring), you can start ## Light Once you have enabled the [Ring integration](/integrations/ring), you can start using the light platform. This will add a light for every camera that supports a light (such as a floodlight). + +## Number + +Once you have enabled the [Ring integration](/integrations/ring), you can start using the number platform. +Currently, it supports showing and setting the volume of the doorbell/chime ring, intercom voice volume, and intercom microphone volume. diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown index eac9c9fa8e52..ba1918a64eab 100644 --- a/source/_integrations/roborock.markdown +++ b/source/_integrations/roborock.markdown @@ -196,7 +196,6 @@ We plan to make the process simpler in the future, but for now, it is a multi-st action: roborock.get_maps target: entity_id: vacuum.s7_roborock - data: {} ``` - **Result**: You will get a response like this: diff --git a/source/_integrations/roku.markdown b/source/_integrations/roku.markdown index 8e14ff2a99db..a28d924506dc 100644 --- a/source/_integrations/roku.markdown +++ b/source/_integrations/roku.markdown @@ -105,7 +105,7 @@ The `media_player.select_source` action may be used to launch specific applicati ### Examples ```yaml -action: +actions: - action: media_player.select_source target: entity_id: media_player.roku @@ -116,7 +116,7 @@ action: Alternatively, the application id can be used for `source`. See [Obtaining Application IDs](#obtaining-application-ids). ```yaml -action: +actions: - action: media_player.select_source target: entity_id: media_player.roku @@ -143,7 +143,7 @@ The `media_player.play_media` action may be used to tune to specific channels on ### Example ```yaml -action: +actions: - action: media_player.play_media target: entity_id: media_player.roku @@ -167,7 +167,7 @@ The `media_player.play_media` action may be used to deep-link to content within ### Example ```yaml -action: +actions: - action: media_player.play_media target: entity_id: media_player.roku diff --git a/source/_integrations/roon.markdown b/source/_integrations/roon.markdown index e01713f85e7b..72ba7df8273f 100644 --- a/source/_integrations/roon.markdown +++ b/source/_integrations/roon.markdown @@ -76,13 +76,13 @@ In this autimation you can use Home Assistant actions to provide `volume_up` and Here is an example automation using an IR blaster to control `media_player_study` ```yaml -alias: Roon Study Volume -description: "" -trigger: - - platform: state +alias: "Roon Study Volume" +mode: queued +triggers: + - trigger: state entity_id: - event.study_roon_volume -action: +actions: - choose: - conditions: - condition: state @@ -114,6 +114,4 @@ action: command: volume_down target: entity_id: remote.ir_blaster -mode: queued - ``` diff --git a/source/_integrations/ruckus_unleashed.markdown b/source/_integrations/ruckus_unleashed.markdown index 0cadb84fcfa5..a6a9c22dcba0 100644 --- a/source/_integrations/ruckus_unleashed.markdown +++ b/source/_integrations/ruckus_unleashed.markdown @@ -1,6 +1,6 @@ --- -title: Ruckus Unleashed -description: Instructions on how to integrate your Ruckus Unleashed device into Home Assistant. +title: Ruckus +description: Instructions on how to integrate your Ruckus Networks device into Home Assistant. ha_category: - Presence detection ha_release: 0.117 @@ -16,38 +16,52 @@ ha_platforms: ha_integration_type: hub --- -This platform allows you to connect to a [Ruckus Unleashed](https://support.ruckuswireless.com/product_families/19-ruckus-unleashed) access point. +This platform allows you to connect to [Ruckus](https://www.ruckusnetworks.com/) access points. + +[Ruckus Unleashed](https://www.ruckusnetworks.com/products/network-control-and-management/controller-less/), +[Ruckus ZoneDirector](https://support.ruckuswireless.com/products/73), +[Ruckus SmartZone](https://www.ruckusnetworks.com/products/network-control-and-management/network-controllers/), +and [Ruckus One](https://www.ruckusnetworks.com/products/network-control-and-management/cloud-managed/) +access points are supported. Access points running Standalone/Solo firmware are not supported. There is currently support for the following device types within Home Assistant: -- **Presence detection** - The platform will look at devices connected to the access point and will create a `device_tracker` for each discovered device. +- **Presence detection** - The platform will look at devices connected to the access point and will +create a `device_tracker` for each discovered device. -## Configuration +## Prerequisites -To add a Ruckus Unleashed device to your installation, go to **Settings** -> **Devices & services**, click the `+` button, then select **Ruckus** from the list of integrations. +- **IP address / hostname**, **Username** and **Password** which you use to connect + to your Ruckus controller's web dashboard. -It is required to configure the IP address of your **master access point**. See the section Access Points on the management web interface. And perhaps consider to set a preferred master (Admin & Services>System>System Info>Preferred master). -You will have to create a user on the device which is a **Monitoring Admin**. Login to the Ruckus Unleashed admin UI and follow these steps: +### Ruckus Unleashed - - [Create a new role](https://docs.ruckuswireless.com/unleashed/200.1.9.12/t-ConfigUserRoles.html). - - Check **Allow Unleashed Administration**. - - Select the **Monitoring Admin (Monitoring and viewing operation status only)** radio button. - - [Create a new user](https://docs.ruckuswireless.com/unleashed/200.1.9.12/t-AddingNewUsersInternal.html) with the new role. +You may enter the **IP address / hostname** of any access point as the Host. +If you've configured an Unleashed Management Interface, then use this instead. -## Troubleshooting +### Ruckus One + +You'll need to use your Ruckus One dashboard to create an Application Token. Go to the bottom of the +**Administration** > **Settings** screen and select the **Add Token** link. Choose any +**Application Name**, for example `Home Assistant`. The **Token Scope** can be **Read Only**. + +When Home Assistant prompts for Ruckus connection details, use the full URL of a Ruckus One +dashboard page as the Host (such as `https://asia.ruckus.cloud/5dd1000334cc2a01fcf28a740a6c95cf/t/dashboard`), +your Token **Client ID** as the Username & your Token **Shared Secret** as the Password. -For this platform to work, the Ruckus Unleashed device will need to be accessible over SSH. If you are having trouble with Home Assistant not connecting, make sure the user you created above can log in to SSH and can run privileged commands. +{% include integrations/config_flow.md %} -Terminal: +## Limitations -```bash -ssh +This integration is not currently suitable for large multi-venue SmartZone or Ruckus One networks: there +is no way to filter devices by Venue or Zone. + +If you've configured your access points with an extended Client Inactivity Timeout, then this is how long +you'll need to wait for devices to be detected as `not_home`. + +## Troubleshooting -Please login: -Password: -Welcome to Ruckus Unleashed Network Command Line Interface -ruckus> enable -ruckus# exit -Exit ruckus CLI. -``` +For this platform to work, the Ruckus controller or Unleashed AP will need to be accessible over HTTPS. +If you are having trouble with Home Assistant not connecting, make sure the user you have specified +can log in to the web dashboard and view AP, WLAN, and Client information. diff --git a/source/_integrations/samsungtv.markdown b/source/_integrations/samsungtv.markdown index 9d3f2590afbf..0603b7fe1f78 100644 --- a/source/_integrations/samsungtv.markdown +++ b/source/_integrations/samsungtv.markdown @@ -38,10 +38,10 @@ wake_on_lan: # enables `wake_on_lan` integration automation: - alias: "Turn On Living Room TV with WakeOnLan" - trigger: - - platform: samsungtv.turn_on + triggers: + - trigger: samsungtv.turn_on entity_id: media_player.samsung_smart_tv - action: + actions: - action: wake_on_lan.send_magic_packet data: mac: aa:bb:cc:dd:ee:ff diff --git a/source/_integrations/satel_integra.markdown b/source/_integrations/satel_integra.markdown index 22405a952070..495e7e5fc2b9 100644 --- a/source/_integrations/satel_integra.markdown +++ b/source/_integrations/satel_integra.markdown @@ -172,12 +172,12 @@ For example: ```yaml alias: "Flick the input switch when movement in bedroom detected" - trigger: - platform: state + triggers: + - trigger: state entity_id: "binary_sensor.bedroom" to: "on" - action: - action: input_boolean.turn_on + actions: + - action: input_boolean.turn_on target: entity_id: input_boolean.movement_detected ``` diff --git a/source/_integrations/scene.markdown b/source/_integrations/scene.markdown index 9351a06369e6..498966d3fdcc 100644 --- a/source/_integrations/scene.markdown +++ b/source/_integrations/scene.markdown @@ -101,15 +101,15 @@ Scenes can be activated using the `scene.turn_on` action (there is no `scene.tur ```yaml # Example automation automation: - trigger: - platform: state - entity_id: device_tracker.sweetheart - from: "not_home" - to: "home" - action: - action: scene.turn_on - target: - entity_id: scene.romantic + triggers: + - trigger: state + entity_id: device_tracker.sweetheart + from: "not_home" + to: "home" + actions: + - action: scene.turn_on + target: + entity_id: scene.romantic ``` ## Applying a scene without defining it @@ -119,22 +119,22 @@ With the `scene.apply` action you are able to apply a scene without first defini ```yaml # Example automation automation: - trigger: - platform: state - entity_id: device_tracker.sweetheart - from: "not_home" - to: "home" - action: - action: scene.apply - data: - entities: - light.tv_back_light: - state: "on" - brightness: 100 - light.ceiling: off - media_player.sony_bravia_tv: - state: "on" - source: HDMI 1 + triggers: + - trigger: state + entity_id: device_tracker.sweetheart + from: "not_home" + to: "home" + actions: + - action: scene.apply + data: + entities: + light.tv_back_light: + state: "on" + brightness: 100 + light.ceiling: off + media_player.sony_bravia_tv: + state: "on" + source: HDMI 1 ``` ## Using scene transitions @@ -148,17 +148,17 @@ light will transition to the scene in 2.5 seconds. ```yaml # Example automation automation: - trigger: - platform: state - entity_id: device_tracker.sweetheart - from: "not_home" - to: "home" - action: - action: scene.turn_on - target: - entity_id: scene.romantic - data: - transition: 2.5 + triggers: + - trigger: state + entity_id: device_tracker.sweetheart + from: "not_home" + to: "home" + actions: + - action: scene.turn_on + target: + entity_id: scene.romantic + data: + transition: 2.5 ``` Transitions are currently only support by lights, which in their turn, have @@ -185,21 +185,21 @@ This video tutorial explains how scenes work and how you can utilize scenes on t ```yaml # Example automation using entities automation: - trigger: - platform: homeassistant - event: start - action: - action: scene.create - data: - scene_id: my_scene - entities: - light.tv_back_light: - state: "on" - brightness: 100 - light.ceiling: off - media_player.sony_bravia_tv: - state: "on" - source: HDMI 1 + triggers: + - trigger: homeassistant + event: start + actions: + - action: scene.create + data: + scene_id: my_scene + entities: + light.tv_back_light: + state: "on" + brightness: 100 + light.ceiling: off + media_player.sony_bravia_tv: + state: "on" + source: HDMI 1 ``` ## Deleting dynamically created scenes @@ -213,11 +213,11 @@ If the scene was not previously created by `scene.create`, the action will fail ```yaml # Example automation automation: - trigger: - platform: state - entity_id: sun.sun - to: below_horizon - action: + triggers: + - trigger: state + entity_id: sun.sun + to: "below_horizon" + actions: - action: scene.delete data: entity_id: scene.my_scene @@ -228,13 +228,13 @@ The following example turns off some entities as soon as a window opens. The sta ```yaml # Example automation using snapshot - alias: "Window opened" - trigger: - - platform: state + triggers: + - trigger: state entity_id: binary_sensor.window from: "off" to: "on" - condition: [] - action: + conditions: [] + actions: - action: scene.create data: scene_id: before @@ -250,13 +250,13 @@ The following example turns off some entities as soon as a window opens. The sta data: hvac_mode: "off" - alias: "Window closed" - trigger: - - platform: state + triggers: + - trigger: state entity_id: binary_sensor.window from: "on" to: "off" - condition: [] - action: + conditions: [] + actions: - action: scene.turn_on target: entity_id: scene.before diff --git a/source/_integrations/schedule.markdown b/source/_integrations/schedule.markdown index 9521ac543042..6f07dfe1c22b 100644 --- a/source/_integrations/schedule.markdown +++ b/source/_integrations/schedule.markdown @@ -63,6 +63,43 @@ schedule: to: "21:00:00" ``` +Defining the schedule in YAML also allows adding extra data to each block, which will +appear as attributes on the schedule helper entity when that block is active. This can +be used to easily build schedule-based automations. + +The `data` key of each block should be a mapping of attribute names to values. In this example, +the schedule helper entity will have "Brightness" and "Color temp" attributes when +the blocks are active: + +```yaml +schedule: + light_schedule: + name: "Light schedule" + wednesday: + - from: "17:00:00" + to: "21:00:00" + data: + brightness: 100 + color_temp: 4000 + thursday: + - from: "17:00:00" + to: "23:00:00" + data: + brightness: 90 + color_temp: 3500 + friday: + - from: "07:00:00" + to: "10:00:00" + data: + brightness: 80 + color_temp: 3000 + - from: "16:00:00" + to: "23:00:00" + data: + brightness: 60 + color_temp: 2500 +``` + {% configuration %} schedule: description: Alias for the schedule. Multiple entries are allowed. @@ -91,6 +128,11 @@ schedule: description: The end time to mark as inactive/off again. required: true type: time + data: + description: Additional data to add to the entity's attributes when this block is active. + required: false + type: map + default: {} {% endconfiguration %} ### Attributes @@ -107,17 +149,38 @@ automations and templates. A schedule creates an on/off (schedule) sensor within the times set. Using the thermostat schedule example above, you can turn on your thermostat: ```yaml -trigger: - - platform: state +triggers: + - trigger: state entity_id: - schedule.thermostat_schedule to: "on" - action: + actions: - action: climate.turn_on target: entity_id: climate.thermostat ``` +Using the `light_schedule` example from above in an automation might look like this: + +{% raw %} + +```yaml +triggers: + - trigger: state + entity_id: + - schedule.light_schedule + to: "on" + actions: + - service: light.turn_on + target: + entity_id: climate.thermostat + data_template: + brightness_pct: "{{ state_attr('schedule.light_schedule', 'brightness') }}" + kelvin: "{{ state_attr('schedule.light_schedule, 'temperature') }}" +``` + +{% endraw %} + ### Actions Available action: `schedule.reload`. diff --git a/source/_integrations/screenaway.markdown b/source/_integrations/screenaway.markdown index 0fc44b780f0d..e82aafbebb36 100644 --- a/source/_integrations/screenaway.markdown +++ b/source/_integrations/screenaway.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/script.markdown b/source/_integrations/script.markdown index a144d685bd46..33234489052a 100644 --- a/source/_integrations/script.markdown +++ b/source/_integrations/script.markdown @@ -176,16 +176,16 @@ Aside from the automation editor UI, variables can be passed to scripts within t ```yaml # Example configuration.yaml entry automation: - trigger: - platform: state - entity_id: light.bedroom - from: "off" - to: "on" - action: - action: script.notify_pushover - data: - title: "State change" - message: "The light is on!" + triggers: + - trigger: state + entity_id: light.bedroom + from: "off" + to: "on" + actions: + - action: script.notify_pushover + data: + title: "State change" + message: "The light is on!" ``` {% endraw %} @@ -195,19 +195,19 @@ This example shows using `script.turn_on` action: ```yaml # Example configuration.yaml entry automation: - trigger: - platform: state - entity_id: light.bedroom - from: "off" - to: "on" - action: - action: script.turn_on - target: - entity_id: script.notify_pushover - data: - variables: - title: "State change" - message: "The light is on!" + triggers: + - trigger: state + entity_id: light.bedroom + from: "off" + to: "on" + actions: + - action: script.turn_on + target: + entity_id: script.notify_pushover + data: + variables: + title: "State change" + message: "The light is on!" ``` {% endraw %} diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown index efe2500ff955..622b9a9cd448 100644 --- a/source/_integrations/sensor.markdown +++ b/source/_integrations/sensor.markdown @@ -60,8 +60,8 @@ The following device classes are supported for sensors: - **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, MWh, MJ, or GJ -- **energy_storage**: Stored energy in Wh, kWh, MWh, MJ, or GJ +- **energy**: Energy in J, kJ, MJ, GJ, Wh, kWh, MWh, cal, kcal, Mcal, or Gcal +- **energy_storage**: Stored energy in J, kJ, MJ, GJ, Wh, kWh, MWh, cal, kcal, Mcal, or Gcal - **enum**: Has a limited set of (non-numeric) states - **frequency**: Frequency in Hz, kHz, MHz, or GHz - **gas**: Gasvolume in m³, ft³ or CCF @@ -86,7 +86,7 @@ The following device classes are supported for sensors: - **reactive_power**: Reactive power in var - **signal_strength**: Signal strength in dB or dBm - **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 +- **speed**: Generic speed in ft/s, in/d, in/h, in/s, km/h, kn, m/s, mph, mm/d, or mm/s - **sulphur_dioxide**: Concentration of sulphur dioxide in µg/m³ - **temperature**: Temperature in °C, °F or K - **timestamp**: Datetime object or timestamp string (ISO 8601) diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown index 8f8bc9927b42..e3982b60e9c7 100644 --- a/source/_integrations/sensor.mqtt.markdown +++ b/source/_integrations/sensor.mqtt.markdown @@ -166,7 +166,7 @@ object_id: required: false type: string options: - description: List of allowed sensor state value. An empty list is not allowed. The sensor's `device_class` should be set to `enum`. Cannot be used together with `state_class` or `unit_of_measurement`. + description: List of allowed sensor state value. An empty list is not allowed. The sensor's `device_class` must be set to `enum`. The `options` option cannot be used together with `state_class` or `unit_of_measurement`. required: false type: list payload_available: diff --git a/source/_integrations/sensoterra.markdown b/source/_integrations/sensoterra.markdown new file mode 100644 index 000000000000..bcdce547984c --- /dev/null +++ b/source/_integrations/sensoterra.markdown @@ -0,0 +1,35 @@ +--- +title: Sensoterra +description: Instructions on how to integrate your Sensoterra probes with Home Assistant. +ha_release: '2024.10' +ha_category: + - Sensor +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_domain: sensoterra +ha_platforms: + - sensor +ha_codeowners: + - '@markruys' +ha_integration_type: hub +--- + +This {% term integration %} communicates with your [Sensoterra](https://sensoterra.com) soil moisture probes using the public [Sensoterra Customer API](https://monitor.sensoterra.com/api/v3/) via HTTPS. + +## Prerequisites + +Soil moisture probes can be purchased at Sensoterra.com. Create a free account in the Sensoterra app and register your probes. The Sensoterra Home Assistant integration needs your credentials to obtain a token to access your probe data. + +{% include integrations/config_flow.md %} + +## Sensors + +The integration provides the following sensors for each probe: + +- Soil moisture (either in volumetric-% or in SI) +- Temperature (in degrees Celsius) +- LoRaWAN signal strength (RSSI level) +- Battery level (100, 50 or 10% approximations) +- Last seen timestamp + +Typically, soil moisture probes measure once an hour. The Home Assistant integration polls this data every 15 minutes. diff --git a/source/_integrations/seventeentrack.markdown b/source/_integrations/seventeentrack.markdown index 46878d070b0e..975156772eca 100644 --- a/source/_integrations/seventeentrack.markdown +++ b/source/_integrations/seventeentrack.markdown @@ -79,7 +79,6 @@ content: > The `seventeentrack.get_packages` action allows you to query the 17track API for the latest package data. - | Data attribute | Optional | Description | |------------------------|----------|---------------------------------------------| | `config_entry_id` | No | The ID of the 17Track service config entry. | @@ -92,3 +91,20 @@ The `seventeentrack.get_packages` action allows you to query the 17track API for config_entry_id: 2b4be47a1fa7c3764f14cf756dc98991 package_state: ["Delivered", "In transit"] ``` + +### Action `seventeentrack.archive_package` + +The `seventeentrack.archive_package` action allows you to archive a package using the 17track API. + +| Data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------| +| `config_entry_id` | No | The ID of the 17Track service config entry. | +| `package_tracking_number` | No | The package tracking number. | + +```yaml +# Example automation action to archive a package with a tracking number +- action: seventeentrack.archive_package + data: + config_entry_id: 2b4be47a1fa7c3764f14cf756dc98991 + package_tracking_number: RU0103445624A +``` diff --git a/source/_integrations/shell_command.markdown b/source/_integrations/shell_command.markdown index 7f08be4eebae..bc720ca3e7c5 100644 --- a/source/_integrations/shell_command.markdown +++ b/source/_integrations/shell_command.markdown @@ -82,11 +82,11 @@ helper and an automation. # Apply value of a GUI slider to the shell_command automation: - alias: "run_set_ac" - trigger: - platform: state - entity_id: input_number.ac_temperature - action: - action: shell_command.set_ac_to_slider + triggers: + - trigger: state + entity_id: input_number.ac_temperature + actions: + - action: shell_command.set_ac_to_slider input_number: ac_temperature: @@ -110,9 +110,9 @@ The following example shows how the shell command response may be used in automa # Create a ToDo notification based on file contents automation: - alias: "run_set_ac" - trigger: + triggers: - ... - action: + actions: - action: shell_command.get_file_contents data: filename: "todo.txt" diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown index 1447b9e0b0b7..83dd6ae8a098 100644 --- a/source/_integrations/shelly.markdown +++ b/source/_integrations/shelly.markdown @@ -125,7 +125,15 @@ Names are set from the device web page: The integration uses the following strategy to name its entities: - If `Channel Name` is set in the device, the integration will use it to generate the entities' name, e.g. `Kitchen Light` -- If `Channel Name` is set to the default value, the integration will use the `Device ID` and default channel name to generate the entities' name, e.g. `ShellyPro4PM-9808D1D8B912 switch_0`. +- If `Channel Name` is set to the default value, the integration will use the `Device ID` and default channel name to generate the entities' name, e.g. `ShellyPro4PM-9808D1D8B912 Switch 0`. + +## Cover entities + +Shelly 2PM Gen3 supports `tilt` for `cover` entities. To enable this feature, you need to configure the device: + +- Change the device profile to `Cover` (**Settings** > **Device profile**) +- Calibrate the cover (**Home** > **Cover** > **Calibration** > **Start**) +- Enable and configure **Slat control** (**Home** > **Cover** > **Slat control**) ## Binary input sensors @@ -191,30 +199,30 @@ You can also create automations using YAML, for example: ```yaml - alias: "Toggle living room light" - trigger: - platform: event - event_type: shelly.click - event_data: - device: shellyswitch25-AABBCC - channel: 1 - click_type: single - action: - action: light.toggle - target: - entity_id: light.living_room + triggers: + - trigger: event + event_type: shelly.click + event_data: + device: shellyswitch25-AABBCC + channel: 1 + click_type: single + actions: + - action: light.toggle + target: + entity_id: light.living_room - alias: "Toggle living room lamp" - trigger: - platform: event - event_type: shelly.click - event_data: - device: shellyswitch25-AABBCC - channel: 2 - click_type: long - action: - action: light.toggle - target: - entity_id: light.lamp_living_room + triggers: + - trigger: event + event_type: shelly.click + event_data: + device: shellyswitch25-AABBCC + channel: 2 + click_type: long + actions: + - action: light.toggle + target: + entity_id: light.lamp_living_room ``` ### Possible values for `click_type` diff --git a/source/_integrations/shopping_list.markdown b/source/_integrations/shopping_list.markdown index fcaec3d82394..c1a29b36a8df 100644 --- a/source/_integrations/shopping_list.markdown +++ b/source/_integrations/shopping_list.markdown @@ -92,12 +92,12 @@ A `shopping_list_updated` event is triggered when items in the list are modified ```yaml alias: "Notify on new shopping list item" -trigger: - - platform: event +triggers: + - trigger: event event_type: shopping_list_updated event_data: action: "add" -action: +actions: - action: notify.notify data: message: "{{ trigger.event.data.item.name }} has been added to the shopping list" diff --git a/source/_integrations/sighthound.markdown b/source/_integrations/sighthound.markdown index e51ced31dea4..2b907d54c34d 100644 --- a/source/_integrations/sighthound.markdown +++ b/source/_integrations/sighthound.markdown @@ -83,30 +83,26 @@ An example using two automations: ```yaml # Example automations.yaml entry -- id: "SOME_UNIQUE_ID" - alias: "Entrance Motion Image Processing" +- alias: "Entrance motion image processing" description: "Send a camera image to sighthound, when motion is detected at the entrance" - trigger: - - type: motion - platform: device + triggers: + - trigger: device + type: motion device_id: YOUR_DEVICE_ID entity_id: binary_sensor.my_motion_sensor domain: binary_sensor - action: + actions: - action: image_processing.scan target: entity_id: image_processing.sighthound_my_cam - mode: single -- id: "ANOTHER_UNIQUE_ID" - alias: "Arriving Vehicle Notification" +- alias: "Arriving vehicle notification" description: "Send a notification to a phone, when a vehicle is detected at the entrance" - trigger: - - platform: event + triggers: + - trigger: event event_type: sighthound.vehicle_detected - action: + actions: - action: notify.mobile_app_my_iphone data: message: "Somebody has just arrived by car." - mode: single ``` diff --git a/source/_integrations/signal_messenger.markdown b/source/_integrations/signal_messenger.markdown index 9a5e3ca0acb2..52f845e5096f 100644 --- a/source/_integrations/signal_messenger.markdown +++ b/source/_integrations/signal_messenger.markdown @@ -80,13 +80,13 @@ A few examples on how to use this integration to send notifications from automat ```yaml ... -action: - action: notify.NOTIFIER_NAME - data: - message: "That's an example that sends a simple text message to the recipients specified in the configuration.yaml. If text mode is 'styled', you can use *italic*, **bold** or ~strikethrough~ ." - ## Optional +actions: + - action: notify.NOTIFIER_NAME data: - text_mode: styled + message: "That's an example that sends a simple text message to the recipients specified in the configuration.yaml. If text mode is 'styled', you can use *italic*, **bold** or ~strikethrough~ ." + ## Optional + data: + text_mode: styled ``` | Attribute | Optional | Default |Description | @@ -99,14 +99,14 @@ This example assumes you have an image stored in the default `www`-folder in Hom ```yaml ... -action: - action: notify.NOTIFIER_NAME - data: - message: "Alarm in the living room!" +actions: + - action: notify.NOTIFIER_NAME data: - attachments: - - "/config/www/surveillance_camera.jpg" - text_mode: styled + message: "Alarm in the living room!" + data: + attachments: + - "/config/www/surveillance_camera.jpg" + text_mode: styled ``` | Data attribute | Optional | Default |Description | @@ -118,15 +118,15 @@ action: ```yaml ... -action: - action: notify.NOTIFIER_NAME - data: - message: "Person detected on Front Camera!" +actions: + - action: notify.NOTIFIER_NAME data: - verify_ssl: false - urls: - - "http://homeassistant.local/api/frigate/notifications//thumbnail.jpg" - text_mode: styled + message: "Person detected on Front Camera!" + data: + verify_ssl: false + urls: + - "http://homeassistant.local/api/frigate/notifications//thumbnail.jpg" + text_mode: styled ``` | Data attribute | Optional | Default |Description | @@ -163,13 +163,13 @@ You can create an automation as follows: ```yaml ... -trigger: - - platform: state +triggers: + - trigger: state entity_id: - sensor.signal_message_received attribute: source to: "" -action: +actions: - action: notify.signal data: message: "Message received!" diff --git a/source/_integrations/simplefin.markdown b/source/_integrations/simplefin.markdown index db630b7674c1..4031970543ba 100644 --- a/source/_integrations/simplefin.markdown +++ b/source/_integrations/simplefin.markdown @@ -12,6 +12,7 @@ ha_codeowners: ha_domain: simplefin ha_config_flow: true ha_platforms: + - binary_sensor - sensor ha_integration_type: service --- diff --git a/source/_integrations/simplisafe.markdown b/source/_integrations/simplisafe.markdown index 89b1de506a5c..eb64d82d7ca8 100644 --- a/source/_integrations/simplisafe.markdown +++ b/source/_integrations/simplisafe.markdown @@ -146,8 +146,8 @@ as an event trigger, with `last_event_type` as the `event_data`. For example, the following will trigger when the doorbell rings: ```yaml -trigger: - - platform: event +triggers: + - trigger: event event_type: SIMPLISAFE_EVENT event_data: last_event_type: doorbell_detected diff --git a/source/_integrations/slack.markdown b/source/_integrations/slack.markdown index 730fd6960dcc..046de9275af1 100644 --- a/source/_integrations/slack.markdown +++ b/source/_integrations/slack.markdown @@ -105,9 +105,9 @@ alias: "Notify: Slack Notification Template" sequence: - action: notify.YOUR_SLACK_TEAM data: - message: Fallback Text + message: "Fallback Text" target: "#test-channel" - title: Reminder + title: "Reminder" data: blocks: - type: section @@ -116,7 +116,6 @@ sequence: text: >- This is a mrkdwn section block *this is bold*, and ~this is crossed out~, and -mode: single ``` Update the blocks array with valid Slack blocks. The easiest way to create this is using [Slack Block Kit Builder](https://app.slack.com/block-kit-builder). Up to 50 blocks may be included per message. diff --git a/source/_integrations/smart_blinds.markdown b/source/_integrations/smart_blinds.markdown index 5ff3c8bd056a..35e311f39fa7 100644 --- a/source/_integrations/smart_blinds.markdown +++ b/source/_integrations/smart_blinds.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/smart_home.markdown b/source/_integrations/smart_home.markdown index cbc5d7635dee..ae958deec3a5 100644 --- a/source/_integrations/smart_home.markdown +++ b/source/_integrations/smart_home.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 102a4dec54d7..e321f44135e9 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -171,7 +171,6 @@ For a SmartThings thermostat to be represented by the climate platform, it must | --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | [`thermostat`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostat) (set a) | `hvac mode`, `hvac action`, `target temp high`, `target temp low` and `fan mode` | | [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) (set b) | `hvac mode` | -| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) (seb b) | `target temp low` | | [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) (set b) | `target temp high` | | [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) (set b) | | [`thermostatOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `hvac action` | diff --git a/source/_integrations/smarty.markdown b/source/_integrations/smarty.markdown index b364d410787c..0ac2ca4c9f26 100644 --- a/source/_integrations/smarty.markdown +++ b/source/_integrations/smarty.markdown @@ -14,7 +14,7 @@ ha_platforms: - binary_sensor - fan - sensor -ha_integration_type: integration +ha_integration_type: hub --- The `smarty` integration lets you control Salda [Smarty](http://www.salda.lt/en/products/category/compact-counter-flow-units) ventilation units from Home Assistant. You need a [MB-GATEWAY](http://www.salda.lt/en/products/item/5637227077) or something similar to connect to your local network. diff --git a/source/_integrations/smlight.markdown b/source/_integrations/smlight.markdown index 0824a4ab68ba..8d6673c5f8c1 100644 --- a/source/_integrations/smlight.markdown +++ b/source/_integrations/smlight.markdown @@ -2,14 +2,23 @@ title: SMLIGHT SLZB description: The SMLIGHT SLZB integration allows users to monitor and manage their SMLIGHT SLZB-06x devices from directly within Home Assistant. ha_category: + - Binary sensor + - Button - Sensor + - Switch + - Update ha_release: 2024.9 -ha_iot_class: Local Polling +ha_iot_class: Local Push ha_config_flow: true ha_domain: smlight ha_zeroconf: true ha_platforms: + - binary_sensor + - button + - diagnostics - sensor + - switch + - update ha_codeowners: - '@tl-sl' ha_integration_type: device @@ -32,18 +41,54 @@ You need a supported SLZB-06 adapter. - [SLZB-06M](https://smlight.tech/product/slzb-06m) - [SLZB-06p7](https://smlight.tech/product/slzb-06p7) - [SLZB-06p10](https://smlight.tech/product/slzb-06p10/) - -Core firmware on your SLZB-06x device must be `2.3.6` or newer. If you have an older version, update using the SMLIGHT Web UI before installing this integration. +Core firmware on your SLZB-06x device must be `v2.3.6` or newer. If you have an older `v2.x.x` version, you can update from within Home Assistant. If you have `v0.9.9`, update using the [SMLIGHT web flasher](https://smlight.tech/flasher/#SLZB-06) before installing this integration. + {% include integrations/config_flow.md %} ## Integration entities +### Sensors + The following sensors will be created: -- **Core Temperature** - Temperature of core ESP32 -- **Zigbee Temperature** - Temperature of Zigbee CC2652 or EFR32 chip -- **Core Uptime** - Uptime of Core device -- **Zigbee Uptime** - Uptime of Zigbee connection to ZHA/Z2M -- **RAM Usage** - Monitor RAM Usage -- **FS Usage** - Monitor filesystem usage +- **Core temperature** - Temperature of core ESP32 +- **Zigbee temperature** - Temperature of Zigbee CC2652 or EFR32 chip +- **Core uptime** - Uptime of Core device +- **Zigbee uptime** - Uptime of Zigbee connection to ZHA/Z2M +- **RAM usage** - Monitor RAM Usage +- **FS usage** - Monitor filesystem usage +- **Connection mode** - Connection mode - Ethernet, Wi-Fi, or USB +- **Ethernet** - Ethernet connection status +- **Internet** - Internet connection status +- **VPN** - WireGuard VPN client connection status +- **Wi-Fi** - Wi-Fi connection status +- **Firmware channel** - Channel for updates, stable, or development firmware or currently installed firmware. +- **Zigbee type** - Current mode of Zigbee chip. Coordinator, router, or Thread. Only works with official firmware installed via OTA in SMLIGHT web UI. + +### Buttons + +The following buttons will be created: + +- **Core restart** - Restart core ESP32 +- **Zigbee restart** - Restart Zigbee CCCC2652 or EFR32 chip +- **Zigbee flash mode** - Trigger the Zigbee chip into bootloader flash mode so it can be flashed. It is possible to flash Zigbee firmware over a network socket once this is activated. +- **Reconnect Zigbee router** - Place the router into pairing mode to join a new Zigbee network. This is only created if the SLZB-06x device is in Zibgee router mode. + +### Switches + +The following switches will be created: + +- **Auto Zigbee update** - This allows the core firmware on SLZB-06x to manage Zigbee firmware updates and it will automatically install updates when they are released. +- **Disable LEDs** - Disable all LEDs on the SLZB-06x device. +- **LED night mode** - Enables night mode, which turns off the LEDs overnight, based on the times set in SLZB-06x web UI. +- **Enable VPN** - Enable WireGuard VPN client (requires configuration via the SMLIGHT web UI). + +### Updates + +The following update entities will be created: + +- **Core firmware** - Core firmware updates of SLZB-06x firmware +- **Zigbee firmware** - Firmware updates of Zigbee chip + +The updates offered in Home Assistant will match your currently installed firmware. This is based on the firmware channel (dev, release) and for Zigbee also on the firmware type (coordinator, router, Thread). If you wish to switch channels, install the different firmware type in the SMLIGHT web UI. You will get notifications when new firmware updates are available to install. diff --git a/source/_integrations/sms.markdown b/source/_integrations/sms.markdown index 426c8ca4f7fd..424ab34539df 100644 --- a/source/_integrations/sms.markdown +++ b/source/_integrations/sms.markdown @@ -33,11 +33,11 @@ To use notifications, please see the [getting started with automation page](/get ### Send message ```yaml -action: - action: notify.sms - data: - message: "This is a message for you!" - target: "+5068081-8181" +actions: + - action: notify.sms + data: + message: "This is a message for you!" + target: "+5068081-8181" ``` ### Sending SMS using GSM alphabet @@ -45,13 +45,13 @@ action: Some devices (receiving or sending) do not support Unicode (the default encoding). For these you can disable Unicode: ```yaml -action: - action: notify.sms - data: - message: "This is a message for you in ANSI" - target: "+5068081-8181" +actions: + - action: notify.sms data: - unicode: False + message: "This is a message for you in ANSI" + target: "+5068081-8181" + data: + unicode: False ``` ### Getting SMS messages @@ -85,7 +85,6 @@ notify_sms_user1: data: message: "{{ message }}" target: "{{ states('sensor.user1_phone_number') }}" - mode: single icon: mdi:chat-alert ``` @@ -97,15 +96,15 @@ notify_sms_user1: ```yaml - alias: "Forward SMS" - trigger: - - platform: event + triggers: + - trigger: event event_type: sms.incoming_sms - action: + actions: - action: script.notify_sms_user1 data: message: | From: {{trigger.event.data.phone}} - {{trigger.event.data.text}} mode: single + {{trigger.event.data.text}} ``` {% endraw %} diff --git a/source/_integrations/smtp.markdown b/source/_integrations/smtp.markdown index 5c5e5014c1f2..c49f8af28272 100644 --- a/source/_integrations/smtp.markdown +++ b/source/_integrations/smtp.markdown @@ -90,19 +90,16 @@ A notify integration will be created using the name without spaces. In the above ```yaml - alias: "Send E-Mail Every Morning" - description: "" - trigger: + triggers: - platform: time at: "08:00:00" - condition: [] - action: + actions: - action: notify.NOTIFIER_NAME data: title: "Good Morning" message: "Rise and shine" target: - "morning@example.com" - mode: single ``` The optional `target` field is used to specify recipient(s) for this specific action. When `target` field is not used, this message will be sent to default recipient(s), specified in the `recipient` part of the smtp notifier in `configuration.yaml`. Line breaks can be added in the body part of the email by using `\r\n`, for instance `message: "Rise and shine\r\n\r\nIt's a brand new day!"` diff --git a/source/_integrations/snips.markdown b/source/_integrations/snips.markdown index 38ebf9bb250f..507a07860a0d 100644 --- a/source/_integrations/snips.markdown +++ b/source/_integrations/snips.markdown @@ -247,8 +247,8 @@ Here is a more complex example. The automation is triggered if the garage door i ```yaml automation: garage_door_has_been_open: - trigger: - - platform: state + triggers: + - trigger: state entity_id: binary_sensor.my_garage_door_sensor from: "off" to: "on" @@ -267,7 +267,7 @@ intent_script: speech: type: plain text: "OK, closing the garage door" - action: + actions: - action: script.garage_door_close ``` diff --git a/source/_integrations/snooz.markdown b/source/_integrations/snooz.markdown index 2308d522131b..273abf5a7a3e 100644 --- a/source/_integrations/snooz.markdown +++ b/source/_integrations/snooz.markdown @@ -67,10 +67,10 @@ Transition the volume level over the specified duration. If the device is powere ```yaml automation: - - trigger: - - platform: time + - triggers: + - trigger: time at: "04:20:00" - action: + actions: - action: snooz.transition_on target: entity_id: fan.snooz_abcd @@ -97,10 +97,10 @@ Once the transition completes, the volume level is restored to the value before ```yaml automation: - - trigger: - - platform: time + - triggers: + - trigger: time at: "16:20:00" - action: + actions: - action: snooz.transition_off target: entity_id: fan.snooz_abcd diff --git a/source/_integrations/solarlog.markdown b/source/_integrations/solarlog.markdown index d5772baf68f9..657ed3381721 100644 --- a/source/_integrations/solarlog.markdown +++ b/source/_integrations/solarlog.markdown @@ -12,26 +12,31 @@ ha_codeowners: - '@dontinelli' ha_domain: solarlog ha_platforms: + - diagnostics - sensor ha_integration_type: integration --- -The `solarlog` integration uses the open JSON interface on [Solar-Log PV monitoring systems](https://www.solar-log.com/) to allow you to get details from your Solar-Log device and integrate these into your Home Assistant installation. +The **Solarlog** {% term integration %} uses the open JSON interface on [Solar-Log PV monitoring systems](https://www.solar-log.com/) to get details from your Solar-Log device and integrate these into your Home Assistant installation. -Before being able to use the integration, you have to activate the open JSON interface on your Solar-Log device. This can be activated from the Configuration | System | Access control menu of your Solar-Log device. -When activating the interface, a red warning triangle with security information and risks is displayed. +## Prerequisites + +Before you can use the integration, you either need the password of the Solar-Log user or you must activate the open JSON interface on your Solar-Log device. +- To activate the JSON interface on your Solar-Log device, on the device, go to the Configuration | System | Access control menu. +- When activating the interface, a red warning triangle with security information and risks is displayed. For security reasons, it is recommended to activate password protection and use the integration with the respective password. The `solarlog` integration uses the default host address "http://solar-log" if you don't specify a host. If your device isn't accessible on this address, use its IP Address instead. {% important %} -The open JSON interface is deactivated by default. To activate the open JSON interface, a user password must first be set. The password isn't needed for accessing the open JSON interface. +If password protection for the general user is deactivated, the open JSON interface is activated by default. For security reasons, it is recommended to activate the user's password. +Please note that the open JSON interface only exposes a limited amount of data. Even if the open JSON interface has been activated, without the user's password, only limited data is available in the integration [see available sensors](#sensors). For [full functionality](#additional-data), you either need the user's password or the user password should be deactivated (not recommended). {% endimportant %} {% include integrations/config_flow.md %} ## Additional template sensor -In case you would like to convert the values, for example, to Wh instead of the default kWh, you can use the [template platform](/integrations/template/). +In case you would like to get additional calculated sensors such as the amount of excess solar power available, you can use the [template platform](/integrations/template/). {% raw %} @@ -47,7 +52,7 @@ template: ## Sensors -The following sensors are available in the library: +The following sensors are available via the open JSON intervace: | name | Unit | Description | |-----------------------|--------|:-------------------------------------------| @@ -67,7 +72,6 @@ The following sensors are available in the library: | consumption_month | kWh | Total consumption for the month from all of the consumption meters. | | consumption_year | kWh | Total consumption for the year from all of the consumption meters. | | consumption_total | kWh | Accumulated total consumption from all consumption meters. | -| self_consumption_year | kWh | Accumulated total self-consumption. | | installed_peak_power | W | Installed solar peak power. | | alternator_loss | W | Altenator loss (equals to power_dc - power_ac) | | capacity | % | Capacity (equals to power_dc / total power) | @@ -75,6 +79,25 @@ The following sensors are available in the library: | power_available | W | Available power (equals to power_ac - consumption_ac) | | usage | % | Usage (equals to consumption_ac / power_ac) | +## Additional data + +{% important %} +The additional data is only accessible if the user's password is available (or password protection is deactivated). Obviously, deactivating password protection is a security risk and should only be done in specific circumstances. In any event, you do this at your own risk. +{% endimportant %} + +The following additional sensor becomes available: + +| Name | Unit | Description | +|-----------------------|--------|:-------------------------------------------| +| self_consumption_year | kWh | Annual self-consumed solar power. | + +In addition, information from devices connected to the Solar-Log device becomes available. The following additional sensors become available (all values are per inverter/device): + +| Name | Unit | Description | +|-----------------------|--------|:-------------------------------------------| +| current_power | W | Current power provided/used by the device. | +| consumption_year | kWh | Total energy provided/used by the device. | + {% note %} The solarlog integration is using the solarlog_cli pypi package to get the data from your Solar-Log device. The last five sensors are not reported by your Solar-Log device directly, but are computed by the library. {% endnote %} diff --git a/source/_integrations/sonos.markdown b/source/_integrations/sonos.markdown index 5a5e439eea01..2aa67094c4be 100644 --- a/source/_integrations/sonos.markdown +++ b/source/_integrations/sonos.markdown @@ -396,30 +396,29 @@ Removes an item from the queue. ```yaml # Example automation to remove just played song from queue alias: "Remove last played song from queue" -id: Remove last played song from queue -trigger: - - platform: state +triggers: + - trigger: state entity_id: media_player.kitchen - - platform: state + - trigger: state entity_id: media_player.bathroom - - platform: state + - trigger: state entity_id: media_player.move -condition: - condition: and - conditions: - # Coordinator - - condition: template - value_template: > - {{ state_attr( trigger.entity_id , 'group_members')[0] == trigger.entity_id }} - # Going from queue to queue - - condition: template - value_template: > - {{ 'queue_position' in trigger.from_state.attributes and 'queue_position' in trigger.to_state.attributes }} - # Moving forward - - condition: template - value_template: > - {{ trigger.from_state.attributes.queue_position < trigger.to_state.attributes.queue_position }} -action: +conditions: + - condition: and + conditions: + # Coordinator + - condition: template + value_template: > + {{ state_attr( trigger.entity_id , 'group_members')[0] == trigger.entity_id }} + # Going from queue to queue + - condition: template + value_template: > + {{ 'queue_position' in trigger.from_state.attributes and 'queue_position' in trigger.to_state.attributes }} + # Moving forward + - condition: template + value_template: > + {{ trigger.from_state.attributes.queue_position < trigger.to_state.attributes.queue_position }} +actions: - action: sonos.remove_from_queue target: entity_id: > diff --git a/source/_integrations/spc.markdown b/source/_integrations/spc.markdown index 12aa74aaef6f..fe3765036143 100644 --- a/source/_integrations/spc.markdown +++ b/source/_integrations/spc.markdown @@ -59,10 +59,10 @@ The `changed_by` attribute enables one to be able to take different actions depe ```yaml automation: - alias: "Alarm status changed" - trigger: - - platform: state + triggers: + - trigger: state entity_id: alarm_control_panel.alarm_1 - action: + actions: - action: notify.notify data: message: > diff --git a/source/_integrations/speedtestdotnet.markdown b/source/_integrations/speedtestdotnet.markdown index 94f3b5768a61..093c40ea948b 100644 --- a/source/_integrations/speedtestdotnet.markdown +++ b/source/_integrations/speedtestdotnet.markdown @@ -50,17 +50,17 @@ In this section you will find some real-life examples of how to use this integra # Example configuration.yaml entry automation: - alias: "Internet Speed Glow Connect Great" - trigger: - - platform: template + triggers: + - trigger: template value_template: "{{ states('sensor.speedtest_download')|float >= 10 }}" - action: + actions: - action: shell_command.green - alias: "Internet Speed Glow Connect Poor" - trigger: - - platform: template + triggers: + - trigger: template value_template: "{{ states('sensor.speedtest_download')|float < 10 }}" - action: + actions: - action: shell_command.red ``` diff --git a/source/_integrations/squeezebox.markdown b/source/_integrations/squeezebox.markdown index 112e3bc75423..44fc26ce4da0 100644 --- a/source/_integrations/squeezebox.markdown +++ b/source/_integrations/squeezebox.markdown @@ -1,6 +1,6 @@ --- title: Squeezebox (Lyrion Music Server) -description: Instructions on how to integrate a Squeezebox player into Home Assistant. +description: Instructions on how to integrate Squeezebox players and a Lyrion Music Server (LMS) into Home Assistant. ha_category: - Media player ha_release: pre 0.7 @@ -11,11 +11,15 @@ ha_codeowners: ha_config_flow: true ha_dhcp: true ha_platforms: + - binary_sensor - media_player + - sensor ha_integration_type: integration --- -The Squeezebox integration allows you to control music players from the [Lyrion Music Server](https://lyrion.org/) (LMS) ecosystem. Lyrion Music Server was previously known as [Logitech Media Server](https://en.wikipedia.org/wiki/Squeezebox_%28network_music_player%29). +The Squeezebox integration allows you to control music players from the [Lyrion Music Server](https://lyrion.org/) (LMS) ecosystem. Lyrion Music Server was formerly known as [Logitech Media Server](https://en.wikipedia.org/wiki/Squeezebox_%28network_music_player%29). + +This integration provides both media players connected to the server and supporting binary sensors for the server status. The Squeezebox music player ecosystem, which can be controlled through this integration, includes hardware audio players from Logitech, including [Squeezebox 3rd Generation, Squeezebox Boom, Squeezebox Receiver, Transporter, Squeezebox2, Squeezebox and SLIMP3](https://lms-community.github.io/players-and-controllers/hardware-comparison/), and many software emulators like [Squeezelite, SqueezeSlave, SoftSqueeze and SqueezePlay](https://sourceforge.net/projects/lmsclients/files/). @@ -46,6 +50,26 @@ transporter_toslink: media_content_type: "music" ``` +## Entities + +### Binary sensors + +- **Needs restart**: Server Service needs to be restarted (typically, this is needed to apply updates). +- **Library rescan**: The music library is currently being scanned by LMS (depending on the type of scan, some content may be unavailable). + +### Sensors + +- **Last scan**: Date of the last library scan. +- **Player count**: Number of players on the service. +- **Player count off service**: Number of players not on this service. +- **Total albums**: Total number of albums currently available in the service. +- **Total artists**: Total number of artists currently available in the service. +- **Total duration**: Duration of all tracks in service (HHHH:MM:SS). +- **Total genres**: Total number of genres used in current service. +- **Total songs**: Total number of music files currently in service. + +## Actions + ### Action `call_method` Call a custom Squeezebox JSON-RPC API. diff --git a/source/_integrations/sun.markdown b/source/_integrations/sun.markdown index e637a4d806f7..715056b6aca9 100644 --- a/source/_integrations/sun.markdown +++ b/source/_integrations/sun.markdown @@ -63,8 +63,8 @@ an offset. The sun trigger need to have the type 'sun', which event (sunset or sunrise) and an optional offset. ```yaml -trigger: - - platform: sun +triggers: + - trigger: sun event: sunrise offset: "-01:00:01" ``` diff --git a/source/_integrations/switchbot_cloud.markdown b/source/_integrations/switchbot_cloud.markdown index afac48dd1384..6b1d33302204 100644 --- a/source/_integrations/switchbot_cloud.markdown +++ b/source/_integrations/switchbot_cloud.markdown @@ -7,16 +7,19 @@ ha_category: - Remote - Sensor - Switch + - Vacuum ha_release: '2023.10' ha_iot_class: Cloud Polling ha_codeowners: - '@SeraphicRav' - '@laurence-presland' + - '@Gigatrappeur' ha_domain: switchbot_cloud ha_platforms: - climate - sensor - switch + - vacuum ha_config_flow: true ha_integration_type: hub --- @@ -41,6 +44,7 @@ Please note, device names configured in the SwitchBot app are transferred into H - Meter - MeterPlus - Outdoor Meter +- Vacuum K10+, K10+ pro, S1, S1 Plus ## Important considerations diff --git a/source/_integrations/switcher_kis.markdown b/source/_integrations/switcher_kis.markdown index abe24ecd0e26..1e88854ad9c5 100644 --- a/source/_integrations/switcher_kis.markdown +++ b/source/_integrations/switcher_kis.markdown @@ -10,6 +10,7 @@ ha_release: 0.93 ha_iot_class: Local Push ha_codeowners: - '@thecode' + - '@YogevBokobza' ha_domain: switcher_kis ha_platforms: - button @@ -34,9 +35,27 @@ Supported devices: - Switcher V4 - Switcher Breeze - Switcher Runner +- Switcher Runner S11 + +Devices that require a token: + +- Switcher Runner S11 If you completed the integration setup but are still unable to control the device, please make sure your device's firmware is up-to-date. +## Prerequisites + +To enhance security, certain Switcher devices require a token for operation. In order to integrate your token-based Switcher devices with Home Assistant, you'll need the following information: + +- **The username of your Switcher Account**: To find the username, open the Switcher app. +- **Local control key token**: To find the local control key token, browse to the + [Switcher GetKey API][token], enter your Switcher account username (which is an email address), and press + **Send Me The Code**. + + The token will be sent to you by email. It will look something like this: `zvVvd7JxtN7CgvkD1Psujw==` + +[token]: https://switcher.co.il/GetKey/ + {% include integrations/config_flow.md %} ## Buttons @@ -87,5 +106,5 @@ Note: This does not affect the auto off timer. ## Notes -Make sure that Home Assistant host's firewall allows incoming traffic on UDP ports 10002, 20002 & 20003 and outgoing connections to Switcher device(s) on TCP ports 9957 & 10000. +Make sure that Home Assistant host's firewall allows incoming traffic on UDP ports 10002, 10003, 20002 & 20003 and outgoing connections to Switcher device(s) on TCP ports 9957 & 10000. If Home Assistant and the Switcher device(s) are not on the same network, you will also need to have their traffic properly forwarded between the two networks. diff --git a/source/_integrations/system_log.markdown b/source/_integrations/system_log.markdown index 7c171b7a55bc..3390312216a9 100644 --- a/source/_integrations/system_log.markdown +++ b/source/_integrations/system_log.markdown @@ -90,15 +90,15 @@ counter: automation: - alias: "Count warnings" - trigger: - platform: event - event_type: system_log_event - event_data: - level: WARNING - action: - action: counter.increment - target: - entity_id: counter.warning_counter + triggers: + - trigger: event + event_type: system_log_event + event_data: + level: WARNING + actions: + - action: counter.increment + target: + entity_id: counter.warning_counter ``` ### Conditional Messages @@ -110,17 +110,17 @@ This automation will create a persistent notification whenever an error or warni ```yaml automation: - alias: "Create notifications for 'action' errors" - trigger: - platform: event - event_type: system_log_event - condition: - condition: template - value_template: '{{ "action" in trigger.event.data.message[0] }}' - action: - action: persistent_notification.create - data: - title: Something bad happened - message: "{{ trigger.event.data.message[0] }}" + triggers: + - trigger: event + event_type: system_log_event + conditions: + - condition: template + value_template: '{{ "action" in trigger.event.data.message[0] }}' + actions: + - action: persistent_notification.create + data: + title: "Something bad happened" + message: "{{ trigger.event.data.message[0] }}" ``` {% endraw %} @@ -132,14 +132,14 @@ This automation will create a new log entry when the door is opened: ```yaml automation: - alias: "Log door opened" - trigger: - platform: state - entity_id: binary_sensor.door - from: "off" - to: "on" - action: - action: system_log.write - data: - message: "Door opened!" - level: info + triggers: + - trigger: state + entity_id: binary_sensor.door + from: "off" + to: "on" + actions: + - action: system_log.write + data: + message: "Door opened!" + level: info ``` diff --git a/source/_integrations/tado.markdown b/source/_integrations/tado.markdown index f4f89e1a8325..c88daa5a5300 100644 --- a/source/_integrations/tado.markdown +++ b/source/_integrations/tado.markdown @@ -115,14 +115,14 @@ script: # Example automation to set temperature offset based on another thermostat value automation: # Trigger if the state of either thermostat changes - trigger: - - platform: state + triggers: + - trigger: state entity_id: - sensor.temp_sensor_room - sensor.tado_temperature # Check if the room temp is more than 0.5 away from the tado thermostat reading condition. The sensors default to room temperature (20) when the reading is in error: - condition: + conditions: - condition: template value_template: > {% set tado_temp = states('sensor.tado_temperature')|float(20) %} @@ -130,7 +130,7 @@ automation: {{ (tado_temp - room_temp) | abs > 0.5 }} # Work out what the new offset should be (tado temp less the room temp but add the current offset value) and turn that to a negative value for setting as the new offset - action: + actions: - action: tado.set_climate_temperature_offset target: entity_id: climate.tado @@ -159,14 +159,14 @@ Examples: # Example automation add meter readings on a daily basis. automation: # Trigger on specified time. - trigger: - - platform: time + triggers: + - trigger: time at: "00:00:00" # Add meter readings from `sensor.gas_consumption` to Tado. # Retrieve your `config_entry` id by setting this automation up in UI mode. # Notice that you may have to convert the reading to integer. - action: + actions: - action: tado.add_meter_reading data: config_entry: ef2e84b3dfc0aee85ed44ac8e8038ccf diff --git a/source/_integrations/tag.markdown b/source/_integrations/tag.markdown index 18cf41220af6..f780b3020d54 100644 --- a/source/_integrations/tag.markdown +++ b/source/_integrations/tag.markdown @@ -9,7 +9,7 @@ ha_codeowners: - '@dmulcahey' ha_domain: tag ha_quality_scale: internal -ha_integration_type: integration +ha_integration_type: entity ---

@@ -58,9 +58,7 @@ One of the most fun applications of tags is to pick music in your living room. T ```yaml automation: -- id: handle_tag_scan - alias: "Handle Tag Scan" - mode: single +- alias: "Handle Tag Scan" # Hide warnings when triggered while in delay. max_exceeded: silent variables: @@ -75,14 +73,14 @@ automation: 04-B1-C6-62-2F-64-80: media_content_id: spotify:playlist:0OtWh3u6fZrBJTQtVBQWge media_content_type: playlist - trigger: - platform: event - event_type: tag_scanned - condition: + triggers: + - trigger: event + event_type: tag_scanned + conditions: # Test that we support this device and tag - "{{ trigger.event.data.tag_id in tags }}" - "{{ trigger.event.data.device_id in media_players }}" - action: + actions: - variables: media_player_entity_id: "{{ media_players[trigger.event.data.device_id] }}" media_content_id: "{{ tags[trigger.event.data.tag_id].media_content_id }}" diff --git a/source/_integrations/tami4.markdown b/source/_integrations/tami4.markdown index 33e8a8b2cd37..209f0f989a0e 100644 --- a/source/_integrations/tami4.markdown +++ b/source/_integrations/tami4.markdown @@ -3,6 +3,7 @@ title: Tami4 Edge / Edge+ description: Tami4 Edge Integration ha_release: 2023.11 ha_category: + - Button - Sensor ha_iot_class: Cloud Polling ha_config_flow: true @@ -15,10 +16,34 @@ ha_platforms: ha_integration_type: integration --- -Support for [Tami4 Edge / Edge+ by Strauss](https://www.tami4.co.il/tami4edge-collection) in Home Assistant. +The **Tami4 Edge** {% term integration %} allows you to control and monitor [Tami4 Edge / Edge+ by Strauss](https://www.tami4.co.il/tami4edge-collection) devices in Home Assistant. You can boil water and get filter / UV information, such as when you need to replace them. +Also, all of your personal drinks will be available as buttons for you to use. You can easily pair your device by confirming your phone number which is registered with your Edge app account. +## Prerequisites + +- Strauss'es Tami4 Edge / Edge+ device +- Tami4 Edge account and app +- Have your phone number registered with your Edge app account + {% include integrations/config_flow.md %} + +## Entities + +The Tami4 Edge integration provides the following entities. + +### Buttons + +- **Boil water**: Select this button to start boiling the water. +- **Prepare drink**: Select this button to start preparing the drink. There's a button for each predefined drink. + +### Sensors + +**UV upcoming replacement**: Date when the UV lamp needs to be replaced. +**UV installed**: Date when the UV lamp was installed. +**Filter upcoming replacement**: Date when the filter needs to be replaced. +**Filter installed**: Date when the filter was installed. +**Filter water passed**: Amount of water (in liters) that has been filtered with the currently installed filter. diff --git a/source/_integrations/telegram.markdown b/source/_integrations/telegram.markdown index 3b2285b24cec..53030077bcdd 100644 --- a/source/_integrations/telegram.markdown +++ b/source/_integrations/telegram.markdown @@ -176,15 +176,15 @@ To use notifications, please see the [getting started with automation page](/get ```yaml ... -action: - action: notify.NOTIFIER_NAME - data: - title: "*Send a message*" - message: "That's an example that _sends_ a *formatted* message with a custom inline keyboard." +actions: + - action: notify.NOTIFIER_NAME data: - inline_keyboard: - - 'Task 1:/command1, Task 2:/command2' - - 'Task 3:/command3, Task 4:/command4' + title: "*Send a message*" + message: "That's an example that _sends_ a *formatted* message with a custom inline keyboard." + data: + inline_keyboard: + - 'Task 1:/command1, Task 2:/command2' + - 'Task 3:/command3, Task 4:/command4' ``` {% configuration %} @@ -210,20 +210,20 @@ inline_keyboard: ```yaml ... -action: - action: notify.NOTIFIER_NAME - data: - title: Send an images - message: "That's an example that sends an image." +actions: + - action: notify.NOTIFIER_NAME data: - photo: - - url: http://192.168.1.28/camera.jpg - username: admin - password: secret - - file: /tmp/picture.jpg - caption: Picture Title xy - - url: http://somebla.ie/video.png - caption: i.e., for a Title + title: "Send an images" + message: "That's an example that sends an image." + data: + photo: + - url: http://192.168.1.28/camera.jpg + username: "admin" + password: "secret" + - file: /tmp/picture.jpg + caption: "Picture Title xy" + - url: http://somebla.ie/video.png + caption: "i.e., for a Title" ``` {% configuration %} @@ -286,20 +286,20 @@ homeassistant: ```yaml ... -action: - action: notify.NOTIFIER_NAME - data: - title: Send a video - message: "That's an example that sends a video." +actions: + - action: notify.NOTIFIER_NAME data: - video: - - url: http://192.168.1.28/camera.mp4 - username: admin - password: secret - - file: /tmp/video.mp4 - caption: Video Title xy - - url: http://somebla.ie/video.mp4 - caption: i.e., for a Title + title: "Send a video" + message: "That's an example that sends a video." + data: + video: + - url: http://192.168.1.28/camera.mp4 + username: "admin" + password: "secret" + - file: /tmp/video.mp4 + caption: "Video Title xy" + - url: http://somebla.ie/video.mp4 + caption: "i.e., for a Title" ``` {% configuration %} @@ -347,18 +347,18 @@ inline_keyboard: ```yaml ... -action: - action: notify.NOTIFIER_NAME - data: - title: Send a document - message: "That's an example that sends a document and a custom keyboard." +actions: + - action: notify.NOTIFIER_NAME data: - document: - file: /tmp/whatever.odf - caption: Document Title xy - keyboard: - - '/command1, /command2' - - '/command3, /command4' + title: "Send a document" + message: "That's an example that sends a document and a custom keyboard." + data: + document: + file: /tmp/whatever.odf + caption: "Document Title xy" + keyboard: + - '/command1, /command2' + - '/command3, /command4' ``` {% configuration %} @@ -407,15 +407,15 @@ inline_keyboard: ```yaml ... -action: - action: notify.NOTIFIER_NAME - data: - title: Send location - message: Location updated. +actions: + - action: notify.NOTIFIER_NAME data: - location: - latitude: 32.87336 - longitude: 117.22743 + title: "Send location" + message: "Location updated." + data: + location: + latitude: 32.87336 + longitude: 117.22743 ``` {% configuration %} @@ -441,18 +441,18 @@ inline_keyboard: ```yaml ... -action: - action: notify.NOTIFIER_NAME - data: - title: "*Send a message*" - message: |- - That's an example that sends a message with message_tag, disable_notification and disable_web_page_preview. - HA site +actions: + - action: notify.NOTIFIER_NAME data: - parse_mode: html - message_tag: "example_tag" - disable_notification: True - disable_web_page_preview: True + title: "*Send a message*" + message: |- + That's an example that sends a message with message_tag, disable_notification and disable_web_page_preview. + HA site + data: + parse_mode: html + message_tag: "example_tag" + disable_notification: True + disable_web_page_preview: True ``` {% configuration %} diff --git a/source/_integrations/telegram_bot.markdown b/source/_integrations/telegram_bot.markdown index a697554baba6..329ee3481221 100644 --- a/source/_integrations/telegram_bot.markdown +++ b/source/_integrations/telegram_bot.markdown @@ -345,13 +345,13 @@ chat_id: "" Simple ping pong example. ```yaml -alias: 'Telegram bot that reply pong to ping' -trigger: - platform: event - event_type: telegram_command - event_data: - command: "/ping" -action: +alias: "Telegram bot that reply pong to ping" +triggers: + - trigger: event + event_type: telegram_command + event_data: + command: "/ping" +actions: - action: notify.notify data: message: "pong" @@ -360,12 +360,12 @@ action: An example that shows keyboard interaction with `notify.telegram` ```yaml -trigger: - platform: event - event_type: telegram_command - event_data: - command: "/start" -action: +triggers: + - trigger: event + event_type: telegram_command + event_data: + command: "/start" +actions: - action: notify.telegram data: message: "commands" @@ -378,12 +378,12 @@ action: and an automation to trigger a related command "/siren". ```yaml -trigger: - platform: event - event_type: telegram_command - event_data: - command: "/siren" -action: +triggers: + - trigger: event + event_type: telegram_command + event_data: + command: "/siren" +actions: - action: homeassistant.turn_on target: entity_id: switch.vision_zm1601eu5_battery_operated_siren_switch_9_0 @@ -399,13 +399,13 @@ An example to show the use of event_data in action: {% raw %} ```yaml -- alias: 'Kitchen Telegram Speak' - trigger: - platform: event - event_type: telegram_command - event_data: - command: "/speak" - action: +- alias: "Kitchen Telegram Speak" + triggers: + - trigger: event + event_type: telegram_command + event_data: + command: "/speak" + actions: - action: notify.kitchen_echo data: message: > @@ -427,11 +427,11 @@ Text repeater: {% raw %} ```yaml -- alias: 'Telegram bot that repeats text' - trigger: - platform: event - event_type: telegram_text - action: +- alias: "Telegram bot that repeats text" + triggers: + - trigger: event + event_type: telegram_text + actions: - action: telegram_bot.send_message data: title: "*Dumb automation*" @@ -450,13 +450,13 @@ Message editor: {% raw %} ```yaml -- alias: 'Telegram bot that edits the last sent message' - trigger: - platform: event - event_type: telegram_callback - event_data: - command: "/edit_msg" - action: +- alias: "Telegram bot that edits the last sent message" + triggers: + - trigger: event + event_type: telegram_callback + event_data: + command: "/edit_msg" + actions: - action: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" @@ -483,13 +483,13 @@ Keyboard editor: {% raw %} ```yaml -- alias: 'Telegram bot that edits the keyboard' - trigger: - platform: event - event_type: telegram_callback - event_data: - command: "/remove_button" - action: +- alias: "Telegram bot that edits the keyboard" + triggers: + - trigger: event + event_type: telegram_callback + event_data: + command: "/remove_button" + actions: - action: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" @@ -509,13 +509,13 @@ Only acknowledges the 'NO' answer: {% raw %} ```yaml -- alias: 'Telegram bot that simply acknowledges' - trigger: - platform: event - event_type: telegram_callback - event_data: - command: "/do_nothing" - action: +- alias: "Telegram bot that simply acknowledges" + triggers: + - trigger: event + event_type: telegram_callback + event_data: + command: "/do_nothing" + actions: - action: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" @@ -529,13 +529,13 @@ Telegram callbacks also support arguments and commands the same way as normal me {% raw %} ```yaml -- alias: 'Telegram bot repeats arguments on callback query' - trigger: - platform: event - event_type: telegram_callback - event_data: - command: "/repeat" - action: +- alias: "Telegram bot repeats arguments on callback query" + triggers: + - trigger: event + event_type: telegram_callback + event_data: + command: "/repeat" + actions: - action: telegram_bot.answer_callback_query data: show_alert: true @@ -553,12 +553,12 @@ Receiving `chat_id` and `message_id` identifiers of sent messages by the `telegr ```yaml - alias: 'Notifications about messages sent by Telegram bot' - trigger: - platform: event - event_type: telegram_sent - event_data: - message_tag: "msg_start" - action: + triggers: + - trigger: event + event_type: telegram_sent + event_data: + message_tag: "msg_start" + actions: - action: input_number.set_value data_template: entity_id: input_number.chat_id @@ -574,7 +574,7 @@ Receiving `chat_id` and `message_id` identifiers of sent messages by the `telegr ## Example: send_message with formatted Text ```yaml -action: +actions: - action: notify.telegrambot data: title: Example Message @@ -584,7 +584,7 @@ action: ## Example: send_message with message tag ```yaml -action: +actions: - action: notify.telegrambot data: title: Example Message @@ -596,7 +596,7 @@ action: ## Example: send_message with disabled webpage preview: ```yaml -action: +actions: - action: notify.telegram data: message: >- diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown index 70e42e820382..ec1fff885f80 100644 --- a/source/_integrations/template.markdown +++ b/source/_integrations/template.markdown @@ -111,7 +111,7 @@ The state, including attributes, of trigger-based sensors and binary sensors is # Example configuration entry template: - trigger: - - platform: time_pattern + - trigger: time_pattern # This will update every night hours: 0 minutes: 0 @@ -133,6 +133,10 @@ unique_id: description: The unique ID for this config block. This will be prefixed to all unique IDs of all entities in this block. required: false type: string +condition: + description: Define conditions that have to be met after a trigger fires and before any actions are executed or sensor updates are performed. Optional. [See condition documentation](/docs/automation/condition). + required: false + type: list action: description: Define actions to be executed when the trigger fires. Optional. Variables set by the action script are available when evaluating entity templates. This can be used to interact with anything using actions, in particular actions with [response data](/docs/scripts/perform-actions#use-templates-to-handle-response-data). [See action documentation](/docs/automation/action). required: false @@ -214,6 +218,11 @@ number: description: Template for the number's current value. required: true type: template + unit_of_measurement: + description: Defines the units of measurement of the number, if any. + required: false + type: string + default: None set_value: description: Defines actions to run when the number value changes. The variable `value` will contain the number entered. required: true @@ -493,7 +502,7 @@ Template entities can be triggered using any automation trigger, including webho ```yaml template: - trigger: - - platform: webhook + - trigger: webhook webhook_id: my-super-secret-webhook-id sensor: - name: "Webhook Temperature" @@ -528,7 +537,7 @@ You can use a trigger-based template entity to convert any event or other automa ```yaml template: - trigger: - platform: event + trigger: event event_type: my_event binary_sensor: - name: Event recently fired @@ -536,6 +545,27 @@ template: state: "true" ``` +### Using conditions with triggers to control status updates + +This example shows how to store the last valid value of a temperature sensor. It will update as long as the source sensor has a valid (numeric) state. Otherwise, the template sensor's state will remain unchanged. + +{% raw %} + +```yaml +template: + - trigger: + trigger: state + entity_id: sensor.outside_temperature + condition: + - condition: template + value_template: "{{ is_number(states('sensor.outside_temperature')) }}" + sensor: + - name: Outside Temperature last known value + state: "{{ states('sensor.outside_temperature') }}" +``` + +{% endraw %} + ### State based sensor exposing sun angle This example shows the sun angle in the frontend. @@ -723,9 +753,9 @@ The binary sensor turns on and sets the matching icon when the appropriate event ```yaml template: - trigger: - - platform: event + - trigger: event event_type: YOUR_EVENT - - platform: state + - trigger: state entity_id: binary_sensor.doorbell_rang to: "off" binary_sensor: @@ -790,7 +820,7 @@ and use the response in a template. ```yaml template: - trigger: - - platform: time_pattern + - trigger: time_pattern hours: /1 action: - action: weather.get_forecasts @@ -809,6 +839,33 @@ template: {% endraw %} +### Number entity changing the unit of measurement of another number + +This example demonstrates the usage of a template number with a unit of measurement set to change a unit-less value of another number entity. + +{% raw %} + +```yaml +template: + - number: + - name: "Cutting Height" + unit_of_measurement: "cm" + unique_id: automower_cutting_height + state: "{{ states('number.automower_cutting_height_raw')|int(0) * 0.5 + 1.5 }}" + set_value: + - service: number.set_value + target: + entity_id: number.automower_cutting_height_raw + data: + value: "{{ (value - 1.5) * 2 }}" + step: 0.5 + min: 2 + max: 6 + icon: mdi:ruler +``` + +{% endraw %} + ## Legacy binary sensor configuration format diff --git a/source/_integrations/tensorflow.markdown b/source/_integrations/tensorflow.markdown index b8e0ab42b208..53294479cd73 100644 --- a/source/_integrations/tensorflow.markdown +++ b/source/_integrations/tensorflow.markdown @@ -209,11 +209,11 @@ image_processing: ```yaml # Example advanced automations.yaml entry - alias: "TensorFlow scanning" - trigger: - - platform: state + triggers: + - trigger: state entity_id: - binary_sensor.driveway - action: + actions: - action: image_processing.scan target: entity_id: camera.driveway diff --git a/source/_integrations/tesla_fleet.markdown b/source/_integrations/tesla_fleet.markdown index dafe60f31ab7..3fea2ef8a758 100644 --- a/source/_integrations/tesla_fleet.markdown +++ b/source/_integrations/tesla_fleet.markdown @@ -3,9 +3,17 @@ title: Tesla Fleet description: Instructions on how to integrate the Tesla Fleet API within Home Assistant. ha_category: - Binary sensor + - Button - Car + - Climate + - Cover - Device tracker + - Lock + - Media player + - Number + - Select - Sensor + - Switch ha_release: 2024.8 ha_iot_class: Cloud Polling ha_config_flow: true @@ -14,9 +22,17 @@ ha_codeowners: ha_domain: tesla_fleet ha_platforms: - binary_sensor + - button + - climate + - cover - device_tracker - diagnostics + - lock + - media_player + - number + - select - sensor + - switch ha_quality_scale: gold ha_integration_type: integration --- @@ -46,6 +62,10 @@ When connecting your Tesla account to Home Assistant, you **must** select the `V Tesla restricts open-source integrations to the ["Discovery" plan](https://developer.tesla.com/docs/fleet-api/getting-started/subscription-plans) which only allows for 200 vehicle data requests per day. The integration will initially poll every 90 seconds, making vehicle data requests only when the vehicle is awake, and then dynamically slow down polling based on how many vehicle data requests have been made in the last 24 hours. +## Command signing + +Certain vehicles, including all vehicles manufactured since late 2023, require vehicle commands to be encrypted end-to-end and signed with a private key. The Tesla Fleet integration is unable to perform this encryption at this time, so certain features may be disabled or throw an exception when used. + ## Entities These are the entities available in the Tesla Fleet integration. Not all entities are enabled by default, and not all values are always available. @@ -77,8 +97,34 @@ These are the entities available in the Tesla Fleet integration. Not all entitie |Binary sensor|Tire pressure warning rear right|No| |Binary sensor|Trip charging|No| |Binary sensor|User present|Yes| +|Button|Flash lights|Yes| +|Button|Homelink|Yes| +|Button|Honk horn|Yes| +|Button|Keyless driving|Yes| +|Button|Play fart|Yes| +|Button|Wake|Yes| +|Climate|Cabin overheat protection|No| +|Climate|Climate|Yes| +|Cover|Charge port door|Yes| +|Cover|Frunk|Yes| +|Cover|Sunroof|No| +|Cover|Trunk|Yes| +|Cover|Vent windows|Yes| |Device tracker|Location|Yes| |Device tracker|Route|Yes| +|Lock|Charge cable lock|Yes| +|Lock|Lock|Yes| +|Media player|Media player|Yes| +|Number|Charge current|Yes| +|Number|Charge limit|Yes| +|Select|Seat heater front left|Yes| +|Select|Seat heater front right|Yes| +|Select|Seat heater rear center|No| +|Select|Seat heater rear left|No| +|Select|Seat heater rear right|No| +|Select|Seat heater third row left|No| +|Select|Seat heater third row right|No| +|Select|Steering wheel heater|Yes| |Sensor|Battery level|Yes| |Sensor|Battery range|Yes| |Sensor|Charge cable|No| @@ -91,7 +137,6 @@ These are the entities available in the Tesla Fleet integration. Not all entitie |Sensor|Distance to arrival|Yes| |Sensor|Driver temperature setting|No| |Sensor|Estimate battery range|No| -|Sensor|Exterior color|No| |Sensor|Fast charger type|No| |Sensor|Ideal battery range|No| |Sensor|Inside temperature|Yes| @@ -99,27 +144,23 @@ These are the entities available in the Tesla Fleet integration. Not all entitie |Sensor|Outside temperature|Yes| |Sensor|Passenger temperature setting|No| |Sensor|Power|No| -|Sensor|Roof color|No| -|Sensor|Scheduled charging mode|No| -|Sensor|Scheduled charging start time|No| -|Sensor|Scheduled departure time|No| |Sensor|Shift state|No| |Sensor|Speed|No| |Sensor|State of charge at arrival|No| -|Sensor|Time at arrival|Yes| -|Sensor|Time at full charge|Yes| |Sensor|Time to arrival|Yes| |Sensor|Time to full charge|Yes| |Sensor|Tire pressure front left|No| |Sensor|Tire pressure front right|No| -|Sensor|Tire pressure last measured front left|No| -|Sensor|Tire pressure last measured front right|No| -|Sensor|Tire pressure last measured rear left|No| -|Sensor|Tire pressure last measured rear right|No| |Sensor|Tire pressure rear left|No| |Sensor|Tire pressure rear right|No| |Sensor|Traffic delay|No| |Sensor|Usable battery level|No| +|Switch|Auto seat climate left|Yes| +|Switch|Auto seat climate right|Yes| +|Switch|Auto steering wheel heater|Yes| +|Switch|Charge|Yes| +|Switch|Defrost|Yes| +|Switch|Sentry mode|Yes| ### Energy sites @@ -128,6 +169,11 @@ These are the entities available in the Tesla Fleet integration. Not all entitie |Binary sensor|Backup capable|Yes| |Binary sensor|Grid services active|Yes| |Binary sensor|Grid services enabled|Yes| +|Binary sensor|Storm watch active|Yes| +|Number|Backup reserve|Yes| +|Number|Off grid reserve|Yes| +|Select|Allow export|Yes| +|Select|Operation mode|Yes| |Sensor|Battery power|Yes| |Sensor|Energy left|Yes| |Sensor|Generator power|No| @@ -140,6 +186,8 @@ These are the entities available in the Tesla Fleet integration. Not all entitie |Sensor|Total pack energy|No| |Sensor|VPP backup reserve|Yes| |Sensor|Version|Yes| +|Switch|Allow charging from grid|Yes| +|Switch|Storm watch|Yes| ### Wall connector diff --git a/source/_integrations/teslemetry.markdown b/source/_integrations/teslemetry.markdown index cfc42c3154d3..364d5070d77e 100644 --- a/source/_integrations/teslemetry.markdown +++ b/source/_integrations/teslemetry.markdown @@ -167,18 +167,34 @@ These are the entities available in the Teslemetry integration. Not all entities |Binary sensor|Backup capable|Yes| |Binary sensor|Grid services active|Yes| |Binary sensor|Grid services enabled|Yes| +|Binary sensor|Storm watch active|Yes| |Number|Backup reserve|Yes| |Number|Off grid reserve|Yes| |Select|Allow export|Yes| |Select|Operation mode|Yes| |Sensor|Battery power|Yes| +|Sensor|Consumer imported from battery|No| +|Sensor|Consumer imported from generator|No| +|Sensor|Consumer imported from grid|No| +|Sensor|Consumer imported from solar|No| |Sensor|Energy left|Yes| +|Sensor|Generator exported|Yes| |Sensor|Generator power|No| +|Sensor|Grid exported|Yes| +|Sensor|Grid exported from battery|No| +|Sensor|Grid exported from generator|No| +|Sensor|Grid exported from solar|No| +|Sensor|Grid imported|No| |Sensor|Grid power|Yes| +|Sensor|Grid services exported|No| +|Sensor|Grid services imported|No| |Sensor|Grid services power|Yes| +|Sensor|Home usage|Yes| |Sensor|Island status|Yes| |Sensor|Load power|Yes| |Sensor|Percentage charged|Yes| +|Sensor|Solar exported|No| +|Sensor|Solar generated|Yes| |Sensor|Solar power|Yes| |Sensor|Total pack energy|No| |Sensor|Version|Yes| diff --git a/source/_integrations/tessie.markdown b/source/_integrations/tessie.markdown index 6a90a6d5caa6..913ca0c17f89 100644 --- a/source/_integrations/tessie.markdown +++ b/source/_integrations/tessie.markdown @@ -227,6 +227,7 @@ The integration will show vehicle software updates and their installation progre - Backup capable - Grid services enabled - Grid services active +- Storm watch active ### Number diff --git a/source/_integrations/thermoworks_smoke.markdown b/source/_integrations/thermoworks_smoke.markdown index 7557cddcc3e5..1b5488a96b43 100644 --- a/source/_integrations/thermoworks_smoke.markdown +++ b/source/_integrations/thermoworks_smoke.markdown @@ -107,15 +107,15 @@ input_number: automation: - alias: "Alert when My Smoke Probe 1 is above threshold" - trigger: - platform: template - value_template: >- - {% if (states("sensor.my_smoke_probe_1") | float) > (states("input_number.smoke_probe_1_threshold") | float) %} - True - {% else %} - False - {% endif %} - action: + triggers: + - trigger: template + value_template: >- + {% if (states("sensor.my_smoke_probe_1") | float) > (states("input_number.smoke_probe_1_threshold") | float) %} + True + {% else %} + False + {% endif %} + actions: - action: notify.all data: message: > diff --git a/source/_integrations/tibber.markdown b/source/_integrations/tibber.markdown index 157d8d3d4443..fa01b4d7fdf3 100644 --- a/source/_integrations/tibber.markdown +++ b/source/_integrations/tibber.markdown @@ -42,12 +42,12 @@ To use notifications, please see the [getting started with automation page](/get ### Send message ```yaml -action: - action: notify.send_message - data: - entity_id: notify.tibber - title: Your title - message: This is a message for you! +actions: + - action: notify.send_message + data: + entity_id: notify.tibber + title: "Your title" + message: "This is a message for you!" ``` ## Sensor @@ -143,14 +143,14 @@ The electricity price can be used to make automations. The sensor has a `max_pri ```yaml - alias: "Electricity price" - trigger: - platform: time_pattern - # Matches every hour at 1 minutes past whole - minutes: 1 - condition: - condition: template - value_template: '{{ float(states('sensor.electricity_price_hamretunet_10')) > 0.9 * float(state_attr('sensor.electricity_price_hamretunet_10', 'max_price')) }}' - action: + triggers: + - trigger: time_pattern + # Matches every hour at 1 minutes past whole + minutes: 1 + conditions: + - condition: template + value_template: '{{ float(states('sensor.electricity_price_hamretunet_10')) > 0.9 * float(state_attr('sensor.electricity_price_hamretunet_10', 'max_price')) }}' + actions: - action: notify.pushbullet data: title: "Electricity price" @@ -158,6 +158,4 @@ The electricity price can be used to make automations. The sensor has a `max_pri message: "The electricity price is now {{ states('sensor.electricity_price_hamretunet_10') }}" ``` - - {% endraw %} diff --git a/source/_integrations/timer.markdown b/source/_integrations/timer.markdown index bc179282d24f..44be36988f0d 100644 --- a/source/_integrations/timer.markdown +++ b/source/_integrations/timer.markdown @@ -153,11 +153,11 @@ timer: - alias: "Timerswitch" id: "Timerstart" # Timer is started when the switch pumprun is set to on. - trigger: - - platform: state + triggers: + - trigger: state entity_id: switch.pumprun to: "on" - action: + actions: - action: timer.start target: entity_id: timer.test @@ -165,12 +165,12 @@ timer: # When timer is stopped, the time run out, another message is sent - alias: "Timerstop" id: "Timerstop" - trigger: - - platform: event + triggers: + - trigger: event event_type: timer.finished event_data: entity_id: timer.test - action: + actions: - action: notify.nma data: message: "Timer stop" diff --git a/source/_integrations/totalconnect.markdown b/source/_integrations/totalconnect.markdown index 3c022f584dd6..275910d09425 100644 --- a/source/_integrations/totalconnect.markdown +++ b/source/_integrations/totalconnect.markdown @@ -33,39 +33,44 @@ Give the user access to your Location, along with a user code, usually a 4 digit **Auto Bypass Low Battery:** if enabled, TotalConnect zones will immediately be bypassed when they report low battery. This option helps because zones tend to report low battery in the middle of the night. The downside of this option is that when the alarm system is armed, the bypassed zone will not be monitored. +**Require Code:** if enabled, you must enter the user code to disarm the alarm. + ## Automation example + ```yaml automation: - alias: "Alarm: Disarmed Daytime" - trigger: - platform: state - entity_id: alarm_control_panel.total_connect - to: "disarmed" - condition: - condition: sun - before: sunset - action: - action: scene.turn_on - target: - entity_id: scene.OnDisarmedDaytime + triggers: + - trigger: state + entity_id: alarm_control_panel.total_connect + to: "disarmed" + conditions: + - condition: sun + before: sunset + actions: + - action: scene.turn_on + target: + entity_id: scene.on_disarmed_day_time + - alias: "Alarm: Armed Away" - trigger: - platform: state - entity_id: alarm_control_panel.total_connect - to: "armed_away" - action: - action: scene.turn_on - target: - entity_id: scene.OnArmedAway - - alias: "Alarm: Arm Home Instant at Sunset" - trigger: - platform: sun - event: sunset - offset: '0' - action: - action: totalconnect.arm_home_instant - target: + triggers: + - trigger: state entity_id: alarm_control_panel.total_connect + to: "armed_away" + actions: + - action: scene.turn_on + target: + entity_id: scene.on_armed_away + + - alias: "Alarm: Arm Home Instant at Sunset" + triggers: + - trigger: sun + event: sunset + offset: 0 + actions: + - action: totalconnect.arm_home_instant + target: + entity_id: alarm_control_panel.total_connect ``` {% details "Notes for Home Assistant Core Installations" %} diff --git a/source/_integrations/touchline_sl.markdown b/source/_integrations/touchline_sl.markdown index 58b611cb6275..d9da13299913 100644 --- a/source/_integrations/touchline_sl.markdown +++ b/source/_integrations/touchline_sl.markdown @@ -8,7 +8,10 @@ ha_iot_class: Cloud Polling ha_domain: touchline_sl ha_platforms: - climate -ha_integration_type: integration +ha_integration_type: hub +ha_codeowners: + - '@jnsgruk' +ha_config_flow: true --- The **Roth Touchline SL** climate integration enables you to control [Roth Touchline SL](https://www.roth-uk.com/products/control-systems/roth-touchliner-sl-wireless-system) underfloor heating systems. diff --git a/source/_integrations/tplink.markdown b/source/_integrations/tplink.markdown index 78fc910ec3d3..43e4917e5f01 100644 --- a/source/_integrations/tplink.markdown +++ b/source/_integrations/tplink.markdown @@ -11,6 +11,7 @@ ha_category: - Number - Select - Sensor + - Siren - Switch ha_release: 0.89 ha_iot_class: Local Polling @@ -30,6 +31,7 @@ ha_platforms: - number - select - sensor + - siren - switch ha_dhcp: true ha_quality_scale: platinum diff --git a/source/_integrations/tplink_tapo.markdown b/source/_integrations/tplink_tapo.markdown index 90dd40eb4663..3ee90a156dd5 100644 --- a/source/_integrations/tplink_tapo.markdown +++ b/source/_integrations/tplink_tapo.markdown @@ -11,6 +11,7 @@ ha_category: - Number - Select - Sensor + - Siren - Switch ha_domain: tplink_tapo ha_release: 0.89 @@ -32,6 +33,7 @@ ha_platforms: - number - select - sensor + - siren - switch ha_iot_class: Local Polling ha_dhcp: true diff --git a/source/_integrations/traccar_server.markdown b/source/_integrations/traccar_server.markdown index 0f51f4e9cf58..83c70210b64d 100644 --- a/source/_integrations/traccar_server.markdown +++ b/source/_integrations/traccar_server.markdown @@ -74,7 +74,7 @@ Attributes: The Traccar Server integration will create devices for each device registered in the Traccar Server with at least one position update. -These device representations in Home Assistant will have [entities](#entities) associated with them, which you can use in [automations](/docs/automation), [scripts](/docs/script), and display on your [dashboard](/docs/dashboard). +These device representations in Home Assistant will have [entities](#entities) associated with them, which you can use in [automations](/docs/automation), [scripts](/docs/scripts), and display on your [dashboard](/dashboards). ## Entities @@ -266,11 +266,11 @@ The allows you to do something when the device "Millennium Falcon" enters the de {% details "Show me the YAML!" %} ```yaml -trigger: - - platform: state +triggers: + - trigger: state entity_id: sensor.millennium_falcon_geofence to: 'Tatooine' -action: +actions: ... ``` @@ -285,11 +285,11 @@ The allows you to do something when the device "Millennium Falcon" exceeds a def {% details "Show me the YAML!" %} ```yaml -trigger: - - platform: numeric_state +triggers: + - trigger: numeric_state entity_id: sensor.millennium_falcon_speed above: 1337 -action: +actions: ... ``` @@ -298,9 +298,9 @@ If you want to include the speed in a notification, you can use the `{{ trigger. Partial example: ```yaml -trigger: +triggers: ... -action: +actions: - action: notify.notify data: message: "The current speed of the Millennium falcon is {{ trigger.to_state.state }}!" diff --git a/source/_integrations/transmission.markdown b/source/_integrations/transmission.markdown index 2c00f5b17568..55b97be7c907 100644 --- a/source/_integrations/transmission.markdown +++ b/source/_integrations/transmission.markdown @@ -62,10 +62,10 @@ Example of an automation that notifies on successful download and removes the to ```yaml - alias: "Notify and remove completed torrent" - trigger: - - platform: event + triggers: + - trigger: event event_type: transmission_downloaded_torrent - action: + actions: - action: notify.telegram_notifier data: title: "Torrent completed!" diff --git a/source/_integrations/triggercmd.markdown b/source/_integrations/triggercmd.markdown new file mode 100644 index 000000000000..381d68203ee4 --- /dev/null +++ b/source/_integrations/triggercmd.markdown @@ -0,0 +1,35 @@ +--- +title: TRIGGERcmd +description: How to integrate TRIGGERcmd with Home Assistant. +ha_category: + - Automation + - Switch +ha_release: '2024.10' +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_codeowners: + - '@rvmey' +ha_domain: triggercmd +ha_platforms: + - switch +ha_integration_type: hub +--- + +The TRIGGERcmd {% term integration %} allows you to run commands on computers via [TRIGGERcmd](https://triggercmd.com/) with Home Assistant. + + +## Prerequisites + +To use TRIGGERcmd, you need the following: + +- A [TRIGGERcmd account](https://www.triggercmd.com/user/auth/signup) +- A computer with the TRIGGERcmd agent running on it +- For instructions on installing and using TRIGGERcmd itself, refer to the [TRIGGERcmd Quick Start Guide](https://docs.triggercmd.com/#/./QuickStart). +- After adding the TRIGGERcmd integration, you will be prompted for your **user token**. This can be found at the bottom of your TRIGGERcmd profile page or the instructions page. +{% include integrations/config_flow.md %} + +## Using TRIGGERcmd with Home Assistant + +All of your TRIGGERcmd commands should show up as **switch** devices. You can change the rooms of your devices, or select **Finish** to leave them without rooms. + +Using the switch will trigger the respective command. If you have **Allow parameters** enabled, your command will run with an "on" or "off" parameter, depending on whether you flip the switch in Home Assistant on or off. diff --git a/source/_integrations/twilio.markdown b/source/_integrations/twilio.markdown index c3d2aab155c9..cdae2343b916 100644 --- a/source/_integrations/twilio.markdown +++ b/source/_integrations/twilio.markdown @@ -56,18 +56,18 @@ Here is an example: ```yaml automation: - trigger: - platform: event - event_type: twilio_data_received - event_data: - From: '+1XXXXXXXXXXX' - To: '+1YYYYYYYYYYY' - CallStatus: ringing - Direction: inbound - action: - action: cover.open_cover - target: - entity_id: cover.garage_door + triggers: + - trigger: event + event_type: twilio_data_received + event_data: + From: '+1XXXXXXXXXXX' + To: '+1YYYYYYYYYYY' + CallStatus: ringing + Direction: inbound + actions: + - action: cover.open_cover + target: + entity_id: cover.garage_door ``` The above opens the garage door when the number `+1XXXXXXXXXXX` calls `+1YYYYYYYYYYY` (considering that `+1YYYYYYYYYYY` is one of your numbers registered in Twilio). @@ -76,11 +76,11 @@ An example of an SMS handler: {% raw %} ```yaml -alias: Twilio incoming -trigger: - - platform: event +alias: "Twilio incoming" +triggers: + - trigger: event event_type: twilio_data_received -action: +actions: - variables: sender: | {{ trigger.event.data.From }} diff --git a/source/_integrations/twilio_call.markdown b/source/_integrations/twilio_call.markdown index 2d81081dc473..d39677cfacd7 100644 --- a/source/_integrations/twilio_call.markdown +++ b/source/_integrations/twilio_call.markdown @@ -48,14 +48,14 @@ Twilio is a notification platform and thus can be controlled by calling the noti # Example automation notification entry automation: - alias: "The sun has set" - trigger: - platform: sun - event: sunset - action: - action: notify.twilio_call - data: - message: "The sun has set" - target: - - +14151234567 - - +15105555555 + triggers: + - trigger: sun + event: sunset + actions: + - action: notify.twilio_call + data: + message: "The sun has set" + target: + - +14151234567 + - +15105555555 ``` diff --git a/source/_integrations/twilio_sms.markdown b/source/_integrations/twilio_sms.markdown index f433bb369d2f..5850f113425e 100644 --- a/source/_integrations/twilio_sms.markdown +++ b/source/_integrations/twilio_sms.markdown @@ -51,17 +51,17 @@ Media can be included with messages by setting the optional `media_url` variable # Example automation notification entry automation: - alias: "The sun has set" - trigger: - platform: sun - event: sunset - action: - action: notify.twilio_sms - data: - message: "The sun has set" - target: - - '+14151234567' - - '+15105555555' + triggers: + - trigger: sun + event: sunset + actions: + - action: notify.twilio_sms data: - media_url: - - "https://www.home-assistant.io/images/supported_brands/home-assistant.png" + message: "The sun has set" + target: + - '+14151234567' + - '+15105555555' + data: + media_url: + - "https://www.home-assistant.io/images/supported_brands/home-assistant.png" ``` diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown index 520d77a517ad..f0959448017b 100644 --- a/source/_integrations/unifi.markdown +++ b/source/_integrations/unifi.markdown @@ -51,6 +51,8 @@ All configuration options are offered from the front end. Enter what UniFi Netwo The UniFi Network application allows you to create multiple users on it besides the main administrator. If all you want to use is the device tracker then it is recommended that you create a limited user that has `read-only` permissions for the UniFi Network device tracker. If you want blocking of network access, POE control, or firmware upgrades as well you would need to have 'admin' permissions. +If you want to create a local-only user, you need to switch to the classic UniFi interface for the option to become available. + ### UniFi OS For UniFi OS a local-only user needs to be created. A user who uses the Ubiquiti cloud will not work. You can do this in the manage users section on the UniFi OS dashboard. Make sure to give it the right permissions for the functions you want to use. Note the Dream Machine Pro and Cloud Key Gen2 plus updated to UniFi OS needs the port to be 443. For some self hosted servers the port will be 8443. @@ -130,6 +132,10 @@ Entities appear for each port forwarding rule. Entities appear for each WLAN. Changing the state of WLAN will trigger a reconfiguration of affected access points, limiting access to all WLANs exposed by the access point. +### Traffic Rules + +Entities appear for each Traffic Rule. This allows toggling rules on and off. + ## Sensor ### Bandwidth sensor diff --git a/source/_integrations/universal.markdown b/source/_integrations/universal.markdown index b4a9887ab278..0083d073bc9e 100644 --- a/source/_integrations/universal.markdown +++ b/source/_integrations/universal.markdown @@ -226,7 +226,7 @@ media_player: volume_level: media_player.kodi|volume_level - platform: kodi - name: Kodi + name: "Kodi" host: 192.168.1.10 turn_on_action: - action: input_boolean.turn_on @@ -240,6 +240,7 @@ media_player: addonid: script.json-cec params: command: activate + turn_off_action: - action: input_boolean.turn_off target: @@ -257,24 +258,25 @@ media_player: command: standby automation: - - alias: Turn on the TV when Kodi is activated - trigger: - platform: state - entity_id: media_player.kodi_tv - from: "off" - to: playing - action: + - alias: "Turn on the TV when Kodi is activated" + triggers: + - trigger: state + entity_id: media_player.kodi_tv + from: "off" + to: "playing" + actions: - action: media_player.turn_on target: entity_id: media_player.kodi_tv - - alias: Turn off the TV when Kodi is in idle > 15 min - trigger: - platform: state - entity_id: media_player.kodi_tv - to: idle - for: - minutes: 15 - action: + + - alias: "Turn off the TV when Kodi is in idle > 15 min" + triggers: + - trigger: state + entity_id: media_player.kodi_tv + to: "idle" + for: + minutes: 15 + actions: - action: media_player.turn_off target: entity_id: media_player.kodi_tv diff --git a/source/_integrations/upb.markdown b/source/_integrations/upb.markdown index 9acd6a7903c9..c039b61f91f4 100644 --- a/source/_integrations/upb.markdown +++ b/source/_integrations/upb.markdown @@ -176,20 +176,20 @@ Start a scene blinking. ```yaml #automation: -- alias: "'Specific scene activated'" +- alias: "Specific scene activated" description: "Trigger when scene 9 on network 42 is activated" - trigger: - platform: event - event_type: upb.scene_changed - event_data: - command: activated - address: "42_9" - action: - action: persistent_notification.create - data: - title: "Scene Activated" - message: > - Activated scene 9 on network 42: {{trigger.event.data.command}}, {{trigger.event.data.address}} + triggers: + - trigger: event + event_type: upb.scene_changed + event_data: + command: activated + address: "42_9" + actions: + - action: persistent_notification.create + data: + title: "Scene Activated" + message: > + Activated scene 9 on network 42: {{trigger.event.data.command}}, {{trigger.event.data.address}} ``` diff --git a/source/_integrations/update.markdown b/source/_integrations/update.markdown index 20e4b9f1afdf..932bf1cb5d7e 100644 --- a/source/_integrations/update.markdown +++ b/source/_integrations/update.markdown @@ -147,14 +147,14 @@ the update for a light bulb becomes available. ```yaml automation: - alias: "Send notification when update available" - trigger: - platform: state - entity_id: update.my_light_bulb - to: "on" - action: - alias: "Send notification to my phone about the update" - action: notify.iphone - data: - title: "New update available" - message: "New update available for my_light_bulb!" + triggers: + - trigger: state + entity_id: update.my_light_bulb + to: "on" + actions: + - alias: "Send notification to my phone about the update" + action: notify.iphone + data: + title: "New update available" + message: "New update available for my_light_bulb!" ``` diff --git a/source/_integrations/uprise_smart_shades.markdown b/source/_integrations/uprise_smart_shades.markdown index 1cb707f2f8ef..8bc6c92ceecb 100644 --- a/source/_integrations/uprise_smart_shades.markdown +++ b/source/_integrations/uprise_smart_shades.markdown @@ -12,6 +12,7 @@ ha_codeowners: - '@starkillerOG' ha_config_flow: true ha_platforms: + - button - cover - sensor ha_iot_class: Local Push diff --git a/source/_integrations/utility_meter.markdown b/source/_integrations/utility_meter.markdown index 01dadd8cc365..bdab9600e162 100644 --- a/source/_integrations/utility_meter.markdown +++ b/source/_integrations/utility_meter.markdown @@ -212,16 +212,16 @@ a time based automation can be used: ```yaml automation: - trigger: - - platform: time + triggers: + - trigger: time at: "09:00:00" variables: tariff: "peak" - - platform: time + - trigger: time at: "21:00:00" variables: tariff: "offpeak" - action: + actions: - action: select.select_option target: entity_id: select.daily_energy diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown index 8fc1da7bf458..dd09750f59dc 100644 --- a/source/_integrations/vacuum.mqtt.markdown +++ b/source/_integrations/vacuum.mqtt.markdown @@ -274,17 +274,17 @@ Action trigger example: ```yaml - alias: "Push command based on sensor" - trigger: - - platform: state + triggers: + - trigger: state entity_id: sensor.sensor - action: - action: vacuum.send_command - target: - entity_id: vacuum.vacuum_entity - data: - command: "custom_command" - params: - - key: value + actions: + - action: vacuum.send_command + target: + entity_id: vacuum.vacuum_entity + data: + command: "custom_command" + params: + - key: value ``` MQTT topic: `vacuum/send_command` diff --git a/source/_integrations/vallox.markdown b/source/_integrations/vallox.markdown index a4bf430dcf33..d3bd0da0d9af 100644 --- a/source/_integrations/vallox.markdown +++ b/source/_integrations/vallox.markdown @@ -91,3 +91,12 @@ Set the fan speed of the `Boost` profile. | Data attribute | Optional | Description | |------------------------|----------|-------------------------------------------------| | `fan_speed` | no | Fan speed in %. `Integer`, between 0 and 100. | + +### Action `vallox.set_profile` + +Set the profile, and optionally a duration for the profile to be active. + +| Data attribute | Optional | Description | +|----------------|---------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `profile` | no | Profile to set, one of `home`, `away`, `boost`, `fireplace`, or `extra`. | +| `duration` | yes | Duration to activate the profile for; in minutes. `Integer` between 1 and 65535. Only applies to `boost`, `fireplace` or `extra` profiles. 65535 sets the profile without a timeout. | \ No newline at end of file diff --git a/source/_integrations/valve.markdown b/source/_integrations/valve.markdown index 862d6fcc5e62..4b38e1655030 100644 --- a/source/_integrations/valve.markdown +++ b/source/_integrations/valve.markdown @@ -57,10 +57,10 @@ Valves that allow setting a specific position may also be controlled with `valve ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: valve.close target: entity_id: valve.demo @@ -79,10 +79,10 @@ Set the position of one or multiple valves if they support setting a specific po ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: valve.set_position target: entity_id: valve.demo diff --git a/source/_integrations/velbus.markdown b/source/_integrations/velbus.markdown index f41e6c923f6c..1e1ff9fa19c0 100644 --- a/source/_integrations/velbus.markdown +++ b/source/_integrations/velbus.markdown @@ -82,11 +82,11 @@ script: trash_memo: alias: "Trash memo text" sequence: - - data: + - action: velbus.set_memo_text + data: address: 65 memo_text: "It's trash day" interface: "tls://192.168.1.9:27015" - action: velbus.set_memo_text ``` ### Action `velbus.clear_cache` @@ -122,47 +122,46 @@ The actual linking can be realized by two automation rules. One rule to control ```yaml # Control light living from Velbus push_button_10 -- id: 'Control_light_living_from_Velbus' - alias: "Control light living using Velbus push_button_10" - trigger: - - entity_id: binary_sensor.push_button_10 - platform: state - to: "on" - condition: [] - action: - - entity_id: light.living - action: light.toggle +- alias: "Control light living using Velbus push_button_10" + triggers: + - trigger: state + entity_id: binary_sensor.push_button_10 + to: "on" + actions: + - action: light.toggle + entity_id: light.living + # Keep status LED push_button_10 in sync to status light living -- id: 'Update LED of push_button_10' - alias: "Update LED state of push_button_10" - trigger: - - entity_id: light.living - platform: state - to: "on" - - entity_id: light.living - platform: state - to: "off" - condition: [] - action: - - condition: or - conditions: - - condition: and +- alias: "Update LED state of push_button_10" + triggers: + - trigger: state + entity_id: light.living + to: "on" + - trigger: state + entity_id: light.living + to: "off" + conditions: + - condition: or conditions: - - condition: state - entity_id: light.led_push_button_10 - state: "on" - - condition: state - entity_id: light.living - state: "off" - - condition: and - conditions: - - condition: state - entity_id: light.led_push_button_10 - state: "off" - - condition: state - entity_id: light.living - state: "on" - - entity_id: light.led_push_button_10 - action: light.toggle + - condition: and + conditions: + - condition: state + entity_id: light.led_push_button_10 + state: "on" + - condition: state + entity_id: light.living + state: "off" + - condition: and + conditions: + - condition: state + entity_id: light.led_push_button_10 + state: "off" + - condition: state + entity_id: light.living + state: "on" + actions: + - action: light.toggle + entity_id: light.led_push_button_10 + ``` diff --git a/source/_integrations/velux.markdown b/source/_integrations/velux.markdown index 7d23943bda46..5456babc746c 100644 --- a/source/_integrations/velux.markdown +++ b/source/_integrations/velux.markdown @@ -48,13 +48,13 @@ As a workaround, you can use an automation to force a restart of the KLF 200 bef ```yaml automation: - alias: KLF reboot on hass stop event - description: Reboots the KLF200 in order to avoid SSL Handshake issue - trigger: - - platform: homeassistant - event: shutdown - action: - - action: velux.reboot_gateway + - alias: "KLF reboot on hass stop event" + description: "Reboots the KLF200 in order to avoid SSL Handshake issue" + triggers: + - trigger: homeassistant + event: shutdown + actions: + - action: velux.reboot_gateway ``` ## Velux Active (KIX 300) diff --git a/source/_integrations/verisure.markdown b/source/_integrations/verisure.markdown index a186b42f9de1..ee8ce9abe152 100644 --- a/source/_integrations/verisure.markdown +++ b/source/_integrations/verisure.markdown @@ -53,10 +53,10 @@ The `changed_by` attribute enables one to be able to take different actions depe ```yaml automation: - alias: "Alarm status changed" - trigger: - - platform: state + triggers: + - trigger: state entity_id: alarm_control_panel.alarm_1 - action: + actions: - action: notify.notify data: message: > diff --git a/source/_integrations/vivotek.markdown b/source/_integrations/vivotek.markdown index 115f8c1e2bbf..95ff695e8162 100644 --- a/source/_integrations/vivotek.markdown +++ b/source/_integrations/vivotek.markdown @@ -121,12 +121,12 @@ Play a live stream from a camera to selected media player(s). Requires [`stream` For example, the following action in an automation would send an `hls` live stream to your chromecast. ```yaml -action: - action: camera.play_stream - target: - entity_id: camera.yourcamera - data: - media_player: media_player.chromecast +actions: + - action: camera.play_stream + target: + entity_id: camera.yourcamera + data: + media_player: media_player.chromecast ``` #### Action `enable_motion_detection` @@ -161,12 +161,12 @@ For example, the following action is an automation that would take a snapshot fr {% raw %} ```yaml -action: - action: camera.snapshot - target: - entity_id: camera.front_door_camera - data: - filename: '/tmp/yourcamera_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg' +actions: + - action: camera.snapshot + target: + entity_id: camera.front_door_camera + data: + filename: '/tmp/yourcamera_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg' ``` {% endraw %} diff --git a/source/_integrations/wake_on_lan.markdown b/source/_integrations/wake_on_lan.markdown index c32d6d4b1d21..697864cdc546 100644 --- a/source/_integrations/wake_on_lan.markdown +++ b/source/_integrations/wake_on_lan.markdown @@ -173,7 +173,7 @@ A switch defined with the `wake_on_lan` platform will render in the UI with both - Continuing your example, the trigger YAML will look like this: ```yaml - platform: state + trigger: state entity_id: - input_button.wake_pc ``` diff --git a/source/_integrations/wallbox.markdown b/source/_integrations/wallbox.markdown index 592d21c333c5..0e12fa7f4464 100644 --- a/source/_integrations/wallbox.markdown +++ b/source/_integrations/wallbox.markdown @@ -25,26 +25,28 @@ The **Wallbox** {% term integration %} pulls data from the [MyWallbox Portal](ht The {% term integration %} adds the following sensors: -- Added energy -- Added range -- Charging power +- Added energy (kWh) +- Added range (km) +- Charging power (kW) - Charging speed - Charging time -- Cost +- Cost ([default currency]) - Current mode -- Depot price -- Energy price -- Max available power -- State of charge +- Depot price ([default currency]/kWh) +- Energy price ([default currency]/kWh) +- Max available power (A) +- State of charge (%) - Status description -- Max charging current +- Max charging current (A) +- Max ICP current (A) ## Number The {% term integration %} adds the following number entities: -- Max charging current -- Energy price +- Max charging current (A) +- Max ICP current; this is the maximum current available for load balancing (A) +- Energy price ([default currency]/kWh) The number {% term entity %} is only loaded if the supplied username has sufficient rights to change the Max. Charging Current. diff --git a/source/_integrations/water_heater.markdown b/source/_integrations/water_heater.markdown index 05e7dbb153aa..b7af270d6c83 100644 --- a/source/_integrations/water_heater.markdown +++ b/source/_integrations/water_heater.markdown @@ -58,10 +58,10 @@ Sets target temperature of water heater device. ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: water_heater.set_temperature target: entity_id: water_heater.demo @@ -83,10 +83,10 @@ Set operation mode for water heater device ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: water_heater.set_operation_mode target: entity_id: water_heater.demo @@ -107,10 +107,10 @@ Turn away mode on or off for water heater device ```yaml automation: - trigger: - platform: time - at: "07:15:00" - action: + triggers: + - trigger: time + at: "07:15:00" + actions: - action: water_heater.set_away_mode target: entity_id: water_heater.demo diff --git a/source/_integrations/watttime.markdown b/source/_integrations/watttime.markdown index 630f02429337..2776de783f6e 100644 --- a/source/_integrations/watttime.markdown +++ b/source/_integrations/watttime.markdown @@ -2,9 +2,9 @@ title: WattTime description: Instructions on how to set up the WattTime integration within Home Assistant. ha_category: - - Sensor - Energy - Environment + - Sensor ha_release: '2021.10' ha_iot_class: Cloud Polling ha_domain: watttime diff --git a/source/_integrations/weather.markdown b/source/_integrations/weather.markdown index 6b7810e539b5..6d138a869134 100644 --- a/source/_integrations/weather.markdown +++ b/source/_integrations/weather.markdown @@ -122,7 +122,7 @@ Example template sensor that contains the hourly forecast ```yaml template: - trigger: - - platform: time_pattern + - trigger: time_pattern hours: /1 action: - action: weather.get_forecasts diff --git a/source/_integrations/webhook.markdown b/source/_integrations/webhook.markdown index 23f283bc1cd0..be06d5635da6 100644 --- a/source/_integrations/webhook.markdown +++ b/source/_integrations/webhook.markdown @@ -8,7 +8,7 @@ ha_quality_scale: internal ha_codeowners: - '@home-assistant/core' ha_domain: webhook -ha_integration_type: integration +ha_integration_type: system --- diff --git a/source/_integrations/webostv.markdown b/source/_integrations/webostv.markdown index a0183080940b..f5cd57c02ca2 100644 --- a/source/_integrations/webostv.markdown +++ b/source/_integrations/webostv.markdown @@ -51,10 +51,10 @@ wake_on_lan: # enables `wake_on_lan` integration automation: - alias: "Turn On Living Room TV with WakeOnLan" - trigger: - - platform: webostv.turn_on + triggers: + - trigger: webostv.turn_on entity_id: media_player.lg_webos_smart_tv - action: + actions: - action: wake_on_lan.send_magic_packet data: mac: aa:bb:cc:dd:ee:ff @@ -162,16 +162,16 @@ The icon can be overridden for individual notifications by providing a path to a ```yaml automation: - alias: "Front door motion" - trigger: - platform: state - entity_id: binary_sensor.front_door_motion - to: "on" - action: - action: notify.livingroom_tv - data: - message: "Movement detected: Front Door" + triggers: + - trigger: state + entity_id: binary_sensor.front_door_motion + to: "on" + actions: + - action: notify.livingroom_tv data: - icon: "/home/homeassistant/images/doorbell.png" + message: "Movement detected: Front Door" + data: + icon: "/home/homeassistant/images/doorbell.png" ``` ## Notes diff --git a/source/_integrations/weheat.markdown b/source/_integrations/weheat.markdown new file mode 100644 index 000000000000..bbbf2e897edb --- /dev/null +++ b/source/_integrations/weheat.markdown @@ -0,0 +1,47 @@ +--- +title: Weheat +description: Instructions on setting up Weheat within Home Assistant. +ha_category: + - Climate + - Energy + - Sensor +ha_iot_class: Cloud Polling +ha_release: '2024.10' +ha_config_flow: true +ha_codeowners: + - '@jesperraemaekers' +ha_domain: weheat +ha_platforms: + - sensor +ha_integration_type: integration +--- + +The **Weheat** {% term integration %} allows you to display your [Weheat](https://www.weheat.nl/) devices through Home Assistant. + +## Prerequisites + +- You need a Weheat account, **username**, and **password** +- When adding the integration in Home Assistant, you will be prompted to enter a **Name**, **Client ID**, and **Client Secret**. + - The name is arbitrary, the ID and secret are provided in the [knowledge base](https://support.weheat.nl/s/article/Is-er-een-offici%C3%ABle-Home-Assistant-integratie). +- During setup of the integration in Home Assistant, you will be redirected to the Weheat login provider. Log in using your **username** and **password**. + - After login, select **link account** to link your account. + +{% include integrations/config_flow.md %} + +## Entities + +### Sensors + +The Weheat integration provides the following sensors: + +- **Output power**: Thermal power added to the water in Watts +- **Input power**: Electrical power in Watts +- **COP**: The Coefficient of performance between the above two power measurements +- **Water inlet temperature**: The heat pump water inlet temperature in °C +- **Water outlet temperature**: The heat pump water outlet temperature in °C +- **Central heating inlet temperature**: The central heating inlet temperature in °C +- **Outside temperature**: Outside temperature in °C +- **Electricity used**: Total electricity used in kWh +- **State**: The current heat pump state +- **DHW top temperature**: The domestic hot water temperature in the top of the vessel in °C (optional) +- **DHW bottom temperature"**: The domestic hot water temperature in the bottom of the vessel in °C (optional) diff --git a/source/_integrations/wemo.markdown b/source/_integrations/wemo.markdown index daa960d97a9d..8700f9f8a153 100644 --- a/source/_integrations/wemo.markdown +++ b/source/_integrations/wemo.markdown @@ -147,13 +147,13 @@ The following is an example implementation of an automation: # Example automation - id: long_press_living_room alias: "Toggle amplifier power" - trigger: - - platform: event + triggers: + - trigger: event event_type: wemo_subscription_event event_data: type: LongPress name: Living Room - action: + actions: - action: media_player.toggle target: entity_id: media_player.amplifier diff --git a/source/_integrations/wled.markdown b/source/_integrations/wled.markdown index 6d858121c657..6026c089fd3a 100644 --- a/source/_integrations/wled.markdown +++ b/source/_integrations/wled.markdown @@ -202,11 +202,11 @@ Here is an example of all of these put together into an automation: ```yaml - alias: "Turn on WLED rain effect when weather changes to rainy" - trigger: - - platform: state + triggers: + - trigger: state entity_id: sensor.weather_condition to: "rainy" - action: + actions: - action: light.turn_on target: entity_id: light.wled diff --git a/source/_integrations/wmspro.markdown b/source/_integrations/wmspro.markdown new file mode 100644 index 000000000000..8ee79c811916 --- /dev/null +++ b/source/_integrations/wmspro.markdown @@ -0,0 +1,38 @@ +--- +title: WMS WebControl pro +description: Instructions on how to integrate WAREMA devices via WMS WebControl pro within Home Assistant. +ha_category: + - Cover + - Hub +ha_release: '2024.10' +ha_iot_class: Local Polling +ha_codeowners: + - '@mback2k' +ha_domain: wmspro +ha_config_flow: true +ha_platforms: + - cover + - diagnostics +ha_integration_type: hub +related: + - url: https://www.warema.com/en/smart-home/wms-webcontrol-pro/ + title: Consumer information about WMS WebControl pro + - url: https://smartbuildings.warema.com/en/control-systems/radio-systems/wms/wms-webcontrol-pro/ + title: Technical documentation for WMS WebControl pro +ha_dhcp: true +--- + +The **WMS WebControl pro** {% term integration %} allows you to integrate WAREMA devices into Home Assistant. + +This integration uses a local API which is available with firmware container version 11H. + +See device section for support information: [covers](#covers). + +{% include integrations/config_flow.md %} + +The WMS WebControl pro *may* also be discovered on your local network via DHCP. + +## Covers + +- *Patio awnings* can be opened, closed, set to a certain position and their movement stopped. +- The integration and library *may* already support other types of awnings with a single motor. diff --git a/source/_integrations/workday.markdown b/source/_integrations/workday.markdown index 8878df4608d8..067f3ac54b4f 100644 --- a/source/_integrations/workday.markdown +++ b/source/_integrations/workday.markdown @@ -14,6 +14,7 @@ ha_codeowners: ha_domain: workday ha_platforms: - binary_sensor + - diagnostics ha_integration_type: integration --- @@ -83,15 +84,15 @@ Example usage for automation: ```yaml automation: alias: "Turn on heater on workdays" - trigger: - platform: time - at: "08:00:00" - condition: - condition: state - entity_id: binary_sensor.workday_sensor - state: "on" - action: - action: switch.turn_on - target: - entity_id: switch.heater + triggers: + - trigger: time + at: "08:00:00" + conditions: + - condition: state + entity_id: binary_sensor.workday_sensor + state: "on" + actions: + - action: switch.turn_on + target: + entity_id: switch.heater ``` diff --git a/source/_integrations/xiaomi_aqara.markdown b/source/_integrations/xiaomi_aqara.markdown index bee0a1f5774a..74ee9f7ac0be 100644 --- a/source/_integrations/xiaomi_aqara.markdown +++ b/source/_integrations/xiaomi_aqara.markdown @@ -84,19 +84,31 @@ name: type: string {% endconfiguration %} -### Actions +## Entities + +The Xiaomi Gateway (Aqara) integration supports the following entities. + +### Locks + +An Aqara lock cannot be controlled by Home Assistant. However, the lock entity allows you to view the following data: + +- The property `changed_by` provides the user/key ID of the last successful unlock. + +- If someone tries to unlock the device but fails more than 3 times, the `verified_wrong_times` attribute will be incremented. The counter resets on a successful unlock. + +## Actions The gateway provides the following actions: -#### Action `xiaomi_aqara.play_ringtone` +### Action `xiaomi_aqara.play_ringtone` Play a specific ringtone. The version of the gateway firmware must be `1.4.1_145` at least. Take a look at the examples below. -| Data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -| `ringtone_id` | no | One of the allowed ringtone ids | -| `ringtone_vol` | yes | The volume in percent | +| Data attribute | Optional | Description | +| -------------- | -------- | --------------------------------------- | +| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | +| `ringtone_id` | no | One of the allowed ringtone ids | +| `ringtone_vol` | yes | The volume in percent | Allowed values of the `ringtone_id` are: @@ -128,30 +140,30 @@ Allowed values of the `ringtone_id` are: - 29 - Thinker - Custom ringtones (uploaded by the Mi Home app) starting from 10001 -#### Action `xiaomi_aqara.stop_ringtone` +### Action `xiaomi_aqara.stop_ringtone` Stops a playing ringtone immediately. -| Data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | +| Data attribute | Optional | Description | +| -------------- | -------- | --------------------------------------- | +| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -#### Action `xiaomi_aqara.add_device` +### Action `xiaomi_aqara.add_device` Enables the join permission of the Xiaomi Aqara Gateway for 30 seconds. A new device can be added afterwards by pressing the pairing button once. -| Data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | +| Data attribute | Optional | Description | +| -------------- | -------- | --------------------------------------- | +| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -#### Action `xiaomi_aqara.remove_device` +### Action `xiaomi_aqara.remove_device` Removes a specific device. The removal is required if a device shall be paired with another gateway. -| Data attribute | Optional | Description | -|---------------------------|----------|-------------------------------------------------------| -| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | -| `device_id` | no | Hardware address of the device to remove | +| Data attribute | Optional | Description | +| -------------- | -------- | ---------------------------------------- | +| `gw_mac` | no | MAC address of the Xiaomi Aqara Gateway | +| `device_id` | no | Hardware address of the device to remove | ## Examples @@ -163,30 +175,30 @@ This example plays the sound of a dog barking when the button is held down and s ```yaml - alias: "Let a dog bark on long press" - trigger: - platform: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.switch_158d000xxxxxc2 - click_type: long_click_press - action: - action: xiaomi_aqara.play_ringtone - data: - gw_mac: xxxxxxxxxxxx - ringtone_id: 8 - ringtone_vol: 8 + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: long_click_press + actions: + - action: xiaomi_aqara.play_ringtone + data: + gw_mac: xxxxxxxxxxxx + ringtone_id: 8 + ringtone_vol: 8 - alias: "Stop barking immediately on single click" - trigger: - platform: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.switch_158d000xxxxxc2 - click_type: single - action: - action: xiaomi_aqara.stop_ringtone - data: - gw_mac: xxxxxxxxxxxx + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: single + actions: + - action: xiaomi_aqara.stop_ringtone + data: + gw_mac: xxxxxxxxxxxx ``` ### Double click on smart button @@ -195,16 +207,16 @@ This example toggles the living room lamp on a double click of the button. ```yaml - alias: "Double Click to toggle living room lamp" - trigger: - platform: event - event_type: xiaomi_aqara.click - event_data: - entity_id: binary_sensor.switch_158d000xxxxxc2 - click_type: double - action: - action: light.toggle - target: - entity_id: light.living_room_lamp + triggers: + - trigger: event + event_type: xiaomi_aqara.click + event_data: + entity_id: binary_sensor.switch_158d000xxxxxc2 + click_type: double + actions: + - action: light.toggle + target: + entity_id: light.living_room_lamp ``` ## Troubleshooting diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown index 1c2312391216..52e4dd3963cc 100644 --- a/source/_integrations/xiaomi_miio.markdown +++ b/source/_integrations/xiaomi_miio.markdown @@ -223,6 +223,7 @@ Supported devices: | Air Purifier Pro H | zhimi.airpurifier.va1 | | | Air Purifier Pro H EU | zhimi.airpurifier.vb2 | | | Air Purifier 3C | zhimi.airpurifier.mb4 | | +| Air Purifier 3C | zhimi.airp.mb4a | | | Air Purifier ZA1 | zhimi.airpurifier.za1 | | | Air Purifier 4 | zhimi.airp.mb5 | AC-M16-SC | | Air Purifier 4 PRO | zhimi.airp.vb4 | AC-M15-SC | @@ -531,7 +532,7 @@ This model uses newer MiOT communication protocol. | Buzzer | Turn on/off the buzzer | | Child Lock | Turn on/off the child lock | -### Air Purifier 3C (zhimi.airpurifier.mb4) +### Air Purifier 3C (zhimi.airpurifier.mb4/zhimi.airp.mb4a) - Power (on, off) - Operation modes (Auto, Silent, Favorite) @@ -1499,11 +1500,10 @@ Inline array: ```yaml automation: - alias: "Test vacuum zone3" - trigger: - - event: start - platform: homeassistant - condition: [] - action: + triggers: + - trigger: homeassistant + event: start + actions: - action: xiaomi_miio.vacuum_clean_zone target: entity_id: vacuum.xiaomi_vacuum @@ -1520,11 +1520,10 @@ Array with inline zone: ```yaml automation: - alias: "Test vacuum zone3" - trigger: - - event: start - platform: homeassistant - condition: [] - action: + triggers: + - trigger: homeassistant + event: start + actions: - action: xiaomi_miio.vacuum_clean_zone target: entity_id: vacuum.xiaomi_vacuum @@ -1542,11 +1541,10 @@ Array mode: ```yaml automation: - alias: "Test vacuum zone3" - trigger: - - event: start - platform: homeassistant - condition: [] - action: + triggers: + - trigger: homeassistant + event: start + actions: - action: xiaomi_miio.vacuum_clean_zone target: entity_id: vacuum.xiaomi_vacuum @@ -1579,11 +1577,10 @@ Multiple segments: ```yaml automation: - alias: "Vacuum kitchen and living room" - trigger: - - event: start - platform: homeassistant - condition: [] - action: + triggers: + - trigger: homeassistant + event: start + actions: - action: xiaomi_miio.vacuum_clean_segment target: entity_id: vacuum.xiaomi_vacuum @@ -1596,11 +1593,10 @@ Single segment: ```yaml automation: - alias: "Vacuum kitchen" - trigger: - - event: start - platform: homeassistant - condition: [] - action: + triggers: + - trigger: homeassistant + event: start + actions: - action: xiaomi_miio.vacuum_clean_segment target: entity_id: vacuum.xiaomi_vacuum @@ -1613,10 +1609,10 @@ The original app for Xiaomi vacuum has a nice feature of room cleaning with repe ```yaml automation: - alias: "Vacuum kitchen" - trigger: - - event: start - platform: homeassistant - action: + triggers: + - trigger: homeassistant + event: start + actions: - action: xiaomi_miio.vacuum_clean_segment target: entity_id: vacuum.xiaomi_vacuum diff --git a/source/_integrations/yale.markdown b/source/_integrations/yale.markdown index 6c09750c19f7..bc696f45b404 100644 --- a/source/_integrations/yale.markdown +++ b/source/_integrations/yale.markdown @@ -137,20 +137,17 @@ Using the lock operation sensors, you can detect when a user operates a lock and {% raw %} ```yaml -- id: "1583706446906" - alias: "joe_doe_front_door_operate" - description: John Doe locks or unlocks the Front Door - trigger: - - entity_id: sensor.front_door_operator - platform: state - to: John Doe - condition: - - condition: template - value_template: "{{ not state_attr('sensor.front_door_operator', 'remote') }}" - action: - - data: {} - entity_id: camera.inside - service: camera.turn_off +- alias: "John Doe locks or unlocks the Front Door" + triggers: + - trigger: state + entity_id: sensor.front_door_operator + to: "John Doe" + conditions: + - condition: template + value_template: "{{ not state_attr('sensor.front_door_operator', 'remote') }}" + actions: + - action: camera.turn_off + entity_id: camera.inside ``` {% endraw %} diff --git a/source/_integrations/yale_home.markdown b/source/_integrations/yale_home.markdown index b874c85a4013..b6b7b1301b57 100644 --- a/source/_integrations/yale_home.markdown +++ b/source/_integrations/yale_home.markdown @@ -9,7 +9,7 @@ ha_category: - Event - Lock - Sensor -ha_release: 0.64 +ha_release: 2024.9 ha_domain: yale_home ha_integration_type: virtual ha_supporting_domain: yale diff --git a/source/_integrations/yale_smart_alarm.markdown b/source/_integrations/yale_smart_alarm.markdown index 5529cb6603e4..21297782e3d3 100644 --- a/source/_integrations/yale_smart_alarm.markdown +++ b/source/_integrations/yale_smart_alarm.markdown @@ -7,6 +7,7 @@ ha_category: - Button - Lock - Sensor + - Switch ha_release: 0.78 ha_iot_class: Cloud Polling ha_config_flow: true @@ -20,6 +21,7 @@ ha_platforms: - diagnostics - lock - sensor + - switch ha_integration_type: integration --- @@ -32,6 +34,7 @@ There is currently support for the following device types within Home Assistant: - Button - Lock - Sensor +- Switch {% include integrations/config_flow.md %} @@ -57,4 +60,8 @@ The lock platform requires a code for unlocking but no code for locking. Provides support for smoke detector temperature sensors. +## Switch + +Provides support for enable/disable autolock on locks. Entity is only available for supported door locks. + The {% term integration %} can be configured to provide a default code that is used if no code is supplied and the number of digits required. diff --git a/source/_integrations/yolink.markdown b/source/_integrations/yolink.markdown index 16589ffdc1e9..cd149290fb03 100644 --- a/source/_integrations/yolink.markdown +++ b/source/_integrations/yolink.markdown @@ -99,6 +99,7 @@ The integration is tested and verified for the following devices from YoLink: - YS5007-UC (FlowSmart Meter) - YS5008-UC (FlowSmart All-in-One) - YS8017-UC (Thermometer) +- YS8008-UC (Float Thermometer) ## Actions diff --git a/source/_integrations/youtube.markdown b/source/_integrations/youtube.markdown index 5e6ab93aba33..27498314ad3a 100644 --- a/source/_integrations/youtube.markdown +++ b/source/_integrations/youtube.markdown @@ -20,6 +20,7 @@ api_link: https://console.cloud.google.com/apis/library/youtube.googleapis.com?p The **YouTube** {% term integration %} allows you to connect YouTube channels to Home Assistant. For every channel you add, it will create sensors for: +- Views count - Subscriber count - The latest uploaded video diff --git a/source/_integrations/zoneminder.markdown b/source/_integrations/zoneminder.markdown index ee5d39a38e94..71e97fd596f1 100644 --- a/source/_integrations/zoneminder.markdown +++ b/source/_integrations/zoneminder.markdown @@ -105,7 +105,7 @@ Once loaded, the `zoneminder` platform will expose an action (`set_run_state`) t For example, if your ZoneMinder instance was configured with a run state called "Home", you could write an [automation](/getting-started/automation/) that changes ZoneMinder to the "Home" run state by including the following [action](/getting-started/automation-action/): ```yaml -action: +actions: action: zoneminder.set_run_state data: id: ZM_HOST diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown index 8fa865ec96ec..9853c8710bb1 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -500,8 +500,8 @@ Notification event data can be used to trigger automations, both in the automati ```yaml # Fires whenever the lock is unlocked by the keypad. -trigger: - - platform: event +triggers: + - trigger: event event_type: zwave_js_notification event_data: node_id: 14 @@ -646,12 +646,12 @@ Value Updated example: This event can be used to trigger a refresh of values when the new state needs to be retrieved. Here's an example automation: ```yaml -trigger: - - platform: event +triggers: + - trigger: event event_type: zwave_js_value_updated event_data: entity_id: switch.in_wall_dual_relay_switch -action: +actions: - action: zwave_js.refresh_value data: entity_id: @@ -671,24 +671,24 @@ This trigger platform can be used to trigger automations on any Z-Wave JS value ```yaml # Fires whenever the `latchStatus` value changes from `closed` to `opened` on the three devices (devices will be derived from an entity ID). -trigger: - platform: zwave_js.value_updated - # At least one `device_id` or `entity_id` must be provided - device_id: 45d7d3230dbb7441473ec883dab294d4 # Garage Door Lock device ID - entity_id: - - lock.front_lock - - lock.back_door - # `property` and `command_class` are required - command_class: 98 # Door Lock CC - property: "latchStatus" - # `property_key` and `endpoint` are optional - property_key: null - endpoint: 0 - # `from` and `to` will both accept lists of values and the trigger will fire if the value update matches any of the listed values - from: - - "closed" - - "jammed" - to: "opened" +triggers: + - trigger: zwave_js.value_updated + # At least one `device_id` or `entity_id` must be provided + device_id: 45d7d3230dbb7441473ec883dab294d4 # Garage Door Lock device ID + entity_id: + - lock.front_lock + - lock.back_door + # `property` and `command_class` are required + command_class: 98 # Door Lock CC + property: "latchStatus" + # `property_key` and `endpoint` are optional + property_key: null + endpoint: 0 + # `from` and `to` will both accept lists of values and the trigger will fire if the value update matches any of the listed values + from: + - "closed" + - "jammed" + to: "opened" ``` #### Available trigger data @@ -721,22 +721,22 @@ There is strict validation in place based on all known event types, so if you co ```yaml # Fires whenever the `interview failed` event is fired on the three devices (devices will be derived from device and entity IDs). -trigger: - platform: zwave_js.event - # At least one `device_id` or `entity_id` must be provided for `node` events. For any other events, a `config_entry_id` needs to be provided. - device_id: 45d7d3230dbb7441473ec883dab294d4 # Garage Door Lock device ID - entity_id: - - lock.front_lock - - lock.back_door - config_entry_id: - # `event_source` and `event` are required - event_source: node # options are node, controller, and driver - event: "interview failed" # event names can be retrieved from the Z-Wave JS docs (see links above) - # `event_data` and `partial_dict_match` are optional. If `event_data` isn't included, all events of a given type for the given context will trigger the automation. When the `interview failed` event is fired, all argument live in a dictionary within the `event_data` dictionary under the `args` key. The default behavior is to require a full match of the event_data dictionary below and the dictionary that is passed to the event. By setting `partial_dict_match` to true, Home Assistant will check if the isFinal argument is true and ignore any other values in the dictionary. If this setting was false, this trigger would never fire because the dictionary always contains more keys than `isFinal` so the comparison check would never evaluate to true. - event_data: - args: - isFinal: true - partial_dict_match: true # defaults to false +triggers: + - trigger: zwave_js.event + # At least one `device_id` or `entity_id` must be provided for `node` events. For any other events, a `config_entry_id` needs to be provided. + device_id: 45d7d3230dbb7441473ec883dab294d4 # Garage Door Lock device ID + entity_id: + - lock.front_lock + - lock.back_door + config_entry_id: + # `event_source` and `event` are required + event_source: node # options are node, controller, and driver + event: "interview failed" # event names can be retrieved from the Z-Wave JS docs (see links above) + # `event_data` and `partial_dict_match` are optional. If `event_data` isn't included, all events of a given type for the given context will trigger the automation. When the `interview failed` event is fired, all argument live in a dictionary within the `event_data` dictionary under the `args` key. The default behavior is to require a full match of the event_data dictionary below and the dictionary that is passed to the event. By setting `partial_dict_match` to true, Home Assistant will check if the isFinal argument is true and ignore any other values in the dictionary. If this setting was false, this trigger would never fire because the dictionary always contains more keys than `isFinal` so the comparison check would never evaluate to true. + event_data: + args: + isFinal: true + partial_dict_match: true # defaults to false ``` #### Available trigger data @@ -841,11 +841,13 @@ Additional devices may be discoverable, however only devices that have been conf Zwavejs2Mqtt was renamed Z-Wave JS UI in September 2022. They are synonymous with no difference between their capabilities. -### Can I switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on? +### Can I switch between Z-Wave JS and Z-Wave JS UI? + +You can switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on. However, but you cannot run them both at the same time. Only one of them can be active at the same time. -You can, but you cannot run them both at the same time. Only one of them can be active at the same time. +### How to switch between Z-Wave JS and Z-Wave JS UI? -### How do I switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on? +To switch between the official Z-Wave JS add-on and the Z-Wave JS UI add-on, follow these steps: Switching does not require renaming your devices. @@ -863,13 +865,14 @@ Switching does not require renaming your devices. 7. Enable the Z-Wave integration. -### What's the benefit of using Z-Wave JS UI add-on over the official add-on? +### What's the benefit of using Z-Wave JS UI add-on? +You might wonder what the benefit is of using the Z-Wave JS UI add-on instead of the official add-on. The official add-on provides the Z-Wave Server in its bare minimum variant, just enough to serve the Home Assistant integration. The Z-Wave JS UI project includes the Z-Wave JS Server for convenience but also provides a Z-Wave control panel and the ability to serve your Z-Wave network to MQTT. This allows you to use the control panel, and if you so choose, to also use MQTT at the same time. For example, some users may use MQTT to interact with Z-Wave from other devices, while the Home Assistant integration still works (as long as you keep the WS Server enabled in Z-Wave JS UI). -### Z-Wave JS UI seems to provide discovery of Home Assistant devices on its own too, now I'm confused +### Z-Wave JS UI provides discovery of HA devices on its own too, now I'm confused Correct, the Z-Wave JS UI project existed before Home Assistant had plans to move to the Z-Wave JS Driver. You should use the integration for device discovery and _not_ the MQTT discovery provided by Z-Wave JS UI. @@ -919,7 +922,7 @@ Entities will be created only after the node is ready (the interview is complete If you are certain that your device should have entities and you do not see them (even after a restart of Home Assistant Core), create an issue about your problem on the GitHub issue tracker. -### My device does not automatically update its status in HA if I control it manually +### My device doesn't automatically update its status in HA if I control it manually Your device might not send automatic status updates to the controller. While the best advice would be to update to recent Z-Wave Plus devices, there is a workaround with active polling (request the status). diff --git a/source/_posts/2024-10-02-connect-zbt1-issue-and-replacement.markdown b/source/_posts/2024-10-02-connect-zbt1-issue-and-replacement.markdown new file mode 100644 index 000000000000..5a611cd0fe9d --- /dev/null +++ b/source/_posts/2024-10-02-connect-zbt1-issue-and-replacement.markdown @@ -0,0 +1,56 @@ +--- +layout: post +title: "Home Assistant Connect ZBT-1 issue and replacement" +description: "Through extensive testing, we’ve found a fault, but we’re setting up a replacement program." +date: 2024-10-02 00:01:01 +date_formatted: "October 2, 2024" +author: Andy Gill +comments: true +categories: Public-Service-Announcement +og_image: /images/blog/2024-10-zbt1-issue/art.jpg +--- +Home Assistant Connect ZBT-1 issue and replacement + +We've found an issue in Home Assistant Connect ZBT-1 that has affected a small number of customers, which appears to be the result of a faulty part incorporated in the most recent batch of ZBT-1 devices. We want to make sure everyone can get a replacement ZBT-1 and ensure they are covered far into the future. + +Though Home Assistant SkyConnect is identical to the ZBT-1 under the hood, it is not affected. The design is not what's at fault, but instead, a defective voltage regulator that was used in this specific batch that is causing the issue. When a ZBT-1 is inserted into certain USB-A ports, the voltage regulator can fail, fully bricking the device. We used high-quality manufacturing and quality control in this and previous batches. We are undertaking an investigation to find out how this could happen and most importantly, to avoid a repeat of anything remotely similar in the future. + +We're sorry for any inconvenience this may cause you. Below are details on our investigation, how devices are affected, and the replacement program. +- [Background](#background) +- [Pausing sales](#pausing-sales) +- [Replacement Program](#replacement-program) +- [Conclusion](#conclusion) + + + +## Background + +Around a month ago, we were contacted about one of our latest (and [recently rebranded](/blog/2024/06/13/zbt1-annoucement/)) Home Assistant Connect ZBT-1s not being detected and showing a small mark on the housing. A couple more similar issues were reported, and we began a dialogue with the small number of people who were affected, having them send us the devices to test. + +

ZBT-1 case deformation and faulty voltage regulatorCircled in red the deformation on the case and the board showing the failed chip

+ +When we opened them, we found a dead voltage regulator. The mark in the outer casing is a sign that it overheated and failed. All of our devices are certified by CE and ROHS, and the plastic shell has been designed not to combust. This is a real-life demonstration of just how important this certification is and why we take that step. + +We replaced the voltage regulator on the devices we tested, and the devices sprang back to life. We found our culprit, but why was it failing? As mentioned, the SkyConnect internal design and the manufacturing were effectively identical to the ZBT-1, and we received no reports of any such failures in the literally tens of thousands of them in the wild. In manufacturing runs there is always a little variance, and in this run, something went wrong with the voltage regulator that was sourced - again, we're looking into this. + +It took us a couple of weeks to replicate the problem with our own units. We went down some wrong paths, but eventually found it was triggered only by certain devices, specifically certain desktop PCs (internally, we have only found one desktop that causes this failure). We have not observed the failure occur when the device has only been connected to a Home Assistant Green, Raspberry Pi, or even a Mac. If you have plugged your ZBT-1 into a different device, specifically a desktop PC, and it is not recognized by that system, inspect it for this deformation pictured above. Obviously, we want you to be able to use the device with any hardware, and even if only a small number of devices from this batch have reported issues, it is still unacceptable to us. + +## Pausing sales + +We have asked our distributors to pause sales and return all stock. For the next month, you will see "Out of Stock" banners, and if you are attempting to get a replacement device for a failed unit, this will not be possible until production is resumed. + +We are working to have replacement ZBT-1s shipped by early November. + +## Replacement Program + +If you have purchased Home Assistant Connect ZBT-1, we are working on a replacement program. This program will see Nabu Casa provide a replacement device free of charge for a period of 60 months (5 years) for verified purchases. Regardless of whether the device has failed, we will provide a replacement upon request. + +It is a core value of ours to do things as sustainably as possible, and that's why we've provided such a long coverage period. We want to give owners with working ZBT-1s, who do not expect to use the device in a different system for the foreseeable future, the ability to keep it operating with peace of mind. + +If it's working, keep it plugged into the device it's working with, and don't worry about a replacement until you need it. If you need or want a replacement, please contact the seller where you purchased your device, and they will arrange the return process and replacement. Replacement devices are expected by early November, and we will be prioritizing people with non-functioning devices. + +## Conclusion + +We're sorry for the inconvenience and any disruption to your smart home. As someone who uses Zigbee in their home, which many smart devices rely on, I would hate to have it out of commission. + +Worse things can happen, but this has been a gut punch. All our work at Nabu Casa is to fund the development of Home Assistant and support the Open Home. Issues like this eat into our time, and rob our users of new and great things. Ultimately, we're going to take this setback as a chance to prove we stand by our values and do the right thing. diff --git a/source/_posts/2024-10-02-release-202410.markdown b/source/_posts/2024-10-02-release-202410.markdown new file mode 100644 index 000000000000..3222a7f8fd85 --- /dev/null +++ b/source/_posts/2024-10-02-release-202410.markdown @@ -0,0 +1,757 @@ +--- +layout: post +title: "2024.10: Heading in the right direction" +description: "A brand new heading card, improved YAML syntax for automations, long-term stats repairs, faster upgrades, and more!" +date: 2024-10-02 00:00:00 +date_formatted: "October 2, 2024" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: + - Release-Notes + - Core +og_image: /images/blog/2024-10/social.jpg +--- + + + +Boo! 👻 + +Please don’t be scared; it is October, Halloween is coming, and so is the next +Home Assistant release: 2024.10! 🎃 + +The release we bring you today is a perfect mix of new UI features, advanced +features, improvements, and lots of bug fixes while not being too overwhelming. +There is something for everyone in this release. + +Most notably, we have a brand new heading card. It allows you to add titles or +subtitles to your dashboards, make them clickable, and even add cute little +entities to them. The new section dashboard gets better and better with every +release, which is super exciting! + +We also introduce some small YAML automation syntax changes. If you are still +a sucker for writing your automations in {% term YAML %} (like me), I’m sure you’ll love +these little tweaks that make it all feel more natural. + +Enjoy the release! + +../Frenck + + + +- [Heading in the right direction](#heading-in-the-right-direction) + - [Another headline feature](#another-headline-feature) +- [Repairs for long-term statistics](#repairs-for-long-term-statistics) +- [Improved YAML syntax for automations](#improved-yaml-syntax-for-automations) +- [Faster upgrades when using custom integrations](#faster-upgrades-when-using-custom-integrations) +- [Integrations](#integrations) + - [New integrations](#new-integrations) + - [Noteworthy improvements to existing integrations](#noteworthy-improvements-to-existing-integrations) + - [Now available to set up from the UI](#now-available-to-set-up-from-the-ui) +- [Matter](#matter) +- [Other noteworthy changes](#other-noteworthy-changes) + - [The source of a repair](#the-source-of-a-repair) + - [YAML-editor improvements](#yaml-editor-improvements) +- [Patch releases](#patch-releases) + - [2024.10.1 - October 4](#2024101---october-4) +- [Need help? Join the community!](#need-help-join-the-community) +- [Backward-incompatible changes](#backward-incompatible-changes) +- [All changes](#all-changes) + +## Heading in the right direction + +Update after update, [Sections] continues to become a customization powerhouse, +and this month is no exception. Section titles are replaced with their own card, +called the [heading card]. Making them a card rather than an inline title gives +you a lot more flexibility, allowing you to put them nearly anywhere. + +The heading card can be used to make titles, but also subtitles, which are half +the height and have smaller, lighter text. So, if you have ever had a section +that needs to be subdivided, slap a subtitle in there. + +![Screenshot showing a dashboard using heading cards with titles and subtitles](/images/blog/2024-10/headings.png) + +Titles and subtitles can be made clickable, displaying a chevron +{% icon "mdi:chevron-right" %} when you can interact with them. This can +perform an action or navigate to a subpage, like having an energy section title +navigate to the full energy dashboard. + +Best of all, if you've already added titles to your sections, they will be +migrated automatically to the new card. 😎 + +[Sections]: /dashboards/sections/ +[heading card]: /dashboards/heading/ + +### Another headline feature + +We had such a fantastic reaction when we released our [renewed badges], +and this new heading card has something very similar and equally as visually +appealing. It can show multiple entity states to the right of the title or +subtitle. + +![Screenshot showing a dashboard with additional entities shown on card headings](/images/blog/2024-10/heading-with-entities.png) + +Either in a subtle "no color" default or add a splash of color when the entity +is in an active state. Other customization options for these entities include +changing the icon, visibility, and what happens when you select it. + +[renewed badges]: /dashboards/badges/ + +## Repairs for long-term statistics + +[Long-term statistics] are great; they downsample and store the data produced +by your {% term sensors %}, allowing Home Assistant to store data indefinitely +in a fraction of the space the original readings took up. Take a look back at +[your energy usage] from two years ago, or see if your living room really is +colder this year compared to last. + +![Screenshot showing a long-term statistic repair showing up in the settings menu](/images/blog/2024-10/statistics-repair.jpg) + +In the past, if a statistic encountered an issue, it might be quietly broken +until you dig into the statistics page. Now, Home Assistant will raise a repair +notification when it detects issues with a long-term statistic and give +you options for fixing the issue. + +[your energy usage]: /docs/energy/ +[Long-term statistics]: https://data.home-assistant.io/docs/statistics/ + +## Improved YAML syntax for automations + +Recently, we renamed `service` to `action` in the [Home Assistant UI and YAML]. +This was done with the goal of making the syntax more natural, allowing it +to be easier to grasp and read. We want to continue this work to improve the +{% term YAML %} syntax, this time focusing on {% term automations %}, and we've made the +following changes, + +- The top-level `trigger` key is now `triggers` (plural) +- The top-level `condition` key is now `conditions` (plural) +- The top-level `action` key is now `actions` (plural) +- The `platform` key of a trigger definition is now `trigger` + +The result of all this is that YAML automation syntax now has `triggers` with +multiple `trigger` definitions, `conditions` with multiple `condition` +definitions, and `actions` with multiple `action` definitions. + +Here is a small example of an automation highlighting these changes. + +

+Screenshots; left showing the old automation YAML style, right showing the new style. The differences between them have been highlighted. +The 2024.9 release on the left and this 2024.10 release on the right. +

+ +As with the other syntax changes we've done recently, this is +**not a breaking change**, and there will be no deprecation. The previous syntax +will continue to work, and there are no plans to remove the old syntax. The new +syntax is recommended, and all documentation and examples have been updated. +Automations managed by the automation editor will automatically be migrated to +the new syntax when saving an automation. + +This is not the only change to our syntax, thanks to [@karwosts] we now support +[merging a list of triggers], which is mostly useful for +{% term blueprint %} authors. + +[merging a list of triggers]: /docs/automation/trigger/#merging-lists-of-triggers +[Home Assistant UI and YAML]: /blog/2024/08/07/release-20248/#goodbye-service-calls-hello-actions- + +## Faster upgrades when using custom integrations + +We want Home Assistant to continue to work on a wide range of hardware. If you +look at our [opt-in analytics] you'll see a sizable amount of homes running it +on single-board computers from the mid-2010s. A lot of effort has been put into +keeping Home Assistant lean, and this release has some good improvements. This +is specially for users of custom integrations, and this follows HACS getting a +great [speed boost for downloads]. + +On each upgrade, all dependencies needed for {% term "custom integrations" %} +are now downloaded and installed. We are now using `uv` internally to download +and install dependencies, which is a faster and more efficient way to download +and install dependencies. If you're not aware, `uv` is what makes our release +process so fast nowadays, and [@edenhaus] has done an interesting +[developer backstory] on our move from `pip` to `uv` (saving us 200+ hours +of execution time a month). [@edenhaus] has also implemented `uv` at runtime +as well. + +This speeds up the upgrade process, especially for custom integrations with many +dependencies, or installations with many custom integrations. This change is +fully transparent to the user, and no action is required. Just sit down, relax, +and enjoy the faster upgrade process! + +[@edenhaus]: https://github.com/edenhaus +[developer backstory]: https://developers.home-assistant.io/blog/2024/04/03/build-images-with-uv/ +[opt-in analytics]: https://analytics.home-assistant.io/ +[speed boost for downloads]: /blog/2024/08/21/hacs-the-best-way-to-share-community-made-projects/#faster-downloads + +## Integrations + +Thanks to our community for keeping pace with the new {% term integrations %} +and improvements to existing ones! You’re all awesome 🥰 + +### New integrations + +We welcome the following new integrations in this release: + +- **[Cambridge Audio]**, added by [@noahhusby] + Control all receivers and streamers that support the [StreamMagic app]. +- **[Deako Smart Lighting]**, added by [@Balake] + Control and automate your [Deako] devices. +- **[Duke Energy]**, added by [@hunterjm] + Import your energy usage data from Duke Energy into the Home Assistant energy + dashboard. +- **[Google Photos]**, added by [@allenporter] + Upload photos to your [Google Photos library] and use as a [media source]. + Note that only images uploaded by the integration can be viewed and used. +- **[Iskra]**, added by [@iskrakranj] + Monitor your energy and power usage from an Iskra energy meter. +- **[Lektrico Charging Station]**, added by [@Lektrico] + Get in control of your [Lektrico EV charger] from Home Assistant and optimize + your energy usage. +- **[Monarch Money]**, added by [@jeeftor] + Monitor your account balance using the [Monarch Money personal finance service]. +- **[NYT Games]**, added by [@joostlek] + Keep track of your [New York Times games] progress, like Spelling Bee and Wordle. +- **[Sensoterra]**, added by [@markruys] + Monitor your soil moisture and temperature using [Sensoterra sensors]. +- **[TRIGGERcmd]**, added by [@rvmey] + Execute commands on your computer(s) using the [TRIGGERcmd cloud service]. +- **[Weheat]**, added by [@jesperraemaekers] + Manage and monitor your [Weheat heatpump], keeping your home warm and cozy. +- **[WMS WebControl pro]**, added by [@mback2k] + Control your [WAREMA] sun shading covers entirely locally. + +[@allenporter]: https://github.com/allenporter +[@Balake]: https://github.com/Balake +[@hunterjm]: https://github.com/hunterjm +[@iskrakranj]: https://github.com/iskrakranj +[@jeeftor]: https://github.com/jeeftor +[@jesperraemaekers]: https://github.com/jesperraemaekers +[@joostlek]: https://github.com/joostlek +[@Lektrico]: https://github.com/Lektrico +[@markruys]: https://github.com/markruys +[@mback2k]: https://github.com/mback2k +[@noahhusby]: https://github.com/noahhusby +[@rvmey]: https://github.com/rvmey +[Cambridge Audio]: /integrations/cambridge_audio +[Deako Smart Lighting]: /integrations/deako +[Deako]: https://www.deako.com/ +[Duke Energy]: /integrations/duke_energy +[Google Photos library]: https://photos.google.com/ +[Google Photos]: /integrations/google_photos +[Iskra]: /integrations/iskra +[Lektrico Charging Station]: /integrations/lektrico +[Lektrico EV charger]: https://lektri.co/ +[media source]: /integrations/media_source +[Monarch Money personal finance service]: https://www.monarchmoney.com/ +[Monarch Money]: /integrations/monarch_money +[New York Times games]: https://www.nytimes.com/games +[NYT Games]: /integrations/nyt_games +[Sensoterra sensors]: https://www.sensoterra.com/sensors/ +[Sensoterra]: /integrations/sensoterra +[StreamMagic app]: https://www.cambridgeaudio.com/usa/en/products/streammagic +[TRIGGERcmd cloud service]: https://triggercmd.com +[TRIGGERcmd]: /integrations/triggercmd +[WAREMA]: https://www.warema.com/ +[Weheat heatpump]: https://www.weheat.nl/ +[Weheat]: /integrations/weheat +[WMS WebControl pro]: /integrations/wmspro + +This release also has a new virtual integration. Virtual integrations +are stubs that are handled by other (existing) integrations to help with +findability. This one is new: + +- **[Arizona Public Service (APS)]**, provided by [Opower], added by [@seferino-fernandez] + +[@seferino-fernandez]: https://github.com/seferino-fernandez +[Arizona Public Service (APS)]: /integrations/aps +[Opower]: /integrations/opower + +### Noteworthy improvements to existing integrations + +It is not just new {% term integrations %} that have been added; existing +integrations are also being constantly improved. Here are some of the noteworthy +changes to existing integrations: + +- [@Bre77] has been busy with the [Tesla Fleet] integration, adding a bunch of + new features and entities to control your Tesla vehicle. It now supports + climate, media player, cover, number, select, button, and lock entities. +- You can now control the volume, ringtone, and status light of your [Reolink] + Hub! Cool, [@starkillerOG]! +- [@daniel-k] added support for controlling the volume and [@sdb9696] added a + switch for controlling motion detection on [Ring] devices; Nice work team! +- The [Switchbot Cloud] integration now supports the [K10+ Mini Robot Vacuum]. + Thanks, [@Gigatrappeur]! +- [@sorgfresser] extended the [ElevenLabs] integration with integration options + to control the voice settings. Nice! +- The [Squeezebox (Lyrion Music Server)] integration now has new service sensors, + and support for your favorites straight from the media browser. + Thanks, [@pssc] and [@rajlaud]! +- [@tronikos] added [Google Cloud] speech-to-text (STT) to Home Assistant. This + allows you to use Google's Cloud speech-to-text with [Assist]! Awesome! +- If you are using the [Husqvarna Automower], you can now view the calendar + it provides, thanks to [@Thomas55555]! +- [@klaasnicolaas] added support for home batteries to the [Autarco] + integration so you can use them in your energy dashboard. Great! + +[@Bre77]: https://github.com/Bre77 +[@daniel-k]: https://github.com/daniel-k +[@Gigatrappeur]: https://github.com/Gigatrappeur +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@pssc]: https://github.com/pssc +[@rajlaud]: https://github.com/rajlaud +[@sdb9696]: https://github.com/sdb9696 +[@sorgfresser]: https://github.com/sorgfresser +[@starkillerOG]: https://github.com/starkillerOG +[@Thomas55555]: https://github.com/Thomas55555 +[@tronikos]: https://github.com/tronikos +[Assist]: /voice_control +[Autarco]: /integrations/autarco +[ElevenLabs]: /integrations/elevenlabs +[Google Cloud]: /integrations/google_cloud +[Husqvarna Automower]: /integrations/husqvarna_automower +[K10+ Mini Robot Vacuum]: https://eu.switch-bot.com/products/switchbot-mini-robot-vacuum-k10 +[Reolink]: /integrations/reolink +[Ring]: /integrations/ring +[Squeezebox (Lyrion Music Server)]: /integrations/squeezebox +[Switchbot Cloud]: /integrations/switchbot_cloud +[Tesla Fleet]: /integrations/tesla_fleet + +### Now available to set up from the UI + +While most {% term integrations %} can be set up directly from the Home Assistant +user interface, some were only available using YAML configuration. We keep moving +more integrations to the UI, making them more accessible for everyone +to set up and use. + +The following integrations are now available via the Home Assistant UI: + +- **[Emoncms]**, done by [@alexandrecuer] +- **[Google Cloud Platform]**, done by [@tronikos] +- **[HTML5 Push Notifications]**, done by [@alexyao2015] +- **[Mold Indicator]**, done by [@gjohansson-ST] + +[@alexandrecuer]: https://github.com/alexandrecuer +[@alexyao2015]: https://github.com/alexyao2015 +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@tronikos]: https://github.com/tronikos +[Emoncms]: /integrations/emoncms +[Google Cloud Platform]: /integrations/google_cloud +[HTML5 Push Notifications]: /integrations/html5 +[Mold Indicator]: /integrations/mold_indicator + +## Matter + +At this point, our [Matter integration] is almost becoming a monthly recurring +topic in our release notes. For a good reason! The development is moving forward +at a strong pace; running toward the certification finish line! + +
Matter logo

+ +In terms of stability, we have improved the robustness of the integration to +ensure it sets up correctly every time, even if an issue with one +of your devices occurs. Besides the usual bugfixes and improvements, this +release has some cool new features and additions: + +- **Button entities** + New button entities that allow you to perform an action on a device. For + example, to identify a device or reset the filter state. +- **Valve entities** + Support for water valves, allowing you to control the flow of fluids or gases. +- **Support for operation states** + Control and monitor the operation state of, for example, dishwashers + and other household equipment. +- **Support for smoke and CO sensors** + Monitor the air quality in your home with smoke and CO sensors. +- **Add support for Matter 1.3 power/energy sensors** + Especially the energy sensors are great to use with the energy dashboard. + +[Matter integration]: /integrations/matter + +## Other noteworthy changes + +There are many more improvements in this release; here are some of the other +noteworthy changes this release: + +- In June, we added support for adding [Model IDs to devices]. This release + has lots of integrations that add them, including [Matter], [Plugwise], + [Wallbox], and [Govee]. We are calling for contributions to add model IDs to + more integrations! Maybe a cool suggestion for an [Hacktoberfest] contribution! +- [@bmesuere] improved the accessibility of all graphs by adjusting all the + default colors used in those graphs! You are a hero! +- When you unignore an integration or device on the integrations page, + Home Assistant will instantly try to rediscover it again! Nice! Thanks, + [@emontnemery]! +- We now have a new unit of measurement for energy entities: calories. Useful, + for devices like a treadmill or an exercise bike. Thanks, [@dudanov]! +- [@TrevorSchirmer] did something similar, and added a new unit of speed: + mm/s and in/s. Thank you! +- When you rename a device, you will now see more details about the rename + operation. Including a preview of the new entity IDs. Nice, [@karwosts]! +- [@gjohansson-ST] added a new template function [`merge_response`] that + allows you to merge multiple responses of a single action or multiple actions + into a single response. Nice! +- [Trigger-based templates] now have support for adding conditions! Just like + automations, you can now add conditions to these entities to control when + they are rendered. Thanks, [@chammp]! +- More template fun! You can now set up your templated alarm control panel + straight from the UI. Thanks, [@gjohansson-ST]! +- The statistics developer tools have been improved. They now have the new-style + data tables and the ability to bulk select items to action. Awesome [@karwosts]! +- There is a new entity in town, the [`assist satellite` entity](/integrations/assist_satellite/). + It is a building block for remote satellites devices that use [Assist]. This + is in preparation for our upcoming satellite hardware. Stay tuned! + +[@bmesuere]: https://github.com/bmesuere +[@chammp]: https://github.com/chammp +[@dudanov]: https://github.com/dudanov +[@emontnemery]: https://github.com/emontnemery +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@karwosts]: https://github.com/karwosts +[@TrevorSchirmer]: https://github.com/TrevorSchirmer +[`merge_response`]: /docs/configuration/templating/#merge-action-responses +[Assist]: /voice_control +[Govee]: /integrations/govee_light_local +[Hacktoberfest]: https://hacktoberfest.digitalocean.com/ +[Matter]: /integrations/matter +[Model IDs to devices]: https://developers.home-assistant.io/blog/2024/07/16/device-info-model-id +[Plugwise]: /integrations/plugwise +[Trigger-based templates]: /integrations/template/#trigger-based-template-binary-sensors-buttons-images-numbers-selects-and-sensors +[Wallbox]: /integrations/wallbox + +### The source of a repair + +{% term Integrations %} can raise issues in your repairs dashboard, they can +raise issues for themselves, but also for other integrations. An example of +such an issue is an integration that connects to your device that raises an +issue on an {% term automation %} that controls it. + +The result is an automation issue in your repair center. This is cool, but +you might want to know which integration raised the issue in the first place. + +Thanks to [@wendevlin], we now show the source integration of the repair issue +in the issue dialog. + +Screenshot showing the new repairs dialog reporting the integration that raised it. + +[@wendevlin]: https://github.com/wendevlin + +### YAML-editor improvements + +[@naps62] has been busy improving the YAML editor found in the Home Assistant +user interface. + +We now have a vertical line based on indentation, which makes it easier to see +the indentation of your YAML configuration and allows you to spot and prevent +indentation errors. + +Screenshot showing the YAML editor with collapsed sections and the vertical indentation line. + +But he didn’t stop there. You can now collapse and expand sections of your +YAML configuration based on the indentation level; which is also demonstrated +in the screenshot above. + +Nice work [@naps62]! + + +[@naps62]: https://github.com/naps62 + +## Patch releases + +We will also release patch releases for Home Assistant 2024.10 in October. These +patch releases only contain bug fixes. Our goal is to release a patch release +every Friday. + +### 2024.10.1 - October 4 + +- Fix device id support for alarm control panel template ([@piitaya] - [#127340]) +- Bump pysmlight 0.1.2 ([@tl-sl] - [#127376]) +- Remove assumption in ConfigEntryItems about unique unique_id ([@emontnemery] - [#127399]) +- Add missing number platform to init of Tesla Fleet ([@Bre77] - [#127406]) +- Bump aiomealie to 0.9.3 ([@andrew-codechimp] - [#127454]) +- Fix int value in unique_id for Tellduslive ([@robinostlund] - [#127526]) +- Bump matrix-nio to 0.25.2 ([@PaarthShah] - [#127535]) +- Adjust polling rate of Rituals Perfume Genie ([@frenck] - [#127544]) +- Create new clientsession for NYT Games ([@joostlek] - [#127547]) +- Strip the NYT Games token ([@joostlek] - [#127548]) +- Revert "Bump pychromecast to 14.0.2 (#127333)" ([@joostlek] - [#127555]) + +[#126782]: https://github.com/home-assistant/core/pull/126782 +[#127340]: https://github.com/home-assistant/core/pull/127340 +[#127376]: https://github.com/home-assistant/core/pull/127376 +[#127399]: https://github.com/home-assistant/core/pull/127399 +[#127406]: https://github.com/home-assistant/core/pull/127406 +[#127454]: https://github.com/home-assistant/core/pull/127454 +[#127526]: https://github.com/home-assistant/core/pull/127526 +[#127535]: https://github.com/home-assistant/core/pull/127535 +[#127544]: https://github.com/home-assistant/core/pull/127544 +[#127547]: https://github.com/home-assistant/core/pull/127547 +[#127548]: https://github.com/home-assistant/core/pull/127548 +[#127555]: https://github.com/home-assistant/core/pull/127555 +[@Bre77]: https://github.com/Bre77 +[@PaarthShah]: https://github.com/PaarthShah +[@andrew-codechimp]: https://github.com/andrew-codechimp +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@joostlek]: https://github.com/joostlek +[@piitaya]: https://github.com/piitaya +[@robinostlund]: https://github.com/robinostlund +[@tl-sl]: https://github.com/tl-sl + +## 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. + +## Backward-incompatible changes + +We do our best to avoid making changes to existing functionality that might +unexpectedly impact your Home Assistant installation. Unfortunately, sometimes, +it is inevitable. + +We always make sure to document these changes to make the transition as easy as +possible for you. This release has the following backward-incompatible changes: + +{% details "Climate" %} + +We have added more validation to the `climate.set_humidity` action, which +enforces that the set target humidity is within the targeted entity's minimum +and maximum humidity levels. + +You should adjust automations and scripts to use valid values if you are using +this action. + +([@gjohansson-ST] - [#125242]) ([documentation](/integrations/climate)) + +[@gjohansson-ST]: https://github.com/gjohansson-ST +[#125242]: https://github.com/home-assistant/core/pull/125242 + +{% enddetails %} + +{% details "ecobee" %} + +The previously deprecated `aux_heat` attribute has been removed from the +provided climate entity. + +([@gjohansson-ST] - [#125246]) ([documentation](/integrations/ecobee)) + +[@gjohansson-ST]: https://github.com/gjohansson-ST +[#125246]: https://github.com/home-assistant/core/pull/125246 + +{% enddetails %} + +{% details "Honeywell Total Connect Comfort (US)" %} + +The previously deprecated `aux_heat` attribute has been removed from the +provided climate entity. + +([@gjohansson-ST] - [#125248]) ([documentation](/integrations/honeywell)) + +[@gjohansson-ST]: https://github.com/gjohansson-ST +[#125248]: https://github.com/home-assistant/core/pull/125248 + +{% enddetails %} + +{% details "Humidifier" %} + +We have added more validation to the `humidifier.set_humidity` action, which +enforces that the target humidity is within the targeted entity's minimum +and maximum humidity levels. + +You might need to adjust automations and scripts to use valid values if you +are using this action. + +([@gjohansson-ST] - [#125863]) ([documentation](/integrations/humidifier)) + +[@gjohansson-ST]: https://github.com/gjohansson-ST +[#125863]: https://github.com/home-assistant/core/pull/125863 + +{% enddetails %} + +{% details "Nuki" %} + +The previously deprecated `nuki_id` and `battery_critical` attributes have +been removed from the Nuki entities. If you are using these attributes in +automations or scripts, you need to update those. + +([@steffenrapp] - [#125348]) ([documentation](/integrations/nuki)) + +[@steffenrapp]: https://github.com/steffenrapp +[#125348]: https://github.com/home-assistant/core/pull/125348 + +{% enddetails %} + +{% details "OpenTherm Gateway" %} + +To modernize the OpenTherm Gateway integration, all entities have been split +into different devices. As a result, the OpenTherm Gateway climate entity +has been moved to a new OpenTherm Thermostat device. + +Configurations that look for the climate entity by device must be adjusted +accordingly. + +In the process, all entities were reviewed and some were found to be irrelevant +or superfluous. These entities have been removed. All removed entities were +previously disabled by default, so anyone who has never manually enabled an +entity in the OpenTherm Gateway integration is not affected by this. + +All other users should review their configuration for using OpenTherm Gateway +entities that no longer exist or have been assigned to another device. + +([@mvn23] - [#124869]) ([documentation](/integrations/opentherm_gw)) + +[@mvn23]: https://github.com/mvn23 +[#124869]: https://github.com/home-assistant/core/pull/124869 + +{% enddetails %} + +{% details "Pentair ScreenLogic" %} + +Support for use of an area, device, or entity as a target for ScreenLogic +actions has been removed. Instead, use `config_entry` with the +`entry_id` of the desired ScreenLogic + +Support for using an area, device, or entity as a target for ScreenLogic +actions has been removed. Instead, use `config_entry` with the `entry_id` of +the desired ScreenLogic. + +([@dieselrabbit] - [#123432]) ([documentation](/integrations/screenlogic)) + +[@dieselrabbit]: https://github.com/dieselrabbit +[#123432]: https://github.com/home-assistant/core/pull/123432 + +{% enddetails %} + +{% details "Ping" %} + +The binary sensor attributes this integration provided have been +replaced with sensor entities in Home Assistant 2024.4. These deprecated +attributes have now been removed. + +([@jpbede] - [#125760]) ([documentation](/integrations/ping)) + +[@jpbede]: https://github.com/jpbede +[#125760]: https://github.com/home-assistant/core/pull/125760 + +{% enddetails %} + +{% details "Ring" %} + +The `ring.update` action was deprecated in the 2024.4 release and has now +been removed. Please use `homeassistant.update_entity` if you need +a replacement. + +([@jpbede] - [#125762]) ([documentation](/integrations/ring)) + +[@jpbede]: https://github.com/jpbede +[#125762]: https://github.com/home-assistant/core/pull/125762 + +{% enddetails %} + +{% details "Squeezebox (Lyrion Music Server)" %} + +We previously noticed that the squeezebox platform had deprecated +the `squeezebox_sync` and `squeezebox_unsync` actions and the `sync_group` +entity attribute in favor of the newer "join" framework common to all +media players. + +These deprecated actions and entity attributes have now been removed. + +([@rajlaud] - [#125271]) ([documentation](/integrations/squeezebox)) + +[@rajlaud]: https://github.com/rajlaud +[#125271]: https://github.com/home-assistant/core/pull/125271 + +{% enddetails %} + +{% details "Templates" %} + +Limit maximum template render output to 256KiB to ensure template renders +do not inject unreasonable data into the system and cause a crash. + +256KiB is likely to still block Home Assistant’s event loop for an unreasonable +amount of time, but it's likely someone is using the template engine for large +blocks of data, so we want a limit that still allows that but has a reasonable +safety margin to prevent the system from crashing down. + +([@bdraco] - [#124946]) + +[@bdraco]: https://github.com/bdraco +[#124946]: https://github.com/home-assistant/core/pull/124946 + +{% enddetails %} + +{% details "ThermoWorks Smoke" %} + +The ThermoWorks Smoke integration is disabled because it creates +an unresolvable dependency conflict. + +Contributions to fixing this conflict are greatly appreciated. + +([@edenhaus] - [#125661]) ([documentation](/integrations/thermoworks_smoke)) + +[@edenhaus]: https://github.com/edenhaus +[#125661]: https://github.com/home-assistant/core/pull/125661 + +{% enddetails %} + +{% details "Tfiac" %} + +The Tfiac integration is disabled because we cannot create valid Python wheels +for its dependencies. + +Contributions to fixing this issue are greatly appreciated. + +([@edenhaus] - [#125692]) ([documentation](/integrations/tfiac)) + +[@edenhaus]: https://github.com/edenhaus +[#125692]: https://github.com/home-assistant/core/pull/125692 + +{% enddetails %} + +{% details "Z-Wave" %} + +With this release, you will need to update your `zwave-js-server` instance. +You must use `zwave-js-server` 1.37.0 or greater (schema 37). + +- If you use the Z-Wave JS add-on, you need at least version `0.7.0`. +- If you use the Z-Wave JS UI add-on, you need at least version [`3.9.0`](https://github.com/hassio-addons/addon-zwave-js-ui/releases/tag/v3.9.0). +- If you use the Z-Wave JS UI Docker container, you need at least version [`9.16.0`](https://github.com/zwave-js/zwave-js-ui/releases/tag/v9.16.0). +- If you run your own Docker container or some other installation method, you will need to update your zwave-js-server instance to at least `1.37.0`. + +([@MartinHjelmare] - [#125666]) ([documentation](/integrations/zwave_js)) + +[@MartinHjelmare]: https://github.com/MartinHjelmare +[#125666]: https://github.com/home-assistant/core/pull/125666 + +{% enddetails %} + +If you are a custom integration developer and want to learn about 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: + +- [Additional validation in Climate set temperature](https://developers.home-assistant.io/blog/2024/09/24/climate-set-temp-validation) +- [Calories added to energy class sensors](https://developers.home-assistant.io/blog/2024/09/10/calories-units) +- [Deprecating constants for Media Player](https://developers.home-assistant.io/blog/2024/09/23/constants-media-player-deprecation) +- [Deprecating feature flag constants for Vacuum](https://developers.home-assistant.io/blog/2024/09/23/feature-flag-constants-vacuum-deprecation) +- [Deprecating state constants for camera](https://developers.home-assistant.io/blog/2024/09/23/state-constants-camera-deprecation) +- [Deprecating state constants for lock](https://developers.home-assistant.io/blog/2024/09/23/state-constants-lock-deprecation) +- [Enforce SourceType and add shorthand attributes and EntityDescription to device_tracker](https://developers.home-assistant.io/blog/20240924-device-tracker-entity-description) +- [Extend deprecation period of @bind_hass and hass.components](https://developers.home-assistant.io/blog/2024/09/11/extending-deprecation-hass-components) +- [Introducing the Assist satellite entity](https://developers.home-assistant.io/blog/2024/10/01/assist-satellite-entity/) +- [Version compare for Update platform can now be overwritten](https://developers.home-assistant.io/blog/2024/09/28/update-version-compare) + +[devblog]: https://developers.home-assistant.io/blog/ + +## 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 2024.10](/changelogs/core-2024.10) diff --git a/source/_redirects b/source/_redirects index 0d93fefc6b9f..1382529d9e5d 100644 --- a/source/_redirects +++ b/source/_redirects @@ -174,6 +174,7 @@ layout: null /integrations/light.knx /integrations/knx#light /integrations/light.mysensors /integrations/mysensors#light /integrations/light.xiaomi_miio /integrations/xiaomi_miio/#xiaomi-philips-light +/integrations/lock.xiaomi_aqara/ /integrations/xiaomi_aqara/#locks /integrations/media_player.group /integrations/group /integrations/notify.command_line /integrations/command_line#Notify /integrations/notify.group /integrations/group#notify-groups diff --git a/source/changelogs/core-2024.10.markdown b/source/changelogs/core-2024.10.markdown new file mode 100644 index 000000000000..5cd7257901e7 --- /dev/null +++ b/source/changelogs/core-2024.10.markdown @@ -0,0 +1,2517 @@ +--- +title: Full changelog for Home Assistant Core 2024.10 +description: Detailed changelog for the Home Assistant Core 2024.10 release +replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$ +--- + +These are all the changes included in the Home Assistant Core 2024.10 release. + +For a summary in a more readable format: +[Release notes blog for this release](/blog/2024/10/02/release-202410/). + +- Bump version to 2024.10.0dev0 ([@edenhaus] - [#124808]) +- Add Deako integration ([@Balake] - [#121132]) +- Use reauth_confirm in discovergy ([@epenet] - [#124782]) +- Use reauth_confirm in co2signal ([@epenet] - [#124781]) +- Bump tellduslive to 0.10.12 ([@fredrike] - [#124816]) +- Add evohome test for setup ([@zxdavb] - [#123129]) +- Support Z-Wave JS dimming lights using color intensity ([@AlCalzone] - [#122639]) +- Fix evohome test by setting datetime to match snapshot ([@zxdavb] - [#124824]) +- Set GoogleEntity entity_id in constructor ([@bdraco] - [#124830]) +- SmartThings edge driver for heatit thermostats does not require cooling setpoint ([@jm-cook] - [#123188]) +- Cleanup unused `hass_storage` mocks in mqtt tests ([@jbouwh] - [#124846]) +- Tweak exception message in yaml loader ([@emontnemery] - [#124841]) +- Avoid unnecessary copying of variables when setting up automations ([@emontnemery] - [#124844]) +- Improve config flow type hints (a-f) ([@epenet] - [#124859]) +- Deduplicate warning messages in recorder DB migration ([@emontnemery] - [#124845]) +- Bump github/codeql-action from 3.26.5 to 3.26.6 (@dependabot - [#124898]) +- Remove update call from init in ViCare integration ([@CFenner] - [#124905]) +- Bump actions/setup-python from 5.1.1 to 5.2.0 (@dependabot - [#124899]) +- Improve config flow type hints (n-p) ([@epenet] - [#124909]) +- Improve config flow type hints (g-m) ([@epenet] - [#124907]) +- Improve type hints in nina config flow ([@epenet] - [#124910]) +- Improve type hints in plex config flow ([@epenet] - [#124914]) +- Add hot water target temp number entity in ViCare integration ([@CFenner] - [#123633]) +- Improve type hints in konnected config flow ([@epenet] - [#124904]) +- Improve type hints in mobile_app config flow ([@epenet] - [#124906]) +- Improve type hints in hvv_departures config flow ([@epenet] - [#124902]) +- Improve type hints in growatt_server config flow ([@epenet] - [#124901]) +- Improve type hints in icloud config flow ([@epenet] - [#124900]) +- Speed up ssdp domain matching ([@bdraco] - [#124842]) +- Bump pysqueezebox to v0.8.1 ([@rajlaud] - [#124856]) +- Add returning activity to Husqvarna lawn mower ([@mikey0000] - [#124511]) +- Add lektrico integration ([@Lektrico] - [#102371]) +- Add shapournemati to iotty codeowners ([@shapournemati-iotty] - [#123649]) +- Clean up Weatherflow Cloud ([@jeeftor] - [#124643]) +- Alphabetize keys list for nut sensor icons ([@tdfountain] - [#124188]) +- Add 100% coverage of Reolink sensor platform ([@starkillerOG] - [#124472]) +- Add 100% coverage of Reolink light platform ([@starkillerOG] - [#124382]) +- Add 100% coverage of Reolink camera platform ([@starkillerOG] - [#124381]) +- Add 100% coverage of Reolink switch platform ([@starkillerOG] - [#124482]) +- Use snapshot in Axis camera tests ([@Kane610] - [#122677]) +- Add LG ThinQ Integration ([@LG-ThinQ-Integration] - [#123860]) +- Add 100% coverage of Reolink host.py ([@starkillerOG] - [#124577]) +- Ensure smilight fixtures select correct platform for tests ([@tl-sl] - [#124305]) +- Add Google Photos integration ([@allenporter] - [#124835]) +- Add work items per type and state counter sensors to Azure DevOps ([@timmo001] - [#119737]) +- Add inverter-devices to solarlog ([@dontinelli] - [#123205]) +- Add option to login with username/email and password in Habitica integration ([@tr4nt0r] - [#117622]) +- Add Google Photos reauth support ([@allenporter] - [#124933]) +- Enable strict typing checking for bluesound integration ([@LouisChrist] - [#123821]) +- Bump google-cloud-texttospeech to 2.17.2 ([@bdraco] - [#124938]) +- Bump google-cloud-pubsub to 2.23.0 ([@bdraco] - [#124937]) +- Bump google-generativeai to 0.7.2 ([@bdraco] - [#124940]) +- Limit maximum template render output to 256KiB ([@bdraco] - [#124946]) +- Rename lg_thinq domain name ([@joostlek] - [#124926]) +- Enable config flow for html5 ([@alexyao2015] - [#112806]) +- Add missing translation for Google Photos reauth ([@allenporter] - [#124959]) +- Fix Google Photos get media calls ([@allenporter] - [#124958]) +- Address additional Google Photos integration feedback ([@allenporter] - [#124957]) +- Send entity name or original name to LCN frontend ([@alengwenus] - [#124518]) +- Remove HVAC Modes when no scopes in Teslemetry ([@Bre77] - [#124612]) +- Improve config flow type hints in cast ([@epenet] - [#124861]) +- Merge coordinators in Airgradient ([@joostlek] - [#124714]) +- Small code quality fix in Teslemetry ([@Bre77] - [#124603]) +- Clean up Google Photos media source ([@allenporter] - [#124977]) +- Update aioairzone-cloud to v0.6.3 ([@Noltari] - [#124978]) +- Update mypy-dev to 1.12.0a3 ([@cdce8p] - [#124939]) +- Add loggers for Google Photos integration ([@allenporter] - [#124986]) +- Add Google Photos service for uploading content ([@allenporter] - [#124956]) +- Add Google Photos media source support for albums and favorites ([@allenporter] - [#124985]) +- Use constant for default medium type in Mopeka ([@cayossarian] - [#125002]) +- Update aioairzone-cloud to v0.6.4 ([@Noltari] - [#125007]) +- Bump solarlog_cli to 0.2.2 ([@dontinelli] - [#124948]) +- Split opentherm_gw entities between different devices ([@mvn23] - [#124869]) +- Migrate opentherm_gw climate entity unique_id ([@mvn23] - [#125024]) +- Bump aio-georss-gdacs to 0.10 ([@exxamalte] - [#125021]) +- Extend hjjcy device category in Tuya integration ([@krasnoukhov] - [#124854]) +- Update aioairzone-cloud to v0.6.5 ([@Noltari] - [#125030]) +- Clarify comment in google photos upload service ([@allenporter] - [#125042]) +- New template merge_response ([@gjohansson-ST] - [#114204]) +- Improve renault tests ([@epenet] - [#125064]) +- Update Matter light transition blocklist to include YNDX LightStrip ([@Nidre] - [#124657]) +- Add strict typing in Google Cloud ([@tronikos] - [#125068]) +- Setup Google Cloud from the UI ([@tronikos] - [#121502]) +- Remove unused event from recorder ([@emontnemery] - [#125067]) +- Do not LG thinq retry entry setup, when a single coordinator failed ([@LG-ThinQ-Integration] - [#125052]) +- Remove lying comment from service.async_register_entity_service ([@emontnemery] - [#125079]) +- Deprecate template.attach ([@emontnemery] - [#124843]) +- Bump ring-doorbell to 0.9.3 ([@sdb9696] - [#125087]) +- Correct start version in recorder schema migration tests ([@emontnemery] - [#125090]) +- Remove roundig in Solarlog and add suggested_display_precision ([@dontinelli] - [#125094]) +- Add diagnostics to solarlog ([@dontinelli] - [#125072]) +- Cleanup removed options for mqtt climate ([@jbouwh] - [#125083]) +- Add separate entities for temperature, humidity and pressure in AccuWeather integration ([@bieniu] - [#125041]) +- Add test of statistics timestamp migration ([@emontnemery] - [#125100]) +- Add coverage for late unifiprotect person detection events ([@bdraco] - [#125103]) +- Test string timestamps are wiped after migration to schema version 32 ([@emontnemery] - [#125091]) +- Add Airzone Cloud Aidoo HVAC indoor/outdoor sensors ([@Noltari] - [#125013]) +- Bump flipr api to 1.6.1 ([@cnico] - [#125106]) +- Replace _host_in_configuration_exists with async_abort_entries_match in solarlog ([@dontinelli] - [#125099]) +- Remove `is_on` function from `homeassistant.components` ([@jbouwh] - [#125104]) +- Remove recorder PostSchemaMigrationTask ([@emontnemery] - [#125076]) +- Add binary_sensor platform to LG Thinq ([@LG-ThinQ-Integration] - [#125054]) +- Convert ring integration to use entry.runtime_data ([@sdb9696] - [#125127]) +- Add dependency on google-photos-library-api: Change the Google Photos client library to a new external package ([@allenporter] - [#125040]) +- Bump hadolint to 2.12.0 and use matrix for all Dockerfiles ([@edenhaus] - [#125131]) +- Add climate platform to Tesla Fleet ([@Bre77] - [#123169]) +- Improve hassfest docker image ([@edenhaus] - [#125133]) +- Abort ring config_flow if account is already configured ([@sdb9696] - [#125120]) +- Add Google Cloud Speech-to-Text (STT) ([@tronikos] - [#120854]) +- Add Onkyo Receiver class to improve typing ([@arturpragacz] - [#124190]) +- Speed up hassio send_command url check ([@bdraco] - [#125122]) +- Add explaining comments in cv.template tests ([@emontnemery] - [#125081]) +- Support setting Amazon Polly engine in service call ([@jschlyter] - [#120226]) +- Bump actions/upload-artifact from 4.3.6 to 4.4.0 (@dependabot - [#125056]) +- Extended epson projector integration to include serial connections ([@s0129] - [#121630]) +- Clean up Z-wave error log when raising in service handlers ([@MartinHjelmare] - [#125138]) +- End deprecation setting attributes directly on config entry ([@gjohansson-ST] - [#123729]) +- Remove opentherm_gw options migration ([@mvn23] - [#125046]) +- Use SnapshotAssertion in more AVM Fritz!Box Tools tests ([@mib1185] - [#125037]) +- Add favorites support to Media Browser for Squeezebox integration ([@rajlaud] - [#124732]) +- Bump PyMetno to 0.13.0 ([@hanskroner] - [#125151]) +- Make optional arguments to frame.report kwarg only ([@emontnemery] - [#125062]) +- Improve some comments in recorder tests ([@emontnemery] - [#125118]) +- Add sensors for AsusWRT using http(s) library ([@ollo69] - [#124337]) +- Migrate emoncms to config flow ([@alexandrecuer] - [#121336]) +- Add support for total YouTube views ([@Alexwijn] - [#123144]) +- Enable strict typing for the Squeezebox integration ([@rajlaud] - [#125161]) +- Update opentherm_gw tests to avoid patching internals ([@mvn23] - [#125152]) +- Enhance error handling when changing a timer's duration ([@N3rdix] - [#121786]) +- Fix type errors in squeezebox ([@rajlaud] - [#125166]) +- Expose UV Index in Met.no ([@hanskroner] - [#124992]) +- Update opentherm_gw tests to prepare for new platforms ([@mvn23] - [#125172]) +- Add include-hidden-files to upload env_file artifact ([@ludeeus] - [#125179]) +- Refactor recorder EventIDPostMigration data migrator ([@emontnemery] - [#125126]) +- Add re-auth flow to NextDNS integration ([@bieniu] - [#125101]) +- Add 100% coverage of Reolink update platform ([@starkillerOG] - [#124521]) +- Improve recorder tests to check indices are removed ([@emontnemery] - [#125164]) +- Add myself as codeowner for BTHome ([@thecode] - [#125184]) +- Bump xiaomi-ble to 0.31.1 to add support for human presence sensor XMOSB01XS ([@ldfandian] - [#124751]) +- Get zwave_js statistics data from model ([@raman325] - [#120281]) +- Fix missing patch in nextdns tests ([@emontnemery] - [#125195]) +- Move recorder EntityIDPostMigrationTask to migration ([@emontnemery] - [#125136]) +- Teach recorder data migrator base class to remove index ([@emontnemery] - [#125168]) +- Bump yarl to 1.9.8 ([@bdraco] - [#125193]) +- Add Motionblinds Bluetooth diagnostics ([@LennP] - [#121899]) +- Add 100% coverage of Reolink button platform ([@starkillerOG] - [#124380]) +- Add new number component for setting the wallbox ICP current ([@hesselonline] - [#125209]) +- Bump aioesphomeapi to 25.3.2 ([@bdraco] - [#125188]) +- Allow Switchbot users to force nightlatch ([@Michal4K] - [#124326]) +- Fix enum lookup ([@cdce8p] - [#125220]) +- Add Iskra integration ([@iskrakranj] - [#121488]) +- Bump thinqconnect to 0.9.6 ([@LG-ThinQ-Integration] - [#125155]) +- Fix Path.__enter__ DeprecationWarning in tests ([@cdce8p] - [#125227]) +- Reenable Smarty integration ([@martinssipenko] - [#124148]) +- Remove ExternalDevice migration in HomeWizard ([@DCSBL] - [#125197]) +- Improve config flow type hints in starline ([@epenet] - [#125202]) +- Improve config flow type hints (q-s) ([@epenet] - [#125198]) +- Fix device identifier in ViCare integration ([@CFenner] - [#124483]) +- Improve config flow type hints in screenlogic ([@epenet] - [#125199]) +- Add Button platform for Smlight integration ([@tl-sl] - [#124970]) +- Add Onkyo to strict typing ([@arturpragacz] - [#124617]) +- Add button platform to opentherm_gw ([@mvn23] - [#125185]) +- Add support for sample bytes in preferred TTS format ([@synesthesiam] - [#125235]) +- Add Sonos tests and update error handling for unknown media ([@PeteRager] - [#124578]) +- Revert "Disable IPv6 in the opower integration to fix AEP utilities" ([@bdraco] - [#125208]) +- Remove deprecated aux_heat from honeywell ([@gjohansson-ST] - [#125248]) +- Add Custom Drink Entities Tami4 Edge ([@taltaub22] - [#124506]) +- Add debug logging in get_cost_reads in opower ([@tronikos] - [#124473]) +- Add uptime sensors for Smlight ([@tl-sl] - [#124408]) +- Add hysteresis entity for heat pumps via ViCare ([@CFenner] - [#124294]) +- Add service to 17track to archive package ([@shaiu] - [#123493]) +- Add madvr diagnostics ([@iloveicedgreentea] - [#125109]) +- Address BTHome review comment ([@thecode] - [#125259]) +- Squeezebox remove deprecated sync and unsync services ([@rajlaud] - [#125271]) +- Fix yarl binary wheel builds for armv7l and armhf ([@bdraco] - [#125270]) +- Bump yarl to 1.9.9 ([@bdraco] - [#125264]) +- Use TypeVar defaults for Generator ([@cdce8p] - [#125228]) +- Switch hassio to use with_path where possible ([@bdraco] - [#125268]) +- Teach recorder data migrator base class to update MigrationChanges ([@emontnemery] - [#125214]) +- Improve config flow type hints in ukraine_alarm ([@epenet] - [#125302]) +- Simplify generic decorators in recorder ([@emontnemery] - [#125301]) +- Add diagnostics to GDACS integration ([@exxamalte] - [#125296]) +- Add reauth flow for Smlight ([@tl-sl] - [#124418]) +- Add diagnostics to GeoNet NZ Quakes integration ([@exxamalte] - [#125320]) +- Add new data types to ADS integration ([@mrpasztoradam] - [#125201]) +- Split opentherm_gw entity base class ([@mvn23] - [#125330]) +- Refactor recorder retryable_database_job decorator ([@emontnemery] - [#125306]) +- Add Squeezebox server service binary sensors ([@pssc] - [#122473]) +- Fix typo in squeezebox ([@peteS-UK] - [#125352]) +- Bump plugwise to v1.0.0 ([@bouwew] - [#125354]) +- Home Connect add FridgeFreezer switch entities ([@beastie29a] - [#122881]) +- Bump aioswitcher to 4.0.3 ([@YogevBokobza] - [#125355]) +- Remove deprecated aux_heat from zha ([@gjohansson-ST] - [#125247]) +- Add Sensoterra integration ([@markruys] - [#119642]) +- Extend deprecation of aux_heat in ClimateEntity ([@gjohansson-ST] - [#125360]) +- Add model ID to Sonos ([@balloob] - [#125364]) +- Add model ID to roborock ([@balloob] - [#125366]) +- Add model ID to samsungtv ([@balloob] - [#125369]) +- Add model ID to Wemo ([@balloob] - [#125368]) +- Add model ID to awair ([@balloob] - [#125373]) +- Add model ID to unifiprotect ([@balloob] - [#125376]) +- Add assist satellite entity component ([@synesthesiam] - [#125351]) +- Correct check for removed index in recorder test ([@emontnemery] - [#125323]) +- Bump ruff to 0.6.4 ([@autinerd] - [#125385]) +- Add binary_sensor platform for Smlight integration ([@tl-sl] - [#125284]) +- Add tests for LCN actions / services ([@alengwenus] - [#125391]) +- Add model ID to linkplay ([@balloob] - [#125370]) +- Enable Ruff PTH for the script directory ([@autinerd] - [#124441]) +- Replace SW version by model ID in renault device info ([@epenet] - [#125399]) +- Use smlight discovery hostname as device name ([@thecode] - [#125359]) +- Add weheat core integration ([@jesperraemaekers] - [#123057]) +- Small Assist Satellite fixes ([@balloob] - [#125384]) +- Add Switch platform to Smlight integration ([@tl-sl] - [#125292]) +- Add YoLink temperature sensor YS8008 support ([@matrixd2] - [#125408]) +- Rename "Ruckus Unleashed" integration to "Ruckus" ([@ms264556] - [#125392]) +- Remove attributes from Nuki entities ([@steffenrapp] - [#125348]) +- Improve config flow type hints in volumio ([@epenet] - [#125318]) +- Add translations to Xiaomi Miio ([@jrieger] - [#123822]) +- Improve config flow type hints (t-z) ([@epenet] - [#125315]) +- Add Habitica up/down attributes for tasks ([@shedokan] - [#125356]) +- Improve config flow type hints in xiaomi_aqara ([@epenet] - [#125316]) +- Improve config flow type hints in vulcan ([@epenet] - [#125308]) +- Improve geniushub test coverage ([@GeoffAtHome] - [#124157]) +- Add binary sensors for motion detection Comelit simple home ([@fiste788] - [#125200]) +- Fix location_id datatype in totalconnect tests ([@epenet] - [#125298]) +- Improve config flow type hints in totalconnect ([@epenet] - [#125300]) +- Improve config flow type hints in tellduslive ([@epenet] - [#125299]) +- Bump yarl to 1.9.11 ([@bdraco] - [#125287]) +- Remove unneeded wrapping of URL in URL in network helper ([@bdraco] - [#125265]) +- Code quality improvement on local_file ([@gjohansson-ST] - [#125165]) +- Add filter run time for deCONZ air purifiers ([@Kane610] - [#123306]) +- Migrate VoIP to use assist satellite ([@balloob] - [#125381]) +- Remove deprecated aux_heat from ecobee ([@gjohansson-ST] - [#125246]) +- Remove support for area, device, or entity targets for screenlogic actions ([@dieselrabbit] - [#123432]) +- Bump blebox_uniapi to v2.5.0 ([@swistakm] - [#124298]) +- Migrate ESPHome to assist satellite ([@balloob] - [#125383]) +- Add model ID to sfr_box ([@epenet] - [#125400]) +- Use PEP 695 for decorator typing with type aliases in zha ([@emontnemery] - [#124235]) +- Improve consistency of sensor strings to reduce confusion in NUT ([@tdfountain] - [#124184]) +- Move ambient sensors (temperature and humidity) to diagnostic in NUT ([@tdfountain] - [#124180]) +- Provide same entities for all Enphase_envoy CT types ([@catsmanac] - [#124531]) +- Fix UnboundLocalError in recorder ([@emontnemery] - [#125419]) +- Improve coordinator test coverage for enphase_envoy ([@catsmanac] - [#122375]) +- Add tests for LCN climate and scene platform ([@alengwenus] - [#124466]) +- Use first media player announcement format for TTS ([@synesthesiam] - [#125237]) +- Replace strings with constants in Bang & Olufsen testing ([@mj23000] - [#125423]) +- Nice G.O. code quality improvements ([@IceBotYT] - [#124319]) +- Add switch platform to opentherm_gw ([@mvn23] - [#125410]) +- Add model ID to WallboxEntity ([@hesselonline] - [#125434]) +- Bump yarl to 1.10.0 ([@bdraco] - [#125446]) +- Add discovery schemas for Matter 1.3 power/energy sensors ([@marcelveldt] - [#125403]) +- Request one data point in statistics_during_period in Opower ([@tronikos] - [#124480]) +- Fix docstrings in opentherm_gw ([@mvn23] - [#125456]) +- Clean up test for Wallbox integration ([@hesselonline] - [#125433]) +- Add model ID to Matter DeviceInfo ([@marcelveldt] - [#125341]) +- Bump xiaomi-ble to 0.32.0 ([@ldfandian] - [#125461]) +- Update aioairzone to v0.9.0 ([@Noltari] - [#125476]) +- Replace linear search in unit_system with dict lookup ([@bdraco] - [#125485]) +- Bump zeroconf to 0.134.0 ([@bdraco] - [#125491]) +- Clean up tests for LCN ([@alengwenus] - [#125493]) +- Add tests for BSBLAN climate component ([@liudger] - [#124524]) +- Change of acmeda element unique_id ([@atmurray] - [#124963]) +- Bump pymslight to 0.0.15 ([@tl-sl] - [#125455]) +- Fix after review comments for Acmeda ([@joostlek] - [#125501]) +- Fix solarlog test RuntimeWarning ([@cdce8p] - [#125504]) +- Include all enphase_envoy devices in async_remove_config_entry_device ([@catsmanac] - [#124533]) +- Add missing previous and next commands in LinkPlay ([@silamon] - [#125450]) +- Reorder openweathermap modes according to recommendation in documentation ([@N3rdix] - [#125395]) +- Add reconfigure for lamarzocco ([@zweckj] - [#122160]) +- Add balanced grid import/export to enphase_envoy ([@catsmanac] - [#123154]) +- Fix Bang & Olufsen testing typing ([@mj23000] - [#125427]) +- Add various assertions to Bang & Olufsen testing ([@mj23000] - [#125429]) +- Add text-selector autocomplete in Bring config flow ([@tr4nt0r] - [#124063]) +- Allow waze_travel_time multiple excl/incl filter ([@eifinger] - [#117252]) +- Use json data instead of timedelta for tests in generic hygrostat ([@elupus] - [#124111]) +- Adjust generic hygrostat to detect reported events for stale tracking ([@elupus] - [#124109]) +- Add voice settings to ElevenLabs options flow ([@sorgfresser] - [#123265]) +- Clean up Mold indicator ([@gjohansson-ST] - [#123080]) +- Add DeviceInfo to Bring integration ([@tr4nt0r] - [#122419]) +- Add last restart sensor to devolo_home_network ([@Shutgun] - [#122190]) +- Add sleep to map select for Roborock ([@Lash-L] - [#122625]) +- Fix UI config validation for button and switch actions in Template ([@dougiteixeira] - [#121810]) +- Add translation to Jellyfin ([@jrieger] - [#123857]) +- Deprecate aux_heat in elkm1 ([@gjohansson-ST] - [#125372]) +- Deprecate aux_heat from Nexia climate entity, implement switch ([@gjohansson-ST] - [#125250]) +- Add validation to climate hvac mode ([@gjohansson-ST] - [#125178]) +- Deprecate aux_heat in econet ([@gjohansson-ST] - [#125365]) +- Deprecate opentherm_gw configuration through configuration.yaml ([@mvn23] - [#125045]) +- Add set_profile service for Vallox integration ([@treetip] - [#120225]) +- Add config flow to Mold indicator ([@gjohansson-ST] - [#122600]) +- Correct Mastodon IOT class ([@andrew-codechimp] - [#125511]) +- Add ability to play plex media as the non-primary user ([@ViViDboarder] - [#122039]) +- Set required attribute when using Todoist Sync API reminder_add command ([@proxi] - [#122644]) +- Change Knocki integration type to hub ([@joostlek] - [#124863]) +- Remove notify support for templates ([@wbyoung] - [#122820]) +- Ensure Linkplay model_id is always defined ([@balloob] - [#125488]) +- Fix ring notifications ([@sdb9696] - [#124879]) +- Update bring todo entity snapshots ([@jpbede] - [#125518]) +- Add event platform to ring ([@sdb9696] - [#125506]) +- Migrate smappee to use runtime_data ([@epenet] - [#125529]) +- Migrate amberelectric to use runtime_data ([@epenet] - [#125533]) +- Fix failing template config flow tests ([@hunterjm] - [#125534]) +- Migrate airvisual to use runtime_data ([@epenet] - [#125532]) +- Fix failing blebox climate tests ([@jpbede] - [#125522]) +- Migrate anthemav to use runtime_data ([@epenet] - [#125537]) +- Migrate aosmith to use runtime_data ([@epenet] - [#125538]) +- Migrate apcupsd to use runtime_data ([@epenet] - [#125539]) +- Migrate anova to use runtime_data ([@epenet] - [#125536]) +- Migrate ambient_network to use runtime_data ([@epenet] - [#125535]) +- Update aioairzone to v0.9.1 ([@Noltari] - [#125547]) +- Fix building multidict binary wheels on armv7 and armhf ([@bdraco] - [#125550]) +- Bump yarl to 1.11.0 ([@bdraco] - [#125549]) +- LLM Tool parameters check ([@Shulyaka] - [#123621]) +- ESPHome media proxy ([@synesthesiam] - [#123254]) +- Bump aioesphomeapi to 25.4.0 ([@jesserockz] - [#125554]) +- Separate recorder test fixtures disabling context id migration ([@emontnemery] - [#125324]) +- Fix support for Heat meters to DSMR integration ([@cbrouwer] - [#125523]) +- Remove KNX yaml config from `hass.data` ([@farmio] - [#124050]) +- Add alias to DOMAIN import in group ([@epenet] - [#125569]) +- Add a syntax for merging lists of triggers ([@karwosts] - [#117698]) +- Add announce support to ESPHome Assist Satellite platform ([@synesthesiam] - [#125157]) +- Do not directy import platform DOMAIN const in MQTT platform tests ([@jbouwh] - [#125589]) +- Document plant integration development state ([@MartinHjelmare] - [#125590]) +- Add Matter BatVoltage attribute from PowerSource cluster ([@lboue] - [#125503]) +- Sort and remove duplicates from template/const.py ([@emontnemery] - [#125591]) +- Add alias to DOMAIN import in tests [n-z] ([@epenet] - [#125581]) +- Add alias to DOMAIN import in homekit ([@epenet] - [#125572]) +- Add alias to DOMAIN import in tests [e-g] ([@epenet] - [#125575]) +- Add alias to DOMAIN import in tests [a-d] ([@epenet] - [#125573]) +- Add alias to DOMAIN import in tests [h-m] ([@epenet] - [#125577]) +- Enable hadolint for hassfest docker image and adjust hadolint job ([@edenhaus] - [#125146]) +- Bump aioopenexchangerates to 0.6.2 ([@MartinHjelmare] - [#125593]) +- Add alias to DOMAIN import in deconz ([@epenet] - [#125568]) +- Simplify cv._base_trigger_list_flatten ([@emontnemery] - [#125613]) +- Add alias to DOMAIN import (part 4) ([@epenet] - [#125563]) +- Add alias to DOMAIN import (part 1) ([@epenet] - [#125560]) +- Catch Forecast.solar ConnectionError when API down ([@klaasnicolaas] - [#125621]) +- Bump yarl to 1.1.11 ([@bdraco] - [#125633]) +- Bump actions/attest-build-provenance from 1.4.2 to 1.4.3 (@dependabot - [#125390]) +- Set responding state in assist satellite announcements ([@synesthesiam] - [#125632]) +- Make auth safe params a frozenset ([@bdraco] - [#125640]) +- Add alias to DOMAIN import (part 3) ([@epenet] - [#125562]) +- Add alias to DOMAIN import (part 2) ([@epenet] - [#125561]) +- Remove myself from codeowner from lutron_caseta ([@bdraco] - [#125609]) +- Rename HassEnforceCoordinatorModule ([@epenet] - [#125592]) +- Add alias to DOMAIN import in config and demo ([@epenet] - [#125570]) +- Link mold_indicator entity to device from humidity sensor ([@gjohansson-ST] - [#125528]) +- Bump thinqconnect to 0.9.7 ([@LG-ThinQ-Integration] - [#125587]) +- Create property_ids with ActiveMode in LG ThinQ integration ([@LG-ThinQ-Integration] - [#125638]) +- Improve config flow type hints in yeelight ([@epenet] - [#125319]) +- Add model_id to MotionMount integration ([@RJPoelstra] - [#125650]) +- Add calories to energy sensor device class ([@dudanov] - [#122796]) +- Remove recorder history queries for database schemas < 25 ([@emontnemery] - [#125649]) +- Disable fail-fast on publish container jobs ([@edenhaus] - [#125245]) +- Disable ThermoWorks Smoke due incompatible dependencies ([@edenhaus] - [#125661]) +- Move Hub and Entity to separate module in ADS ([@epenet] - [#125665]) +- Migrate wolflink config_entry unique_id to string ([@epenet] - [#125653]) +- Bump uv to 0.4.8 ([@edenhaus] - [#124867]) +- Warn on non-string config entry unique IDs ([@epenet] - [#125662]) +- Add coordinator to Daikin ([@joostlek] - [#124394]) +- Rename Entity module in tellduslive ([@epenet] - [#125668]) +- Fix malformed response in Bang & Olufsen testing ([@mj23000] - [#125658]) +- Bump aioautomower to 2024.9.0 ([@Thomas55555] - [#125647]) +- Add Human Shape Detect to ONVIF ([@renehonig] - [#125335]) +- Add new functions to ADS sensor integration ([@mrpasztoradam] - [#125331]) +- Bump python-MotionMount to 2.1.0 ([@RJPoelstra] - [#125660]) +- Deprecate Daikin YAML platform setup ([@joostlek] - [#125158]) +- Add state_class to OHM sensors ([@silentguy256] - [#125567]) +- Parameterize many of the threshold tests ([@agoode] - [#125521]) +- Replace Throttle in bluesound integration ([@LouisChrist] - [#124943]) +- Disable sfr_box diagnostic test ([@emontnemery] - [#125678]) +- Bump weatherflow4py to 0.3.3 ([@jeeftor] - [#125676]) +- Add Roomba last mission sensor ([@krzysdabro] - [#123048]) +- Add squeezebox service sensors ([@pssc] - [#125349]) +- Bump matrix-nio to 0.25.1 ([@PaarthShah] - [#125555]) +- Move constants in Threshold ([@agoode] - [#125683]) +- Bump weatherflow4py to 0.3.4 ([@jeeftor] - [#125681]) +- Update aioairzone to v0.9.2 ([@Noltari] - [#125682]) +- Add velbus HVAC options ([@RZomermanMS] - [#106570]) +- Add Cambridge Audio integration ([@noahhusby] - [#125642]) +- Remove recorder history queries for database schemas < 31 ([@emontnemery] - [#125652]) +- Refactor LcnEntity signature ([@alengwenus] - [#124411]) +- Extend deprecation period for hass.components by 6 months ([@emontnemery] - [#125659]) +- End deprecation setting disabled_by as string ([@epenet] - [#125646]) +- Add pylint check for DOMAIN alias ([@epenet] - [#125559]) +- Simplify recorder statistics_meta_manager ([@emontnemery] - [#125648]) +- Bump nextdns to version 3.3.0 ([@bieniu] - [#125688]) +- Disbale Tfiac integration due invalid wheel ([@edenhaus] - [#125692]) +- Mark UVC as strict typed ([@joostlek] - [#123239]) +- Bump aiostreammagic to 2.1.0 ([@noahhusby] - [#125696]) +- Add pre-amp support for Cambridge Audio ([@noahhusby] - [#125699]) +- Fix failing elevenlabs tts test ([@jpbede] - [#125698]) +- Add select platform to opentherm_gw ([@mvn23] - [#125585]) +- Add URL description for Sabnzbd integration ([@shaiu] - [#125414]) +- Add LED mode select entities to opentherm_gw ([@mvn23] - [#125702]) +- Unload assist satellite platform on disconnect ([@synesthesiam] - [#125697]) +- Cancel running pipeline on new pipeline or announcement ([@synesthesiam] - [#125687]) +- Add unit_of_measurement to template numbers ([@chammp] - [#122862]) +- Add condition to trigger template entities ([@chammp] - [#119689]) +- Use uv at runtime too ([@edenhaus] - [#125110]) +- Improve yolink code readability ([@matrixd2] - [#125724]) +- Bump uv to 0.4.9 ([@edenhaus] - [#125726]) +- Upgrade iottycloud to 0.2.1 ([@shapournemati-iotty] - [#125731]) +- Add EntityDescription classes to pylint plugin ([@epenet] - [#125596]) +- Add common apis to base entity class of LG ThinQ integration ([@LG-ThinQ-Integration] - [#125713]) +- Bump aiostreammagic to 2.2.3 ([@noahhusby] - [#125704]) +- Add server side events to Smlight integration ([@tl-sl] - [#125553]) +- Allow to play a LinkPlay preset ([@silamon] - [#125204]) +- Take a list of values for testing Threshold ([@agoode] - [#125705]) +- Add ADS valve integration ([@mrpasztoradam] - [#125619]) +- Improve test code coverage for enphase_envoy ([@catsmanac] - [#125582]) +- Duke Energy Integration ([@hunterjm] - [#125489]) +- Add storage settings for enphase_envoy batteries without enpower device ([@catsmanac] - [#125527]) +- Update worldclock component config_flow labels to match pre-defined format output ([@yyolk] - [#125707]) +- Simplify imports in remote_rpi_gpio ([@epenet] - [#125745]) +- Use HassKey in trace ([@epenet] - [#125751]) +- Add flexibility to HassEnforceClassModule ([@epenet] - [#125739]) +- Simplify imports in mysensors ([@epenet] - [#125746]) +- Add TRIGGERcmd integration ([@rvmey] - [#121268]) +- Use HassKey in ads ([@epenet] - [#125735]) +- Move shared constant in ios ([@epenet] - [#125748]) +- Simplify imports in pilight ([@epenet] - [#125747]) +- Move shared constant in zabbix ([@epenet] - [#125744]) +- Add seek, shuffle, and repeat controls to Cambridge Audio ([@noahhusby] - [#125758]) +- Remove deprecated attributes from ping binary sensor ([@jpbede] - [#125760]) +- Remove commented out code from weatherflow cloud ([@joostlek] - [#125759]) +- Remove deprecated `ring.update` action ([@jpbede] - [#125762]) +- Add Monarch Money Integration ([@jeeftor] - [#124014]) +- Simplify imports in mqtt ([@epenet] - [#125749]) +- Move overkiz cover definitions ([@epenet] - [#125757]) +- Move overkiz water heater definitions ([@epenet] - [#125756]) +- Move overkiz climate definitions ([@epenet] - [#125741]) +- Add TotalConnect option to require alarm code ([@austinmroczek] - [#122270]) +- Small improvements to linkplay from reviews ([@silamon] - [#125766]) +- Implement time triggers with offset for timestamp sensors ([@tsvi] - [#120858]) +- Reload enphase_envoy integration upon envoy firmware change detection ([@catsmanac] - [#124650]) +- Add test snapshots to ring switch and siren platforms ([@sdb9696] - [#125771]) +- Allow attaching additional data to schedule helper blocks ([@Klikini] - [#116585]) +- Bump jaraco.abode to 6.2.0 ([@joostlek] - [#125512]) +- Add media player test to Cambridge Audio ([@noahhusby] - [#125780]) +- Bump pyblu to 1.0.2 ([@LouisChrist] - [#125784]) +- Remove call to removed function in bluesound integration ([@LouisChrist] - [#125779]) +- Refactoring flipr integration to prepare Hub device addition ([@cnico] - [#125262]) +- Bump aiostreammagic to 2.2.5 ([@noahhusby] - [#125792]) +- Add binary_sensor platform to LG ThinQ integration ([@LG-ThinQ-Integration] - [#125664]) +- Fix audio format for VoIP ([@synesthesiam] - [#125785]) +- Move growatt_server sensor definitions ([@epenet] - [#125755]) +- Move sunweg sensor definitions ([@epenet] - [#125754]) +- Disable ESPHome assist_in_progress binary sensor ([@emontnemery] - [#125802]) +- Add support for cover tilt for Shelly 2PM Gen3 ([@bieniu] - [#125717]) +- Validate target temp features in Climate Entity ([@gjohansson-ST] - [#125180]) +- Accept more than 1 state for numeric entities in Bayesian ([@HarvsG] - [#119281]) +- Finish cleanup of deprecated ring update service ([@sdb9696] - [#125810]) +- Remove manufacturer name from Wake on LAN device_info ([@mvdwetering] - [#123836]) +- Use root import for media_player and media_source in tests ([@epenet] - [#125829]) +- Improve type hints in ads ([@epenet] - [#125825]) +- Use root import for media_player and media_source ([@epenet] - [#125828]) +- Add entity available attribute to Cambridge Audio ([@noahhusby] - [#125831]) +- Use root import for device_automation ([@epenet] - [#125836]) +- Use root import for websocket_api ([@epenet] - [#125834]) +- Remove deprecated YAML import from rova ([@jpbede] - [#125849]) +- Disable Wyoming assist_in_progress binary sensor ([@emontnemery] - [#125806]) +- Disable voip call_in_progress binary sensor ([@emontnemery] - [#125812]) +- Use root import for async_redact_data in diagnostics ([@epenet] - [#125821]) +- Improve logging message for validation in climate ([@gjohansson-ST] - [#125837]) +- Use root import in components ([@epenet] - [#125858]) +- Fix incorrect import in androidtv tests ([@epenet] - [#125860]) +- Use root import in tests ([@epenet] - [#125862]) +- Fix failing nextdns coordinator test ([@jpbede] - [#125859]) +- Move ADS supported types to a StrEnum ([@epenet] - [#125824]) +- Fix incorrect import in lcn tests ([@epenet] - [#125877]) +- Add codeowner to ADS integration. ([@mrpasztoradam] - [#125893]) +- Use start/stop level change to open/close Z-Wave JS Window Covering CC covers ([@AlCalzone] - [#125827]) +- Expose component constants for llm helper ([@epenet] - [#125891]) +- Bump autarco lib to v3.0.0 ([@klaasnicolaas] - [#125867]) +- Bump aiotankerkoenig to 0.4.2 ([@jpbede] - [#125855]) +- Remove deprecated YAML import from seventeentrack ([@jpbede] - [#125852]) +- Bump pydiscovergy to 3.0.2 ([@jpbede] - [#125853]) +- Add reauth flow to Nice G.O. ([@IceBotYT] - [#125516]) +- Bump zwave-js-server-python to 0.58.0 ([@MartinHjelmare] - [#125666]) +- Bump aiogithubapi from 23.11.0 to 24.6.0 ([@ludeeus] - [#125819]) +- Add info based sensors to Smlight integration ([@tl-sl] - [#125482]) +- Add platform sensor to BSBLAN integration ([@liudger] - [#125474]) +- Add select platform to ADS integration ([@mrpasztoradam] - [#125892]) +- Add switch platform to Tesla Fleet ([@Bre77] - [#125798]) +- Add on_key to ONE_TOUCH_FILTER property in LG ThinQ integration ([@LG-ThinQ-Integration] - [#125797]) +- Migrate ring siren and switch platforms to entity descriptions ([@sdb9696] - [#125775]) +- Add Cover platform to Iotty ([@shapournemati-iotty] - [#125422]) +- Add button platform to the Lektrico integration ([@Lektrico] - [#125897]) +- Automatically add and remove Schlage devices ([@dknowles2] - [#125520]) +- Add tests to the media_player platform of the Squeezebox integration ([@rajlaud] - [#125378]) +- Migrate ring cam siren from switch to siren platform ([@sdb9696] - [#125761]) +- Improve config flow type hints in wolflink ([@epenet] - [#125313]) +- Bump aiostreammagic to 2.3.0 ([@noahhusby] - [#125903]) +- Add RestoreEntity to template alarm_control_panel ([@gjohansson-ST] - [#125844]) +- Add logs on disconnect/reconnect for Cambridge Audio ([@noahhusby] - [#125904]) +- Improve integration tests for Cambridge Audio ([@noahhusby] - [#125906]) +- Add Home Connect sensors for fridge door states and alarms ([@beastie29a] - [#125490]) +- Add diagnostics platform to Cambridge Audio ([@noahhusby] - [#125910]) +- Bump aioesphomeapi and adjust handle_stop ([@synesthesiam] - [#125907]) +- Add config flow to template alarm_control_panel ([@gjohansson-ST] - [#125861]) +- Remove own defined SOURCE_USER from sensoterra tests ([@gjohansson-ST] - [#125919]) +- Handle announcement finished for ESPHome TTS response ([@synesthesiam] - [#125625]) +- Add helper functions for repair tests ([@epenet] - [#125886]) +- Fix Assist Satellite making up conversation IDs ([@balloob] - [#125933]) +- Bump Weheat to 2024.09.10 ([@jesperraemaekers] - [#125936]) +- Bump pysmlight to 0.0.16 ([@tl-sl] - [#125935]) +- Make acknowledge requests from LCN modules optional ([@alengwenus] - [#125765]) +- Use debug instead of info log level in linode ([@jpbede] - [#125941]) +- Use debug instead of info log level in google_maps ([@jpbede] - [#125942]) +- Use warning instead of info log level in roborock ([@jpbede] - [#125940]) +- Add Smlight integration to strict-typing ([@tl-sl] - [#125946]) +- Additional sensor for Weheat integration ([@jesperraemaekers] - [#125524]) +- Use debug instead of info log level in components [a] ([@jpbede] - [#125944]) +- Bump solarlog_cli to 0.3.0 ([@dontinelli] - [#125951]) +- Use debug instead of info log level in components [c] ([@jpbede] - [#125955]) +- Use debug/warning instead of info log level in components [b] ([@jpbede] - [#125954]) +- Add k10+ vacuum in switchbot cloud integration ([@Gigatrappeur] - [#125457]) +- Update aioairzone to v0.9.3 ([@Noltari] - [#125977]) +- Use debug/warning instead of info log level in components [e] ([@jpbede] - [#125970]) +- Use debug/warning instead of info log level in components [d] ([@jpbede] - [#125969]) +- Use Freezer for tests in TotalConnect ([@austinmroczek] - [#125960]) +- Use debug/warning instead of info log level in components [f] ([@jpbede] - [#125971]) +- Bump opower to 0.8.0 ([@tronikos] - [#125981]) +- Remember Reolink config flow input ([@starkillerOG] - [#125962]) +- Update pil util font height ([@Window-Hero] - [#123512]) +- Improve Shelly RPC entity naming ([@bieniu] - [#125415]) +- Bump ruff to 0.6.5 ([@autinerd] - [#125923]) +- Fix uv installing in user site packages ([@edenhaus] - [#125808]) +- Switch Reolink from hass.data to runtime_data ([@starkillerOG] - [#126002]) +- Bump plugwise to v1.4.0 ([@bouwew] - [#125998]) +- Add calendar to Husqvarna Automower ([@Thomas55555] - [#120775]) +- Added virtual integration for Arizona Public Service supported by opower ([@seferino-fernandez] - [#126014]) +- Implement Reolink reconfiguration flow ([@starkillerOG] - [#126004]) +- Bump github/codeql-action from 3.26.6 to 3.26.7 (@dependabot - [#126021]) +- Use root import in assist_satellite imports ([@epenet] - [#126025]) +- Validate set_humidity in ClimateEntity ([@gjohansson-ST] - [#125242]) +- Use sample bytes in ESPHome media format ([@synesthesiam] - [#126016]) +- Add platform Entity classes to pylint plugin ([@epenet] - [#125737]) +- Improve type hints in numato ([@epenet] - [#126022]) +- Add missing type hint in monarch_money ([@epenet] - [#126019]) +- Remove yaml import from downloader ([@gjohansson-ST] - [#125921]) +- Cleanup zwave_js fixture definitions ([@AlCalzone] - [#125896]) +- Ignore negative derivative when the input is total_increasing ([@Smankusors] - [#119141]) +- Implement battery state binary sensor in Plugwise ([@bouwew] - [#126020]) +- Use shorthand attributes in numato ([@epenet] - [#126023]) +- Move apple_tv base entity to separate module ([@epenet] - [#126029]) +- Move blebox base entity to separate module ([@epenet] - [#126027]) +- Force root import of references from other components ([@epenet] - [#125816]) +- Move and rename acmeda base entity to separate module ([@epenet] - [#126028]) +- Use debug/warning instead of info log level in components [g] ([@jpbede] - [#126032]) +- Use debug/warning instead of info log level in components [h] ([@jpbede] - [#126033]) +- Use Home Assistant aiohttp session for Reolink ([@starkillerOG] - [#125948]) +- Disable pylint ignore_missing_annotations in config flow ([@epenet] - [#125322]) +- Add reconnect logic and proper reporting to MotionMount integration ([@RJPoelstra] - [#125670]) +- Bump weatherflow cloud to 1.0.6 ([@jeeftor] - [#125966]) +- Bump aiostreammagic to 2.3.1 ([@noahhusby] - [#126017]) +- Add Reolink chime package ringtone ([@starkillerOG] - [#125786]) +- Add Bang & Olufsen media_player grouping ([@mj23000] - [#123020]) +- Improve TotalConnect translations ([@austinmroczek] - [#125978]) +- Add select platform to Tesla Fleet ([@Bre77] - [#125931]) +- Use debug instead of info log level in components [L] ([@jpbede] - [#126039]) +- Use debug/warning instead of info log level in components [k] ([@jpbede] - [#126038]) +- Use debug instead of info log level in components [j] ([@jpbede] - [#126037]) +- Use debug/warning instead of info log level in components [i] ([@jpbede] - [#126036]) +- Set Smlight integration to local_push class ([@tl-sl] - [#125983]) +- Exclude uv from wheels building ([@edenhaus] - [#126035]) +- Add number platform to Tesla Fleet ([@Bre77] - [#125985]) +- Add internet binary sensor to Smlight integration ([@tl-sl] - [#125982]) +- Add update platform for Smlight integration ([@tl-sl] - [#125943]) +- Add Matter tests for BatVoltage attribute from PowerSource cluster ([@lboue] - [#125645]) +- Move devolo home control base entity to separate module ([@epenet] - [#126042]) +- Move and rename crownstone base entity to separate module ([@epenet] - [#126034]) +- Add translation to communication exceptions in MotionMount ([@RJPoelstra] - [#126043]) +- Change wake word interception to a subscription ([@synesthesiam] - [#125629]) +- Bump pyiskra to 0.1.11 ([@iskrakranj] - [#126048]) +- Introduce Reolink base entity description ([@joostlek] - [#126050]) +- Move elkm1 base entity to separate module ([@epenet] - [#126052]) +- Move enocean base entity to separate module ([@epenet] - [#126053]) +- Move and rename envisalink base entity to separate module ([@epenet] - [#126054]) +- Move efergy base entity to separate module ([@epenet] - [#126051]) +- Move econet base entity to separate module ([@epenet] - [#126049]) +- Move and rename fibaro base entity to separate module ([@epenet] - [#126055]) +- Move freebox base entity to separate module ([@epenet] - [#126056]) +- Move hdmi_cec base entity to separate module ([@epenet] - [#126057]) +- Add new integration for WMS WebControl pro using local API ([@mback2k] - [#124176]) +- Add sensor platform to laundrify integration ([@xLarry] - [#121378]) +- Implement model_id's in Plugwise ([@bouwew] - [#126069]) +- Move and rename alert base entity to separate module ([@epenet] - [#126030]) +- Remove callback decorators in Cambridge Audio ([@noahhusby] - [#126082]) +- Add media player stop support to Cambridge Audio ([@noahhusby] - [#126066]) +- Add Assist satellite configuration ([@synesthesiam] - [#126063]) +- Add ESPHome Assist satellite configuration ([@synesthesiam] - [#126085]) +- Move knx base entity to separate module ([@epenet] - [#126102]) +- Adding reauth support to Weheat ([@jesperraemaekers] - [#126108]) +- Bump pysmlight to 0.1.0 ([@tl-sl] - [#126111]) +- Add number platform to the Lektrico integration ([@Lektrico] - [#126119]) +- Move nissan_leaf base entity to separate module ([@epenet] - [#126106]) +- Move mysensors base entity to separate module ([@epenet] - [#126105]) +- Move modbus base entity to separate module ([@epenet] - [#126104]) +- Move and rename lutron caseta base entity to separate module ([@epenet] - [#126103]) +- Move and rename ihc base entity to separate module ([@epenet] - [#126101]) +- Move iaqualink base entity to separate module ([@epenet] - [#126100]) +- Move insteon base entity to separate module ([@epenet] - [#126099]) +- Move huawei_lte base entity to separate module ([@epenet] - [#126098]) +- Allow setting volume on Ring devices ([@daniel-k] - [#125773]) +- Move and rename hlk_sw16 base entity to separate module ([@epenet] - [#126096]) +- Move hive base entity to separate module ([@epenet] - [#126095]) +- Move homematicip_cloud base entity to separate module ([@epenet] - [#126094]) +- Addition of Flipr hub with switch platform ([@cnico] - [#125866]) +- Add Home Connect light entity for cooling appliances ([@beastie29a] - [#126090]) +- Improve negative TTS test ([@emontnemery] - [#126126]) +- Add sync clock button for Husqvarna Automower ([@Thomas55555] - [#125689]) +- Move homeworks base entity to separate module ([@epenet] - [#126097]) +- Use debug/warning instead of info log level in components [m] ([@jpbede] - [#126074]) +- Move qwikswitch base entity to separate module ([@epenet] - [#126130]) +- Order train station names in Israel rail API ([@sh0oki] - [#126121]) +- Move roborock base entity to separate module ([@epenet] - [#126135]) +- Use debug/warning/error instead of info log level in components [n] ([@jpbede] - [#126137]) +- Use debug/warning instead of info log level in components [o] ([@jpbede] - [#126138]) +- Use debug/warning instead of info log level in components [p] ([@jpbede] - [#126139]) +- Use debug/warning instead of info log level in components [r] ([@jpbede] - [#126140]) +- Add diagnostics support for WMS WebControl pro ([@mback2k] - [#126077]) +- Use aiohasupervisor for addon info calls ([@mdegat01] - [#125926]) +- Cleanup unnecessary F401 ignores ([@epenet] - [#126188]) +- Move vesync base entity to separate module ([@epenet] - [#126187]) +- Move vera base entity to separate module ([@epenet] - [#126186]) +- Move velux base entity to separate module ([@epenet] - [#126185]) +- Move wirelesstag shared constants to separate module ([@epenet] - [#126192]) +- Move wilight base entity to separate module ([@epenet] - [#126193]) +- Move wiffi base entity to separate module ([@epenet] - [#126194]) +- Avoid constant re-export in fujitsu_fglair ([@epenet] - [#126190]) +- Move xiaomi_aqara base entity to separate module ([@epenet] - [#126197]) +- Move xiaomi_miio base entity to separate module ([@epenet] - [#126198]) +- Move zwave_me base entity to separate module ([@epenet] - [#126200]) +- Move xs1 base entity to separate module ([@epenet] - [#126199]) +- Rename tasmota base entity module ([@epenet] - [#126182]) +- Move tcp base entity to separate module ([@epenet] - [#126181]) +- Rename tuya base entity module ([@epenet] - [#126180]) +- Move tellstick shared constants to separate module ([@epenet] - [#126179]) +- Move soma base entity to separate module ([@epenet] - [#126177]) +- Move smartthings base entity to separate module ([@epenet] - [#126176]) +- Move slack base entity to separate module ([@epenet] - [#126175]) +- Move raincloud shared constants to separate module ([@epenet] - [#126174]) +- Move shared rflink constants to separate module ([@epenet] - [#126173]) +- Move and rename remember_the_milk base entity to separate module ([@epenet] - [#126171]) +- Use debug/warning instead of info log level in components [u] ([@jpbede] - [#126148]) +- Move wirelesstag base entity to separate module ([@epenet] - [#126203]) +- Move raincloud base entity to separate module ([@epenet] - [#126170]) +- Move upb base entity to separate module ([@epenet] - [#126184]) +- Move onvif base entity to separate module ([@epenet] - [#126128]) +- Remove default mastodon instance in config flow ([@andrew-codechimp] - [#126204]) +- Move tellstick base entity to separate module ([@epenet] - [#126205]) +- Prefer __all__ over F401 ignore ([@epenet] - [#126189]) +- Add VPN sensor and switch for Smlight integration ([@tl-sl] - [#126201]) +- Move rflink base entity to separate module ([@epenet] - [#126206]) +- Rename onewire base entity module ([@epenet] - [#126129]) +- Rename roomba base entity module ([@epenet] - [#126134]) +- Use debug/warning instead of info log level in components [t] ([@jpbede] - [#126147]) +- Move input current from diagnostic to regular sensor in NUT ([@tdfountain] - [#124183]) +- Fix device cleanup in plugwise ([@emontnemery] - [#126212]) +- Add ThirdReality Matter NightLight to transition exception list ([@marcelveldt] - [#126216]) +- Bump tesla-fleet-api to 0.7.8 ([@Bre77] - [#126164]) +- Remove LG Thinq ([@joostlek] - [#125900]) +- Fix Fujitsu fglair authentication error and other issues ([@crevetor] - [#125439]) +- Improve FlowManager.async_finish_flow docstring ([@emontnemery] - [#126178]) +- Add base Entity class to enforce-class-module pylint plugin ([@epenet] - [#126026]) +- Use debug/warning instead of info log level in components [w] ([@jpbede] - [#126231]) +- Use debug/warning instead of info log level in components [v] ([@jpbede] - [#126228]) +- Remove default transition in Matter light platform ([@marcelveldt] - [#126220]) +- Use debug/warning instead of info log level in components [s] ([@jpbede] - [#126141]) +- Use debug/warning/error instead of info log level in components [x] ([@jpbede] - [#126232]) +- Use debug instead of info log level in components [y] ([@jpbede] - [#126233]) +- Use debug/warning/error instead of info log level in components [z] ([@jpbede] - [#126234]) +- Set model id on Govee lights ([@joostlek] - [#126211]) +- Bump nextbus to 2.0.5 ([@ViViDboarder] - [#126230]) +- Addition of select platform for flipr hub ([@cnico] - [#126237]) +- Allow one reusable proxy URL per ESPHome device ([@synesthesiam] - [#125845]) +- Add validation to set_humidity action in humidifier ([@gjohansson-ST] - [#125863]) +- Pass default value in Z-Wave websocket handler for configuration values ([@marcelveldt] - [#125343]) +- Update repairs for Smlight integration to allow firmware updates where possible ([@tl-sl] - [#126113]) +- Update string formatting to use f-string on tests ([@albertomontesg] - [#125986]) +- Add counters to iskra integration ([@iskrakranj] - [#126046]) +- Revert "Fix missing id in Habitica completed todos API response" ([@tr4nt0r] - [#126142]) +- Add new method version_is_newer to Update platform ([@chemelli74] - [#124797]) +- Fix set temperature action in AVM FRITZ!SmartHome ([@mib1185] - [#126072]) +- Fix serial handling in ViCare integration ([@CFenner] - [#125495]) +- Add has_entity_name to entity display dict and fix name ([@piitaya] - [#125832]) +- Update string formatting to use f-string on components ([@albertomontesg] - [#125987]) +- Sort values in Platform enum ([@epenet] - [#126259]) +- Mark tag as entity component in pylint plugin ([@epenet] - [#126183]) +- Bump uv to 0.4.12 ([@edenhaus] - [#126257]) +- Use mock_config_flow helper in config_entries tests ([@emontnemery] - [#126251]) +- Update string formatting to use f-string on core codebase ([@albertomontesg] - [#125988]) +- Add aiohasupervisor to core requirements ([@mdegat01] - [#126225]) +- Make combined rmvtransport filters work ([@claui] - [#126255]) +- Bump reolink_aio to 0.9.9 ([@starkillerOG] - [#126267]) +- Bump ring-doorbell to 0.9.5 ([@sdb9696] - [#126264]) +- Rename mqtt mixins module to `entity.py` ([@jbouwh] - [#126279]) +- Cleanup unused protocol class for mqtt entity setup ([@jbouwh] - [#126276]) +- Update tooling configuration to enforce f-string formatting ([@albertomontesg] - [#125989]) +- Allow github requirements specs in hassfest for non-core integrations ([@mpw96] - [#124925]) +- Simplify imports in recorder ([@epenet] - [#126248]) +- Bump github/codeql-action from 3.26.7 to 3.26.8 (@dependabot - [#126302]) +- Make NextBus coordinator more resilient and efficient ([@ViViDboarder] - [#126161]) +- Add service to set the AC schedule of renault vehicles ([@vhkristof] - [#125006]) +- Bump pysmlight to 0.1.1 ([@tl-sl] - [#126301]) +- Add in-home chime switch to ring ([@sdb9696] - [#126305]) +- Improve readability in hass_imports pylint plugin ([@epenet] - [#126252]) +- Bump aiohasupervisor to 0.1.0b1 ([@mdegat01] - [#126282]) +- Add motion detection switch entity to ring ([@sdb9696] - [#126278]) +- Add additional mower to Husqvarna Autmower tests ([@Thomas55555] - [#126313]) +- Add support for native oauth2 in Point ([@fredrike] - [#118243]) +- Clean ondilo ico logging ([@MartinHjelmare] - [#126310]) +- Add device class for UPNP uptime sensor ([@tathamoddie] - [#126306]) +- Bump python-MotionMount to 2.2.0 ([@RJPoelstra] - [#126309]) +- Fix duplicate power sensors for Matter 1.3 powerplugs ([@marcelveldt] - [#126269]) +- Use HassKey in core components (a-c) ([@epenet] - [#126258]) +- Mark current position sensor for Matter switch as default disabled ([@marcelveldt] - [#126254]) +- Add broken link and missing device lists to insteon configuration panel ([@teharris1] - [#119715]) +- Enable all TID ruff rules ([@epenet] - [#126312]) +- Bump aioautomower to 2024.9.1 ([@Thomas55555] - [#126315]) +- Refactor smlight event_function to common function ([@tl-sl] - [#126260]) +- Add battery data to Autarco integration ([@klaasnicolaas] - [#125924]) +- Add login and rewrite access to extended data for solarlog ([@dontinelli] - [#126024]) +- Change assist satellite announce method signature ([@balloob] - [#126299]) +- Bump pyduotecno to 2024.9.0 ([@Cereal2nd] - [#126328]) +- Fix update platform for Shelly gen1 devices ([@chemelli74] - [#124798]) +- Add siren platform for tplink ([@rytilahti] - [#124934]) +- Make geniushub platforms a list ([@joostlek] - [#126320]) +- Add trace to core files ([@epenet] - [#126314]) +- Update pylint to 3.3.0 ([@cdce8p] - [#126330]) +- Bump ruff to 0.6.6 ([@autinerd] - [#126343]) +- Route non-TTS media through ESPHome ffmpeg proxy ([@synesthesiam] - [#126287]) +- Add YogevBokobza to switcher_kis codeowners ([@YogevBokobza] - [#126359]) +- Add Switcher Runner S11 support ([@YogevBokobza] - [#123578]) +- Improve lock handling in Yale Smart Living ([@gjohansson-ST] - [#124245]) +- Rename deconz base entity module ([@epenet] - [#126041]) +- Offboard myself as prusalink codeowner ([@Skaronator] - [#126361]) +- Get supervisor client in analytics only on systems with supervisor ([@mib1185] - [#126375]) +- Use HassKey in stt ([@epenet] - [#126335]) +- Use HassKey in sensor ([@epenet] - [#126336]) +- Use HassKey in device_tracker ([@epenet] - [#126339]) +- Bump aiovlc to 0.5.1 ([@mib1185] - [#126365]) +- Use HassKey in core components (d-z) ([@epenet] - [#126324]) +- Use HassKey in group ([@epenet] - [#126321]) +- Use HassKey in image ([@epenet] - [#126322]) +- Use HassKey in tts ([@epenet] - [#126327]) +- Use HassKey in weather ([@epenet] - [#126329]) +- Use HassKey in camera ([@epenet] - [#126331]) +- Use HassKey in notify ([@epenet] - [#126338]) +- Use HassKey in todo ([@epenet] - [#126325]) +- Correct / tidy up entity doc strings for evohome ([@zxdavb] - [#126380]) +- Fix tplink number platform to use intended BOX mode ([@sdb9696] - [#126397]) +- Update the Google Photos integration to limit scope to Home Assistant created content ([@allenporter] - [#126398]) +- Set connection and command timeout in VLC Telnet ([@mib1185] - [#126401]) +- Add issue asking users to disable ESPHome assist_in_progress sensor ([@emontnemery] - [#125805]) +- Rename some evohome constants for clarity / readability ([@zxdavb] - [#126394]) +- Bump uiprotect to 6.1.0 ([@bdraco] - [#126345]) +- Switch genexp to listcomp in async_progress_by_init_data_type ([@bdraco] - [#126405]) +- Disconnect telnet when `denonavr` media player entity is unloaded ([@ol-iver] - [#126406]) +- Fix insteon test ([@gjohansson-ST] - [#126404]) +- Bump reolink-aio to 0.9.10 ([@starkillerOG] - [#126387]) +- Remove superfluous type hints from evohome ([@zxdavb] - [#126383]) +- Add media player to Tesla Fleet ([@Bre77] - [#126416]) +- Use HassKey in light ([@epenet] - [#126333]) +- Remove invalid callback decorator from Bang & Olfusen coroutine functions ([@mj23000] - [#126420]) +- Add cover platform to Tesla Fleet ([@Bre77] - [#126411]) +- Add Reolink Home Hub ringtone control ([@starkillerOG] - [#126390]) +- Add Reolink hub status light ([@starkillerOG] - [#126388]) +- Parse AirNow observation timezone correctly ([@kamiyo] - [#122006]) +- Bump nice-go to 0.3.9 ([@IceBotYT] - [#126399]) +- Correct a docstring typo for evohome ([@zxdavb] - [#126426]) +- Add Reolink CPU usage sensor ([@starkillerOG] - [#126386]) +- Add Reolink hub volume number entities ([@starkillerOG] - [#126389]) +- Prevent leading and trailing spaces in translation values ([@epenet] - [#126427]) +- Add mm/s and in/s As Unit Of Speed ([@TrevorSchirmer] - [#125044]) +- Improve plugwise device cleanup ([@bouwew] - [#126419]) +- Add diagnostics platform to Smlight ([@tl-sl] - [#126423]) +- Automatic device cleanup for Husqvarna Automower ([@Thomas55555] - [#126384]) +- Bump pysqueezebox version to 0.9.2 ([@rajlaud] - [#126347]) +- Add switch to Yale Smart Living ([@gjohansson-ST] - [#126366]) +- Bump wolf-comm to 0.0.10 ([@alexdev03] - [#126342]) +- Fix error in squeezebox media browser album art ([@rajlaud] - [#126346]) +- Add new values for sensor for Lektrico integration ([@Lektrico] - [#126210]) +- Bump google-photos-library-api to 0.11.1 ([@allenporter] - [#126430]) +- Rename an evohome test fixture ([@zxdavb] - [#126425]) +- Add connection test feature to assist_satellite ([@emontnemery] - [#126256]) +- Automatically remove unregistered TP-Link Omada devices at start up ([@MarkGodwin] - [#124153]) +- Fix error if light status is missing in Nice G.O. ([@IceBotYT] - [#126432]) +- Use HassKey in conversation ([@epenet] - [#126332]) +- Bump google-photos-library-api to 0.12.0 ([@allenporter] - [#126433]) +- Enforce a Google Photos upload action file size limit ([@allenporter] - [#126437]) +- Prevent callback decorator on coroutine functions ([@epenet] - [#126429]) +- OpenAI to not speak out whole errors ([@balloob] - [#126409]) +- Use identity check for zeroconf enum compare ([@bdraco] - [#126444]) +- Move atag base entity to separate module ([@epenet] - [#126475]) +- Move airvisual base entity to separate module ([@epenet] - [#126474]) +- Bump Weheat to 2024.09.23 ([@jesperraemaekers] - [#126471]) +- Move cert_expiry base entity to separate module ([@epenet] - [#126478]) +- Move control4 base entity to separate module ([@epenet] - [#126477]) +- Move deluge base entity to separate module ([@epenet] - [#126479]) +- Move evil_genius_labs base entity to separate module ([@epenet] - [#126480]) +- Move elmax base entity to separate module ([@epenet] - [#126481]) +- Move gogogate2 base entity to separate module ([@epenet] - [#126485]) +- Add router reconnect button for Smlight integration ([@tl-sl] - [#126408]) +- Move iqvia base entity to separate module ([@epenet] - [#126489]) +- Fix Matter Model ID for bridged devices ([@marcelveldt] - [#126059]) +- Move nuki base entity to separate module ([@epenet] - [#126500]) +- Move nibe_heatpump base entity to separate module ([@epenet] - [#126498]) +- Move radarr base entity to separate module ([@epenet] - [#126514]) +- Move rainmachine base entity to separate module ([@epenet] - [#126513]) +- Move purpleair base entity to separate module ([@epenet] - [#126511]) +- Move pi_hole base entity to separate module ([@epenet] - [#126509]) +- Move ovo_energy base entity to separate module ([@epenet] - [#126507]) +- Move openuv base entity to separate module ([@epenet] - [#126506]) +- Move omnilogic base entity to separate module ([@epenet] - [#126505]) +- Move nzbget base entity to separate module ([@epenet] - [#126502]) +- Move notion base entity to separate module ([@epenet] - [#126499]) +- Bump `pysnmp` and `brother` ([@bieniu] - [#126488]) +- Move modern_forms base entity to separate module ([@epenet] - [#126497]) +- Move lyric base entity to separate module ([@epenet] - [#126493]) +- Move lidarr base entity to separate module ([@epenet] - [#126492]) +- Move motioneye base entity to separate module ([@epenet] - [#126495]) +- Rename melnor base entity module ([@epenet] - [#126496]) +- Move guardian base entity to separate module ([@epenet] - [#126486]) +- Speedup Reolink tests by using scope="module" ([@starkillerOG] - [#125215]) +- Move fritzbox base entity to separate module ([@epenet] - [#126482]) +- Add additional test cases to Threshold ([@agoode] - [#126469]) +- Add lock platform to Tesla Fleet ([@Bre77] - [#126412]) +- Prevent trailing line feeds in translation values ([@epenet] - [#126446]) +- Move gardena_bluetooth base entity to separate module ([@epenet] - [#126484]) +- Move prusalink base entity to separate module ([@epenet] - [#126510]) +- Code quality improvements at Home Connect ([@Diegorro98] - [#126323]) +- Move rfxtrx base entity to separate module ([@epenet] - [#126521]) +- Add button platform to Tesla Fleet ([@Bre77] - [#126410]) +- Bump pyiskra to 0.1.14 ([@iskrakranj] - [#126518]) +- Move sia base entity to separate module ([@epenet] - [#126524]) +- Rename toon base entity module ([@epenet] - [#126525]) +- Move tailscale base entity to separate module ([@epenet] - [#126527]) +- Move tesla_wall_connector base entity to separate module ([@epenet] - [#126529]) +- Rename tradfri base entity module ([@epenet] - [#126526]) +- Move tolo base entity to separate module ([@epenet] - [#126530]) +- Remove unused i386 code in Dockerfile ([@edenhaus] - [#126520]) +- Move tautulli base entity to separate module ([@epenet] - [#126528]) +- Use Bravia TV MAC address in `DeviceInfo.connections` ([@bieniu] - [#126519]) +- Fix Shelly update entity names ([@bieniu] - [#126512]) +- Fix a couple of stale ESPHome docstrings ([@emontnemery] - [#126508]) +- Move tomorrowio base entity to separate module ([@epenet] - [#126531]) +- Change valve state to an enum ([@gjohansson-ST] - [#126428]) +- Move simplisafe base entity to separate module ([@epenet] - [#126523]) +- Remove uneeded isoformat calls in registry as_storage_fragment properties ([@bdraco] - [#126440]) +- Merge unifiprotect entity and models modules ([@epenet] - [#126532]) +- Fix Auto mode for TCC devices like the Lyric Round ([@nprez83] - [#126091]) +- Fix image content-type validation case sensitivity ([@npike] - [#125236]) +- Add config to ZHA to allow disabling polling of mains powered devices when the network is started ([@dmulcahey] - [#125473]) +- Rename dynalite base entity module ([@epenet] - [#126536]) +- Move upcloud base entity to separate module ([@epenet] - [#126533]) +- Rename pilight base entity module ([@epenet] - [#126538]) +- Rename xbox base entity module ([@epenet] - [#126540]) +- Move vallox base entity to separate module ([@epenet] - [#126541]) +- Move venstar base entity to separate module ([@epenet] - [#126542]) +- Move volvooncall base entity to separate module ([@epenet] - [#126543]) +- Move yamaha_musiccast base entity to separate module ([@epenet] - [#126544]) +- Move tolo coordinator to separate module ([@epenet] - [#126550]) +- Move yamaha_musiccast coordinator to separate module ([@epenet] - [#126546]) +- Move volvooncall coordinator to separate module ([@epenet] - [#126548]) +- Move ukraine_alarm coordinator to separate module ([@epenet] - [#126549]) +- Move point base entity to separate module ([@epenet] - [#126551]) +- Reinitialize zeroconf discovery flow on unignore ([@emontnemery] - [#125753]) +- Bump intents to 2024.9.23 ([@synesthesiam] - [#126553]) +- Add Model and Manufacturer details for Squeezebox devices ([@peteS-UK] - [#126435]) +- Change lawn_mower state to an enum ([@gjohansson-ST] - [#126458]) +- Add NYT Games integration ([@joostlek] - [#126449]) +- Add more Wordle sensors ([@joostlek] - [#126561]) +- Remove trekky12 from pilight codeowners ([@Trekky12] - [#126559]) +- Remove deprecated forecast key from template weather ([@gjohansson-ST] - [#126132]) +- Use Xiaomi Aqara gateway MAC address in `DeviceInfo.connections` ([@bieniu] - [#126562]) +- Remove deprecated YAML import from traccar ([@jpbede] - [#125763]) +- Bump nyt_games to 0.4.0 ([@joostlek] - [#126564]) +- Add entity components to hass-enforce-class-module pylint plugin ([@epenet] - [#126545]) +- Fix point calls config entry to a platform multiple times ([@fredrike] - [#126535]) +- Add derived Entity classes in hass-enforce-class-module pylint plugin ([@epenet] - [#126494]) +- Index config entry discovery_keys by discovery domain ([@emontnemery] - [#126563]) +- Bump cached-ipaddress to 0.6.0 ([@bdraco] - [#126571]) +- Bump yarl to 1.12.0 ([@bdraco] - [#126576]) +- Bump yarl to 1.12.1 ([@bdraco] - [#126580]) +- Get updated Assist satellite config after setting it in ESPHome ([@synesthesiam] - [#126552]) +- Reduce scope of JSON/XML test fixtures ([@emontnemery] - [#126590]) +- Fix ecobee test helper ([@emontnemery] - [#126587]) +- Remove unnecessary unique_id suffix from Google Cloud entities ([@tronikos] - [#126585]) +- Fix truncating password issue ([@SteveEasley] - [#126581]) +- Fix zeroconf rediscovery test ([@emontnemery] - [#126593]) +- Set autouse flag on session scope bluetooth fixture ([@emontnemery] - [#126589]) +- Simplify signal_discovered_config_entry_removed job ([@emontnemery] - [#126591]) +- Update xknx to 3.2.0 ([@farmio] - [#126569]) +- Bump aiohttp to 3.10.6rc2 ([@bdraco] - [#126468]) +- Add base Entity classes to enforce-class-module pylint plugin ([@epenet] - [#126473]) +- Cleanup source_type type hints in device tracker components ([@epenet] - [#126592]) +- Change dhcp internal index to use mac address ([@bdraco] - [#126573]) +- Make tts options of type list (such as profiles in google_cloud) work ([@tronikos] - [#121582]) +- Add energy history coordinator and sensors to Teslemetry ([@Bre77] - [#126166]) +- Add snapshots to all ring platform tests ([@sdb9696] - [#126560]) +- Bump deprecation of ESPHome assist in progress binary sensor ([@emontnemery] - [#126604]) +- Add issue asking users to disable VoIP call_in_progress binary sensor ([@emontnemery] - [#126504]) +- Prevent KeyError in Matter select entity ([@marcelveldt] - [#126605]) +- Add select platform to the Lektrico integration ([@Lektrico] - [#126490]) +- Change camera state to an enum ([@gjohansson-ST] - [#126558]) +- Adjust _ENTITY_COMPONENTS in hass-enforce-class-module ([@epenet] - [#126603]) +- Change lock state to an enum ([@gjohansson-ST] - [#126379]) +- Start deprecation for media_player constants ([@gjohansson-ST] - [#126351]) +- Start deprecation vacuum constants for feature flags ([@gjohansson-ST] - [#126354]) +- Fix lamarzocco ParamSpec typing ([@cdce8p] - [#126616]) +- Reinitialize zeroconf discovery flow on config entry removal ([@emontnemery] - [#126595]) +- Make NYT Games a service ([@joostlek] - [#126613]) +- Update pre-commit to 3.8.0 ([@cdce8p] - [#126617]) +- Update coverage to 7.6.1 ([@cdce8p] - [#126615]) +- Make Matter select entity values translatable ([@joostlek] - [#126608]) +- Bump version of recorder context ID data migrators ([@emontnemery] - [#125293]) +- Update pipdeptree to 2.23.4 ([@cdce8p] - [#126619]) +- Update pytest-asyncio to 0.24.0 ([@cdce8p] - [#126621]) +- Update pytest to 8.3.3 ([@cdce8p] - [#126623]) +- Update syrupy to 4.7.1 ([@cdce8p] - [#126625]) +- Update pylint to 3.3.1 ([@cdce8p] - [#126614]) +- Reinitialize bluetooth discovery flow on config entry removal ([@emontnemery] - [#126555]) +- Reinitialize dhcp discovery flow on config entry removal ([@emontnemery] - [#126556]) +- Remove unnecessary lambda in Matter ([@joostlek] - [#126633]) +- Fix tesla_fleet climate temp high/low test ([@gjohansson-ST] - [#126631]) +- Update tqdm to 4.66.5 ([@cdce8p] - [#126626]) +- Update pip-licenses to 5.0.0 ([@cdce8p] - [#126620]) +- Update uv to 0.4.15 ([@cdce8p] - [#126627]) +- Update cryptography to 43.0.1 ([@cdce8p] - [#126628]) +- Update bcrypt to 4.2.0 ([@cdce8p] - [#126629]) +- Fix motionblinds_ble sensor tests ([@LennP] - [#126635]) +- Use icon translations in Matter ([@joostlek] - [#126634]) +- Add shorthand attributes to device_tracker entities ([@epenet] - [#126599]) +- Map unknown air quality to None in Matter ([@joostlek] - [#126639]) +- Bump Python Matter Server to 6.5.2 ([@marcelveldt] - [#126636]) +- Raise issue if SSL is set but no external URL configured ([@joostlek] - [#121768]) +- Replace more addon management with aiohasupervisor ([@mdegat01] - [#126236]) +- Climate check target min lower than target high ([@gjohansson-ST] - [#124488]) +- Update types packages ([@cdce8p] - [#126632]) +- Add EveCluster ValvePosition Attribute ([@lboue] - [#125809]) +- Update Google Photos to have a DataUpdateCoordinator for loading albums ([@allenporter] - [#126443]) +- Update httpx to 0.27.2 ([@cdce8p] - [#126630]) +- Remove unignore flow from dlna_dmr ([@emontnemery] - [#126647]) +- Remove unignore flow from homekit controller ([@emontnemery] - [#126637]) +- Limit Google Photos media source to Home Assistant created albums ([@allenporter] - [#126653]) +- Require Google Photos uploads to target an album ([@allenporter] - [#126651]) +- Remove unused string in dlna_dmr ([@epenet] - [#126652]) +- Reinitialize ssdp discovery flow on unignore ([@emontnemery] - [#126557]) +- Update pyoverkiz to 1.14.1 ([@cdce8p] - [#126657]) +- Add Pressure and Altitude discovery schemas for Matter Eve Weather device ([@lboue] - [#125690]) +- Plugwise test maintenance ([@bouwew] - [#126421]) +- Bump aioautomower to 2024.9.2 ([@Thomas55555] - [#126659]) +- Ensure that HomeKit names start and end with alphanumeric character ([@indrajitr] - [#126413]) +- Bump bring-api to 0.9.0 ([@tr4nt0r] - [#126650]) +- Update numpy to 1.26.4 ([@cdce8p] - [#126660]) +- Add discovery schemas for Matter Smoke and CO Alarm Cluster ([@marcelveldt] - [#126622]) +- Only raise missing integration issue for config entry integrations ([@joostlek] - [#126654]) +- Simplify cleanup in Husqvarna Automower ([@Thomas55555] - [#126666]) +- Add work area switch for Husqvarna Automower ([@Thomas55555] - [#126376]) +- Use vol.Coerce for SourceType in mqtt device_tracker ([@epenet] - [#126594]) +- Extend the lists of Matter climate devices that need special treatment ([@marcelveldt] - [#126644]) +- Prevent KeyError when Matter device has invalid value for ModeSelect ([@marcelveldt] - [#126672]) +- Update RestrictedPython to 7.2 ([@cdce8p] - [#126662]) +- Adjust automation to plural triggers/conditions/actions keys ([@frenck] - [#123823]) +- Set default source_type on TrackerEntity and ScannerEntity ([@epenet] - [#126648]) +- Rename an evohome test fixture ([@zxdavb] - [#126680]) +- Bump aiorussound to 3.1.5 ([@noahhusby] - [#126664]) +- Fix pipeline restart in VoIP ([@synesthesiam] - [#126668]) +- Add support for OperationalState Attribute from Matter OperationalState cluster ([@lboue] - [#125627]) +- Add SSL Cipher option to aiohttp async_get_clientsession ([@starkillerOG] - [#126317]) +- Add fan support for KNX climate entities ([@somdoron] - [#126368]) +- Use insecure SSL cipher for Reolink aiohttp clientsession ([@starkillerOG] - [#126687]) +- Add button platform to Matter integration ([@jvmahon] - [#123665]) +- Update strings in tailscale ([@civita] - [#124143]) +- Add coordinator to Spotify ([@joostlek] - [#123548]) +- Improve typing in Yamaha ([@joostlek] - [#123982]) +- Add diagnostics to Workday ([@gjohansson-ST] - [#126691]) +- Bump aiohttp to 3.10.6 ([@bdraco] - [#126690]) +- Improve Roborock error handling ([@allenporter] - [#124267]) +- Remove leftover wrong icon from Reolink ([@starkillerOG] - [#126698]) +- Add sensor platform to Bring integration ([@tr4nt0r] - [#126642]) +- Add tests which directly test the recorder job wrappers ([@emontnemery] - [#125338]) +- Add diagnostics platform to Bring integration ([@tr4nt0r] - [#126695]) +- Avoid raw string in device_tracker source_type ([@epenet] - [#126601]) +- Add Spelling Bee and connections support to NYT Games ([@joostlek] - [#126567]) +- Add Aqara brand ([@joostlek] - [#126658]) +- Bump google-generativeai to 0.8.2 ([@bdraco] - [#126696]) +- Update snapshot for Bring tests ([@tr4nt0r] - [#126699]) +- Add specific EntityDescription to describe device tracker entities ([@epenet] - [#126586]) +- Bump python-google-photos-library-api to 0.12.1 ([@allenporter] - [#126709]) +- Update Tuya integration with target distance ([@tal] - [#126700]) +- Remove redundant source_type property from TrackerEntities ([@epenet] - [#126717]) +- Remove redundant source_type property from ScannerEntities ([@epenet] - [#126716]) +- Update `denonavr` to `v1.0.0` ([@ol-iver] - [#126703]) +- Bump github/codeql-action from 3.26.8 to 3.26.9 (@dependabot - [#126715]) +- Bump zeroconf to 0.135.0 ([@bdraco] - [#126706]) +- Add Storm watch active to Tesla integrations ([@Bre77] - [#126704]) +- Fix pytest-asyncio DeprecationWarning ([@cdce8p] - [#126718]) +- Add workaround to avoid blocking imports by dnspython ([@elmurato] - [#121702]) +- Move pylint decorator plugin and add tests ([@epenet] - [#126719]) +- Introduce snapshot testing to matter ([@joostlek] - [#126693]) +- Add an entity description for Google Calendar ([@allenporter] - [#125469]) +- Make statistics validation create issue registry issues ([@emontnemery] - [#122595]) +- Enable Zwave notification sensors by default ([@joostlek] - [#125326]) +- Add specific EntityDescription to describe calendar entities ([@epenet] - [#126726]) +- Use entity selector in Homekit bridge config flow ([@piitaya] - [#126340]) +- Don't crash entire Matter integration setup when one node is failing ([@marcelveldt] - [#126491]) +- Update isal to 1.7.1 ([@cdce8p] - [#126742]) +- Use 'select' instead of 'click' or 'press' when guiding users in flows ([@emontnemery] - [#126731]) +- Update lxml to 5.3.0 ([@cdce8p] - [#126725]) +- Change trigger platform key to trigger ([@joostlek] - [#124357]) +- Use shorthand attributes in tesla_fleet device tracker ([@epenet] - [#126736]) +- Make Matter snapshot logic a shared function ([@joostlek] - [#126744]) +- Use shorthand attributes in mysensors device tracker ([@epenet] - [#126738]) +- Add pylint checks for fixture scope ([@epenet] - [#126723]) +- Use snake case in matter fixture nodes ([@joostlek] - [#126743]) +- Update trigger validation message ([@joostlek] - [#126749]) +- Use bold to markup UI strings ([@c0ffeeca7] - [#126748]) +- Rename DOMAIN_DATA HassKey constants to DATA_COMPONENT ([@epenet] - [#126746]) +- Add sound modes to Bang & Olufsen devices ([@mj23000] - [#121209]) +- Fix license check for new aiocache ([@bdraco] - [#126753]) +- Improve trigger schema validation to ask for `trigger` instead of `platform` ([@joostlek] - [#126750]) +- Update frontend to 20240925.0 ([@bramkragten] - [#126763]) +- Update const.py to add new Australian Server URL ([@euandekock] - [#126714]) +- Remove unnecessary dict .keys() calls from Bang & Olufsen ([@mj23000] - [#126762]) +- Use shorthand attributes in locative device tracker ([@epenet] - [#126740]) +- Bump ZHA to 0.0.34 ([@puddly] - [#126766]) +- Add Valve platform to Matter integration ([@lboue] - [#123311]) +- Bump aioautomower to 2024.9.3 ([@Thomas55555] - [#126769]) +- Remove unignore flow ([@emontnemery] - [#126765]) +- Fix ESPHome and VoIP Assist satellite entity names ([@synesthesiam] - [#126229]) +- Deprecate tplink alarm button entities ([@sdb9696] - [#126349]) +- Change Climate set temp action for incorrect feature will raise ([@gjohansson-ST] - [#126692]) +- Remove Reolink Home Hub main level switches ([@starkillerOG] - [#126697]) +- Bump aiorussound to 4.0.5 ([@noahhusby] - [#126774]) +- Bump reolink-aio to 0.9.11 ([@starkillerOG] - [#126778]) +- Fix missing template alarm control panel menu string ([@MartinHjelmare] - [#126791]) +- Bump ring-doorbell to 0.9.6 ([@sdb9696] - [#126817]) +- Bump jaraco.abode to 6.2.1 ([@joostlek] - [#126823]) +- Fix typo in Mealie integration ([@tr4nt0r] - [#126824]) +- Bump knocki to 0.3.5 ([@joostlek] - [#126826]) +- Add logging to NYT Games setup failures ([@joostlek] - [#126832]) +- Bump nyt_games to 0.4.2 ([@joostlek] - [#126834]) +- Fix last played icon in NYT Games ([@joostlek] - [#126837]) +- Fix Withings reauth title ([@joostlek] - [#126838]) +- Bump aiohasupervisor to 0.1.0 ([@mdegat01] - [#126841]) +- Update frontend to 20240926.0 ([@bramkragten] - [#126843]) +- Update the Selected Pipeline entity name ([@balloob] - [#126845]) +- Update overkiz Atlantic Water Heater away mode switching ([@ALERTua] - [#121801]) +- Fix Abode integration needing to reauthenticate after core update ([@krx] - [#123035]) +- Monarch Money cashflow sensor bugfix ([@jeeftor] - [#125774]) +- Bump wolf-comm to 0.0.15 ([@mtielen] - [#126857]) +- Fix restoring state class in mobile app ([@joostlek] - [#126868]) +- Bump yarl to 1.13.0 ([@bdraco] - [#126872]) +- Fix getting the host for the current request ([@bdraco] - [#126882]) +- Mark custom panel integration as system type ([@frenck] - [#126883]) +- Add diagnostics platform to airgradient ([@joostlek] - [#126886]) +- Fix getting the current host for IPv6 urls ([@bdraco] - [#126889]) +- Use hass httpx client for ElevenLabs component ([@sorgfresser] - [#126793]) +- Bump python-linkplay to 0.0.12 ([@silamon] - [#126850]) +- Improve statistics issue title ([@emontnemery] - [#126851]) +- Add support for variant of Xiaomi Mi Air Purifier 3C (zhimi.airp.mb4a) ([@tr4nt0r] - [#126867]) +- Fix blocking call in Xiaomi Miio integration ([@tr4nt0r] - [#126871]) +- Revert "Add support for Xiaomi airpurifier and humidifier (#117791)" ([@tr4nt0r] - [#126873]) +- Update airgradient device sw_version when changed ([@joostlek] - [#126902]) +- Use icon translations in unifi ([@jrieger] - [#126903]) +- Do not unsubscribe mqtt integration discovery if entry is already configured ([@jbouwh] - [#126907]) +- Fix Tado unloading ([@joostlek] - [#126910]) +- Migrate Nexia unique id to str ([@joostlek] - [#126911]) +- Update `pytouchlinesl` to 0.1.6 ([@jnsgruk] - [#126912]) +- Bump pyotgw to 2.2.1 ([@mvn23] - [#126918]) +- Bump `pytouchlinesl` to `0.1.7` ([@jnsgruk] - [#126923]) +- Change Assist satellite state names ([@synesthesiam] - [#126926]) +- Adjust "Assist in progress" sensor in ESPHome ([@synesthesiam] - [#126928]) +- Squeezebox - bump pysqueezebox dependency to 0.9.3 to restore favorites support ([@rajlaud] - [#126929]) +- Update frontend to 20240927.0 ([@bramkragten] - [#126933]) +- Add missing icons to unifi ([@jrieger] - [#126934]) +- Bump nessclient to 1.1.2 ([@ozadr1an] - [#125604]) +- Bump python-kasa library to 0.7.4 ([@sdb9696] - [#126944]) +- Bump yarl to 1.13.1 ([@bdraco] - [#126962]) +- Bump aiohttp to 3.10.7 ([@bdraco] - [#126970]) +- Add unique id to mold_indicator ([@gjohansson-ST] - [#126990]) +- Workday raise issues only to next year ([@gjohansson-ST] - [#126997]) +- Exclude Text-to-Speech cache from backups ([@balloob] - [#127001]) +- Bump aiohttp to 3.10.8 ([@bdraco] - [#127009]) +- Don't log voice assistant config timeout error ([@synesthesiam] - [#127010]) +- Bump anyio to 4.6.0 ([@bdraco] - [#127013]) +- Allow `null` / `None` value for non numeric mqtt sensor without warnings ([@jbouwh] - [#127032]) +- Bump py-synologydsm-api to 2.5.3 ([@mib1185] - [#127035]) +- Update local_calendar/todo to avoid blocking in the event loop ([@allenporter] - [#127048]) +- Update ical to 8.2.0 ([@frenck] - [#126954]) +- Bump gcal_sync to 6.1.5 ([@allenporter] - [#127049]) +- Fix repair when integration does not exist ([@shaiu] - [#127050]) +- Fix timestamp isoformat in seventeentrack ([@shaiu] - [#127052]) +- Fix removing nulls when encoding events for PostgreSQL ([@bdraco] - [#127053]) +- Clarify excl/incl filter functionality for waze_travel_time ([@eifinger] - [#127056]) +- Bump pylitejet to 0.6.3 ([@joncar] - [#127063]) +- Add missing OUI to august ([@bdraco] - [#127064]) +- Fix Roomba help URL ([@LucaDiba] - [#127065]) +- Update xknxproject to 3.8.0 ([@farmio] - [#127072]) +- Check "status" is present before access during device update ([@drsgoodall] - [#127091]) +- Make Laundrify unique id a string ([@joostlek] - [#127092]) +- Bump yt-dlp to 2024.09.27 ([@joostlek] - [#127096]) +- Bump zwave-js-server-python to 0.58.1 ([@MartinHjelmare] - [#127114]) +- Update frontend to 20240930.0 ([@bramkragten] - [#127125]) +- Mark Reolink camera entities as unavailable when camera is offline ([@starkillerOG] - [#127127]) +- Update RestrictedPython to 7.3 ([@frenck] - [#127130]) +- Allow negative calibration factor in mold_indicator ([@gjohansson-ST] - [#127133]) +- Roborock fix "selected map" when first map in list is selected ([@N3rdix] - [#127126]) +- Add config flow validation that calibration factor is not zero ([@gjohansson-ST] - [#127136]) +- Allows unload when unsupported devices vesync ([@cdnninja] - [#127153]) +- Update assist_satellite connection test sound ([@emontnemery] - [#127183]) +- Fix Z-Wave rediscovery ([@MartinHjelmare] - [#127213]) +- Use reconfigure_confirm in vallox config flow ([@epenet] - [#127214]) +- Use reconfigure_confirm in solarlog config flow ([@epenet] - [#127215]) +- Fix reconfigure_confirm logic in madvr config flow ([@epenet] - [#127216]) +- Use reconfigure_confirm in lcn config flow ([@epenet] - [#127217]) +- Use reconfigure_confirm in google_travel_time config flow ([@epenet] - [#127220]) +- Fix Tailwind cover exception when door is already in the requested state ([@cayossarian] - [#124543]) +- Update prometheus-client to 0.21.0 ([@rcloran] - [#126965]) +- Update gotailwind to 0.2.4 ([@frenck] - [#127129]) +- Use reconfigure_confirm in homeworks config flow ([@epenet] - [#127218]) +- Use reconfigure_confirm in enphase_envoy config flow ([@epenet] - [#127221]) +- Use reconfigure_confirm in bryant_evolution config flow ([@epenet] - [#127222]) +- Don't create statistics issues when sensor is unavailable or unknown ([@emontnemery] - [#127226]) +- Update log error message for Samsung TV ([@epenet] - [#127231]) +- Fix Tibber get_prices when called with aware datetime ([@functionpointer] - [#123289]) +- Run unsubscribe callbacks when Assist satellite entity is removed from HA ([@synesthesiam] - [#127234]) +- Remove codefences from issue titles ([@rytilahti] - [#127254]) +- Revert "Support Z-Wave JS dimming lights using color intensity (#122639)" ([@MartinHjelmare] - [#127256]) +- Make recorder WS command recorder/update_statistics_metadata wait ([@emontnemery] - [#127179]) +- Update frontend to 20241002.0 ([@bramkragten] - [#127264]) +- Make recorder WS command recorder/clear_statistics wait ([@emontnemery] - [#127120]) +- Fix climate entity in ViCare integration ([@CFenner] - [#127128]) +- Update frontend to 20241002.1 ([@bramkragten] - [#127292]) +- Update frontend to 20241002.2 ([@bramkragten] - [#127331]) +- Bump pychromecast to 14.0.2 ([@emontnemery] - [#127333]) +- Bump intents to 2024.10.2 ([@synesthesiam] - [#127338]) + +## Release 2024.10.1 - October 4 + +- Fix device id support for alarm control panel template ([@piitaya] - [#127340]) +- Bump pysmlight 0.1.2 ([@tl-sl] - [#127376]) +- Remove assumption in ConfigEntryItems about unique unique_id ([@emontnemery] - [#127399]) +- Add missing number platform to init of Tesla Fleet ([@Bre77] - [#127406]) +- Bump aiomealie to 0.9.3 ([@andrew-codechimp] - [#127454]) +- Fix int value in unique_id for Tellduslive ([@robinostlund] - [#127526]) +- Bump matrix-nio to 0.25.2 ([@PaarthShah] - [#127535]) +- Adjust polling rate of Rituals Perfume Genie ([@frenck] - [#127544]) +- Create new clientsession for NYT Games ([@joostlek] - [#127547]) +- Strip the NYT Games token ([@joostlek] - [#127548]) +- Revert "Bump pychromecast to 14.0.2 (#127333)" ([@joostlek] - [#127555]) + +[#126782]: https://github.com/home-assistant/core/pull/126782 +[#127340]: https://github.com/home-assistant/core/pull/127340 +[#127376]: https://github.com/home-assistant/core/pull/127376 +[#127399]: https://github.com/home-assistant/core/pull/127399 +[#127406]: https://github.com/home-assistant/core/pull/127406 +[#127454]: https://github.com/home-assistant/core/pull/127454 +[#127526]: https://github.com/home-assistant/core/pull/127526 +[#127535]: https://github.com/home-assistant/core/pull/127535 +[#127544]: https://github.com/home-assistant/core/pull/127544 +[#127547]: https://github.com/home-assistant/core/pull/127547 +[#127548]: https://github.com/home-assistant/core/pull/127548 +[#127555]: https://github.com/home-assistant/core/pull/127555 +[@Bre77]: https://github.com/Bre77 +[@PaarthShah]: https://github.com/PaarthShah +[@andrew-codechimp]: https://github.com/andrew-codechimp +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@joostlek]: https://github.com/joostlek +[@piitaya]: https://github.com/piitaya +[@robinostlund]: https://github.com/robinostlund +[@tl-sl]: https://github.com/tl-sl + +[#102371]: https://github.com/home-assistant/core/pull/102371 +[#106570]: https://github.com/home-assistant/core/pull/106570 +[#112806]: https://github.com/home-assistant/core/pull/112806 +[#114204]: https://github.com/home-assistant/core/pull/114204 +[#116585]: https://github.com/home-assistant/core/pull/116585 +[#117252]: https://github.com/home-assistant/core/pull/117252 +[#117622]: https://github.com/home-assistant/core/pull/117622 +[#117698]: https://github.com/home-assistant/core/pull/117698 +[#118243]: https://github.com/home-assistant/core/pull/118243 +[#119141]: https://github.com/home-assistant/core/pull/119141 +[#119281]: https://github.com/home-assistant/core/pull/119281 +[#119642]: https://github.com/home-assistant/core/pull/119642 +[#119689]: https://github.com/home-assistant/core/pull/119689 +[#119715]: https://github.com/home-assistant/core/pull/119715 +[#119737]: https://github.com/home-assistant/core/pull/119737 +[#120225]: https://github.com/home-assistant/core/pull/120225 +[#120226]: https://github.com/home-assistant/core/pull/120226 +[#120281]: https://github.com/home-assistant/core/pull/120281 +[#120775]: https://github.com/home-assistant/core/pull/120775 +[#120854]: https://github.com/home-assistant/core/pull/120854 +[#120858]: https://github.com/home-assistant/core/pull/120858 +[#121132]: https://github.com/home-assistant/core/pull/121132 +[#121209]: https://github.com/home-assistant/core/pull/121209 +[#121268]: https://github.com/home-assistant/core/pull/121268 +[#121336]: https://github.com/home-assistant/core/pull/121336 +[#121378]: https://github.com/home-assistant/core/pull/121378 +[#121488]: https://github.com/home-assistant/core/pull/121488 +[#121502]: https://github.com/home-assistant/core/pull/121502 +[#121582]: https://github.com/home-assistant/core/pull/121582 +[#121630]: https://github.com/home-assistant/core/pull/121630 +[#121702]: https://github.com/home-assistant/core/pull/121702 +[#121768]: https://github.com/home-assistant/core/pull/121768 +[#121786]: https://github.com/home-assistant/core/pull/121786 +[#121801]: https://github.com/home-assistant/core/pull/121801 +[#121810]: https://github.com/home-assistant/core/pull/121810 +[#121899]: https://github.com/home-assistant/core/pull/121899 +[#122006]: https://github.com/home-assistant/core/pull/122006 +[#122039]: https://github.com/home-assistant/core/pull/122039 +[#122160]: https://github.com/home-assistant/core/pull/122160 +[#122190]: https://github.com/home-assistant/core/pull/122190 +[#122270]: https://github.com/home-assistant/core/pull/122270 +[#122375]: https://github.com/home-assistant/core/pull/122375 +[#122419]: https://github.com/home-assistant/core/pull/122419 +[#122473]: https://github.com/home-assistant/core/pull/122473 +[#122595]: https://github.com/home-assistant/core/pull/122595 +[#122600]: https://github.com/home-assistant/core/pull/122600 +[#122625]: https://github.com/home-assistant/core/pull/122625 +[#122639]: https://github.com/home-assistant/core/pull/122639 +[#122644]: https://github.com/home-assistant/core/pull/122644 +[#122677]: https://github.com/home-assistant/core/pull/122677 +[#122796]: https://github.com/home-assistant/core/pull/122796 +[#122820]: https://github.com/home-assistant/core/pull/122820 +[#122862]: https://github.com/home-assistant/core/pull/122862 +[#122881]: https://github.com/home-assistant/core/pull/122881 +[#123020]: https://github.com/home-assistant/core/pull/123020 +[#123035]: https://github.com/home-assistant/core/pull/123035 +[#123048]: https://github.com/home-assistant/core/pull/123048 +[#123057]: https://github.com/home-assistant/core/pull/123057 +[#123080]: https://github.com/home-assistant/core/pull/123080 +[#123129]: https://github.com/home-assistant/core/pull/123129 +[#123144]: https://github.com/home-assistant/core/pull/123144 +[#123154]: https://github.com/home-assistant/core/pull/123154 +[#123169]: https://github.com/home-assistant/core/pull/123169 +[#123188]: https://github.com/home-assistant/core/pull/123188 +[#123205]: https://github.com/home-assistant/core/pull/123205 +[#123239]: https://github.com/home-assistant/core/pull/123239 +[#123254]: https://github.com/home-assistant/core/pull/123254 +[#123265]: https://github.com/home-assistant/core/pull/123265 +[#123289]: https://github.com/home-assistant/core/pull/123289 +[#123306]: https://github.com/home-assistant/core/pull/123306 +[#123311]: https://github.com/home-assistant/core/pull/123311 +[#123432]: https://github.com/home-assistant/core/pull/123432 +[#123493]: https://github.com/home-assistant/core/pull/123493 +[#123512]: https://github.com/home-assistant/core/pull/123512 +[#123548]: https://github.com/home-assistant/core/pull/123548 +[#123578]: https://github.com/home-assistant/core/pull/123578 +[#123621]: https://github.com/home-assistant/core/pull/123621 +[#123633]: https://github.com/home-assistant/core/pull/123633 +[#123649]: https://github.com/home-assistant/core/pull/123649 +[#123665]: https://github.com/home-assistant/core/pull/123665 +[#123729]: https://github.com/home-assistant/core/pull/123729 +[#123821]: https://github.com/home-assistant/core/pull/123821 +[#123822]: https://github.com/home-assistant/core/pull/123822 +[#123823]: https://github.com/home-assistant/core/pull/123823 +[#123836]: https://github.com/home-assistant/core/pull/123836 +[#123857]: https://github.com/home-assistant/core/pull/123857 +[#123860]: https://github.com/home-assistant/core/pull/123860 +[#123982]: https://github.com/home-assistant/core/pull/123982 +[#124014]: https://github.com/home-assistant/core/pull/124014 +[#124050]: https://github.com/home-assistant/core/pull/124050 +[#124063]: https://github.com/home-assistant/core/pull/124063 +[#124109]: https://github.com/home-assistant/core/pull/124109 +[#124111]: https://github.com/home-assistant/core/pull/124111 +[#124143]: https://github.com/home-assistant/core/pull/124143 +[#124148]: https://github.com/home-assistant/core/pull/124148 +[#124153]: https://github.com/home-assistant/core/pull/124153 +[#124157]: https://github.com/home-assistant/core/pull/124157 +[#124176]: https://github.com/home-assistant/core/pull/124176 +[#124180]: https://github.com/home-assistant/core/pull/124180 +[#124183]: https://github.com/home-assistant/core/pull/124183 +[#124184]: https://github.com/home-assistant/core/pull/124184 +[#124188]: https://github.com/home-assistant/core/pull/124188 +[#124190]: https://github.com/home-assistant/core/pull/124190 +[#124235]: https://github.com/home-assistant/core/pull/124235 +[#124245]: https://github.com/home-assistant/core/pull/124245 +[#124267]: https://github.com/home-assistant/core/pull/124267 +[#124294]: https://github.com/home-assistant/core/pull/124294 +[#124298]: https://github.com/home-assistant/core/pull/124298 +[#124305]: https://github.com/home-assistant/core/pull/124305 +[#124319]: https://github.com/home-assistant/core/pull/124319 +[#124326]: https://github.com/home-assistant/core/pull/124326 +[#124337]: https://github.com/home-assistant/core/pull/124337 +[#124357]: https://github.com/home-assistant/core/pull/124357 +[#124380]: https://github.com/home-assistant/core/pull/124380 +[#124381]: https://github.com/home-assistant/core/pull/124381 +[#124382]: https://github.com/home-assistant/core/pull/124382 +[#124394]: https://github.com/home-assistant/core/pull/124394 +[#124408]: https://github.com/home-assistant/core/pull/124408 +[#124411]: https://github.com/home-assistant/core/pull/124411 +[#124418]: https://github.com/home-assistant/core/pull/124418 +[#124441]: https://github.com/home-assistant/core/pull/124441 +[#124466]: https://github.com/home-assistant/core/pull/124466 +[#124472]: https://github.com/home-assistant/core/pull/124472 +[#124473]: https://github.com/home-assistant/core/pull/124473 +[#124480]: https://github.com/home-assistant/core/pull/124480 +[#124482]: https://github.com/home-assistant/core/pull/124482 +[#124483]: https://github.com/home-assistant/core/pull/124483 +[#124488]: https://github.com/home-assistant/core/pull/124488 +[#124506]: https://github.com/home-assistant/core/pull/124506 +[#124511]: https://github.com/home-assistant/core/pull/124511 +[#124518]: https://github.com/home-assistant/core/pull/124518 +[#124521]: https://github.com/home-assistant/core/pull/124521 +[#124524]: https://github.com/home-assistant/core/pull/124524 +[#124531]: https://github.com/home-assistant/core/pull/124531 +[#124533]: https://github.com/home-assistant/core/pull/124533 +[#124543]: https://github.com/home-assistant/core/pull/124543 +[#124577]: https://github.com/home-assistant/core/pull/124577 +[#124578]: https://github.com/home-assistant/core/pull/124578 +[#124603]: https://github.com/home-assistant/core/pull/124603 +[#124612]: https://github.com/home-assistant/core/pull/124612 +[#124617]: https://github.com/home-assistant/core/pull/124617 +[#124643]: https://github.com/home-assistant/core/pull/124643 +[#124650]: https://github.com/home-assistant/core/pull/124650 +[#124657]: https://github.com/home-assistant/core/pull/124657 +[#124714]: https://github.com/home-assistant/core/pull/124714 +[#124732]: https://github.com/home-assistant/core/pull/124732 +[#124751]: https://github.com/home-assistant/core/pull/124751 +[#124781]: https://github.com/home-assistant/core/pull/124781 +[#124782]: https://github.com/home-assistant/core/pull/124782 +[#124797]: https://github.com/home-assistant/core/pull/124797 +[#124798]: https://github.com/home-assistant/core/pull/124798 +[#124808]: https://github.com/home-assistant/core/pull/124808 +[#124816]: https://github.com/home-assistant/core/pull/124816 +[#124824]: https://github.com/home-assistant/core/pull/124824 +[#124830]: https://github.com/home-assistant/core/pull/124830 +[#124835]: https://github.com/home-assistant/core/pull/124835 +[#124841]: https://github.com/home-assistant/core/pull/124841 +[#124842]: https://github.com/home-assistant/core/pull/124842 +[#124843]: https://github.com/home-assistant/core/pull/124843 +[#124844]: https://github.com/home-assistant/core/pull/124844 +[#124845]: https://github.com/home-assistant/core/pull/124845 +[#124846]: https://github.com/home-assistant/core/pull/124846 +[#124854]: https://github.com/home-assistant/core/pull/124854 +[#124856]: https://github.com/home-assistant/core/pull/124856 +[#124859]: https://github.com/home-assistant/core/pull/124859 +[#124861]: https://github.com/home-assistant/core/pull/124861 +[#124863]: https://github.com/home-assistant/core/pull/124863 +[#124867]: https://github.com/home-assistant/core/pull/124867 +[#124869]: https://github.com/home-assistant/core/pull/124869 +[#124879]: https://github.com/home-assistant/core/pull/124879 +[#124898]: https://github.com/home-assistant/core/pull/124898 +[#124899]: https://github.com/home-assistant/core/pull/124899 +[#124900]: https://github.com/home-assistant/core/pull/124900 +[#124901]: https://github.com/home-assistant/core/pull/124901 +[#124902]: https://github.com/home-assistant/core/pull/124902 +[#124904]: https://github.com/home-assistant/core/pull/124904 +[#124905]: https://github.com/home-assistant/core/pull/124905 +[#124906]: https://github.com/home-assistant/core/pull/124906 +[#124907]: https://github.com/home-assistant/core/pull/124907 +[#124909]: https://github.com/home-assistant/core/pull/124909 +[#124910]: https://github.com/home-assistant/core/pull/124910 +[#124914]: https://github.com/home-assistant/core/pull/124914 +[#124925]: https://github.com/home-assistant/core/pull/124925 +[#124926]: https://github.com/home-assistant/core/pull/124926 +[#124933]: https://github.com/home-assistant/core/pull/124933 +[#124934]: https://github.com/home-assistant/core/pull/124934 +[#124937]: https://github.com/home-assistant/core/pull/124937 +[#124938]: https://github.com/home-assistant/core/pull/124938 +[#124939]: https://github.com/home-assistant/core/pull/124939 +[#124940]: https://github.com/home-assistant/core/pull/124940 +[#124943]: https://github.com/home-assistant/core/pull/124943 +[#124946]: https://github.com/home-assistant/core/pull/124946 +[#124948]: https://github.com/home-assistant/core/pull/124948 +[#124956]: https://github.com/home-assistant/core/pull/124956 +[#124957]: https://github.com/home-assistant/core/pull/124957 +[#124958]: https://github.com/home-assistant/core/pull/124958 +[#124959]: https://github.com/home-assistant/core/pull/124959 +[#124963]: https://github.com/home-assistant/core/pull/124963 +[#124970]: https://github.com/home-assistant/core/pull/124970 +[#124977]: https://github.com/home-assistant/core/pull/124977 +[#124978]: https://github.com/home-assistant/core/pull/124978 +[#124985]: https://github.com/home-assistant/core/pull/124985 +[#124986]: https://github.com/home-assistant/core/pull/124986 +[#124992]: https://github.com/home-assistant/core/pull/124992 +[#125002]: https://github.com/home-assistant/core/pull/125002 +[#125006]: https://github.com/home-assistant/core/pull/125006 +[#125007]: https://github.com/home-assistant/core/pull/125007 +[#125013]: https://github.com/home-assistant/core/pull/125013 +[#125021]: https://github.com/home-assistant/core/pull/125021 +[#125024]: https://github.com/home-assistant/core/pull/125024 +[#125030]: https://github.com/home-assistant/core/pull/125030 +[#125037]: https://github.com/home-assistant/core/pull/125037 +[#125040]: https://github.com/home-assistant/core/pull/125040 +[#125041]: https://github.com/home-assistant/core/pull/125041 +[#125042]: https://github.com/home-assistant/core/pull/125042 +[#125044]: https://github.com/home-assistant/core/pull/125044 +[#125045]: https://github.com/home-assistant/core/pull/125045 +[#125046]: https://github.com/home-assistant/core/pull/125046 +[#125052]: https://github.com/home-assistant/core/pull/125052 +[#125054]: https://github.com/home-assistant/core/pull/125054 +[#125056]: https://github.com/home-assistant/core/pull/125056 +[#125062]: https://github.com/home-assistant/core/pull/125062 +[#125064]: https://github.com/home-assistant/core/pull/125064 +[#125067]: https://github.com/home-assistant/core/pull/125067 +[#125068]: https://github.com/home-assistant/core/pull/125068 +[#125072]: https://github.com/home-assistant/core/pull/125072 +[#125076]: https://github.com/home-assistant/core/pull/125076 +[#125079]: https://github.com/home-assistant/core/pull/125079 +[#125081]: https://github.com/home-assistant/core/pull/125081 +[#125083]: https://github.com/home-assistant/core/pull/125083 +[#125087]: https://github.com/home-assistant/core/pull/125087 +[#125090]: https://github.com/home-assistant/core/pull/125090 +[#125091]: https://github.com/home-assistant/core/pull/125091 +[#125094]: https://github.com/home-assistant/core/pull/125094 +[#125099]: https://github.com/home-assistant/core/pull/125099 +[#125100]: https://github.com/home-assistant/core/pull/125100 +[#125101]: https://github.com/home-assistant/core/pull/125101 +[#125103]: https://github.com/home-assistant/core/pull/125103 +[#125104]: https://github.com/home-assistant/core/pull/125104 +[#125106]: https://github.com/home-assistant/core/pull/125106 +[#125109]: https://github.com/home-assistant/core/pull/125109 +[#125110]: https://github.com/home-assistant/core/pull/125110 +[#125118]: https://github.com/home-assistant/core/pull/125118 +[#125120]: https://github.com/home-assistant/core/pull/125120 +[#125122]: https://github.com/home-assistant/core/pull/125122 +[#125126]: https://github.com/home-assistant/core/pull/125126 +[#125127]: https://github.com/home-assistant/core/pull/125127 +[#125131]: https://github.com/home-assistant/core/pull/125131 +[#125133]: https://github.com/home-assistant/core/pull/125133 +[#125136]: https://github.com/home-assistant/core/pull/125136 +[#125138]: https://github.com/home-assistant/core/pull/125138 +[#125146]: https://github.com/home-assistant/core/pull/125146 +[#125151]: https://github.com/home-assistant/core/pull/125151 +[#125152]: https://github.com/home-assistant/core/pull/125152 +[#125155]: https://github.com/home-assistant/core/pull/125155 +[#125157]: https://github.com/home-assistant/core/pull/125157 +[#125158]: https://github.com/home-assistant/core/pull/125158 +[#125161]: https://github.com/home-assistant/core/pull/125161 +[#125164]: https://github.com/home-assistant/core/pull/125164 +[#125165]: https://github.com/home-assistant/core/pull/125165 +[#125166]: https://github.com/home-assistant/core/pull/125166 +[#125168]: https://github.com/home-assistant/core/pull/125168 +[#125172]: https://github.com/home-assistant/core/pull/125172 +[#125178]: https://github.com/home-assistant/core/pull/125178 +[#125179]: https://github.com/home-assistant/core/pull/125179 +[#125180]: https://github.com/home-assistant/core/pull/125180 +[#125184]: https://github.com/home-assistant/core/pull/125184 +[#125185]: https://github.com/home-assistant/core/pull/125185 +[#125188]: https://github.com/home-assistant/core/pull/125188 +[#125193]: https://github.com/home-assistant/core/pull/125193 +[#125195]: https://github.com/home-assistant/core/pull/125195 +[#125197]: https://github.com/home-assistant/core/pull/125197 +[#125198]: https://github.com/home-assistant/core/pull/125198 +[#125199]: https://github.com/home-assistant/core/pull/125199 +[#125200]: https://github.com/home-assistant/core/pull/125200 +[#125201]: https://github.com/home-assistant/core/pull/125201 +[#125202]: https://github.com/home-assistant/core/pull/125202 +[#125204]: https://github.com/home-assistant/core/pull/125204 +[#125208]: https://github.com/home-assistant/core/pull/125208 +[#125209]: https://github.com/home-assistant/core/pull/125209 +[#125214]: https://github.com/home-assistant/core/pull/125214 +[#125215]: https://github.com/home-assistant/core/pull/125215 +[#125220]: https://github.com/home-assistant/core/pull/125220 +[#125227]: https://github.com/home-assistant/core/pull/125227 +[#125228]: https://github.com/home-assistant/core/pull/125228 +[#125235]: https://github.com/home-assistant/core/pull/125235 +[#125236]: https://github.com/home-assistant/core/pull/125236 +[#125237]: https://github.com/home-assistant/core/pull/125237 +[#125242]: https://github.com/home-assistant/core/pull/125242 +[#125245]: https://github.com/home-assistant/core/pull/125245 +[#125246]: https://github.com/home-assistant/core/pull/125246 +[#125247]: https://github.com/home-assistant/core/pull/125247 +[#125248]: https://github.com/home-assistant/core/pull/125248 +[#125250]: https://github.com/home-assistant/core/pull/125250 +[#125259]: https://github.com/home-assistant/core/pull/125259 +[#125262]: https://github.com/home-assistant/core/pull/125262 +[#125264]: https://github.com/home-assistant/core/pull/125264 +[#125265]: https://github.com/home-assistant/core/pull/125265 +[#125268]: https://github.com/home-assistant/core/pull/125268 +[#125270]: https://github.com/home-assistant/core/pull/125270 +[#125271]: https://github.com/home-assistant/core/pull/125271 +[#125284]: https://github.com/home-assistant/core/pull/125284 +[#125287]: https://github.com/home-assistant/core/pull/125287 +[#125292]: https://github.com/home-assistant/core/pull/125292 +[#125293]: https://github.com/home-assistant/core/pull/125293 +[#125296]: https://github.com/home-assistant/core/pull/125296 +[#125298]: https://github.com/home-assistant/core/pull/125298 +[#125299]: https://github.com/home-assistant/core/pull/125299 +[#125300]: https://github.com/home-assistant/core/pull/125300 +[#125301]: https://github.com/home-assistant/core/pull/125301 +[#125302]: https://github.com/home-assistant/core/pull/125302 +[#125306]: https://github.com/home-assistant/core/pull/125306 +[#125308]: https://github.com/home-assistant/core/pull/125308 +[#125313]: https://github.com/home-assistant/core/pull/125313 +[#125315]: https://github.com/home-assistant/core/pull/125315 +[#125316]: https://github.com/home-assistant/core/pull/125316 +[#125318]: https://github.com/home-assistant/core/pull/125318 +[#125319]: https://github.com/home-assistant/core/pull/125319 +[#125320]: https://github.com/home-assistant/core/pull/125320 +[#125322]: https://github.com/home-assistant/core/pull/125322 +[#125323]: https://github.com/home-assistant/core/pull/125323 +[#125324]: https://github.com/home-assistant/core/pull/125324 +[#125326]: https://github.com/home-assistant/core/pull/125326 +[#125330]: https://github.com/home-assistant/core/pull/125330 +[#125331]: https://github.com/home-assistant/core/pull/125331 +[#125335]: https://github.com/home-assistant/core/pull/125335 +[#125338]: https://github.com/home-assistant/core/pull/125338 +[#125341]: https://github.com/home-assistant/core/pull/125341 +[#125343]: https://github.com/home-assistant/core/pull/125343 +[#125348]: https://github.com/home-assistant/core/pull/125348 +[#125349]: https://github.com/home-assistant/core/pull/125349 +[#125351]: https://github.com/home-assistant/core/pull/125351 +[#125352]: https://github.com/home-assistant/core/pull/125352 +[#125354]: https://github.com/home-assistant/core/pull/125354 +[#125355]: https://github.com/home-assistant/core/pull/125355 +[#125356]: https://github.com/home-assistant/core/pull/125356 +[#125359]: https://github.com/home-assistant/core/pull/125359 +[#125360]: https://github.com/home-assistant/core/pull/125360 +[#125364]: https://github.com/home-assistant/core/pull/125364 +[#125365]: https://github.com/home-assistant/core/pull/125365 +[#125366]: https://github.com/home-assistant/core/pull/125366 +[#125368]: https://github.com/home-assistant/core/pull/125368 +[#125369]: https://github.com/home-assistant/core/pull/125369 +[#125370]: https://github.com/home-assistant/core/pull/125370 +[#125372]: https://github.com/home-assistant/core/pull/125372 +[#125373]: https://github.com/home-assistant/core/pull/125373 +[#125376]: https://github.com/home-assistant/core/pull/125376 +[#125378]: https://github.com/home-assistant/core/pull/125378 +[#125381]: https://github.com/home-assistant/core/pull/125381 +[#125383]: https://github.com/home-assistant/core/pull/125383 +[#125384]: https://github.com/home-assistant/core/pull/125384 +[#125385]: https://github.com/home-assistant/core/pull/125385 +[#125390]: https://github.com/home-assistant/core/pull/125390 +[#125391]: https://github.com/home-assistant/core/pull/125391 +[#125392]: https://github.com/home-assistant/core/pull/125392 +[#125395]: https://github.com/home-assistant/core/pull/125395 +[#125399]: https://github.com/home-assistant/core/pull/125399 +[#125400]: https://github.com/home-assistant/core/pull/125400 +[#125403]: https://github.com/home-assistant/core/pull/125403 +[#125408]: https://github.com/home-assistant/core/pull/125408 +[#125410]: https://github.com/home-assistant/core/pull/125410 +[#125414]: https://github.com/home-assistant/core/pull/125414 +[#125415]: https://github.com/home-assistant/core/pull/125415 +[#125419]: https://github.com/home-assistant/core/pull/125419 +[#125422]: https://github.com/home-assistant/core/pull/125422 +[#125423]: https://github.com/home-assistant/core/pull/125423 +[#125427]: https://github.com/home-assistant/core/pull/125427 +[#125429]: https://github.com/home-assistant/core/pull/125429 +[#125433]: https://github.com/home-assistant/core/pull/125433 +[#125434]: https://github.com/home-assistant/core/pull/125434 +[#125439]: https://github.com/home-assistant/core/pull/125439 +[#125446]: https://github.com/home-assistant/core/pull/125446 +[#125450]: https://github.com/home-assistant/core/pull/125450 +[#125455]: https://github.com/home-assistant/core/pull/125455 +[#125456]: https://github.com/home-assistant/core/pull/125456 +[#125457]: https://github.com/home-assistant/core/pull/125457 +[#125461]: https://github.com/home-assistant/core/pull/125461 +[#125469]: https://github.com/home-assistant/core/pull/125469 +[#125473]: https://github.com/home-assistant/core/pull/125473 +[#125474]: https://github.com/home-assistant/core/pull/125474 +[#125476]: https://github.com/home-assistant/core/pull/125476 +[#125482]: https://github.com/home-assistant/core/pull/125482 +[#125485]: https://github.com/home-assistant/core/pull/125485 +[#125488]: https://github.com/home-assistant/core/pull/125488 +[#125489]: https://github.com/home-assistant/core/pull/125489 +[#125490]: https://github.com/home-assistant/core/pull/125490 +[#125491]: https://github.com/home-assistant/core/pull/125491 +[#125493]: https://github.com/home-assistant/core/pull/125493 +[#125495]: https://github.com/home-assistant/core/pull/125495 +[#125501]: https://github.com/home-assistant/core/pull/125501 +[#125503]: https://github.com/home-assistant/core/pull/125503 +[#125504]: https://github.com/home-assistant/core/pull/125504 +[#125506]: https://github.com/home-assistant/core/pull/125506 +[#125511]: https://github.com/home-assistant/core/pull/125511 +[#125512]: https://github.com/home-assistant/core/pull/125512 +[#125516]: https://github.com/home-assistant/core/pull/125516 +[#125518]: https://github.com/home-assistant/core/pull/125518 +[#125520]: https://github.com/home-assistant/core/pull/125520 +[#125521]: https://github.com/home-assistant/core/pull/125521 +[#125522]: https://github.com/home-assistant/core/pull/125522 +[#125523]: https://github.com/home-assistant/core/pull/125523 +[#125524]: https://github.com/home-assistant/core/pull/125524 +[#125527]: https://github.com/home-assistant/core/pull/125527 +[#125528]: https://github.com/home-assistant/core/pull/125528 +[#125529]: https://github.com/home-assistant/core/pull/125529 +[#125532]: https://github.com/home-assistant/core/pull/125532 +[#125533]: https://github.com/home-assistant/core/pull/125533 +[#125534]: https://github.com/home-assistant/core/pull/125534 +[#125535]: https://github.com/home-assistant/core/pull/125535 +[#125536]: https://github.com/home-assistant/core/pull/125536 +[#125537]: https://github.com/home-assistant/core/pull/125537 +[#125538]: https://github.com/home-assistant/core/pull/125538 +[#125539]: https://github.com/home-assistant/core/pull/125539 +[#125547]: https://github.com/home-assistant/core/pull/125547 +[#125549]: https://github.com/home-assistant/core/pull/125549 +[#125550]: https://github.com/home-assistant/core/pull/125550 +[#125553]: https://github.com/home-assistant/core/pull/125553 +[#125554]: https://github.com/home-assistant/core/pull/125554 +[#125555]: https://github.com/home-assistant/core/pull/125555 +[#125559]: https://github.com/home-assistant/core/pull/125559 +[#125560]: https://github.com/home-assistant/core/pull/125560 +[#125561]: https://github.com/home-assistant/core/pull/125561 +[#125562]: https://github.com/home-assistant/core/pull/125562 +[#125563]: https://github.com/home-assistant/core/pull/125563 +[#125567]: https://github.com/home-assistant/core/pull/125567 +[#125568]: https://github.com/home-assistant/core/pull/125568 +[#125569]: https://github.com/home-assistant/core/pull/125569 +[#125570]: https://github.com/home-assistant/core/pull/125570 +[#125572]: https://github.com/home-assistant/core/pull/125572 +[#125573]: https://github.com/home-assistant/core/pull/125573 +[#125575]: https://github.com/home-assistant/core/pull/125575 +[#125577]: https://github.com/home-assistant/core/pull/125577 +[#125581]: https://github.com/home-assistant/core/pull/125581 +[#125582]: https://github.com/home-assistant/core/pull/125582 +[#125585]: https://github.com/home-assistant/core/pull/125585 +[#125587]: https://github.com/home-assistant/core/pull/125587 +[#125589]: https://github.com/home-assistant/core/pull/125589 +[#125590]: https://github.com/home-assistant/core/pull/125590 +[#125591]: https://github.com/home-assistant/core/pull/125591 +[#125592]: https://github.com/home-assistant/core/pull/125592 +[#125593]: https://github.com/home-assistant/core/pull/125593 +[#125596]: https://github.com/home-assistant/core/pull/125596 +[#125604]: https://github.com/home-assistant/core/pull/125604 +[#125609]: https://github.com/home-assistant/core/pull/125609 +[#125613]: https://github.com/home-assistant/core/pull/125613 +[#125619]: https://github.com/home-assistant/core/pull/125619 +[#125621]: https://github.com/home-assistant/core/pull/125621 +[#125625]: https://github.com/home-assistant/core/pull/125625 +[#125627]: https://github.com/home-assistant/core/pull/125627 +[#125629]: https://github.com/home-assistant/core/pull/125629 +[#125632]: https://github.com/home-assistant/core/pull/125632 +[#125633]: https://github.com/home-assistant/core/pull/125633 +[#125638]: https://github.com/home-assistant/core/pull/125638 +[#125640]: https://github.com/home-assistant/core/pull/125640 +[#125642]: https://github.com/home-assistant/core/pull/125642 +[#125645]: https://github.com/home-assistant/core/pull/125645 +[#125646]: https://github.com/home-assistant/core/pull/125646 +[#125647]: https://github.com/home-assistant/core/pull/125647 +[#125648]: https://github.com/home-assistant/core/pull/125648 +[#125649]: https://github.com/home-assistant/core/pull/125649 +[#125650]: https://github.com/home-assistant/core/pull/125650 +[#125652]: https://github.com/home-assistant/core/pull/125652 +[#125653]: https://github.com/home-assistant/core/pull/125653 +[#125658]: https://github.com/home-assistant/core/pull/125658 +[#125659]: https://github.com/home-assistant/core/pull/125659 +[#125660]: https://github.com/home-assistant/core/pull/125660 +[#125661]: https://github.com/home-assistant/core/pull/125661 +[#125662]: https://github.com/home-assistant/core/pull/125662 +[#125664]: https://github.com/home-assistant/core/pull/125664 +[#125665]: https://github.com/home-assistant/core/pull/125665 +[#125666]: https://github.com/home-assistant/core/pull/125666 +[#125668]: https://github.com/home-assistant/core/pull/125668 +[#125670]: https://github.com/home-assistant/core/pull/125670 +[#125676]: https://github.com/home-assistant/core/pull/125676 +[#125678]: https://github.com/home-assistant/core/pull/125678 +[#125681]: https://github.com/home-assistant/core/pull/125681 +[#125682]: https://github.com/home-assistant/core/pull/125682 +[#125683]: https://github.com/home-assistant/core/pull/125683 +[#125687]: https://github.com/home-assistant/core/pull/125687 +[#125688]: https://github.com/home-assistant/core/pull/125688 +[#125689]: https://github.com/home-assistant/core/pull/125689 +[#125690]: https://github.com/home-assistant/core/pull/125690 +[#125692]: https://github.com/home-assistant/core/pull/125692 +[#125696]: https://github.com/home-assistant/core/pull/125696 +[#125697]: https://github.com/home-assistant/core/pull/125697 +[#125698]: https://github.com/home-assistant/core/pull/125698 +[#125699]: https://github.com/home-assistant/core/pull/125699 +[#125702]: https://github.com/home-assistant/core/pull/125702 +[#125704]: https://github.com/home-assistant/core/pull/125704 +[#125705]: https://github.com/home-assistant/core/pull/125705 +[#125707]: https://github.com/home-assistant/core/pull/125707 +[#125713]: https://github.com/home-assistant/core/pull/125713 +[#125717]: https://github.com/home-assistant/core/pull/125717 +[#125724]: https://github.com/home-assistant/core/pull/125724 +[#125726]: https://github.com/home-assistant/core/pull/125726 +[#125731]: https://github.com/home-assistant/core/pull/125731 +[#125735]: https://github.com/home-assistant/core/pull/125735 +[#125737]: https://github.com/home-assistant/core/pull/125737 +[#125739]: https://github.com/home-assistant/core/pull/125739 +[#125741]: https://github.com/home-assistant/core/pull/125741 +[#125744]: https://github.com/home-assistant/core/pull/125744 +[#125745]: https://github.com/home-assistant/core/pull/125745 +[#125746]: https://github.com/home-assistant/core/pull/125746 +[#125747]: https://github.com/home-assistant/core/pull/125747 +[#125748]: https://github.com/home-assistant/core/pull/125748 +[#125749]: https://github.com/home-assistant/core/pull/125749 +[#125751]: https://github.com/home-assistant/core/pull/125751 +[#125753]: https://github.com/home-assistant/core/pull/125753 +[#125754]: https://github.com/home-assistant/core/pull/125754 +[#125755]: https://github.com/home-assistant/core/pull/125755 +[#125756]: https://github.com/home-assistant/core/pull/125756 +[#125757]: https://github.com/home-assistant/core/pull/125757 +[#125758]: https://github.com/home-assistant/core/pull/125758 +[#125759]: https://github.com/home-assistant/core/pull/125759 +[#125760]: https://github.com/home-assistant/core/pull/125760 +[#125761]: https://github.com/home-assistant/core/pull/125761 +[#125762]: https://github.com/home-assistant/core/pull/125762 +[#125763]: https://github.com/home-assistant/core/pull/125763 +[#125765]: https://github.com/home-assistant/core/pull/125765 +[#125766]: https://github.com/home-assistant/core/pull/125766 +[#125771]: https://github.com/home-assistant/core/pull/125771 +[#125773]: https://github.com/home-assistant/core/pull/125773 +[#125774]: https://github.com/home-assistant/core/pull/125774 +[#125775]: https://github.com/home-assistant/core/pull/125775 +[#125779]: https://github.com/home-assistant/core/pull/125779 +[#125780]: https://github.com/home-assistant/core/pull/125780 +[#125784]: https://github.com/home-assistant/core/pull/125784 +[#125785]: https://github.com/home-assistant/core/pull/125785 +[#125786]: https://github.com/home-assistant/core/pull/125786 +[#125792]: https://github.com/home-assistant/core/pull/125792 +[#125797]: https://github.com/home-assistant/core/pull/125797 +[#125798]: https://github.com/home-assistant/core/pull/125798 +[#125802]: https://github.com/home-assistant/core/pull/125802 +[#125805]: https://github.com/home-assistant/core/pull/125805 +[#125806]: https://github.com/home-assistant/core/pull/125806 +[#125808]: https://github.com/home-assistant/core/pull/125808 +[#125809]: https://github.com/home-assistant/core/pull/125809 +[#125810]: https://github.com/home-assistant/core/pull/125810 +[#125812]: https://github.com/home-assistant/core/pull/125812 +[#125816]: https://github.com/home-assistant/core/pull/125816 +[#125819]: https://github.com/home-assistant/core/pull/125819 +[#125821]: https://github.com/home-assistant/core/pull/125821 +[#125824]: https://github.com/home-assistant/core/pull/125824 +[#125825]: https://github.com/home-assistant/core/pull/125825 +[#125827]: https://github.com/home-assistant/core/pull/125827 +[#125828]: https://github.com/home-assistant/core/pull/125828 +[#125829]: https://github.com/home-assistant/core/pull/125829 +[#125831]: https://github.com/home-assistant/core/pull/125831 +[#125832]: https://github.com/home-assistant/core/pull/125832 +[#125834]: https://github.com/home-assistant/core/pull/125834 +[#125836]: https://github.com/home-assistant/core/pull/125836 +[#125837]: https://github.com/home-assistant/core/pull/125837 +[#125844]: https://github.com/home-assistant/core/pull/125844 +[#125845]: https://github.com/home-assistant/core/pull/125845 +[#125849]: https://github.com/home-assistant/core/pull/125849 +[#125852]: https://github.com/home-assistant/core/pull/125852 +[#125853]: https://github.com/home-assistant/core/pull/125853 +[#125855]: https://github.com/home-assistant/core/pull/125855 +[#125858]: https://github.com/home-assistant/core/pull/125858 +[#125859]: https://github.com/home-assistant/core/pull/125859 +[#125860]: https://github.com/home-assistant/core/pull/125860 +[#125861]: https://github.com/home-assistant/core/pull/125861 +[#125862]: https://github.com/home-assistant/core/pull/125862 +[#125863]: https://github.com/home-assistant/core/pull/125863 +[#125866]: https://github.com/home-assistant/core/pull/125866 +[#125867]: https://github.com/home-assistant/core/pull/125867 +[#125877]: https://github.com/home-assistant/core/pull/125877 +[#125886]: https://github.com/home-assistant/core/pull/125886 +[#125891]: https://github.com/home-assistant/core/pull/125891 +[#125892]: https://github.com/home-assistant/core/pull/125892 +[#125893]: https://github.com/home-assistant/core/pull/125893 +[#125896]: https://github.com/home-assistant/core/pull/125896 +[#125897]: https://github.com/home-assistant/core/pull/125897 +[#125900]: https://github.com/home-assistant/core/pull/125900 +[#125903]: https://github.com/home-assistant/core/pull/125903 +[#125904]: https://github.com/home-assistant/core/pull/125904 +[#125906]: https://github.com/home-assistant/core/pull/125906 +[#125907]: https://github.com/home-assistant/core/pull/125907 +[#125910]: https://github.com/home-assistant/core/pull/125910 +[#125919]: https://github.com/home-assistant/core/pull/125919 +[#125921]: https://github.com/home-assistant/core/pull/125921 +[#125923]: https://github.com/home-assistant/core/pull/125923 +[#125924]: https://github.com/home-assistant/core/pull/125924 +[#125926]: https://github.com/home-assistant/core/pull/125926 +[#125931]: https://github.com/home-assistant/core/pull/125931 +[#125933]: https://github.com/home-assistant/core/pull/125933 +[#125935]: https://github.com/home-assistant/core/pull/125935 +[#125936]: https://github.com/home-assistant/core/pull/125936 +[#125940]: https://github.com/home-assistant/core/pull/125940 +[#125941]: https://github.com/home-assistant/core/pull/125941 +[#125942]: https://github.com/home-assistant/core/pull/125942 +[#125943]: https://github.com/home-assistant/core/pull/125943 +[#125944]: https://github.com/home-assistant/core/pull/125944 +[#125946]: https://github.com/home-assistant/core/pull/125946 +[#125948]: https://github.com/home-assistant/core/pull/125948 +[#125951]: https://github.com/home-assistant/core/pull/125951 +[#125954]: https://github.com/home-assistant/core/pull/125954 +[#125955]: https://github.com/home-assistant/core/pull/125955 +[#125960]: https://github.com/home-assistant/core/pull/125960 +[#125962]: https://github.com/home-assistant/core/pull/125962 +[#125966]: https://github.com/home-assistant/core/pull/125966 +[#125969]: https://github.com/home-assistant/core/pull/125969 +[#125970]: https://github.com/home-assistant/core/pull/125970 +[#125971]: https://github.com/home-assistant/core/pull/125971 +[#125977]: https://github.com/home-assistant/core/pull/125977 +[#125978]: https://github.com/home-assistant/core/pull/125978 +[#125981]: https://github.com/home-assistant/core/pull/125981 +[#125982]: https://github.com/home-assistant/core/pull/125982 +[#125983]: https://github.com/home-assistant/core/pull/125983 +[#125985]: https://github.com/home-assistant/core/pull/125985 +[#125986]: https://github.com/home-assistant/core/pull/125986 +[#125987]: https://github.com/home-assistant/core/pull/125987 +[#125988]: https://github.com/home-assistant/core/pull/125988 +[#125989]: https://github.com/home-assistant/core/pull/125989 +[#125998]: https://github.com/home-assistant/core/pull/125998 +[#126002]: https://github.com/home-assistant/core/pull/126002 +[#126004]: https://github.com/home-assistant/core/pull/126004 +[#126014]: https://github.com/home-assistant/core/pull/126014 +[#126016]: https://github.com/home-assistant/core/pull/126016 +[#126017]: https://github.com/home-assistant/core/pull/126017 +[#126019]: https://github.com/home-assistant/core/pull/126019 +[#126020]: https://github.com/home-assistant/core/pull/126020 +[#126021]: https://github.com/home-assistant/core/pull/126021 +[#126022]: https://github.com/home-assistant/core/pull/126022 +[#126023]: https://github.com/home-assistant/core/pull/126023 +[#126024]: https://github.com/home-assistant/core/pull/126024 +[#126025]: https://github.com/home-assistant/core/pull/126025 +[#126026]: https://github.com/home-assistant/core/pull/126026 +[#126027]: https://github.com/home-assistant/core/pull/126027 +[#126028]: https://github.com/home-assistant/core/pull/126028 +[#126029]: https://github.com/home-assistant/core/pull/126029 +[#126030]: https://github.com/home-assistant/core/pull/126030 +[#126032]: https://github.com/home-assistant/core/pull/126032 +[#126033]: https://github.com/home-assistant/core/pull/126033 +[#126034]: https://github.com/home-assistant/core/pull/126034 +[#126035]: https://github.com/home-assistant/core/pull/126035 +[#126036]: https://github.com/home-assistant/core/pull/126036 +[#126037]: https://github.com/home-assistant/core/pull/126037 +[#126038]: https://github.com/home-assistant/core/pull/126038 +[#126039]: https://github.com/home-assistant/core/pull/126039 +[#126041]: https://github.com/home-assistant/core/pull/126041 +[#126042]: https://github.com/home-assistant/core/pull/126042 +[#126043]: https://github.com/home-assistant/core/pull/126043 +[#126046]: https://github.com/home-assistant/core/pull/126046 +[#126048]: https://github.com/home-assistant/core/pull/126048 +[#126049]: https://github.com/home-assistant/core/pull/126049 +[#126050]: https://github.com/home-assistant/core/pull/126050 +[#126051]: https://github.com/home-assistant/core/pull/126051 +[#126052]: https://github.com/home-assistant/core/pull/126052 +[#126053]: https://github.com/home-assistant/core/pull/126053 +[#126054]: https://github.com/home-assistant/core/pull/126054 +[#126055]: https://github.com/home-assistant/core/pull/126055 +[#126056]: https://github.com/home-assistant/core/pull/126056 +[#126057]: https://github.com/home-assistant/core/pull/126057 +[#126059]: https://github.com/home-assistant/core/pull/126059 +[#126063]: https://github.com/home-assistant/core/pull/126063 +[#126066]: https://github.com/home-assistant/core/pull/126066 +[#126069]: https://github.com/home-assistant/core/pull/126069 +[#126072]: https://github.com/home-assistant/core/pull/126072 +[#126074]: https://github.com/home-assistant/core/pull/126074 +[#126077]: https://github.com/home-assistant/core/pull/126077 +[#126082]: https://github.com/home-assistant/core/pull/126082 +[#126085]: https://github.com/home-assistant/core/pull/126085 +[#126090]: https://github.com/home-assistant/core/pull/126090 +[#126091]: https://github.com/home-assistant/core/pull/126091 +[#126094]: https://github.com/home-assistant/core/pull/126094 +[#126095]: https://github.com/home-assistant/core/pull/126095 +[#126096]: https://github.com/home-assistant/core/pull/126096 +[#126097]: https://github.com/home-assistant/core/pull/126097 +[#126098]: https://github.com/home-assistant/core/pull/126098 +[#126099]: https://github.com/home-assistant/core/pull/126099 +[#126100]: https://github.com/home-assistant/core/pull/126100 +[#126101]: https://github.com/home-assistant/core/pull/126101 +[#126102]: https://github.com/home-assistant/core/pull/126102 +[#126103]: https://github.com/home-assistant/core/pull/126103 +[#126104]: https://github.com/home-assistant/core/pull/126104 +[#126105]: https://github.com/home-assistant/core/pull/126105 +[#126106]: https://github.com/home-assistant/core/pull/126106 +[#126108]: https://github.com/home-assistant/core/pull/126108 +[#126111]: https://github.com/home-assistant/core/pull/126111 +[#126113]: https://github.com/home-assistant/core/pull/126113 +[#126119]: https://github.com/home-assistant/core/pull/126119 +[#126121]: https://github.com/home-assistant/core/pull/126121 +[#126126]: https://github.com/home-assistant/core/pull/126126 +[#126128]: https://github.com/home-assistant/core/pull/126128 +[#126129]: https://github.com/home-assistant/core/pull/126129 +[#126130]: https://github.com/home-assistant/core/pull/126130 +[#126132]: https://github.com/home-assistant/core/pull/126132 +[#126134]: https://github.com/home-assistant/core/pull/126134 +[#126135]: https://github.com/home-assistant/core/pull/126135 +[#126137]: https://github.com/home-assistant/core/pull/126137 +[#126138]: https://github.com/home-assistant/core/pull/126138 +[#126139]: https://github.com/home-assistant/core/pull/126139 +[#126140]: https://github.com/home-assistant/core/pull/126140 +[#126141]: https://github.com/home-assistant/core/pull/126141 +[#126142]: https://github.com/home-assistant/core/pull/126142 +[#126147]: https://github.com/home-assistant/core/pull/126147 +[#126148]: https://github.com/home-assistant/core/pull/126148 +[#126161]: https://github.com/home-assistant/core/pull/126161 +[#126164]: https://github.com/home-assistant/core/pull/126164 +[#126166]: https://github.com/home-assistant/core/pull/126166 +[#126170]: https://github.com/home-assistant/core/pull/126170 +[#126171]: https://github.com/home-assistant/core/pull/126171 +[#126173]: https://github.com/home-assistant/core/pull/126173 +[#126174]: https://github.com/home-assistant/core/pull/126174 +[#126175]: https://github.com/home-assistant/core/pull/126175 +[#126176]: https://github.com/home-assistant/core/pull/126176 +[#126177]: https://github.com/home-assistant/core/pull/126177 +[#126178]: https://github.com/home-assistant/core/pull/126178 +[#126179]: https://github.com/home-assistant/core/pull/126179 +[#126180]: https://github.com/home-assistant/core/pull/126180 +[#126181]: https://github.com/home-assistant/core/pull/126181 +[#126182]: https://github.com/home-assistant/core/pull/126182 +[#126183]: https://github.com/home-assistant/core/pull/126183 +[#126184]: https://github.com/home-assistant/core/pull/126184 +[#126185]: https://github.com/home-assistant/core/pull/126185 +[#126186]: https://github.com/home-assistant/core/pull/126186 +[#126187]: https://github.com/home-assistant/core/pull/126187 +[#126188]: https://github.com/home-assistant/core/pull/126188 +[#126189]: https://github.com/home-assistant/core/pull/126189 +[#126190]: https://github.com/home-assistant/core/pull/126190 +[#126192]: https://github.com/home-assistant/core/pull/126192 +[#126193]: https://github.com/home-assistant/core/pull/126193 +[#126194]: https://github.com/home-assistant/core/pull/126194 +[#126197]: https://github.com/home-assistant/core/pull/126197 +[#126198]: https://github.com/home-assistant/core/pull/126198 +[#126199]: https://github.com/home-assistant/core/pull/126199 +[#126200]: https://github.com/home-assistant/core/pull/126200 +[#126201]: https://github.com/home-assistant/core/pull/126201 +[#126203]: https://github.com/home-assistant/core/pull/126203 +[#126204]: https://github.com/home-assistant/core/pull/126204 +[#126205]: https://github.com/home-assistant/core/pull/126205 +[#126206]: https://github.com/home-assistant/core/pull/126206 +[#126210]: https://github.com/home-assistant/core/pull/126210 +[#126211]: https://github.com/home-assistant/core/pull/126211 +[#126212]: https://github.com/home-assistant/core/pull/126212 +[#126216]: https://github.com/home-assistant/core/pull/126216 +[#126220]: https://github.com/home-assistant/core/pull/126220 +[#126225]: https://github.com/home-assistant/core/pull/126225 +[#126228]: https://github.com/home-assistant/core/pull/126228 +[#126229]: https://github.com/home-assistant/core/pull/126229 +[#126230]: https://github.com/home-assistant/core/pull/126230 +[#126231]: https://github.com/home-assistant/core/pull/126231 +[#126232]: https://github.com/home-assistant/core/pull/126232 +[#126233]: https://github.com/home-assistant/core/pull/126233 +[#126234]: https://github.com/home-assistant/core/pull/126234 +[#126236]: https://github.com/home-assistant/core/pull/126236 +[#126237]: https://github.com/home-assistant/core/pull/126237 +[#126248]: https://github.com/home-assistant/core/pull/126248 +[#126251]: https://github.com/home-assistant/core/pull/126251 +[#126252]: https://github.com/home-assistant/core/pull/126252 +[#126254]: https://github.com/home-assistant/core/pull/126254 +[#126255]: https://github.com/home-assistant/core/pull/126255 +[#126256]: https://github.com/home-assistant/core/pull/126256 +[#126257]: https://github.com/home-assistant/core/pull/126257 +[#126258]: https://github.com/home-assistant/core/pull/126258 +[#126259]: https://github.com/home-assistant/core/pull/126259 +[#126260]: https://github.com/home-assistant/core/pull/126260 +[#126264]: https://github.com/home-assistant/core/pull/126264 +[#126267]: https://github.com/home-assistant/core/pull/126267 +[#126269]: https://github.com/home-assistant/core/pull/126269 +[#126276]: https://github.com/home-assistant/core/pull/126276 +[#126278]: https://github.com/home-assistant/core/pull/126278 +[#126279]: https://github.com/home-assistant/core/pull/126279 +[#126282]: https://github.com/home-assistant/core/pull/126282 +[#126287]: https://github.com/home-assistant/core/pull/126287 +[#126299]: https://github.com/home-assistant/core/pull/126299 +[#126301]: https://github.com/home-assistant/core/pull/126301 +[#126302]: https://github.com/home-assistant/core/pull/126302 +[#126305]: https://github.com/home-assistant/core/pull/126305 +[#126306]: https://github.com/home-assistant/core/pull/126306 +[#126309]: https://github.com/home-assistant/core/pull/126309 +[#126310]: https://github.com/home-assistant/core/pull/126310 +[#126312]: https://github.com/home-assistant/core/pull/126312 +[#126313]: https://github.com/home-assistant/core/pull/126313 +[#126314]: https://github.com/home-assistant/core/pull/126314 +[#126315]: https://github.com/home-assistant/core/pull/126315 +[#126317]: https://github.com/home-assistant/core/pull/126317 +[#126320]: https://github.com/home-assistant/core/pull/126320 +[#126321]: https://github.com/home-assistant/core/pull/126321 +[#126322]: https://github.com/home-assistant/core/pull/126322 +[#126323]: https://github.com/home-assistant/core/pull/126323 +[#126324]: https://github.com/home-assistant/core/pull/126324 +[#126325]: https://github.com/home-assistant/core/pull/126325 +[#126327]: https://github.com/home-assistant/core/pull/126327 +[#126328]: https://github.com/home-assistant/core/pull/126328 +[#126329]: https://github.com/home-assistant/core/pull/126329 +[#126330]: https://github.com/home-assistant/core/pull/126330 +[#126331]: https://github.com/home-assistant/core/pull/126331 +[#126332]: https://github.com/home-assistant/core/pull/126332 +[#126333]: https://github.com/home-assistant/core/pull/126333 +[#126335]: https://github.com/home-assistant/core/pull/126335 +[#126336]: https://github.com/home-assistant/core/pull/126336 +[#126338]: https://github.com/home-assistant/core/pull/126338 +[#126339]: https://github.com/home-assistant/core/pull/126339 +[#126340]: https://github.com/home-assistant/core/pull/126340 +[#126342]: https://github.com/home-assistant/core/pull/126342 +[#126343]: https://github.com/home-assistant/core/pull/126343 +[#126345]: https://github.com/home-assistant/core/pull/126345 +[#126346]: https://github.com/home-assistant/core/pull/126346 +[#126347]: https://github.com/home-assistant/core/pull/126347 +[#126349]: https://github.com/home-assistant/core/pull/126349 +[#126351]: https://github.com/home-assistant/core/pull/126351 +[#126354]: https://github.com/home-assistant/core/pull/126354 +[#126359]: https://github.com/home-assistant/core/pull/126359 +[#126361]: https://github.com/home-assistant/core/pull/126361 +[#126365]: https://github.com/home-assistant/core/pull/126365 +[#126366]: https://github.com/home-assistant/core/pull/126366 +[#126368]: https://github.com/home-assistant/core/pull/126368 +[#126375]: https://github.com/home-assistant/core/pull/126375 +[#126376]: https://github.com/home-assistant/core/pull/126376 +[#126379]: https://github.com/home-assistant/core/pull/126379 +[#126380]: https://github.com/home-assistant/core/pull/126380 +[#126383]: https://github.com/home-assistant/core/pull/126383 +[#126384]: https://github.com/home-assistant/core/pull/126384 +[#126386]: https://github.com/home-assistant/core/pull/126386 +[#126387]: https://github.com/home-assistant/core/pull/126387 +[#126388]: https://github.com/home-assistant/core/pull/126388 +[#126389]: https://github.com/home-assistant/core/pull/126389 +[#126390]: https://github.com/home-assistant/core/pull/126390 +[#126394]: https://github.com/home-assistant/core/pull/126394 +[#126397]: https://github.com/home-assistant/core/pull/126397 +[#126398]: https://github.com/home-assistant/core/pull/126398 +[#126399]: https://github.com/home-assistant/core/pull/126399 +[#126401]: https://github.com/home-assistant/core/pull/126401 +[#126404]: https://github.com/home-assistant/core/pull/126404 +[#126405]: https://github.com/home-assistant/core/pull/126405 +[#126406]: https://github.com/home-assistant/core/pull/126406 +[#126408]: https://github.com/home-assistant/core/pull/126408 +[#126409]: https://github.com/home-assistant/core/pull/126409 +[#126410]: https://github.com/home-assistant/core/pull/126410 +[#126411]: https://github.com/home-assistant/core/pull/126411 +[#126412]: https://github.com/home-assistant/core/pull/126412 +[#126413]: https://github.com/home-assistant/core/pull/126413 +[#126416]: https://github.com/home-assistant/core/pull/126416 +[#126419]: https://github.com/home-assistant/core/pull/126419 +[#126420]: https://github.com/home-assistant/core/pull/126420 +[#126421]: https://github.com/home-assistant/core/pull/126421 +[#126423]: https://github.com/home-assistant/core/pull/126423 +[#126425]: https://github.com/home-assistant/core/pull/126425 +[#126426]: https://github.com/home-assistant/core/pull/126426 +[#126427]: https://github.com/home-assistant/core/pull/126427 +[#126428]: https://github.com/home-assistant/core/pull/126428 +[#126429]: https://github.com/home-assistant/core/pull/126429 +[#126430]: https://github.com/home-assistant/core/pull/126430 +[#126432]: https://github.com/home-assistant/core/pull/126432 +[#126433]: https://github.com/home-assistant/core/pull/126433 +[#126435]: https://github.com/home-assistant/core/pull/126435 +[#126437]: https://github.com/home-assistant/core/pull/126437 +[#126440]: https://github.com/home-assistant/core/pull/126440 +[#126443]: https://github.com/home-assistant/core/pull/126443 +[#126444]: https://github.com/home-assistant/core/pull/126444 +[#126446]: https://github.com/home-assistant/core/pull/126446 +[#126449]: https://github.com/home-assistant/core/pull/126449 +[#126458]: https://github.com/home-assistant/core/pull/126458 +[#126468]: https://github.com/home-assistant/core/pull/126468 +[#126469]: https://github.com/home-assistant/core/pull/126469 +[#126471]: https://github.com/home-assistant/core/pull/126471 +[#126473]: https://github.com/home-assistant/core/pull/126473 +[#126474]: https://github.com/home-assistant/core/pull/126474 +[#126475]: https://github.com/home-assistant/core/pull/126475 +[#126477]: https://github.com/home-assistant/core/pull/126477 +[#126478]: https://github.com/home-assistant/core/pull/126478 +[#126479]: https://github.com/home-assistant/core/pull/126479 +[#126480]: https://github.com/home-assistant/core/pull/126480 +[#126481]: https://github.com/home-assistant/core/pull/126481 +[#126482]: https://github.com/home-assistant/core/pull/126482 +[#126484]: https://github.com/home-assistant/core/pull/126484 +[#126485]: https://github.com/home-assistant/core/pull/126485 +[#126486]: https://github.com/home-assistant/core/pull/126486 +[#126488]: https://github.com/home-assistant/core/pull/126488 +[#126489]: https://github.com/home-assistant/core/pull/126489 +[#126490]: https://github.com/home-assistant/core/pull/126490 +[#126491]: https://github.com/home-assistant/core/pull/126491 +[#126492]: https://github.com/home-assistant/core/pull/126492 +[#126493]: https://github.com/home-assistant/core/pull/126493 +[#126494]: https://github.com/home-assistant/core/pull/126494 +[#126495]: https://github.com/home-assistant/core/pull/126495 +[#126496]: https://github.com/home-assistant/core/pull/126496 +[#126497]: https://github.com/home-assistant/core/pull/126497 +[#126498]: https://github.com/home-assistant/core/pull/126498 +[#126499]: https://github.com/home-assistant/core/pull/126499 +[#126500]: https://github.com/home-assistant/core/pull/126500 +[#126502]: https://github.com/home-assistant/core/pull/126502 +[#126504]: https://github.com/home-assistant/core/pull/126504 +[#126505]: https://github.com/home-assistant/core/pull/126505 +[#126506]: https://github.com/home-assistant/core/pull/126506 +[#126507]: https://github.com/home-assistant/core/pull/126507 +[#126508]: https://github.com/home-assistant/core/pull/126508 +[#126509]: https://github.com/home-assistant/core/pull/126509 +[#126510]: https://github.com/home-assistant/core/pull/126510 +[#126511]: https://github.com/home-assistant/core/pull/126511 +[#126512]: https://github.com/home-assistant/core/pull/126512 +[#126513]: https://github.com/home-assistant/core/pull/126513 +[#126514]: https://github.com/home-assistant/core/pull/126514 +[#126518]: https://github.com/home-assistant/core/pull/126518 +[#126519]: https://github.com/home-assistant/core/pull/126519 +[#126520]: https://github.com/home-assistant/core/pull/126520 +[#126521]: https://github.com/home-assistant/core/pull/126521 +[#126523]: https://github.com/home-assistant/core/pull/126523 +[#126524]: https://github.com/home-assistant/core/pull/126524 +[#126525]: https://github.com/home-assistant/core/pull/126525 +[#126526]: https://github.com/home-assistant/core/pull/126526 +[#126527]: https://github.com/home-assistant/core/pull/126527 +[#126528]: https://github.com/home-assistant/core/pull/126528 +[#126529]: https://github.com/home-assistant/core/pull/126529 +[#126530]: https://github.com/home-assistant/core/pull/126530 +[#126531]: https://github.com/home-assistant/core/pull/126531 +[#126532]: https://github.com/home-assistant/core/pull/126532 +[#126533]: https://github.com/home-assistant/core/pull/126533 +[#126535]: https://github.com/home-assistant/core/pull/126535 +[#126536]: https://github.com/home-assistant/core/pull/126536 +[#126538]: https://github.com/home-assistant/core/pull/126538 +[#126540]: https://github.com/home-assistant/core/pull/126540 +[#126541]: https://github.com/home-assistant/core/pull/126541 +[#126542]: https://github.com/home-assistant/core/pull/126542 +[#126543]: https://github.com/home-assistant/core/pull/126543 +[#126544]: https://github.com/home-assistant/core/pull/126544 +[#126545]: https://github.com/home-assistant/core/pull/126545 +[#126546]: https://github.com/home-assistant/core/pull/126546 +[#126548]: https://github.com/home-assistant/core/pull/126548 +[#126549]: https://github.com/home-assistant/core/pull/126549 +[#126550]: https://github.com/home-assistant/core/pull/126550 +[#126551]: https://github.com/home-assistant/core/pull/126551 +[#126552]: https://github.com/home-assistant/core/pull/126552 +[#126553]: https://github.com/home-assistant/core/pull/126553 +[#126555]: https://github.com/home-assistant/core/pull/126555 +[#126556]: https://github.com/home-assistant/core/pull/126556 +[#126557]: https://github.com/home-assistant/core/pull/126557 +[#126558]: https://github.com/home-assistant/core/pull/126558 +[#126559]: https://github.com/home-assistant/core/pull/126559 +[#126560]: https://github.com/home-assistant/core/pull/126560 +[#126561]: https://github.com/home-assistant/core/pull/126561 +[#126562]: https://github.com/home-assistant/core/pull/126562 +[#126563]: https://github.com/home-assistant/core/pull/126563 +[#126564]: https://github.com/home-assistant/core/pull/126564 +[#126567]: https://github.com/home-assistant/core/pull/126567 +[#126569]: https://github.com/home-assistant/core/pull/126569 +[#126571]: https://github.com/home-assistant/core/pull/126571 +[#126573]: https://github.com/home-assistant/core/pull/126573 +[#126576]: https://github.com/home-assistant/core/pull/126576 +[#126580]: https://github.com/home-assistant/core/pull/126580 +[#126581]: https://github.com/home-assistant/core/pull/126581 +[#126585]: https://github.com/home-assistant/core/pull/126585 +[#126586]: https://github.com/home-assistant/core/pull/126586 +[#126587]: https://github.com/home-assistant/core/pull/126587 +[#126589]: https://github.com/home-assistant/core/pull/126589 +[#126590]: https://github.com/home-assistant/core/pull/126590 +[#126591]: https://github.com/home-assistant/core/pull/126591 +[#126592]: https://github.com/home-assistant/core/pull/126592 +[#126593]: https://github.com/home-assistant/core/pull/126593 +[#126594]: https://github.com/home-assistant/core/pull/126594 +[#126595]: https://github.com/home-assistant/core/pull/126595 +[#126599]: https://github.com/home-assistant/core/pull/126599 +[#126601]: https://github.com/home-assistant/core/pull/126601 +[#126603]: https://github.com/home-assistant/core/pull/126603 +[#126604]: https://github.com/home-assistant/core/pull/126604 +[#126605]: https://github.com/home-assistant/core/pull/126605 +[#126608]: https://github.com/home-assistant/core/pull/126608 +[#126613]: https://github.com/home-assistant/core/pull/126613 +[#126614]: https://github.com/home-assistant/core/pull/126614 +[#126615]: https://github.com/home-assistant/core/pull/126615 +[#126616]: https://github.com/home-assistant/core/pull/126616 +[#126617]: https://github.com/home-assistant/core/pull/126617 +[#126619]: https://github.com/home-assistant/core/pull/126619 +[#126620]: https://github.com/home-assistant/core/pull/126620 +[#126621]: https://github.com/home-assistant/core/pull/126621 +[#126622]: https://github.com/home-assistant/core/pull/126622 +[#126623]: https://github.com/home-assistant/core/pull/126623 +[#126625]: https://github.com/home-assistant/core/pull/126625 +[#126626]: https://github.com/home-assistant/core/pull/126626 +[#126627]: https://github.com/home-assistant/core/pull/126627 +[#126628]: https://github.com/home-assistant/core/pull/126628 +[#126629]: https://github.com/home-assistant/core/pull/126629 +[#126630]: https://github.com/home-assistant/core/pull/126630 +[#126631]: https://github.com/home-assistant/core/pull/126631 +[#126632]: https://github.com/home-assistant/core/pull/126632 +[#126633]: https://github.com/home-assistant/core/pull/126633 +[#126634]: https://github.com/home-assistant/core/pull/126634 +[#126635]: https://github.com/home-assistant/core/pull/126635 +[#126636]: https://github.com/home-assistant/core/pull/126636 +[#126637]: https://github.com/home-assistant/core/pull/126637 +[#126639]: https://github.com/home-assistant/core/pull/126639 +[#126642]: https://github.com/home-assistant/core/pull/126642 +[#126644]: https://github.com/home-assistant/core/pull/126644 +[#126647]: https://github.com/home-assistant/core/pull/126647 +[#126648]: https://github.com/home-assistant/core/pull/126648 +[#126650]: https://github.com/home-assistant/core/pull/126650 +[#126651]: https://github.com/home-assistant/core/pull/126651 +[#126652]: https://github.com/home-assistant/core/pull/126652 +[#126653]: https://github.com/home-assistant/core/pull/126653 +[#126654]: https://github.com/home-assistant/core/pull/126654 +[#126657]: https://github.com/home-assistant/core/pull/126657 +[#126658]: https://github.com/home-assistant/core/pull/126658 +[#126659]: https://github.com/home-assistant/core/pull/126659 +[#126660]: https://github.com/home-assistant/core/pull/126660 +[#126662]: https://github.com/home-assistant/core/pull/126662 +[#126664]: https://github.com/home-assistant/core/pull/126664 +[#126666]: https://github.com/home-assistant/core/pull/126666 +[#126668]: https://github.com/home-assistant/core/pull/126668 +[#126672]: https://github.com/home-assistant/core/pull/126672 +[#126680]: https://github.com/home-assistant/core/pull/126680 +[#126687]: https://github.com/home-assistant/core/pull/126687 +[#126690]: https://github.com/home-assistant/core/pull/126690 +[#126691]: https://github.com/home-assistant/core/pull/126691 +[#126692]: https://github.com/home-assistant/core/pull/126692 +[#126693]: https://github.com/home-assistant/core/pull/126693 +[#126695]: https://github.com/home-assistant/core/pull/126695 +[#126696]: https://github.com/home-assistant/core/pull/126696 +[#126697]: https://github.com/home-assistant/core/pull/126697 +[#126698]: https://github.com/home-assistant/core/pull/126698 +[#126699]: https://github.com/home-assistant/core/pull/126699 +[#126700]: https://github.com/home-assistant/core/pull/126700 +[#126703]: https://github.com/home-assistant/core/pull/126703 +[#126704]: https://github.com/home-assistant/core/pull/126704 +[#126706]: https://github.com/home-assistant/core/pull/126706 +[#126709]: https://github.com/home-assistant/core/pull/126709 +[#126714]: https://github.com/home-assistant/core/pull/126714 +[#126715]: https://github.com/home-assistant/core/pull/126715 +[#126716]: https://github.com/home-assistant/core/pull/126716 +[#126717]: https://github.com/home-assistant/core/pull/126717 +[#126718]: https://github.com/home-assistant/core/pull/126718 +[#126719]: https://github.com/home-assistant/core/pull/126719 +[#126723]: https://github.com/home-assistant/core/pull/126723 +[#126725]: https://github.com/home-assistant/core/pull/126725 +[#126726]: https://github.com/home-assistant/core/pull/126726 +[#126731]: https://github.com/home-assistant/core/pull/126731 +[#126736]: https://github.com/home-assistant/core/pull/126736 +[#126738]: https://github.com/home-assistant/core/pull/126738 +[#126740]: https://github.com/home-assistant/core/pull/126740 +[#126742]: https://github.com/home-assistant/core/pull/126742 +[#126743]: https://github.com/home-assistant/core/pull/126743 +[#126744]: https://github.com/home-assistant/core/pull/126744 +[#126746]: https://github.com/home-assistant/core/pull/126746 +[#126748]: https://github.com/home-assistant/core/pull/126748 +[#126749]: https://github.com/home-assistant/core/pull/126749 +[#126750]: https://github.com/home-assistant/core/pull/126750 +[#126753]: https://github.com/home-assistant/core/pull/126753 +[#126762]: https://github.com/home-assistant/core/pull/126762 +[#126763]: https://github.com/home-assistant/core/pull/126763 +[#126765]: https://github.com/home-assistant/core/pull/126765 +[#126766]: https://github.com/home-assistant/core/pull/126766 +[#126769]: https://github.com/home-assistant/core/pull/126769 +[#126774]: https://github.com/home-assistant/core/pull/126774 +[#126778]: https://github.com/home-assistant/core/pull/126778 +[#126791]: https://github.com/home-assistant/core/pull/126791 +[#126793]: https://github.com/home-assistant/core/pull/126793 +[#126817]: https://github.com/home-assistant/core/pull/126817 +[#126823]: https://github.com/home-assistant/core/pull/126823 +[#126824]: https://github.com/home-assistant/core/pull/126824 +[#126826]: https://github.com/home-assistant/core/pull/126826 +[#126832]: https://github.com/home-assistant/core/pull/126832 +[#126834]: https://github.com/home-assistant/core/pull/126834 +[#126837]: https://github.com/home-assistant/core/pull/126837 +[#126838]: https://github.com/home-assistant/core/pull/126838 +[#126841]: https://github.com/home-assistant/core/pull/126841 +[#126843]: https://github.com/home-assistant/core/pull/126843 +[#126845]: https://github.com/home-assistant/core/pull/126845 +[#126850]: https://github.com/home-assistant/core/pull/126850 +[#126851]: https://github.com/home-assistant/core/pull/126851 +[#126857]: https://github.com/home-assistant/core/pull/126857 +[#126867]: https://github.com/home-assistant/core/pull/126867 +[#126868]: https://github.com/home-assistant/core/pull/126868 +[#126871]: https://github.com/home-assistant/core/pull/126871 +[#126872]: https://github.com/home-assistant/core/pull/126872 +[#126873]: https://github.com/home-assistant/core/pull/126873 +[#126882]: https://github.com/home-assistant/core/pull/126882 +[#126883]: https://github.com/home-assistant/core/pull/126883 +[#126886]: https://github.com/home-assistant/core/pull/126886 +[#126889]: https://github.com/home-assistant/core/pull/126889 +[#126902]: https://github.com/home-assistant/core/pull/126902 +[#126903]: https://github.com/home-assistant/core/pull/126903 +[#126907]: https://github.com/home-assistant/core/pull/126907 +[#126910]: https://github.com/home-assistant/core/pull/126910 +[#126911]: https://github.com/home-assistant/core/pull/126911 +[#126912]: https://github.com/home-assistant/core/pull/126912 +[#126918]: https://github.com/home-assistant/core/pull/126918 +[#126923]: https://github.com/home-assistant/core/pull/126923 +[#126926]: https://github.com/home-assistant/core/pull/126926 +[#126928]: https://github.com/home-assistant/core/pull/126928 +[#126929]: https://github.com/home-assistant/core/pull/126929 +[#126933]: https://github.com/home-assistant/core/pull/126933 +[#126934]: https://github.com/home-assistant/core/pull/126934 +[#126944]: https://github.com/home-assistant/core/pull/126944 +[#126954]: https://github.com/home-assistant/core/pull/126954 +[#126962]: https://github.com/home-assistant/core/pull/126962 +[#126965]: https://github.com/home-assistant/core/pull/126965 +[#126970]: https://github.com/home-assistant/core/pull/126970 +[#126990]: https://github.com/home-assistant/core/pull/126990 +[#126997]: https://github.com/home-assistant/core/pull/126997 +[#127001]: https://github.com/home-assistant/core/pull/127001 +[#127009]: https://github.com/home-assistant/core/pull/127009 +[#127010]: https://github.com/home-assistant/core/pull/127010 +[#127013]: https://github.com/home-assistant/core/pull/127013 +[#127032]: https://github.com/home-assistant/core/pull/127032 +[#127035]: https://github.com/home-assistant/core/pull/127035 +[#127048]: https://github.com/home-assistant/core/pull/127048 +[#127049]: https://github.com/home-assistant/core/pull/127049 +[#127050]: https://github.com/home-assistant/core/pull/127050 +[#127052]: https://github.com/home-assistant/core/pull/127052 +[#127053]: https://github.com/home-assistant/core/pull/127053 +[#127056]: https://github.com/home-assistant/core/pull/127056 +[#127063]: https://github.com/home-assistant/core/pull/127063 +[#127064]: https://github.com/home-assistant/core/pull/127064 +[#127065]: https://github.com/home-assistant/core/pull/127065 +[#127072]: https://github.com/home-assistant/core/pull/127072 +[#127091]: https://github.com/home-assistant/core/pull/127091 +[#127092]: https://github.com/home-assistant/core/pull/127092 +[#127096]: https://github.com/home-assistant/core/pull/127096 +[#127114]: https://github.com/home-assistant/core/pull/127114 +[#127120]: https://github.com/home-assistant/core/pull/127120 +[#127125]: https://github.com/home-assistant/core/pull/127125 +[#127126]: https://github.com/home-assistant/core/pull/127126 +[#127127]: https://github.com/home-assistant/core/pull/127127 +[#127128]: https://github.com/home-assistant/core/pull/127128 +[#127129]: https://github.com/home-assistant/core/pull/127129 +[#127130]: https://github.com/home-assistant/core/pull/127130 +[#127133]: https://github.com/home-assistant/core/pull/127133 +[#127136]: https://github.com/home-assistant/core/pull/127136 +[#127153]: https://github.com/home-assistant/core/pull/127153 +[#127179]: https://github.com/home-assistant/core/pull/127179 +[#127183]: https://github.com/home-assistant/core/pull/127183 +[#127213]: https://github.com/home-assistant/core/pull/127213 +[#127214]: https://github.com/home-assistant/core/pull/127214 +[#127215]: https://github.com/home-assistant/core/pull/127215 +[#127216]: https://github.com/home-assistant/core/pull/127216 +[#127217]: https://github.com/home-assistant/core/pull/127217 +[#127218]: https://github.com/home-assistant/core/pull/127218 +[#127220]: https://github.com/home-assistant/core/pull/127220 +[#127221]: https://github.com/home-assistant/core/pull/127221 +[#127222]: https://github.com/home-assistant/core/pull/127222 +[#127226]: https://github.com/home-assistant/core/pull/127226 +[#127231]: https://github.com/home-assistant/core/pull/127231 +[#127234]: https://github.com/home-assistant/core/pull/127234 +[#127254]: https://github.com/home-assistant/core/pull/127254 +[#127256]: https://github.com/home-assistant/core/pull/127256 +[#127264]: https://github.com/home-assistant/core/pull/127264 +[#127292]: https://github.com/home-assistant/core/pull/127292 +[#127331]: https://github.com/home-assistant/core/pull/127331 +[#127333]: https://github.com/home-assistant/core/pull/127333 +[#127338]: https://github.com/home-assistant/core/pull/127338 +[@ALERTua]: https://github.com/ALERTua +[@AlCalzone]: https://github.com/AlCalzone +[@Alexwijn]: https://github.com/Alexwijn +[@Balake]: https://github.com/Balake +[@Bre77]: https://github.com/Bre77 +[@CFenner]: https://github.com/CFenner +[@Cereal2nd]: https://github.com/Cereal2nd +[@DCSBL]: https://github.com/DCSBL +[@Diegorro98]: https://github.com/Diegorro98 +[@GeoffAtHome]: https://github.com/GeoffAtHome +[@Gigatrappeur]: https://github.com/Gigatrappeur +[@HarvsG]: https://github.com/HarvsG +[@IceBotYT]: https://github.com/IceBotYT +[@Kane610]: https://github.com/Kane610 +[@Klikini]: https://github.com/Klikini +[@LG-ThinQ-Integration]: https://github.com/LG-ThinQ-Integration +[@Lash-L]: https://github.com/Lash-L +[@Lektrico]: https://github.com/Lektrico +[@LennP]: https://github.com/LennP +[@LouisChrist]: https://github.com/LouisChrist +[@LucaDiba]: https://github.com/LucaDiba +[@MarkGodwin]: https://github.com/MarkGodwin +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@Michal4K]: https://github.com/Michal4K +[@N3rdix]: https://github.com/N3rdix +[@Nidre]: https://github.com/Nidre +[@Noltari]: https://github.com/Noltari +[@PaarthShah]: https://github.com/PaarthShah +[@PeteRager]: https://github.com/PeteRager +[@RJPoelstra]: https://github.com/RJPoelstra +[@RZomermanMS]: https://github.com/RZomermanMS +[@Shulyaka]: https://github.com/Shulyaka +[@Shutgun]: https://github.com/Shutgun +[@Skaronator]: https://github.com/Skaronator +[@Smankusors]: https://github.com/Smankusors +[@SteveEasley]: https://github.com/SteveEasley +[@Thomas55555]: https://github.com/Thomas55555 +[@Trekky12]: https://github.com/Trekky12 +[@TrevorSchirmer]: https://github.com/TrevorSchirmer +[@ViViDboarder]: https://github.com/ViViDboarder +[@Window-Hero]: https://github.com/Window-Hero +[@YogevBokobza]: https://github.com/YogevBokobza +[@agoode]: https://github.com/agoode +[@albertomontesg]: https://github.com/albertomontesg +[@alengwenus]: https://github.com/alengwenus +[@alexandrecuer]: https://github.com/alexandrecuer +[@alexdev03]: https://github.com/alexdev03 +[@alexyao2015]: https://github.com/alexyao2015 +[@allenporter]: https://github.com/allenporter +[@andrew-codechimp]: https://github.com/andrew-codechimp +[@arturpragacz]: https://github.com/arturpragacz +[@atmurray]: https://github.com/atmurray +[@austinmroczek]: https://github.com/austinmroczek +[@autinerd]: https://github.com/autinerd +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@beastie29a]: https://github.com/beastie29a +[@bieniu]: https://github.com/bieniu +[@bouwew]: https://github.com/bouwew +[@bramkragten]: https://github.com/bramkragten +[@c0ffeeca7]: https://github.com/c0ffeeca7 +[@catsmanac]: https://github.com/catsmanac +[@cayossarian]: https://github.com/cayossarian +[@cbrouwer]: https://github.com/cbrouwer +[@cdce8p]: https://github.com/cdce8p +[@cdnninja]: https://github.com/cdnninja +[@chammp]: https://github.com/chammp +[@chemelli74]: https://github.com/chemelli74 +[@civita]: https://github.com/civita +[@claui]: https://github.com/claui +[@cnico]: https://github.com/cnico +[@crevetor]: https://github.com/crevetor +[@daniel-k]: https://github.com/daniel-k +[@dieselrabbit]: https://github.com/dieselrabbit +[@dknowles2]: https://github.com/dknowles2 +[@dmulcahey]: https://github.com/dmulcahey +[@dontinelli]: https://github.com/dontinelli +[@dougiteixeira]: https://github.com/dougiteixeira +[@drsgoodall]: https://github.com/drsgoodall +[@dudanov]: https://github.com/dudanov +[@edenhaus]: https://github.com/edenhaus +[@eifinger]: https://github.com/eifinger +[@elmurato]: https://github.com/elmurato +[@elupus]: https://github.com/elupus +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@euandekock]: https://github.com/euandekock +[@exxamalte]: https://github.com/exxamalte +[@farmio]: https://github.com/farmio +[@fiste788]: https://github.com/fiste788 +[@fredrike]: https://github.com/fredrike +[@frenck]: https://github.com/frenck +[@functionpointer]: https://github.com/functionpointer +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@hanskroner]: https://github.com/hanskroner +[@hesselonline]: https://github.com/hesselonline +[@hunterjm]: https://github.com/hunterjm +[@iloveicedgreentea]: https://github.com/iloveicedgreentea +[@indrajitr]: https://github.com/indrajitr +[@iskrakranj]: https://github.com/iskrakranj +[@jbouwh]: https://github.com/jbouwh +[@jeeftor]: https://github.com/jeeftor +[@jesperraemaekers]: https://github.com/jesperraemaekers +[@jesserockz]: https://github.com/jesserockz +[@jm-cook]: https://github.com/jm-cook +[@jnsgruk]: https://github.com/jnsgruk +[@joncar]: https://github.com/joncar +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@jrieger]: https://github.com/jrieger +[@jschlyter]: https://github.com/jschlyter +[@jvmahon]: https://github.com/jvmahon +[@kamiyo]: https://github.com/kamiyo +[@karwosts]: https://github.com/karwosts +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@krasnoukhov]: https://github.com/krasnoukhov +[@krx]: https://github.com/krx +[@krzysdabro]: https://github.com/krzysdabro +[@lboue]: https://github.com/lboue +[@ldfandian]: https://github.com/ldfandian +[@liudger]: https://github.com/liudger +[@ludeeus]: https://github.com/ludeeus +[@marcelveldt]: https://github.com/marcelveldt +[@markruys]: https://github.com/markruys +[@martinssipenko]: https://github.com/martinssipenko +[@matrixd2]: https://github.com/matrixd2 +[@mback2k]: https://github.com/mback2k +[@mdegat01]: https://github.com/mdegat01 +[@mib1185]: https://github.com/mib1185 +[@mikey0000]: https://github.com/mikey0000 +[@mj23000]: https://github.com/mj23000 +[@mpw96]: https://github.com/mpw96 +[@mrpasztoradam]: https://github.com/mrpasztoradam +[@ms264556]: https://github.com/ms264556 +[@mtielen]: https://github.com/mtielen +[@mvdwetering]: https://github.com/mvdwetering +[@mvn23]: https://github.com/mvn23 +[@noahhusby]: https://github.com/noahhusby +[@npike]: https://github.com/npike +[@nprez83]: https://github.com/nprez83 +[@ol-iver]: https://github.com/ol-iver +[@ollo69]: https://github.com/ollo69 +[@ozadr1an]: https://github.com/ozadr1an +[@peteS-UK]: https://github.com/peteS-UK +[@piitaya]: https://github.com/piitaya +[@proxi]: https://github.com/proxi +[@pssc]: https://github.com/pssc +[@puddly]: https://github.com/puddly +[@rajlaud]: https://github.com/rajlaud +[@raman325]: https://github.com/raman325 +[@rcloran]: https://github.com/rcloran +[@renehonig]: https://github.com/renehonig +[@rvmey]: https://github.com/rvmey +[@rytilahti]: https://github.com/rytilahti +[@s0129]: https://github.com/s0129 +[@sdb9696]: https://github.com/sdb9696 +[@seferino-fernandez]: https://github.com/seferino-fernandez +[@sh0oki]: https://github.com/sh0oki +[@shaiu]: https://github.com/shaiu +[@shapournemati-iotty]: https://github.com/shapournemati-iotty +[@shedokan]: https://github.com/shedokan +[@silamon]: https://github.com/silamon +[@silentguy256]: https://github.com/silentguy256 +[@somdoron]: https://github.com/somdoron +[@sorgfresser]: https://github.com/sorgfresser +[@starkillerOG]: https://github.com/starkillerOG +[@steffenrapp]: https://github.com/steffenrapp +[@swistakm]: https://github.com/swistakm +[@synesthesiam]: https://github.com/synesthesiam +[@tal]: https://github.com/tal +[@taltaub22]: https://github.com/taltaub22 +[@tathamoddie]: https://github.com/tathamoddie +[@tdfountain]: https://github.com/tdfountain +[@teharris1]: https://github.com/teharris1 +[@thecode]: https://github.com/thecode +[@timmo001]: https://github.com/timmo001 +[@tl-sl]: https://github.com/tl-sl +[@tr4nt0r]: https://github.com/tr4nt0r +[@treetip]: https://github.com/treetip +[@tronikos]: https://github.com/tronikos +[@tsvi]: https://github.com/tsvi +[@vhkristof]: https://github.com/vhkristof +[@wbyoung]: https://github.com/wbyoung +[@xLarry]: https://github.com/xLarry +[@yyolk]: https://github.com/yyolk +[@zweckj]: https://github.com/zweckj +[@zxdavb]: https://github.com/zxdavb diff --git a/source/connectzbt1/index.html b/source/connectzbt1/index.html index 790d2f529a9f..ff6514fd40d7 100644 --- a/source/connectzbt1/index.html +++ b/source/connectzbt1/index.html @@ -79,7 +79,7 @@