diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 7a7d712f113..3f8cb0d747a 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -11,7 +11,7 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: actions/stale@v9.0.0 + - uses: actions/stale@v9.1.0 if: ${{ github.repository_owner == 'home-assistant' }} with: repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e2c578b6db8..c43bc84fc7f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ jobs: - name: Check out files from GitHub uses: actions/checkout@v4.2.2 - name: Setting up Node.js - uses: actions/setup-node@v4.1.0 + uses: actions/setup-node@v4.3.0 with: node-version: 20 cache: "npm" @@ -27,7 +27,7 @@ jobs: - name: Check out files from GitHub uses: actions/checkout@v4.2.2 - name: Setting up Node.js - uses: actions/setup-node@v4.1.0 + uses: actions/setup-node@v4.3.0 with: node-version: 20 cache: "npm" diff --git a/CODEOWNERS b/CODEOWNERS index 0ae04f10b1c..95d57ed61b2 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -95,6 +95,7 @@ source/_integrations/azure_data_explorer.markdown @kaareseras source/_integrations/azure_devops.markdown @timmo001 source/_integrations/azure_event_hub.markdown @eavanvalkenburg source/_integrations/azure_service_bus.markdown @hfurubotten +source/_integrations/azure_storage.markdown @zweckj source/_integrations/backup.markdown @home-assistant/core source/_integrations/baf.markdown @bdraco @jfroy source/_integrations/balboa.markdown @garbled1 @natekspencer @@ -117,7 +118,7 @@ source/_integrations/bluetooth_adapters.markdown @bdraco source/_integrations/bmw_connected_drive.markdown @gerard33 @rikroe source/_integrations/bond.markdown @bdraco @prystupa @joshs85 @marciogranzotto source/_integrations/bosch_shc.markdown @tschamm -source/_integrations/brandt.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 +source/_integrations/brandt.markdown @imicknl source/_integrations/braviatv.markdown @bieniu @Drafteed source/_integrations/brel_home.markdown @starkillerOG source/_integrations/bring.markdown @miaucl @tr4nt0r @@ -133,6 +134,7 @@ 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/burbank_water_and_power.markdown @tronikos source/_integrations/button.markdown @home-assistant/core source/_integrations/calendar.markdown @home-assistant/core source/_integrations/cambridge_audio.markdown @noahhusby @@ -161,11 +163,12 @@ source/_integrations/config.markdown @home-assistant/core source/_integrations/configurator.markdown @home-assistant/core source/_integrations/control4.markdown @lawtancool source/_integrations/conversation.markdown @home-assistant/core @synesthesiam +source/_integrations/cookidoo.markdown @miaucl source/_integrations/coolmaster.markdown @OnFreund source/_integrations/counter.markdown @fabaff source/_integrations/cover.markdown @home-assistant/core source/_integrations/cover.template.markdown @home-assistant/core -source/_integrations/cozytouch.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 +source/_integrations/cozytouch.markdown @imicknl source/_integrations/cpuspeed.markdown @fabaff source/_integrations/cribl.markdown @Bre77 source/_integrations/crownstone.markdown @Crownstone @RicArch97 @@ -177,6 +180,7 @@ 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/decorquip.markdown @starkillerOG source/_integrations/default_config.markdown @home-assistant/core source/_integrations/delijn.markdown @bollewolle @Emilv2 source/_integrations/delmarva.markdown @tronikos @@ -223,6 +227,7 @@ source/_integrations/ecovacs.markdown @mib1185 @edenhaus @Augar source/_integrations/ecowitt.markdown @pvizeli source/_integrations/efergy.markdown @tkdrob source/_integrations/egardia.markdown @jeroenterheerdt +source/_integrations/eheimdigital.markdown @autinerd source/_integrations/electrasmart.markdown @jafar-atili source/_integrations/electric_kiwi.markdown @mikey0000 source/_integrations/elevenlabs.markdown @sorgfresser @@ -277,7 +282,7 @@ source/_integrations/fitbit.markdown @allenporter source/_integrations/fivem.markdown @Sander0542 source/_integrations/fjaraskupan.markdown @elupus source/_integrations/flexit_bacnet.markdown @lellky @piotrbulinski -source/_integrations/flexom.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 +source/_integrations/flexom.markdown @imicknl source/_integrations/flick_electric.markdown @ZephireNZ source/_integrations/flipr.markdown @cnico source/_integrations/flo.markdown @dmulcahey @@ -323,13 +328,14 @@ 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 @tronikos +source/_integrations/google_drive.markdown @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 -source/_integrations/govee_ble.markdown @bdraco @PierreAronnax +source/_integrations/govee_ble.markdown @bdraco source/_integrations/govee_light_local.markdown @Galorhallen source/_integrations/gpsd.markdown @fabaff @jrieger source/_integrations/gree.markdown @cmroche @@ -339,15 +345,17 @@ source/_integrations/guardian.markdown @bachya source/_integrations/habitica.markdown @tr4nt0r source/_integrations/hardware.markdown @home-assistant/core source/_integrations/harmony.markdown @ehendrix23 @bdraco @mkeesey @Aohzan +source/_integrations/harvey.markdown @Jordi1990 source/_integrations/hassio.markdown @home-assistant/supervisor source/_integrations/havana_shade.markdown @starkillerOG source/_integrations/hdmi_cec.markdown @inytar source/_integrations/heatmiser.markdown @andylockran +source/_integrations/heicko.markdown @starkillerOG source/_integrations/heiwa.markdown @cmroche source/_integrations/heos.markdown @andrewsayre source/_integrations/here_travel_time.markdown @eifinger -source/_integrations/hexaom.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 -source/_integrations/hi_kumo.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 +source/_integrations/hexaom.markdown @imicknl +source/_integrations/hi_kumo.markdown @imicknl source/_integrations/hikvision.markdown @mezz64 source/_integrations/hikvisioncam.markdown @fbradyirl source/_integrations/hisense_aehw4a1.markdown @bannhead @@ -356,7 +364,7 @@ source/_integrations/hive.markdown @Rendili @KJonline source/_integrations/hko.markdown @MisterCommand source/_integrations/hlk_sw16.markdown @jameshilliard source/_integrations/holiday.markdown @jrieger @gjohansson-ST -source/_integrations/home_connect.markdown @DavidMStraub @Diegorro98 +source/_integrations/home_connect.markdown @DavidMStraub @Diegorro98 @MartinHjelmare source/_integrations/home_plus_control.markdown @cgtobi source/_integrations/homeassistant.markdown @home-assistant/core source/_integrations/homeassistant_alerts.markdown @home-assistant/core @@ -364,6 +372,7 @@ source/_integrations/homeassistant_green.markdown @home-assistant/core source/_integrations/homeassistant_hardware.markdown @home-assistant/core source/_integrations/homeassistant_sky_connect.markdown @home-assistant/core source/_integrations/homeassistant_yellow.markdown @home-assistant/core +source/_integrations/homee.markdown @Taraman17 source/_integrations/homekit.markdown @bdraco source/_integrations/homekit_controller.markdown @Jc2k @bdraco source/_integrations/homematic.markdown @pvizeli @@ -387,9 +396,9 @@ source/_integrations/hyperion.markdown @dermotduffy source/_integrations/ialarm.markdown @RyuzakiKK source/_integrations/iammeter.markdown @lewei50 source/_integrations/iaqualink.markdown @flz -source/_integrations/ibeacon.markdown @bdraco source/_integrations/icloud.markdown @Quentame @nzapponi source/_integrations/idasen_desk.markdown @abmantis +source/_integrations/igloohome.markdown @keithle888 source/_integrations/ign_sismologia.markdown @exxamalte source/_integrations/image.markdown @home-assistant/core source/_integrations/image_processing.markdown @home-assistant/core @@ -412,9 +421,10 @@ source/_integrations/insteon.markdown @teharris1 source/_integrations/integration.markdown @dgomes source/_integrations/intellifire.markdown @jeeftor source/_integrations/intesishome.markdown @jnimmo +source/_integrations/iometer.markdown @MaestroOnICe source/_integrations/ios.markdown @robbiet480 source/_integrations/iotawatt.markdown @gtdiehl @jyavenard -source/_integrations/iotty.markdown @pburgio @shapournemati-iotty +source/_integrations/iotty.markdown @shapournemati-iotty source/_integrations/iperf3.markdown @rohankapoorcom source/_integrations/ipma.markdown @dgomes source/_integrations/iqvia.markdown @bachya @@ -428,8 +438,9 @@ source/_integrations/israel_rail.markdown @shaiu source/_integrations/iss.markdown @DurgNomis-drol source/_integrations/ista_ecotrend.markdown @tr4nt0r source/_integrations/isy994.markdown @bdraco @shbatm +source/_integrations/ituran.markdown @shmuelzon source/_integrations/izone.markdown @Swamp-Ig -source/_integrations/jellyfin.markdown @j-stienstra @ctalkington +source/_integrations/jellyfin.markdown @RunC0deRun @ctalkington source/_integrations/jewish_calendar.markdown @tsvi source/_integrations/juicenet.markdown @jesserockz source/_integrations/justnimbus.markdown @kvanzuijlen @@ -467,6 +478,7 @@ source/_integrations/leaone.markdown @bdraco source/_integrations/led_ble.markdown @bdraco source/_integrations/legrand.markdown @cgtobi source/_integrations/lektrico.markdown @lektrico +source/_integrations/letpot.markdown @jpelgrom source/_integrations/leviton_z_wave.markdown @home-assistant/z-wave source/_integrations/lg_netcast.markdown @Drafteed @splinter98 source/_integrations/lg_thinq.markdown @LG-ThinQ-Integration @@ -474,8 +486,10 @@ source/_integrations/lidarr.markdown @tkdrob source/_integrations/lifx.markdown @Djelibeybi source/_integrations/light.markdown @home-assistant/core source/_integrations/light.template.markdown @home-assistant/core +source/_integrations/linak.markdown @abmantis source/_integrations/linear_garage_door.markdown @IceBotYT source/_integrations/linux_battery.markdown @fabaff +source/_integrations/linx.markdown @starkillerOG source/_integrations/litejet.markdown @joncar source/_integrations/litterrobot.markdown @natekspencer @tkdrob source/_integrations/livisi.markdown @StefanIacobLivisi @planbnet @@ -503,6 +517,8 @@ source/_integrations/martec.markdown @starkillerOG source/_integrations/mastodon.markdown @fabaff @andrew-codechimp source/_integrations/matrix.markdown @PaarthShah source/_integrations/matter.markdown @home-assistant/matter +source/_integrations/mcp.markdown @allenporter +source/_integrations/mcp_server.markdown @allenporter source/_integrations/mealie.markdown @joostlek @andrew-codechimp source/_integrations/meater.markdown @Sotolotl @emontnemery source/_integrations/medcom_ble.markdown @elafargue @@ -541,6 +557,7 @@ source/_integrations/moon.markdown @fabaff @frenck source/_integrations/mopeka.markdown @bdraco source/_integrations/motion_blinds.markdown @starkillerOG source/_integrations/motionblinds_ble.markdown @LennP @jerrybboy +source/_integrations/motionblinds_matter.markdown @home-assistant/matter source/_integrations/motioneye.markdown @dermotduffy source/_integrations/mqtt.markdown @emontnemery @jbouwh @bdraco source/_integrations/msteams.markdown @peroyvind @@ -563,7 +580,7 @@ source/_integrations/netgear.markdown @hacf-fr @Quentame @starkillerOG source/_integrations/netgear_lte.markdown @tkdrob source/_integrations/network.markdown @home-assistant/core source/_integrations/nexia.markdown @bdraco -source/_integrations/nexity.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 +source/_integrations/nexity.markdown @imicknl source/_integrations/nextbus.markdown @vividboarder source/_integrations/nextcloud.markdown @mib1185 source/_integrations/nextdns.markdown @bieniu @@ -571,10 +588,10 @@ source/_integrations/nfandroidtv.markdown @tkdrob source/_integrations/nibe_heatpump.markdown @elupus source/_integrations/nice_go.markdown @IceBotYT source/_integrations/nightscout.markdown @marciogranzotto +source/_integrations/niko_home_control.markdown @VandeurenGlenn source/_integrations/nilu.markdown @hfurubotten source/_integrations/nina.markdown @DeerMaximum source/_integrations/nissan_leaf.markdown @filcole -source/_integrations/nmbs.markdown @thibmaek source/_integrations/noaa_tides.markdown @jdelaney72 source/_integrations/nobo_hub.markdown @echoromeo @oyvindwe source/_integrations/nordpool.markdown @gjohansson-ST @@ -587,7 +604,7 @@ source/_integrations/nuheat.markdown @tstabrawa source/_integrations/nuki.markdown @pschmitt @pvizeli @pree source/_integrations/numato.markdown @clssn source/_integrations/number.markdown @home-assistant/core @Shulyaka -source/_integrations/nut.markdown @bdraco @ollo69 @pestevez +source/_integrations/nut.markdown @bdraco @ollo69 @pestevez @tdfountain source/_integrations/nutrichef.markdown @bdraco source/_integrations/nws.markdown @MatthewFlamm @kamiyo source/_integrations/nyt_games.markdown @joostlek @@ -595,14 +612,16 @@ source/_integrations/nzbget.markdown @chriscla source/_integrations/obihai.markdown @dshokouhi @ejpenney source/_integrations/octoprint.markdown @rfleming71 source/_integrations/ohmconnect.markdown @robbiet480 +source/_integrations/ohme.markdown @dan-r source/_integrations/ollama.markdown @synesthesiam source/_integrations/ombi.markdown @larssont source/_integrations/onboarding.markdown @home-assistant/core source/_integrations/oncue.markdown @bdraco @peterager source/_integrations/ondilo_ico.markdown @JeromeHXP +source/_integrations/onedrive.markdown @zweckj source/_integrations/onewire.markdown @garbled1 @epenet -source/_integrations/onkyo.markdown @arturpragacz -source/_integrations/onvif.markdown @hunterjm +source/_integrations/onkyo.markdown @arturpragacz @eclair4151 +source/_integrations/onvif.markdown @hunterjm @jterrace source/_integrations/open_meteo.markdown @frenck source/_integrations/openai_conversation.markdown @balloob source/_integrations/openerz.markdown @misialq @@ -621,12 +640,14 @@ source/_integrations/oru_opower.markdown @tronikos source/_integrations/osoenergy.markdown @osohotwateriot source/_integrations/otbr.markdown @home-assistant/core source/_integrations/ourgroceries.markdown @OnFreund -source/_integrations/overkiz.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 +source/_integrations/overkiz.markdown @imicknl +source/_integrations/overseerr.markdown @joostlek source/_integrations/ovo_energy.markdown @timmo001 source/_integrations/p1_monitor.markdown @klaasnicolaas source/_integrations/palazzetti.markdown @dotvav source/_integrations/panel_custom.markdown @home-assistant/frontend source/_integrations/pcs_lighting.markdown @gwww +source/_integrations/peblar.markdown @frenck source/_integrations/peco.markdown @IceBotYT source/_integrations/peco_opower.markdown @tronikos source/_integrations/pegel_online.markdown @mib1185 @@ -634,19 +655,21 @@ source/_integrations/pepco.markdown @tronikos source/_integrations/permobil.markdown @IsakNyberg source/_integrations/persistent_notification.markdown @home-assistant/core source/_integrations/pge.markdown @tronikos +source/_integrations/pglab.markdown @pglab-electronics source/_integrations/philips_js.markdown @elupus source/_integrations/pi_hole.markdown @shenxn -source/_integrations/picnic.markdown @corneyl +source/_integrations/picnic.markdown @corneyl @codesalatdev source/_integrations/pinecil.markdown @tr4nt0r source/_integrations/ping.markdown @jpbede source/_integrations/piper.markdown @balloob @synesthesiam source/_integrations/plaato.markdown @JohNan source/_integrations/plex.markdown @jjlawren -source/_integrations/plugwise.markdown @CoMPaTech @bouwew @frenck +source/_integrations/plugwise.markdown @CoMPaTech @bouwew source/_integrations/plum_lightpad.markdown @ColinHarrington @prystupa source/_integrations/point.markdown @fredrike source/_integrations/poolsense.markdown @haemishkyd source/_integrations/portlandgeneral.markdown @tronikos +source/_integrations/powerfox.markdown @klaasnicolaas source/_integrations/powerwall.markdown @bdraco @jrester @daniel-simpson source/_integrations/private_ble_device.markdown @Jc2k source/_integrations/profiler.markdown @bdraco @@ -668,6 +691,7 @@ source/_integrations/pvoutput.markdown @frenck source/_integrations/pvpc_hourly_pricing.markdown @azogue source/_integrations/pyload.markdown @tr4nt0r source/_integrations/qbittorrent.markdown @geoffreylagaisse @finder39 +source/_integrations/qbus.markdown @Qbus-iot @thomasddn source/_integrations/qingping.markdown @bdraco source/_integrations/qld_bushfire.markdown @exxamalte source/_integrations/qnap.markdown @disforw @@ -701,7 +725,7 @@ source/_integrations/reolink.markdown @starkillerOG source/_integrations/repairs.markdown @home-assistant/core source/_integrations/repetier.markdown @ShadowBr0ther source/_integrations/rest_command.markdown @jpbede -source/_integrations/rexel.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 +source/_integrations/rexel.markdown @imicknl source/_integrations/rflink.markdown @javicalle source/_integrations/rfxtrx.markdown @danielhiversen @elupus @RobBie1221 source/_integrations/rhasspy.markdown @balloob @synesthesiam @@ -710,7 +734,7 @@ source/_integrations/ring.markdown @sdb9696 source/_integrations/risco.markdown @OnFreund source/_integrations/rituals_perfume_genie.markdown @milanmeu @frenck source/_integrations/rmvtransport.markdown @cgtobi -source/_integrations/roborock.markdown @Lash-L +source/_integrations/roborock.markdown @Lash-L @allenporter source/_integrations/roku.markdown @ctalkington source/_integrations/romy.markdown @xeniter source/_integrations/roomba.markdown @pschmitt @cyr-ius @shenxn @Orhideous @@ -719,6 +743,7 @@ source/_integrations/rpi_power.markdown @shenxn @swetoast source/_integrations/rss_feed_template.markdown @home-assistant/core source/_integrations/ruckus_unleashed.markdown @lanrat @ms264556 @gabe565 source/_integrations/russound_rio.markdown @noahhusby +source/_integrations/russound_rnet.markdown @noahhusby source/_integrations/ruuvi_gateway.markdown @akx source/_integrations/ruuvitag_ble.markdown @akx source/_integrations/rympro.markdown @OnFreund @elad-bar @maorcc @@ -746,6 +771,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/sensorpush_cloud.markdown @sstallion source/_integrations/sensoterra.markdown @markruys source/_integrations/sentry.markdown @dcramer @frenck source/_integrations/senz.markdown @milanmeu @@ -764,7 +790,7 @@ source/_integrations/simplefin.markdown @scottg489 @jeeftor source/_integrations/simplepush.markdown @engrbm87 source/_integrations/simplisafe.markdown @bachya source/_integrations/simply_automated.markdown @gwww -source/_integrations/simu.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 +source/_integrations/simu.markdown @imicknl source/_integrations/sinch.markdown @bendikrb source/_integrations/siren.markdown @home-assistant/core @raman325 source/_integrations/sisyphus.markdown @jkeljo @@ -774,12 +800,14 @@ source/_integrations/skybell.markdown @tkdrob source/_integrations/slack.markdown @tkdrob @fletcherau source/_integrations/sleepiq.markdown @mfugate1 @kbickar source/_integrations/slide.markdown @ualex73 +source/_integrations/slide_local.markdown @dontinelli source/_integrations/slimproto.markdown @marcelveldt -source/_integrations/sma.markdown @kellerza @rklomp +source/_integrations/sma.markdown @kellerza @rklomp @erwindouna source/_integrations/smappee.markdown @bsmappee source/_integrations/smart_blinds.markdown @starkillerOG source/_integrations/smart_home.markdown @starkillerOG source/_integrations/smart_meter_texas.markdown @grahamwetzler +source/_integrations/smart_rollos.markdown @starkillerOG source/_integrations/smarther.markdown @cgtobi source/_integrations/smarttub.markdown @mdz source/_integrations/smarty.markdown @z0mbieprocess @@ -789,13 +817,14 @@ source/_integrations/sms.markdown @ocalvo source/_integrations/smud.markdown @tronikos source/_integrations/snapcast.markdown @luar123 source/_integrations/snmp.markdown @nmaggioni +source/_integrations/snoo.markdown @Lash-L source/_integrations/snooz.markdown @AustinBrunkhorst source/_integrations/solaredge.markdown @frenck @bdraco source/_integrations/solaredge_local.markdown @drobtravels @scheric source/_integrations/solarlog.markdown @Ernst79 @dontinelli -source/_integrations/solax.markdown @squishykid +source/_integrations/solax.markdown @squishykid @Darsstar source/_integrations/soma.markdown @ratsept @sebfortier2288 -source/_integrations/somfy.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 +source/_integrations/somfy.markdown @imicknl source/_integrations/sonarr.markdown @ctalkington source/_integrations/songpal.markdown @rytilahti @shenxn source/_integrations/sonos.markdown @jjlawren @peterager @@ -809,11 +838,10 @@ source/_integrations/squeezebox.markdown @rajlaud @pssc @peteS-UK source/_integrations/srp_energy.markdown @briglx source/_integrations/starline.markdown @anonym-tsk source/_integrations/starlink.markdown @boswelja -source/_integrations/statistics.markdown @ThomDietrich +source/_integrations/statistics.markdown @ThomDietrich @gjohansson-ST source/_integrations/steam_online.markdown @tkdrob source/_integrations/steamist.markdown @bdraco source/_integrations/stiebel_eltron.markdown @fucm -source/_integrations/stookalert.markdown @fwestenberg @frenck source/_integrations/stookwijzer.markdown @fwestenberg source/_integrations/stream.markdown @hunterjm @uvjustin @allenporter source/_integrations/stt.markdown @home-assistant/core @@ -841,7 +869,7 @@ source/_integrations/synology_dsm.markdown @hacf-fr @Quentame @mib1185 source/_integrations/synology_srm.markdown @aerialls source/_integrations/system_bridge.markdown @timmo001 source/_integrations/systemmonitor.markdown @gjohansson-ST -source/_integrations/tado.markdown @chiefdragon @erwindouna +source/_integrations/tado.markdown @erwindouna source/_integrations/tag.markdown @balloob @dmulcahey source/_integrations/tailscale.markdown @frenck source/_integrations/tailwind.markdown @frenck @@ -891,11 +919,12 @@ 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/tuya.markdown @Tuya @zlinoliver source/_integrations/twentemilieu.markdown @frenck source/_integrations/twinkly.markdown @dr1rrb @Robbie1221 @Olen source/_integrations/twitch.markdown @joostlek -source/_integrations/ubiwizz.markdown @imicknl @vlebourl @tetienne @nyroDev @tronix117 @alexfp14 +source/_integrations/ubiwizz.markdown @imicknl +source/_integrations/ublockout.markdown @starkillerOG source/_integrations/ukraine_alarm.markdown @PaulAnnekov source/_integrations/unifi.markdown @Kane610 source/_integrations/unifi_direct.markdown @tofuSCHNITZEL @@ -918,12 +947,12 @@ source/_integrations/vacuum.template.markdown @home-assistant/core source/_integrations/vallox.markdown @andre-richter @slovdahl @viiru- @yozik04 source/_integrations/valve.markdown @home-assistant/core source/_integrations/velbus.markdown @Cereal2nd @brefra -source/_integrations/velux.markdown @Julius2342 @DeerMaximum +source/_integrations/velux.markdown @Julius2342 @DeerMaximum @pawlizio source/_integrations/venstar.markdown @garbled1 @jhollowe source/_integrations/vermont_castings.markdown @jeeftor source/_integrations/versasense.markdown @imstevenxyz source/_integrations/version.markdown @ludeeus -source/_integrations/vesync.markdown @markperdue @webdjoe @thegardenmonkey @cdnninja +source/_integrations/vesync.markdown @markperdue @webdjoe @thegardenmonkey @cdnninja @iprak source/_integrations/vicare.markdown @CFenner source/_integrations/vilfo.markdown @ManneW source/_integrations/vivotek.markdown @HarlemSquirrel @@ -940,6 +969,7 @@ source/_integrations/wake_word.markdown @home-assistant/core @synesthesiam source/_integrations/wallbox.markdown @hesselonline source/_integrations/waqi.markdown @joostlek source/_integrations/water_heater.markdown @home-assistant/core +source/_integrations/watergate.markdown @adam-the-hero source/_integrations/watson_tts.markdown @rutkai source/_integrations/watttime.markdown @bachya source/_integrations/waze_travel_time.markdown @eifinger @@ -948,6 +978,7 @@ source/_integrations/weather.template.markdown @home-assistant/core source/_integrations/weatherflow.markdown @natekspencer @jeeftor source/_integrations/weatherflow_cloud.markdown @jeeftor source/_integrations/weatherkit.markdown @tjhorner +source/_integrations/webdav.markdown @jpbede source/_integrations/webhook.markdown @home-assistant/core source/_integrations/webmin.markdown @autinerd source/_integrations/webostv.markdown @thecode @@ -988,6 +1019,7 @@ source/_integrations/yi.markdown @bachya source/_integrations/yolink.markdown @matrixd2 source/_integrations/youless.markdown @gjong source/_integrations/youtube.markdown @joostlek +source/_integrations/zabbix.markdown @kruton source/_integrations/zamg.markdown @killer0071234 source/_integrations/zengge.markdown @emontnemery source/_integrations/zeroconf.markdown @bdraco diff --git a/Gemfile b/Gemfile index 7020f561721..d90f032ef33 100644 --- a/Gemfile +++ b/Gemfile @@ -4,15 +4,15 @@ ruby '> 2.5.0' group :development do gem 'rake', '13.2.1' - gem 'jekyll', '4.3.4' + gem 'jekyll', '4.4.1' gem 'compass', '1.0.3' gem 'sass-globbing', '1.1.5' gem 'stringex', '2.8.6' # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' - gem 'sass-embedded', '1.83.0' - gem 'rubocop', '1.69.2' - gem 'ruby-lsp', '0.22.1' + gem 'sass-embedded', '1.86.0' + gem 'rubocop', '1.74.0' + gem 'ruby-lsp', '0.23.12' gem 'rackup', '2.2.1' end @@ -24,7 +24,7 @@ group :jekyll_plugins do end gem 'sinatra', '4.1.1' -gem 'nokogiri', '1.17.2' +gem 'nokogiri', '1.18.6' # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # and associated library diff --git a/Gemfile.lock b/Gemfile.lock index 0ba3e84f8b0..b81e9ca59e0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -3,9 +3,9 @@ GEM specs: addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) - ast (2.4.2) + ast (2.4.3) base64 (0.2.0) - bigdecimal (3.1.8) + bigdecimal (3.1.9) chunky_png (1.4.0) colorator (1.1.0) commonmarker (0.23.11) @@ -21,34 +21,38 @@ GEM sass (>= 3.3.0, < 3.5) compass-import-once (1.0.5) sass (>= 3.2, < 3.5) - concurrent-ruby (1.3.4) + concurrent-ruby (1.3.5) + csv (3.3.3) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) eventmachine (1.2.7) - ffi (1.17.0-arm64-darwin) - ffi (1.17.0-x86_64-linux-gnu) + ffi (1.17.1-arm64-darwin) + ffi (1.17.1-x86_64-linux-gnu) forwardable-extended (2.6.0) - google-protobuf (4.29.2-arm64-darwin) + google-protobuf (4.30.1-arm64-darwin) bigdecimal rake (>= 13) - google-protobuf (4.29.2-x86_64-linux) + google-protobuf (4.30.1-x86_64-linux) bigdecimal rake (>= 13) http_parser.rb (0.8.0) - i18n (1.14.6) + i18n (1.14.7) concurrent-ruby (~> 1.0) - jekyll (4.3.4) + jekyll (4.4.1) addressable (~> 2.4) + base64 (~> 0.2) colorator (~> 1.0) + csv (~> 3.0) em-websocket (~> 0.5) i18n (~> 1.0) jekyll-sass-converter (>= 2.0, < 4.0) jekyll-watch (~> 2.0) + json (~> 2.6) kramdown (~> 2.3, >= 2.3.1) kramdown-parser-gfm (~> 1.0) liquid (~> 4.0) - mercenary (>= 0.3.6, < 0.5) + mercenary (~> 0.3, >= 0.3.6) pathutil (~> 0.9) rouge (>= 3.0, < 5.0) safe_yaml (~> 1.0) @@ -57,8 +61,8 @@ GEM jekyll-commonmark (1.4.0) commonmarker (~> 0.22) jekyll-paginate (1.1.0) - jekyll-sass-converter (3.0.0) - sass-embedded (~> 1.54) + jekyll-sass-converter (3.1.0) + sass-embedded (~> 1.75) jekyll-sitemap (1.4.0) jekyll (>= 3.7, < 5.0) jekyll-toc (0.19.0) @@ -66,40 +70,42 @@ GEM nokogiri (~> 1.12) jekyll-watch (2.2.1) listen (~> 3.0) - json (2.9.1) + json (2.10.2) kramdown (2.5.1) rexml (>= 3.3.9) kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) - language_server-protocol (3.17.0.3) + language_server-protocol (3.17.0.4) + lint_roller (1.1.0) liquid (4.0.4) listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - logger (1.6.4) + logger (1.6.6) mercenary (0.4.0) multi_json (1.15.0) mustermann (3.0.3) ruby2_keywords (~> 0.0.1) - nokogiri (1.17.2-arm64-darwin) + nokogiri (1.18.6-arm64-darwin) racc (~> 1.4) - nokogiri (1.17.2-x86_64-linux) + nokogiri (1.18.6-x86_64-linux-gnu) racc (~> 1.4) parallel (1.26.3) - parser (3.3.6.0) + parser (3.3.7.2) ast (~> 2.4.1) racc pathutil (0.16.2) forwardable-extended (~> 2.6) - prism (1.3.0) + prism (1.4.0) public_suffix (6.0.1) racc (1.8.1) - rack (3.1.8) + rack (3.1.12) rack-protection (4.1.1) base64 (>= 0.1.0) logger (>= 1.6.0) rack (>= 3.0.0, < 4) - rack-session (2.0.0) + rack-session (2.1.0) + base64 (>= 0.1.0) rack (>= 3.0.0) rackup (2.2.1) rack (>= 3) @@ -108,24 +114,25 @@ GEM rb-fsevent (0.11.2) rb-inotify (0.11.1) ffi (~> 1.0) - rbs (3.7.0) + rbs (3.9.1) logger - regexp_parser (2.9.3) - rexml (3.4.0) + regexp_parser (2.10.0) + rexml (3.4.1) rouge (4.5.1) - rubocop (1.69.2) + rubocop (1.74.0) json (~> 2.3) - language_server-protocol (>= 3.17.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.36.2, < 2.0) + rubocop-ast (>= 1.38.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.37.0) - parser (>= 3.3.1.0) - ruby-lsp (0.22.1) + rubocop-ast (1.41.0) + parser (>= 3.3.7.2) + ruby-lsp (0.23.12) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 4) @@ -134,9 +141,10 @@ GEM ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) - sass-embedded (1.83.0) - google-protobuf (~> 4.28) - rake (>= 13) + sass-embedded (1.86.0-arm64-darwin) + google-protobuf (~> 4.30) + sass-embedded (1.86.0-x86_64-linux-gnu) + google-protobuf (~> 4.30) sass-globbing (1.1.5) sass (>= 3.1) sassc (2.1.0) @@ -150,14 +158,14 @@ GEM rack-protection (= 4.1.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11708) + sorbet-runtime (0.5.11954) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) - tilt (2.5.0) + tilt (2.6.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - tzinfo-data (1.2024.2) + tzinfo-data (1.2025.2) tzinfo (>= 1.0.0) unicode-display_width (2.6.0) webrick (1.9.1) @@ -168,17 +176,17 @@ PLATFORMS DEPENDENCIES compass (= 1.0.3) - jekyll (= 4.3.4) + jekyll (= 4.4.1) jekyll-commonmark (= 1.4.0) jekyll-paginate (= 1.1.0) jekyll-sitemap (= 1.4.0) jekyll-toc (= 0.19.0) - nokogiri (= 1.17.2) + nokogiri (= 1.18.6) rackup (= 2.2.1) rake (= 13.2.1) - rubocop (= 1.69.2) - ruby-lsp (= 0.22.1) - sass-embedded (= 1.83.0) + rubocop (= 1.74.0) + ruby-lsp (= 0.23.12) + sass-embedded (= 1.86.0) sass-globbing (= 1.1.5) sassc (= 2.1.0) sinatra (= 4.1.1) @@ -190,4 +198,4 @@ RUBY VERSION ruby 2.6.2p47 BUNDLED WITH - 2.5.3 + 2.5.3 \ No newline at end of file diff --git a/_config.yml b/_config.yml index ed513ae0c89..a41aa1244f4 100644 --- a/_config.yml +++ b/_config.yml @@ -106,10 +106,10 @@ social: account: "https://fosstodon.org/@homeassistant" # Home Assistant release details -current_major_version: 2024 -current_minor_version: 12 -current_patch_version: 5 -date_released: 2024-12-20 +current_major_version: 2025 +current_minor_version: 3 +current_patch_version: 4 +date_released: 2025-03-21 # 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 f3f4f98e859..412647a80e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,17 +10,17 @@ "devDependencies": { "remark-cli": "^12.0.1", "remark-frontmatter": "^5.0.0", - "remark-lint": "^10.0.0", - "remark-lint-fenced-code-flag": "^4.0.0", - "remark-lint-heading-increment": "^4.0.0", - "remark-lint-heading-style": "^4.0.0", - "remark-lint-no-shell-dollars": "^4.0.0", - "remark-lint-ordered-list-marker-style": "^4.0.0", - "remark-lint-ordered-list-marker-value": "^4.0.0", + "remark-lint": "^10.0.1", + "remark-lint-fenced-code-flag": "^4.1.1", + "remark-lint-heading-increment": "^4.0.1", + "remark-lint-heading-style": "^4.0.1", + "remark-lint-no-shell-dollars": "^4.0.1", + "remark-lint-ordered-list-marker-style": "^4.0.1", + "remark-lint-ordered-list-marker-value": "^4.0.1", "remark-lint-prohibited-strings": "^4.0.0", - "remark-lint-unordered-list-marker-style": "^4.0.0", + "remark-lint-unordered-list-marker-style": "^4.0.1", "remark-stringify": "^11.0.0", - "textlint": "^14.4.0", + "textlint": "^14.5.0", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" @@ -39,13 +39,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@azu/style-format": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.1.tgz", "integrity": "sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==", "dev": true, + "license": "WTFPL", "dependencies": { "@azu/format-text": "^1.0.1" } @@ -295,6 +297,15 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/@keyv/serialize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.2.tgz", + "integrity": "sha512-+E/LyaAeuABniD/RvUezWVXKpeuvwLEA9//nE9952zBaOdBd2mQ3pPoM8cUe2X6IcMByfuSLzmYqnYshG60+HQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3" + } + }, "node_modules/@npmcli/config": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-6.3.0.tgz", @@ -416,68 +427,75 @@ "dev": true }, "node_modules/@textlint/ast-tester": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.4.0.tgz", - "integrity": "sha512-pCKEUDaZVvvj/uZOTTUgU1tTkNsK+ufNs4Xx5BsBAqy+E0aAJJ47c8h2WIoL/MJniK6ZLctsDIwaZ4z9rUvrsQ==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.5.0.tgz", + "integrity": "sha512-biwtMuv+B1A5tqDLYSwMSjEr24l4zji69Ttg9ZxAEkr5sGre2W5ojEZRA79edDxcAASDF35XgHkWR+tvMsVAdg==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.0", - "debug": "^4.3.4" + "@textlint/ast-node-types": "^14.5.0", + "debug": "^4.4.0" } }, "node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/ast-traverse": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.4.0.tgz", - "integrity": "sha512-P6UrqKlXd9Lm0kJ1O8vyQU0/btXULiUHhE5nLZMnTNfgZYG3VasQ9BUyDHJn19O4PhUrIzZJusMi1XFcb3Y46Q==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.5.0.tgz", + "integrity": "sha512-K83si1a2s1LdIVPmzrtuI+SdKjNp2A5jmOcoyXAVNLv3qlJc4DTCyKO7Qn/xTq00zQrhLrZXJSaooBSXi4HXvQ==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.0" + "@textlint/ast-node-types": "^14.5.0" } }, "node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/config-loader": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.4.0.tgz", - "integrity": "sha512-TCYVhQ+wP/Gs7P5BDAfyRpLJ5tohicTSwQapd/xPjByXFtGx8xlsbLQHTWcodFFpty1O57KRPRsRDhvuTAA2bQ==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.5.0.tgz", + "integrity": "sha512-kTFF+Sx3lxH1GSBbk2mEslu0VzyHj9DNy1wiwnPuHrQRVv6fsFZXr35mfLWnfBT40s6aEOrtPh1323jfLduHBg==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/kernel": "^14.4.0", - "@textlint/module-interop": "^14.4.0", - "@textlint/resolver": "^14.4.0", - "@textlint/types": "^14.4.0", - "@textlint/utils": "^14.4.0", - "debug": "^4.3.4", + "@textlint/kernel": "^14.5.0", + "@textlint/module-interop": "^14.5.0", + "@textlint/resolver": "^14.5.0", + "@textlint/types": "^14.5.0", + "@textlint/utils": "^14.5.0", + "debug": "^4.4.0", "rc-config-loader": "^4.1.3" } }, "node_modules/@textlint/feature-flag": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.4.0.tgz", - "integrity": "sha512-aSphE9jw4QTjiCOe1tbtZ2NZpMRbYoUTi2E62KQ/mcVnwGC+Jk671wNSoUJzR/YNaLo63cQ7OKhHrBEb55t+Iw==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.5.0.tgz", + "integrity": "sha512-fM0W1JRbEkO4IuJhDLDAam50usW+z7B1wA8Y6PciJeojzpTXUiV29MtUISTCfSVkjrDo54aIRgTPn8HogkUGPQ==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/fixer-formatter": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.4.0.tgz", - "integrity": "sha512-DijDPVZgHkHKAEsYVXFZaP0TJGLDtirok/hgi1N1N3MW5ZtQpIHOW8DgKaJcmDZvPQjkTxzBaUp8rzBxHG8MaQ==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.5.0.tgz", + "integrity": "sha512-vdnrm4tAcJ/KtSiN6szt0MZSWFW8/WKl8kr1owgpQ0NKuxbP1b9dFc+k/V/mq+RnFcuwnbb/r2+7z8oH7HYHEQ==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/module-interop": "^14.4.0", - "@textlint/resolver": "^14.4.0", - "@textlint/types": "^14.4.0", + "@textlint/module-interop": "^14.5.0", + "@textlint/resolver": "^14.5.0", + "@textlint/types": "^14.5.0", "chalk": "^4.1.2", - "debug": "^4.3.4", + "debug": "^4.4.0", "diff": "^5.2.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", @@ -485,59 +503,63 @@ } }, "node_modules/@textlint/kernel": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.4.0.tgz", - "integrity": "sha512-zH19vQ0ns4n8kPr+csjPnV5yPip6gKs08GvDJBQlX3AEbRQkaSw4H5kBCE+R0D9qDkuqt7xe8Z8Tdm7E7aUvGw==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.5.0.tgz", + "integrity": "sha512-hgq0b7eUJxEwCf1jNx/DCZeU2SJXXRH+qycvyrGVEOWgLYmtizlCm6GQ+ejDgUdcoNpQhzCkiwV2HF0z9UbmMw==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.0", - "@textlint/ast-tester": "^14.4.0", - "@textlint/ast-traverse": "^14.4.0", - "@textlint/feature-flag": "^14.4.0", - "@textlint/source-code-fixer": "^14.4.0", - "@textlint/types": "^14.4.0", - "@textlint/utils": "^14.4.0", - "debug": "^4.3.4", + "@textlint/ast-node-types": "^14.5.0", + "@textlint/ast-tester": "^14.5.0", + "@textlint/ast-traverse": "^14.5.0", + "@textlint/feature-flag": "^14.5.0", + "@textlint/source-code-fixer": "^14.5.0", + "@textlint/types": "^14.5.0", + "@textlint/utils": "^14.5.0", + "debug": "^4.4.0", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" } }, "node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/linter-formatter": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.4.0.tgz", - "integrity": "sha512-rnFwSSXDdsQHGVaRoJJYocVSYn4ZEPUFj78JYDZcR+TRYVDzRJEblFhwsiXl/gHD3L5g2RnBcLbxwZIW+xwtIA==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.5.0.tgz", + "integrity": "sha512-5QQsdnsuUBscCq1IX10ynYtsfLmctdoc4GZtJA7L//QFYAAgTrBzpXjfhyWZs7C5VJho9FzfljyuuA7jbhRrFw==", "dev": true, + "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "^14.4.0", - "@textlint/resolver": "^14.4.0", - "@textlint/types": "^14.4.0", + "@textlint/module-interop": "^14.5.0", + "@textlint/resolver": "^14.5.0", + "@textlint/types": "^14.5.0", "chalk": "^4.1.2", - "debug": "^4.3.4", + "debug": "^4.4.0", "js-yaml": "^3.14.1", "lodash": "^4.17.21", "pluralize": "^2.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", - "table": "^6.8.1", + "table": "^6.9.0", "text-table": "^0.2.0" } }, "node_modules/@textlint/markdown-to-ast": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.4.0.tgz", - "integrity": "sha512-y6UxfRZ00w8XQ1jfKhR0jcQd7qbYaQgo3aERWbJR0Gxxl0T+G+TKBS12pdnUFOTshgSTEgqlvrE+Zt3lTl0e1A==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.5.0.tgz", + "integrity": "sha512-qftHkBnyWEy2PmAhmhrmTemCKMJCpPKtFZt0woaa0yZkMwXo/RN66elnjAEJZenkRntQgphlKJJZ0I/NA2hH4g==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.0", - "debug": "^4.3.4", + "@textlint/ast-node-types": "^14.5.0", + "debug": "^4.4.0", "mdast-util-gfm-autolink-literal": "^0.1.3", "neotraverse": "^0.6.15", "remark-footnotes": "^3.0.0", @@ -548,16 +570,18 @@ } }, "node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/markdown-to-ast/node_modules/bail": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -568,6 +592,7 @@ "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", "dev": true, + "license": "MIT", "dependencies": { "format": "^0.2.0" }, @@ -595,6 +620,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "engines": { "node": ">=4" } @@ -604,6 +630,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -613,6 +640,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^2.0.0", @@ -630,6 +658,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", "dev": true, + "license": "MIT", "dependencies": { "micromark-extension-frontmatter": "^0.2.0" }, @@ -643,6 +672,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -663,6 +693,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -673,6 +704,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", "dev": true, + "license": "MIT", "dependencies": { "fault": "^1.0.0" }, @@ -686,6 +718,7 @@ "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-frontmatter": "^0.2.0", "micromark-extension-frontmatter": "^0.2.0" @@ -700,6 +733,7 @@ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^0.8.0" }, @@ -713,6 +747,7 @@ "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -723,6 +758,7 @@ "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dev": true, + "license": "MIT", "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", @@ -741,6 +777,7 @@ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.2" }, @@ -754,6 +791,7 @@ "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -770,6 +808,7 @@ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -780,80 +819,90 @@ } }, "node_modules/@textlint/module-interop": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.4.0.tgz", - "integrity": "sha512-QdtNDJc+XqDIbP9bwt7DryqE+vFbbIB28462VFWtXcHCJJoFTlmCJ1133SXLe14IOT9P04T9LMNhgv4d2v31gg==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.5.0.tgz", + "integrity": "sha512-nlFwHSYZJgSwXyF9PuHV3DcvRnObf64Mm4QWt9LaTr5zQB2MwEluaL8ROYL+sLJ4JhqNKpuqBT1EkTixPsN3cQ==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/resolver": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.4.0.tgz", - "integrity": "sha512-4jNO6Lbyiqtf22205XPpSYG4BNCZrvpmLzO2JUpYMe5C5g0z4l06Yqei3gJWYjdBLlL+fIxDcdW0hyIvvSFpUg==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.5.0.tgz", + "integrity": "sha512-yvC8gQHKsl/rR3x+884tA9BzVn6naILmHRmOP3FEQogr+ixOW4rL9OgdS6IoMjG8cVh8o4kI40xJfh1l6oX6vQ==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/source-code-fixer": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.4.0.tgz", - "integrity": "sha512-S2QBZ3pUQQeH01kgfKa1Tmusz0A2/sm3QkW1Uhag9x5v5OKYC4W3070eliY+p0I88nxmqy72M/j+78sDutUcuw==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.5.0.tgz", + "integrity": "sha512-zcokW+MBTppOzGumeB1SZvjDitCnO2sAZrWpmw849L6P11RdxS/iQXakg4jkRTTlWYR1AtzyAa9j0lLCdxsfuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/types": "^14.4.0", - "debug": "^4.3.4" + "@textlint/types": "^14.5.0", + "debug": "^4.4.0" } }, "node_modules/@textlint/text-to-ast": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.4.0.tgz", - "integrity": "sha512-MA3z7cksYpjXRPIFFcbB6CM5UbNFD53GJ823qo74ImU2MRlIrs9dcR9yQ76YxbYZ9OazPzUNGg5AS9tbp3Exbg==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.5.0.tgz", + "integrity": "sha512-e6SrPeCScmxxfTDpXo+nBh4tt6sbqySX/fE65sYVYupLwpJsCtxTEnYft2jEqifvgaM4JjgzETSQMG799HBTPw==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.0" + "@textlint/ast-node-types": "^14.5.0" } }, "node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/textlint-plugin-markdown": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.4.0.tgz", - "integrity": "sha512-J6RoZSC7MOr9WYqyG4s1BZxExiHfS6fMmiQuWGJB133vDDrY+wmiaFm/C6Li59YPdPivddxSDo7v8z2zyayW1A==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.5.0.tgz", + "integrity": "sha512-riMcW6Sj/IvTnIAA4W0O5pxJxdqth+MUe2li7wg8yCq3jilS0EYIlolNXvX414v/9swsLu8Tztwugrh0E6HJDw==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/markdown-to-ast": "^14.4.0" + "@textlint/markdown-to-ast": "^14.5.0" } }, "node_modules/@textlint/textlint-plugin-text": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.4.0.tgz", - "integrity": "sha512-ut3+MhOh9taPUKLaTT4nyil3MLnAbo60BYGWIz6cPrv3YMyvN/eCw4jW4VscvV1WTik19lzmDCBfSpfnmz/PiA==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.5.0.tgz", + "integrity": "sha512-aASQwkRnupRlY9w168SBjrsDbO1wtg2EYx8JSnt/YboUnhszQD8Zys178Zu/00ECtpxwpjQYowoYNq0BoP9aig==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/text-to-ast": "^14.4.0" + "@textlint/text-to-ast": "^14.5.0" } }, "node_modules/@textlint/types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.4.0.tgz", - "integrity": "sha512-ZxZkiFxaXfjoaa/gzbGyUWR0mSMLChDaQrYJ0sPToCQ0QXUG3w5sIT2hCGZyBfNRc8/g0eH+KbDejD014oBPBQ==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.5.0.tgz", + "integrity": "sha512-z+oJS5GHK5KiV87ZNCYAQnZTgq1MRGl9g301GOV6Zq4RjH75JVQPNa4hUlwzG2sF6jks+wLhMjxwaQaG6cKCpA==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.0" + "@textlint/ast-node-types": "^14.5.0" } }, "node_modules/@textlint/types/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/@textlint/utils": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.4.0.tgz", - "integrity": "sha512-/5QSdYa042z0SX+10+UPzHlMT2nWuRBkouf90/P60nycpFmWn0waIbVoARDlekzmaqB4BitbP7NGjjPmEju4bA==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.5.0.tgz", + "integrity": "sha512-gAKZh1woc0IZGoVjQ8G8Og10dsBJ6UxaCFXofeHveWsZhJAdVzjw49/tJLVu/39t8GTdZQ4BAHuNxHNFgLN57w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/concat-stream": { "version": "2.0.0", @@ -908,6 +957,7 @@ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2" } @@ -962,6 +1012,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -1015,6 +1066,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -1024,6 +1076,7 @@ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -1044,6 +1097,26 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1059,16 +1132,6 @@ "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==", "dev": true }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -1081,17 +1144,52 @@ "node": ">=8" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/cacheable": { + "version": "1.8.7", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.7.tgz", + "integrity": "sha512-AbfG7dAuYNjYxFUtL1lAqmlWdxczCJ47w7cFjhGcnGnUdwSo6VgmSojfoW3tUI12HUkgTJ5kqj78yyq6TsFtlg==", + "dev": true, + "dependencies": { + "hookified": "^1.6.0", + "keyv": "^5.2.3" + } + }, "node_modules/ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1102,6 +1200,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1138,6 +1237,7 @@ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1148,6 +1248,7 @@ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1242,12 +1343,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, "node_modules/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", @@ -1287,12 +1382,12 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1349,6 +1444,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -1379,6 +1475,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1391,6 +1488,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -1409,13 +1507,15 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-equals": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-4.0.3.tgz", "integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -1424,10 +1524,21 @@ "dev": true }, "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", - "dev": true + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fault": { "version": "2.0.1", @@ -1443,15 +1554,12 @@ } }, "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.5.tgz", + "integrity": "sha512-umpQsJrBNsdMDgreSryMEXvJh66XeLtZUwA8Gj7rHGearGufUFv6rB/bcXRFsiGWw/VeSUgUofF4Rf2UKEOrTA==", "dev": true, "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" + "flat-cache": "^6.1.5" } }, "node_modules/fill-range": { @@ -1479,23 +1587,20 @@ } }, "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.5.tgz", + "integrity": "sha512-QR+2kN38f8nMfiIQ1LHYjuDEmZNZVjxuxY+HufbS3BW0EX01Q5OnH7iduOYRutmgiXb797HAKcXUeXrvRjjgSQ==", "dev": true, "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" + "cacheable": "^1.8.7", + "flatted": "^3.3.2", + "hookified": "^1.6.0" } }, "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true }, "node_modules/foreground-child": { @@ -1523,12 +1628,6 @@ "node": ">=0.4.x" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1558,26 +1657,6 @@ "node": ">=0.12.0" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1613,16 +1692,43 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/hookified": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.6.0.tgz", + "integrity": "sha512-se7cpwTA+iA/eY548Bu03JJqBiEZAqU2jnyKdj5B5qurtBg64CZGHTgqCv4Yh7NWu6FGI09W61MCq+NoPj9GXA==", + "dev": true + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -1642,16 +1748,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -1672,6 +1768,7 @@ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1682,6 +1779,7 @@ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, + "license": "MIT", "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" @@ -1732,6 +1830,7 @@ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1778,6 +1877,7 @@ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -1845,6 +1945,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1872,7 +1973,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", @@ -1886,6 +1988,15 @@ "node": ">=6" } }, + "node_modules/keyv": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.2.3.tgz", + "integrity": "sha512-AGKecUfzrowabUv0bH1RIR5Vf7w+l4S3xtQAypKaUpTdIR1EbrAcTxHCrpo9Q+IWeUlFE2palRtgIQcgm+PQJw==", + "dev": true, + "dependencies": { + "@keyv/serialize": "^1.0.2" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1971,7 +2082,8 @@ "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/longest-streak": { "version": "3.1.0", @@ -2012,6 +2124,7 @@ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", "dev": true, + "license": "MIT", "dependencies": { "repeat-string": "^1.0.0" }, @@ -2059,6 +2172,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^4.0.0", "unist-util-is": "^4.0.0", @@ -2074,6 +2188,7 @@ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2084,6 +2199,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz", "integrity": "sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-to-markdown": "^0.6.0", "micromark": "~2.11.0" @@ -2098,6 +2214,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2108,6 +2225,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -2126,6 +2244,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2146,6 +2265,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -2156,6 +2276,7 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2263,6 +2384,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-gfm-autolink-literal": "^0.1.0", "mdast-util-gfm-strikethrough": "^0.2.0", @@ -2280,6 +2402,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", "dev": true, + "license": "MIT", "dependencies": { "ccount": "^1.0.0", "mdast-util-find-and-replace": "^1.1.0", @@ -2305,6 +2428,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -2315,6 +2439,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-to-markdown": "^0.6.0" }, @@ -2328,6 +2453,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2338,6 +2464,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -2356,6 +2483,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2366,6 +2494,7 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2376,6 +2505,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", "dev": true, + "license": "MIT", "dependencies": { "markdown-table": "^2.0.0", "mdast-util-to-markdown": "~0.6.0" @@ -2390,6 +2520,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2400,6 +2531,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -2418,6 +2550,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2428,6 +2561,7 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2438,6 +2572,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-to-markdown": "~0.6.0" }, @@ -2451,6 +2586,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2461,6 +2597,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -2479,6 +2616,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2489,6 +2627,7 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2499,6 +2638,7 @@ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2509,6 +2649,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -2527,6 +2668,7 @@ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -2537,6 +2679,7 @@ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -2991,6 +3134,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz", "integrity": "sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.0" }, @@ -3014,6 +3158,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3040,6 +3185,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.0", "micromark-extension-gfm-autolink-literal": "~0.5.0", @@ -3058,6 +3204,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.3" }, @@ -3081,6 +3228,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3091,6 +3239,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.0" }, @@ -3114,6 +3263,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3124,6 +3274,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.0" }, @@ -3147,6 +3298,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3157,6 +3309,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -3167,6 +3320,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", "dev": true, + "license": "MIT", "dependencies": { "micromark": "~2.11.0" }, @@ -3190,6 +3344,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3210,6 +3365,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -3588,18 +3744,6 @@ } ] }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -3637,9 +3781,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/neotraverse": { @@ -3647,6 +3791,7 @@ "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -3696,15 +3841,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -3766,6 +3902,7 @@ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, + "license": "MIT", "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -3784,6 +3921,7 @@ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -3810,15 +3948,6 @@ "node": ">=4" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -3922,7 +4051,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -3957,6 +4087,7 @@ "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4", "js-yaml": "^4.1.0", @@ -3968,13 +4099,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/rc-config-loader/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4160,6 +4293,7 @@ "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-3.0.0.tgz", "integrity": "sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-footnote": "^0.1.0", "micromark-extension-footnote": "^0.3.0" @@ -4266,6 +4400,7 @@ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", "dev": true, + "license": "MIT", "dependencies": { "mdast-util-gfm": "^0.1.0", "micromark-extension-gfm": "^0.3.0" @@ -4276,10 +4411,11 @@ } }, "node_modules/remark-lint": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-10.0.0.tgz", - "integrity": "sha512-E8yHHDOJ8b+qI0G49BRu24pe8t0fNNBWv8ENQJpCGNrVeTeyBIGEbaUe1yuF7OG8faA6PVpcN/pqWjzW9fcBWQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-10.0.1.tgz", + "integrity": "sha512-1+PYGFziOg4pH7DDf1uMd4AR3YuO2EMnds/SdIWMPGT7CAfDRSnAmpxPsJD0Ds3IKpn97h3d5KPGf1WFOg6hXQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "remark-message-control": "^8.0.0", @@ -4291,10 +4427,11 @@ } }, "node_modules/remark-lint-fenced-code-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-4.0.0.tgz", - "integrity": "sha512-Zs0wJd4nRvBo/9NWQVfWg5Ykapbo0Zzw/SyZc3f0h73S1gTZZcfeU+bA5oDivlBdcUgLBsyHRE0QaoaVvN3/Wg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-4.1.1.tgz", + "integrity": "sha512-hKPqowc79jrJL47AfnqDThvE8Q249nHCleR5nxuf9ybriMqcAHYxragKzU5c4W1fNy20bTfFdZz/iAAQAk9kwg==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-phrasing": "^4.0.0", @@ -4415,10 +4552,11 @@ } }, "node_modules/remark-lint-heading-increment": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-4.0.0.tgz", - "integrity": "sha512-TARnsjXWzY/yLwxh/y4+KnDSXO3Koue8Crp55T8G9pjj3vw+XgTAG35zSpIIY9HmGiQ2a3R0SOj2pAxATpnckg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-4.0.1.tgz", + "integrity": "sha512-uat7RTQn0hGlMv62p7yjLlg3tO3RljFbH6C+0M+5BNEF+s3NrA8jJgqW0UwLLNdCd3EABCKaWloHumT57ND7PQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", @@ -4539,10 +4677,11 @@ } }, "node_modules/remark-lint-heading-style": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-4.0.0.tgz", - "integrity": "sha512-dQ6Jul5K0+aNUvrq4W7H0+osSoC9hsmwHZqBFq000+eMP/hWJqI8tuudw1rap8HHYuOsKLRbB5q+Fr7G+3Vw+Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-4.0.1.tgz", + "integrity": "sha512-+rUpJ/N2CGC5xPgZ18XgsCsUBtadgEhdTi0BJPrsFmHPzL22BUHajeg9im8Y7zphUcbi1qFiKuxZd2nzDgZSXQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-heading-style": "^3.0.0", @@ -4664,10 +4803,11 @@ } }, "node_modules/remark-lint-no-shell-dollars": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-4.0.0.tgz", - "integrity": "sha512-ye2h8FzjsgqqQV0HHN2g9N4FqI3eD9Gpgu7tU5ADIJyQ3mUJdwBoFn7IlGnpmumR1fb/l6u/AhRavIZxXYqG+Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-4.0.1.tgz", + "integrity": "sha512-UPE1DNCIkLtnS3YFD065Gkq5lQqfndBDpX8Ct/Zjn7M0/hzCyf9B6tpwCU0I20m9jzhS/CSY6mxYnAiEg+KkFA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "collapse-white-space": "^2.0.0", @@ -4787,10 +4927,11 @@ } }, "node_modules/remark-lint-ordered-list-marker-style": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.0.tgz", - "integrity": "sha512-xZ7Xppy5fzACH4b9h1b4lTzVtNY2AlUkNTfl1Oe6cIKN8tk3juFxN0wL2RpktPtSZ7iRIabzFmg6l8WPhlASJA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.1.tgz", + "integrity": "sha512-vZTAbstcBPbGwJacwldGzdGmKwy5/4r29SZ9nQkME4alEl5B1ReSBlYa8t7QnTSW7+tqvA9Sg71RPadgAKWa4w==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-phrasing": "^4.0.0", @@ -4820,72 +4961,6 @@ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "dev": true, - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/remark-lint-ordered-list-marker-style/node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", @@ -4978,10 +5053,11 @@ } }, "node_modules/remark-lint-ordered-list-marker-value": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-4.0.0.tgz", - "integrity": "sha512-7UjNU2Nv9LGEONTU9GPmTVoNoGKD5aL1X2xHzMbSJiTc50bfcazYqZawO+qj1pQ04WPhto1qHnl0HRB5wwSVwA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-4.0.1.tgz", + "integrity": "sha512-HQb1MrArvApREC1/I6bkiFlZVDjngsuII29n8E8StnAaHOMN3hVYy6wJ9Uk+O3+X9O8v7fDsZPqFUHSfJhERXQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "devlop": "^1.0.0", @@ -5164,10 +5240,11 @@ } }, "node_modules/remark-lint-unordered-list-marker-style": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-4.0.0.tgz", - "integrity": "sha512-XlP4Wr4KJNovyWVv0H5axfUlF23iE9Kt2SxaVq4+ieum5YcMmKE6KsL+aqt3kiJb60SH1u6a0bxKFvdM/9riOA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-4.0.1.tgz", + "integrity": "sha512-HMrVQC0Qbr8ktSy+1lJGRGU10qecL3T14L6s/THEQXR5Tk0wcsLLG0auNvB4r2+H+ClhVO/Vnm1TEosh1OCsfw==", "dev": true, + "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "mdast-util-phrasing": "^4.0.0", @@ -5700,6 +5777,7 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -5709,6 +5787,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5730,18 +5809,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5809,6 +5876,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -5867,7 +5935,8 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/string_decoder": { "version": "1.3.0", @@ -5994,6 +6063,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6014,10 +6084,11 @@ } }, "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -6036,26 +6107,27 @@ "dev": true }, "node_modules/textlint": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.4.0.tgz", - "integrity": "sha512-OutNGN573fI48bRdikgz+PAjCN/P4DRK9dLGxkNkqBlWmwbxLpvBxw1qspZEFVVLoNH94ra65NDfCwMvCosvdA==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.5.0.tgz", + "integrity": "sha512-+C5zYpEv0HsQAuz6crm4BjuMXaHi6gKTSwqZZttHI2Jm/WGtpza2SbZxct+STdMgN1XbINcsP58gZ4juQwokcw==", "dev": true, + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.4.0", - "@textlint/ast-traverse": "^14.4.0", - "@textlint/config-loader": "^14.4.0", - "@textlint/feature-flag": "^14.4.0", - "@textlint/fixer-formatter": "^14.4.0", - "@textlint/kernel": "^14.4.0", - "@textlint/linter-formatter": "^14.4.0", - "@textlint/module-interop": "^14.4.0", - "@textlint/resolver": "^14.4.0", - "@textlint/textlint-plugin-markdown": "^14.4.0", - "@textlint/textlint-plugin-text": "^14.4.0", - "@textlint/types": "^14.4.0", - "@textlint/utils": "^14.4.0", - "debug": "^4.3.4", - "file-entry-cache": "^5.0.1", + "@textlint/ast-node-types": "^14.5.0", + "@textlint/ast-traverse": "^14.5.0", + "@textlint/config-loader": "^14.5.0", + "@textlint/feature-flag": "^14.5.0", + "@textlint/fixer-formatter": "^14.5.0", + "@textlint/kernel": "^14.5.0", + "@textlint/linter-formatter": "^14.5.0", + "@textlint/module-interop": "^14.5.0", + "@textlint/resolver": "^14.5.0", + "@textlint/textlint-plugin-markdown": "^14.5.0", + "@textlint/textlint-plugin-text": "^14.5.0", + "@textlint/types": "^14.5.0", + "@textlint/utils": "^14.5.0", + "debug": "^4.4.0", + "file-entry-cache": "^10.0.5", "get-stdin": "^5.0.1", "glob": "^10.4.5", "md5": "^2.3.0", @@ -6178,10 +6250,11 @@ } }, "node_modules/textlint/node_modules/@textlint/ast-node-types": { - "version": "14.4.0", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.4.0.tgz", - "integrity": "sha512-tEZbu6dMU8lysTpFrrW9WzN/hWnfGoanOX1WmdKZ7LgqUVDdsd9Q8RNLlQLOgl7ev1C7O3T4ruzl4rdYI5he1g==", - "dev": true + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.5.0.tgz", + "integrity": "sha512-T7NQ2DUnx1zOrnBqcFpJGFgHder5/M7TV596LZTJS/sc1anT7WVrsoGCMmu3oJh2ALg9oJN+PgSmZQ8Mm0Mg+w==", + "dev": true, + "license": "MIT" }, "node_modules/textlint/node_modules/brace-expansion": { "version": "2.0.1", @@ -7307,24 +7380,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index f9746eb2853..bc92d01c6cb 100644 --- a/package.json +++ b/package.json @@ -5,17 +5,17 @@ "devDependencies": { "remark-cli": "^12.0.1", "remark-frontmatter": "^5.0.0", - "remark-lint": "^10.0.0", - "remark-lint-fenced-code-flag": "^4.0.0", - "remark-lint-heading-increment": "^4.0.0", - "remark-lint-heading-style": "^4.0.0", - "remark-lint-no-shell-dollars": "^4.0.0", - "remark-lint-ordered-list-marker-style": "^4.0.0", - "remark-lint-ordered-list-marker-value": "^4.0.0", + "remark-lint": "^10.0.1", + "remark-lint-fenced-code-flag": "^4.1.1", + "remark-lint-heading-increment": "^4.0.1", + "remark-lint-heading-style": "^4.0.1", + "remark-lint-no-shell-dollars": "^4.0.1", + "remark-lint-ordered-list-marker-style": "^4.0.1", + "remark-lint-ordered-list-marker-value": "^4.0.1", "remark-lint-prohibited-strings": "^4.0.0", - "remark-lint-unordered-list-marker-style": "^4.0.0", + "remark-lint-unordered-list-marker-style": "^4.0.1", "remark-stringify": "^11.0.0", - "textlint": "^14.4.0", + "textlint": "^14.5.0", "textlint-filter-rule-comments": "^1.2.2", "textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-terminology": "^5.0.13" diff --git a/plugins/filters.rb b/plugins/filters.rb index 696f9b53199..62013ec3b42 100644 --- a/plugins/filters.rb +++ b/plugins/filters.rb @@ -124,6 +124,11 @@ module Jekyll end end end + + def case_insensitive_sort(input, key) + return input unless input.is_a?(Array) + input.sort_by { |item| item[key].to_s.downcase } + end end end diff --git a/sass/homeassistant/_homeassistant.scss b/sass/homeassistant/_homeassistant.scss index c57729fa2e2..4125fdd06d5 100644 --- a/sass/homeassistant/_homeassistant.scss +++ b/sass/homeassistant/_homeassistant.scss @@ -20,6 +20,7 @@ @import "plugins/integration_alert"; @import "base/sidebar"; +@import "aside/buy_dialog"; @import "aside/recent_posts"; @import "aside/github"; @import "aside/pinboard"; diff --git a/sass/homeassistant/_overrides.scss b/sass/homeassistant/_overrides.scss index d7ecf1f4585..e13d4d81983 100644 --- a/sass/homeassistant/_overrides.scss +++ b/sass/homeassistant/_overrides.scss @@ -1130,7 +1130,11 @@ article.listing { &>table, &>.entry-content>table { background-color: #fff; + display: block; + overflow-x: auto; table-layout: auto; + width: fit-content; + max-width: 100%; &>thead { background-color: rgba(0, 0, 0, .025); diff --git a/sass/homeassistant/aside/_buy_dialog.scss b/sass/homeassistant/aside/_buy_dialog.scss new file mode 100644 index 00000000000..5700b4f94dd --- /dev/null +++ b/sass/homeassistant/aside/_buy_dialog.scss @@ -0,0 +1,218 @@ +// More specificity +#landingpage .page-content .content { + .ha-buy-dialog { + background: rgba(0, 0, 0, 0.4); + display: none; + inset: 0; + padding: 40px; + place-items: center; + position: fixed; + z-index: 1200; + + &.open { + display: flex; + flex-direction: column; + } + + &-inner { + background-color: #ffffff; + border-radius: 8px; + display: grid; + gap: 20px; + max-width: 624px; + padding: 20px; + width: 100%; + overflow: hidden; + } + + &-header { + align-items: center; + display: flex; + + .product-name { + flex-grow: 1; + font-size: 20px; + + @media (min-width: 704px) { + font-size: 28px; + } + } + + .close { + align-items: center; + cursor: pointer; + display: flex; + flex-shrink: 0; + } + } + + &-content { + display: flex; + flex-direction: column; + gap: 20px; + max-height: 100%; + overflow: hidden; + + @media (min-width: 704px) { + flex-direction: row; + } + } + + &-sidebar { + background-color: #F0F0F3; + border-radius: 8px; + min-width: 140px; + padding: 12px; + + &-label { + font-size: 14px; + font-weight: 700; + padding-bottom: 8px; + } + + &-tabs { + display: flex; + flex-direction: row; + flex-wrap: wrap; + gap: 4px; + + @media (min-width: 704px) { + flex-direction: column; + flex-wrap: nowrap; + } + } + + &-tab { + background-color: transparent; + border-radius: 4px; + color: #4F606E; + cursor: pointer; + flex-basis: 40%; + flex-grow: 1; + font-size: 16px; + padding: 8px; + text-align: center; + transition: background-color 0.1s; + user-select: none; + + @media (min-width: 704px) { + flex-basis: unset; + text-align: left; + } + + &:hover { + background-color: #e1e1e1; + } + + &.active { + background-color: #FCFCFF; + color: #000; + pointer-events: none; + } + } + } + + &-tab { + &-content-wrapper { + flex-grow: 1; + height: 100%; + max-height: 475px; + overflow-y: auto; + } + + &-content { + display: none; + flex-direction: column; + gap: 32px; + + &.active { + display: flex; + } + } + } + + &-distributor { + &-countries { + display: flex; + flex-direction: column; + gap: 18px; + } + + &-country { + &-name { + align-items: center; + display: flex; + font-size: 14px; + font-weight: 700; + gap: 10px; + padding-bottom: 12px; + } + + &-flag { + border-radius: 0; + height: 8px; + } + + $letters: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + @for $i from 1 through 26 { + $letter: str-slice($letters, $i, $i); + + &[data-sort="#{$letter}"] { + order: $i; + } + } + } + + &-items { + display: flex; + flex-wrap: wrap; + gap: 8px; + justify-content: center; + + @media (min-width: 704px) { + gap: 20px; + justify-content: flex-start; + max-width: 400px; + } + } + + &-item { + border: 1px solid #F0F0F3; + border-radius: 8px; + display: flex; + flex-direction: column; + gap: 8px; + height: 60px; + padding: 4px 16px; + place-items: center; + text-align: center; + text-decoration: none; + transition: background-color 0.1s; + width: 120px; + + span { + color: #4F606E; + font-size: 10px; + height: 14px; + line-height: 1; + white-space: nowrap; + } + + &:hover { + background-color: #F0F0F3; + } + } + + &-logo { + border: unset; + border-radius: 0; + box-shadow: unset; + flex-grow: 1; + height: 100%; + max-height: 50px; + object-fit: contain; + overflow: hidden; + } + } + } +} diff --git a/sass/homeassistant/base/_navigation.scss b/sass/homeassistant/base/_navigation.scss index 8a9dd2dd4ab..d887e31de31 100644 --- a/sass/homeassistant/base/_navigation.scss +++ b/sass/homeassistant/base/_navigation.scss @@ -152,7 +152,7 @@ header .grid { .menu { background: $white; box-shadow: 0px 64px 32px rgba(0,0,0,.1); - max-height: 100vh; + max-height: calc(100vh - 68px); overflow-y: auto; } diff --git a/sass/homeassistant/pages/_component_page.scss b/sass/homeassistant/pages/_component_page.scss index 610f8420522..91ee4fca71a 100644 --- a/sass/homeassistant/pages/_component_page.scss +++ b/sass/homeassistant/pages/_component_page.scss @@ -5,22 +5,156 @@ font-weight: 500; letter-spacing: .005em; color: $gray; + padding-top: 8px; text-transform: uppercase; } } + .component-search { margin-bottom: 24px; + min-height: 80px; input { width: 100%; padding: 10px; - background-color: #fefefe; border-radius: 8px; border: 1px solid; border-color: #7c7c7c #c3c3c3 #ddd; } } + + .grid-filters { + @media only screen and (min-width: $desk-start) { + display: flex; + } + } + + .integration-filter-radio { + display: flex; + border: none; + padding: 0; + grid-gap: 10px; + } + + .filter-button { + display: flex; + align-items: center; + margin-bottom: 0; + width: fit-content; + font-size: 1rem; + box-shadow: none; + background-color: $blueDark; + color: white; + border-radius: 24px; + + input { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + padding-left: 16px; + display: block; + margin-left: 10px; + flex-shrink: 0; + height: 1rem; + width: 1rem; + border-radius: 100%; + border-color: transparent; + background-color: white; + + &:checked { + background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22%23007fa8%22%20transform%3D%22rotate(90)%22%3E%3Ccircle%20cx%3D%228%22%20cy%3D%228%22%20r%3D%223%22%2F%3E%3C%2Fsvg%3E"); + } + } + + label { + display: block; + width: 100%; + padding: 4px 16px 4px 10px; + } + } + + .integration-filter.integration-filter-select { + position: relative; + + &::after { + content: " "; + position: absolute; + top: 50%; + margin-top: 2px; + right: 8px; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid black; + } + + .ha_category { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + color: #222; + width: 100%; + margin-bottom: 15px; + text-align-last: center; + font-size: 16px; + line-height: 24px; + border: 2px solid $blueDark; + border-top-right-radius: 0px; + border-top-left-radius: 0px; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; + border-top: 0; + position: relative; + top: -2px; + padding: 5px 5px 2px; + + &:focus-visible { + outline: none; + } + } + } + + .filter-title { + background: $blueDark; + color: white; + text-align: center; + border-top-right-radius: 5px; + border-top-left-radius: 5px; + padding: 5px; + margin-top: 0; + margin-bottom: -2px; + text-transform: capitalize; + font-size: 18px; + position: relative; + z-index: 1; + } + + .active-filter { + margin: 10px 5px 0px 0px; + padding: 5px 10px; + min-width: 100px; + background-color: $blueDark; + border-radius: 28px; + border: none; + color: white; + font-size: 14px; + letter-spacing: 0.5px; + text-transform: capitalize; + line-height: 18px; + + span { + display: flex; + align-items: center; + } + + iconify-icon { + display: inline-block; + margin-left: 5px; + } + } + select { font-family: $sans-serif; border: 0; @@ -44,6 +178,10 @@ width: 100%; } + div.alert { + text-align: center; + } + .option-card { flex: 0 0 auto; aspect-ratio: 1; @@ -147,7 +285,7 @@ a.option-card:hover { img { max-width: 48px; max-height: 48px; - } + } } .title { @@ -201,7 +339,7 @@ a.option-card:hover { } .category_select { display: block; - } + } .category_list { display: none; } @@ -330,4 +468,4 @@ a.option-card:hover { to { opacity: 0; } -} +} \ No newline at end of file diff --git a/sass/homeassistant/pages/_landingpage.scss b/sass/homeassistant/pages/_landingpage.scss index 8c77db0b0e4..bc6e0af75fd 100644 --- a/sass/homeassistant/pages/_landingpage.scss +++ b/sass/homeassistant/pages/_landingpage.scss @@ -188,6 +188,11 @@ $ha__primary_color: #03a9f4; width: 330px; } + .button{ + display: inline-block; + padding: 8px 24px; + } + .title { margin-bottom: 4px; } diff --git a/source/_dashboards/button.markdown b/source/_dashboards/button.markdown index 19ebda8313e..8a0013e07e1 100644 --- a/source/_dashboards/button.markdown +++ b/source/_dashboards/button.markdown @@ -156,6 +156,7 @@ Screenshot of a vertical stack card with 4 buttons and an entity selector. The image shows a vertical stack card with 4 buttons arranged in a horizontal stack card and an entity selector. The buttons use the toggle action to run a script, for example, the Netflix script, which starts up the TV and opens Netflix. To learn how to create scripts, refer to [scripts](/docs/scripts/). ```yaml +type: vertical-stack cards: - entities: - entity: input_select.living_room_scene @@ -201,5 +202,4 @@ cards: action: more-info show_name: true show_icon: true -type: vertical-stack ``` diff --git a/source/_dashboards/conditional.markdown b/source/_dashboards/conditional.markdown index 7f6e891ffbb..c3db5117a0f 100644 --- a/source/_dashboards/conditional.markdown +++ b/source/_dashboards/conditional.markdown @@ -6,7 +6,7 @@ description: The Conditional card displays another card based on conditions. related: - docs: /dashboards/cards/ title: Dashboard cards - - docs: /dashboards/cards/#showing-or-hiding-a-card-conditionally + - docs: /dashboards/cards/#showing-or-hiding-a-card-or-badge-conditionally title: Conditional settings on the card's visibility tab --- @@ -17,7 +17,7 @@ The conditional card displays another card based on conditions. {% include dashboard/edit_dashboard.md %} Note that while editing the dashboard, the card will always be shown, so be sure to exit editing mode to test the conditions. -The conditional card can still be used. However, it is now possible to define a setting to show or hide a card conditionally directly on each card type, on its [Visibility](/dashboards/cards/#showing-or-hiding-a-card-conditionally) tab. +The conditional card can still be used. However, it is now possible to define a setting to show or hide a card conditionally directly on each card type, on its [Visibility](/dashboards/cards/#showing-or-hiding-a-card-or-badge-conditionally) tab. Most options for this card can be configured via the user interface. diff --git a/source/_dashboards/energy.markdown b/source/_dashboards/energy.markdown index d0101d4d697..411d6611fc2 100644 --- a/source/_dashboards/energy.markdown +++ b/source/_dashboards/energy.markdown @@ -234,3 +234,50 @@ The following example limits the number of shown devices to 5: type: energy-devices-detail-graph max_devices: 5 ``` + +## Sankey energy graph + +

+ Screenshot of the sankey energy graph card + Screenshot of the sankey energy graph card. +

+ +The sankey energy graph shows the flow of energy in your home. It starts with sources and flows into the various consumers. Devices are grouped into floors and areas if these are configured. + +### Examples + +```yaml +type: energy-sankey +``` + +The following example orients the flow from top to bottom: + +```yaml +type: energy-sankey +layout: vertical +``` + +## Using Multiple Collections + +By default, all energy cards are linked to any `energy-date-selection` card on the view, and all `energy-date-selection` cards are linked to the same period. To enable multiple different date selections on the same view, it is necessary to link them to different collections. This is done by adding the variable `collection_key` to the card YAML, and giving this a value of any custom string that begins with `energy_`. (strings that do not start with `energy_` will generate an error). + +All energy cards support use of `collection_key` option. + +### Examples +Example view with multiple collections: + +```yaml +type: masonry +path: example +cards: + - type: energy-date-selection + - type: energy-date-selection + collection_key: energy_2 + + # This card is linked to the first (default) date selection + - type: energy-usage-graph + + # This card is linked to the second date selection + - type: energy-usage-graph + collection_key: energy_2 +``` diff --git a/source/_dashboards/entity-filter.markdown b/source/_dashboards/entity-filter.markdown index cbee335116c..d63460e9326 100644 --- a/source/_dashboards/entity-filter.markdown +++ b/source/_dashboards/entity-filter.markdown @@ -145,6 +145,10 @@ state_not: required: false description: Entity state or ID to not be equal to this value. Can contain an array of states.* type: [list, string] +entity: + required: false + description: An optional entity ID to be used for testing the state condition. If not provided, the state of the entity being displayed is tested. + type: string {% endconfiguration %} *one is required (`state` or `state_not`) @@ -178,6 +182,10 @@ below: required: false description: Entity state or ID to be below this value.* type: string +entity: + required: false + description: An optional entity ID to be used for testing the numeric state condition. If not provided, the numeric state of the entity being displayed is tested. + type: string {% endconfiguration %} *at least one is required (`above` or `below`), both are also possible for values between. diff --git a/source/_dashboards/heading.markdown b/source/_dashboards/heading.markdown index 3c325d36a6f..9a444048546 100644 --- a/source/_dashboards/heading.markdown +++ b/source/_dashboards/heading.markdown @@ -60,7 +60,7 @@ badges: ## 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. +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. Heading badges also support [actions](/dashboards/actions/). ```yaml type: entity @@ -108,4 +108,12 @@ 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 +hold_action: + required: false + description: Action taken on card hold. See [action documentation](/dashboards/actions/#hold-action). By default, it will do nothing. + type: map +double_tap_action: + required: false + description: Action taken on card double tap. See [action documentation](/dashboards/actions/#double-tap-action). By default, it will do nothing. + type: map {% endconfiguration %} diff --git a/source/_dashboards/history-graph.markdown b/source/_dashboards/history-graph.markdown index 1a21bca39d7..b1f6bdf0ef8 100644 --- a/source/_dashboards/history-graph.markdown +++ b/source/_dashboards/history-graph.markdown @@ -71,6 +71,11 @@ fit_y_data: description: If true, configured Y-axis bounds would automatically extend (but not shrink) to fit the data. type: boolean default: false +expand_legend: + required: false + description: If true, the legend will show all items initially + type: boolean + default: false {% endconfiguration %} ### Options for entities diff --git a/source/_dashboards/iframe.markdown b/source/_dashboards/iframe.markdown index 089db8e9bb2..0bd7daf027b 100644 --- a/source/_dashboards/iframe.markdown +++ b/source/_dashboards/iframe.markdown @@ -61,6 +61,11 @@ allow: description: The [Permissions Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Permissions-Policy#iframes) of the iframe, that is, the value of the [`allow`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#allow) attribute. type: string default: "fullscreen" +disable_sandbox: + required: false + description: Disables the [sandbox](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attr-sandbox) attribute of the iframe, e.g. required for Chrome when viewing PDFs. This is less secure and should only be used if you trust the content of the iframe. + type: boolean + default: false {% endconfiguration %} ### Examples diff --git a/source/_dashboards/map.markdown b/source/_dashboards/map.markdown index f1bb649f315..e16e352197a 100644 --- a/source/_dashboards/map.markdown +++ b/source/_dashboards/map.markdown @@ -19,7 +19,7 @@ related: 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 Screenshot of the map card.

@@ -57,13 +57,18 @@ type: description: "`map`" type: string entities: - required: true - description: List of entity IDs or `entity` objects (see [below](#options-for-entities)). Either this or the `geo_location_sources` configuration option is required. + required: false + description: List of entity IDs or `entity` objects (see [below](#options-for-entities)). Either this, `show_all`, or the `geo_location_sources` configuration option is required. type: list geo_location_sources: - required: true - description: List of geolocation sources or `source` objects (see [below](#options-for-geolocation-sources)). All current entities with that source will be displayed on the map. See [Geolocation](/integrations/geo_location/) platform for valid sources. Set to `all` to use all available sources. Either this or the `entities` configuration option is required. + required: false + description: List of geolocation sources or `source` objects (see [below](#options-for-geolocation-sources)). All current entities with that source will be displayed on the map. See [Geolocation](/integrations/geo_location/) platform for valid sources. Set to `all` to use all available sources. Either this, `show_all`, or the `entities` configuration option is required. type: list +show_all: + required: false + description: Automatically add all entities with coordinates to the map card. (Default behavior of Map panel) + type: boolean + default: false auto_fit: required: false description: The map will follow moving `entities` by adjusting the viewport of the map each time an entity is updated. @@ -125,7 +130,11 @@ name: label_mode: required: false default: name - description: When set to `icon`, renders the entity's icon in the marker instead of text. When set to `state`, renders the entity's state as the label for the map marker instead of the entity's name. This option doesn't apply to [zone](/integrations/zone/) entities because they don't use a label but an icon. + description: When set to `icon`, renders the entity's icon in the marker instead of text. When set to `state` or `attribute`, renders the entity's state or attribute as the label for the map marker instead of the entity's name. This option doesn't apply to [zone](/integrations/zone/) entities because they don't use a label but an icon. + type: string +attribute: + required: false + description: An entity's attribute when `label_mode` set to `attribute`. type: string focus: required: false @@ -146,8 +155,12 @@ source: label_mode: required: false default: name - description: When set to `icon`, renders the geolocation entity's icon in the marker instead of text. When set to `state`, renders the entity's state as the label for the map marker instead of the entity's name. - type: string + description: When set to `icon`, renders the entity's icon in the marker instead of text. When set to `state` or `attribute`, renders the entity's state or attribute as the label for the map marker instead of the entity's name. This option doesn't apply to [zone](/integrations/zone/) entities because they don't use a label but an icon. + type: string +attribute: + required: false + description: An entity's attribute when `label_mode` set to `attribute`. + type: string focus: required: false default: true diff --git a/source/_dashboards/markdown.markdown b/source/_dashboards/markdown.markdown index 1809bdd3066..1a71fe38209 100644 --- a/source/_dashboards/markdown.markdown +++ b/source/_dashboards/markdown.markdown @@ -58,6 +58,11 @@ show_empty: description: By default, an empty card will still be shown (resulting in a small empty box). Setting this to `false` hides that empty card instead. default: true type: boolean +text_only: + required: false + description: Display the card without border, background, padding and title. + default: false + type: boolean {% endconfiguration %} ### Example diff --git a/source/_dashboards/sections.markdown b/source/_dashboards/sections.markdown index 7ef99bfe1b6..cfbd52353de 100644 --- a/source/_dashboards/sections.markdown +++ b/source/_dashboards/sections.markdown @@ -35,13 +35,31 @@ You can group cards without using horizontal or vertical stack cards. 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. + - Note that this only applies to horizontal gaps if you used sections more than one column wide. 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. +6. Once you have created a sections view, you can start curating it: + - [Add sections and cards](#adding-sections-and-cards-to-a-sections-view). + - [Rearrange](#rearranging-sections-and-cards) and [show or hide sections conditionally](#show-or-hide-section-conditionally). + - [Add a dashboard header with a title and badges](#editing-the-header). + +## Editing the header + +

+ Editing the header + Editing the header +

+ +1. To add a title, select the **Add title** button. The title supports [Markdown](https://commonmark.org/help/) and [templating](/docs/configuration/templating/). +2. To add badges, elect the **Add badge** button. Follow [steps on adding badges](/dashboards/badges) to see the different possible options. +3. To change the title and badges disposition, select the edit {% icon "mdi:edit" %} button to access header settings. + +![Edit view heading section button](/images/dashboards/sections_view_header_editor.png) ## Adding sections and cards to a sections view -Once you have created a sections view, you can populate it with sections and cards. The new section comes with one section to which you can directly add a card. +The view comes with one section to which you can directly add a card. 1. To add a card, select the **Add card** button. - Follow the [steps on adding cards](/dashboards/cards/#adding-cards-to-your-dashboard). @@ -108,3 +126,22 @@ type: description: "`sections`" type: string {% endconfiguration %} + +## Header YAML configuration + +{% configuration %} +layout: + required: false + description: Layout of the different elements. Can be `start`, `center`, or `responsive`. `responsive` is the same as `start` on mobile devices. It places badges and title side by side on desktop. + type: string + default: center +badges_position: + required: false + description: Badges position. Can be `bottom` or `top`. + type: string + default: bottom +card: + required: true + description: Card to be used as title. If you are configuring the view using the visual editor, the configuration of the [Markdown card](/dashboards/markdown) is used. + type: map +{% endconfiguration %} diff --git a/source/_dashboards/statistic.markdown b/source/_dashboards/statistic.markdown index e7d03df5ebf..68e65b163bf 100644 --- a/source/_dashboards/statistic.markdown +++ b/source/_dashboards/statistic.markdown @@ -64,6 +64,10 @@ footer: required: false description: Footer widget to render. See [footer documentation](/dashboards/header-footer/). type: map +collection_key: + required: false + description: "If using `period: energy_date_selection`, you can set a custom key to match the optional key of an `energy-date-selection` card. This is not typically required, but can be useful if multiple date selection cards are used on the same view. See [energy documentation](/dashboards/energy/#using-multiple-collections)." + type: string {% endconfiguration %} ## Example @@ -81,7 +85,7 @@ stat_type: change ## Options for period -Periods can be configured in 3 different ways: +Periods can be configured in 4 different ways: ### Calendar @@ -177,3 +181,16 @@ period: seconds: -10 stat_type: change ``` + +### Dynamic date selection + +When placed on a view with an Energy date selection card, the statistic card can be linked to show data from the period selected on the date selection card. + +Example of a period from the date selector: + +```yaml +type: statistic +entity: sensor.energy_consumption +period: energy_date_selection +stat_type: change +``` diff --git a/source/_dashboards/statistics-graph.markdown b/source/_dashboards/statistics-graph.markdown index b85599a43ce..2860351b433 100644 --- a/source/_dashboards/statistics-graph.markdown +++ b/source/_dashboards/statistics-graph.markdown @@ -87,6 +87,11 @@ fit_y_data: description: If true, configured Y-axis bounds would automatically extend (but not shrink) to fit the data. type: boolean default: false +expand_legend: + required: false + description: If true, the legend will show all items initially + type: boolean + default: false energy_date_selection: required: false description: If true, chart date range will follow the date selected on an `energy-date-selection` card on the same view, similar to energy cards. @@ -95,7 +100,7 @@ energy_date_selection: collection_key: required: false description: If using `energy_date_selection`, you can set a custom key to match the optional key of an `energy-date-selection` card. This is not typically required, but can be useful if multiple date selection cards are used on the same view. - type: string + type: string {% endconfiguration %} ### Options for entities diff --git a/source/_dashboards/tile.markdown b/source/_dashboards/tile.markdown index 719c6cc247e..f64909d7e11 100644 --- a/source/_dashboards/tile.markdown +++ b/source/_dashboards/tile.markdown @@ -12,11 +12,12 @@ related: title: Dashboard cards --- -The tile card gives you a quick overview of your {% term entity %}. The card allows you to toggle the {% term entity %} and show the more info dialog. A badge is shown for some {% term entities %} like the [climate](/integrations/climate) or [person](/integrations/person) {% term entities %}. +The tile card gives you a quick overview of your {% term entity %}. The card allows you to add tap actions, and features to control the entity. You can also select the {% term entity %} to open the more info dialog. A badge is shown for some {% term entities %} like the [climate](/integrations/climate) or [person](/integrations/person) {% term entities %}.

- Screenshot of tile cards - Screenshot of tile cards. + Screenshot of tile cards + The circular background behind an icon indicates that there is a tap action. + The "Downstairs" and "Upstairs" climate entities have a badge and a feature that is bottom-aligned.

{% include dashboard/edit_dashboard.md %} @@ -91,6 +92,12 @@ features: required: false description: Additional widgets to control your entity. See [available features](/dashboards/features). type: list +features_position: + required: false + description: Position of the features on the tile card. Can be `bottom` or `inline`. Only the first feature will be displayed when the option is set to `inline`. `inline` is not compatible with the `vertical` option. + type: string + default: bottom + {% endconfiguration %} ## Examples @@ -145,15 +152,4 @@ features: You want to colorize the tile card? Choose one of the following colors: `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black` and `white`. -## Reordering features -Some features of the tile card, such as the presets or the HVAC modes of a -thermostat, can show many buttons. While you can limit the buttons you’d -like to see, they may not be in the desired order. - -For your thermostat, that means you can reorder the HVAC modes or presets. - -

-  Screen recording showing how you can now reorder the HVAC modes on the thermostat shown in a tile card. - You can now reorder the features of the tile card. -

diff --git a/source/_dashboards/todo-list.markdown b/source/_dashboards/todo-list.markdown index 267a9679362..0ba350db3f0 100644 --- a/source/_dashboards/todo-list.markdown +++ b/source/_dashboards/todo-list.markdown @@ -70,7 +70,12 @@ hide_create: required: false description: Hide the textbox for creating new tasks at the top of the card. type: boolean - default: "false" + default: "false" +display_order: + required: false + description: "Optionally sorts the items in the to-do list for display. Options are: `none`: Show the list in its original order. `alpha_asc`: Sort the list in alphabetical order. `alpha_desc`: Sort the list in reverse alphabetical order. `duedate_asc`: Sort the list by due date (soonest first). `duedate_desc`: Sort the list by reverse due date (soonest last)." + type: string + default: "none" {% endconfiguration %} ### Examples diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index f0a4b417633..9a294ae2935 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -532,7 +532,6 @@ entities for organic, paper, and packaging waste. In terms of functionality, the information service is like a device. It is called *service* to avoid confusion, as it does not come with a piece of hardware. - link: /docs/scripts/perform-actions/ aliases: - services - term: State diff --git a/source/_data/people.yml b/source/_data/people.yml index 120f86f5ecb..16043925a3d 100644 --- a/source/_data/people.yml +++ b/source/_data/people.yml @@ -92,4 +92,8 @@ Missy Quarry: Annika Schulz: name: Annika Schulz - github: anakinsbrna \ No newline at end of file + github: anakinsbrna + +Miranda Bishop: + name: Miranda Bishop + github: miranda-gb \ No newline at end of file diff --git a/source/_data/products.yml b/source/_data/products.yml new file mode 100644 index 00000000000..8ba4a091548 --- /dev/null +++ b/source/_data/products.yml @@ -0,0 +1,488 @@ +green: + name: "Home Assistant Green" + distributors: + # America + - name: Amazon US + ship_from: US + ship_to: America + url: https://www.amazon.com/dp/B0CXVKSG19?maas=maas_adg_BB51722E249D328CABB2F6DF1F8976CC_afap_abs&ref_=aa_maas&tag=maas + logo: /images/distributors/amazon.webp + - name: ameriDroid + ship_from: US + ship_to: America + url: https://ameridroid.com/products/home-assistant-green + logo: /images/distributors/ameridroid.webp + - name: CloudFree + ship_from: US + ship_to: America + url: https://cloudfree.shop/product/home-assistant-green/ + logo: /images/distributors/cloudfree.webp + - name: Seeed Studio + ship_from: US + ship_to: America + url: https://www.seeedstudio.com/Home-Assistant-Green-p-5792.html + logo: /images/distributors/seeed-studio.webp + # Asia + - name: Seeed Studio + ship_from: China + ship_to: Asia + url: https://www.seeedstudio.com/Home-Assistant-Green-p-5792.html + logo: /images/distributors/seeed-studio.webp + # Australia + - name: Oz Smart Things + ship_from: Australia + ship_to: Australia + url: https://www.ozsmartthings.com.au/products/home-assistant-green-smart-hub + logo: /images/distributors/oz-smart-things.webp + - name: Smart Guys + ship_from: Australia + ship_to: Australia + url: https://smartguys.com.au/home-assistant-green.html + logo: /images/distributors/smart-guys.webp + - name: SmartHome + ship_from: Australia + ship_to: Australia + url: https://www.smarthome.com.au/product/home-assistant-green/ + logo: /images/distributors/smarthome.webp + # Europe + - name: Alza.cz + ship_from: Czechia + ship_to: Europe + url: https://www.alza.cz/home-assistant-green-d7998187.htm + logo: /images/distributors/alza-cz.webp + - name: Botland + ship_from: Poland + ship_to: Europe + url: https://botland.com.pl/centralki-i-bramki-sieciowe/24319-home-assistant-green-inteligentna-centralka-nabu-casa-nc-green-1175-794677011758.html + logo: /images/distributors/botland.webp + - name: DinamoTech + ship_from: Italy + ship_to: Europe + url: https://dinamotech.it/products/home-assistant-green + logo: /images/distributors/dinamo-tech.webp + - name: Domadoo + ship_from: France + ship_to: Europe + url: https://www.domadoo.fr/fr/box-domotique/7046-nabu-casa-box-domotique-home-assistant-green-0794677011758.html + logo: /images/distributors/domadoo.jpg + - name: Everything Smart Technology + ship_from: UK + ship_to: Europe + url: https://shop.everythingsmart.io/products/home-assistant-green + logo: /images/distributors/est.webp + - name: eWeLink device store + ship_from: Hungary + ship_to: Europe + url: https://ewelinkstore.com/product/home-assistant-green-hub/ + logo: /images/distributors/ewelink.png + - name: HAshop + ship_from: Netherlands + ship_to: Europe + url: https://www.hashop.nl/Home-Assistant-Green + logo: /images/distributors/ha-shop.webp + - name: ROBBshop + ship_from: Netherlands + ship_to: Europe + url: https://www.robbshop.nl/home-assistant-green-smart-hub + logo: /images/distributors/robb.webp + - name: Kjell + ship_from: Norway + ship_to: Europe + url: https://www.kjell.com/no/produkter/smarte-hjem/kontroller/nabu-casa-home-assistant-green-p88430 + logo: /images/distributors/kjell-company.webp + - name: Mauser + ship_from: Portugal + ship_to: Europe + url: https://mauser.pt/catalog/product_info.php?products_id=095-3152 + logo: /images/distributors/mauser.png + - name: mediarath + ship_from: Germany + ship_to: Europe + url: https://mediarath.de/products/home-assistant-green-smart-home-hub-2x-usb-gigabit-lan-hmdi-microsd-slot + logo: /images/distributors/mediarath.de.webp + - name: m.nu + ship_from: Sweden + ship_to: Europe + url: https://en.m.nu/controllers-smart-hubs/home-assistant-green + logo: /images/distributors/m-nu.webp + - name: OkosOtthon Bolt + ship_from: Hungary + ship_to: Europe + url: https://okosotthon.bolt.hu/webaruhaz/termek/home-assistant-green-hub/ + logo: /images/distributors/okosotthon.png + - name: Pi-Shop.ch + ship_from: Switzerland + ship_to: Europe + url: https://www.pi-shop.ch/home-assistant-green + logo: /images/distributors/pi-shop.webp + - name: Pimoroni + ship_from: UK + ship_to: Europe + url: https://shop.pimoroni.com/products/home-assistant-green + logo: /images/distributors/pimoroni.webp + - name: RaspberryPi.dk + ship_from: Denmark + ship_to: Europe + url: https://raspberrypi.dk/en/product/home-assistant-green/ + logo: /images/distributors/RaspberryPi-dk.webp + - name: Seeed Studio + ship_from: Germany + ship_to: Europe + url: https://www.seeedstudio.com/Home-Assistant-Green-p-5792.html + logo: /images/distributors/seeed-studio.webp + - name: SmarterHOME + ship_from: Slovakia + ship_to: Europe + url: https://smarterhome.sk/sk/centralne-jednotky/home-assistant-green-smart-home-hub-1490.html + logo: /images/distributors/smarter-home.png + - name: Swiss-Domotique + ship_from: Switzerland + ship_to: Europe + url: https://shop.swiss-domotique.ch/smarthome-hub/2295-nabu-casa-home-assistant-green.html + logo: /images/distributors/swiss-domotique.webp + - name: The Pi Hut + ship_from: UK + ship_to: Europe + url: https://thepihut.com/products/home-assistant-green + logo: /images/distributors/pi-hut.webp + - name: Webhallen + ship_from: Sweden + ship_to: Europe + url: https://www.webhallen.com/se/product/364271-Nabu-Casa-Home-Assistant-Green + logo: /images/distributors/webhallen.webp + - name: WIFIShop + ship_from: Romania + ship_to: Europe + url: https://www.wifishop.ro/en/homeassistant/home-assistant-green.html + logo: /images/distributors/wifishop.webp + - name: Inet.se + ship_from: Sweden + ship_to: Europe + url: https://www.inet.se/produkt/8310063/home-assistant-green + logo: /images/distributors/inet.webp +yellow: + name: "Home Assistant Yellow" + distributors: + # America + - name: ameriDroid + ship_from: US + ship_to: America + url: https://ameridroid.com/products/home-assistant-yellow + logo: /images/distributors/ameridroid.webp + - name: CloudFree + ship_from: US + ship_to: America + url: https://cloudfree.shop/product/home-assistant-yellow/ + logo: /images/distributors/cloudfree.webp + - name: Seeed Studio + ship_from: US + ship_to: America + url: https://www.seeedstudio.com/Home-Assistant-Yellow-Kit-with-selectable-CM4.html + logo: /images/distributors/seeed-studio.webp + # Asia + - name: Seeed Studio + ship_from: China + ship_to: Asia + url: https://www.seeedstudio.com/Home-Assistant-Yellow-Kit-with-selectable-CM4.html + logo: /images/distributors/seeed-studio.webp + # Australia + - name: Smart Guys + ship_from: Australia + ship_to: Australia + url: https://smartguys.com.au/product/home-assistant-yellow-smart-hub/ + logo: /images/distributors/smart-guys.webp + # Europe + - name: Botland + ship_from: Poland + ship_to: Europe + url: https://botland.com.pl/centralki-i-bramki-sieciowe/24698-home-assistant-yellow-standard-kit-inteligenta-centralka-zigbee-thread-nabu-casa-yellow-kit-std-794677011741.html + logo: /images/distributors/botland.webp + - name: Mauser + ship_from: Portugal + ship_to: Europe + url: https://mauser.pt/catalog/product_info.php?products_id=095-3150 + logo: /images/distributors/mauser.png + - name: Pi-Shop.ch + ship_from: Switzerland + ship_to: Europe + url: https://www.pi-shop.ch/home-assistant-yellow-kit-with-power-supply-cm4-not-included + logo: /images/distributors/pi-shop.webp + - name: RaspberryPi.dk + ship_from: Denmark + ship_to: Europe + url: https://raspberrypi.dk/en/product/home-assistant-yellow/ + logo: /images/distributors/RaspberryPi-dk.webp + - name: Seeed Studio + ship_from: Germany + ship_to: Europe + url: https://www.seeedstudio.com/Home-Assistant-Yellow-Kit-with-selectable-CM4.html + logo: /images/distributors/seeed-studio.webp + - name: The Pi Hut + ship_from: UK + ship_to: Europe + url: https://thepihut.com/products/home-assistant-yellow + logo: /images/distributors/pi-hut.webp + - name: Domadoo + ship_from: France + ship_to: Europe + url: https://www.domadoo.fr/en/smart-home-hub/7113-nabu-casa-home-assistant-yellow-kit-with-power-supply.html + logo: /images/distributors/domadoo.jpg +zbt-1: + name: "Home Assistant Connect ZBT-1" + distributors: + # America + - name: ameriDroid + ship_from: US + ship_to: America + url: https://ameridroid.com/products/skyconnect + logo: /images/distributors/ameridroid.webp + - name: CloudFree + ship_from: US + ship_to: America + url: https://cloudfree.shop/product/home-assistant-skyconnect/ + logo: /images/distributors/cloudfree.webp + - name: Seeed Studio + ship_from: US + ship_to: America + url: https://www.seeedstudio.com/Home-Assistant-SkyConnect-p-5479.html + logo: /images/distributors/seeed-studio.webp + # Asia + - name: Seeed Studio + ship_from: China + ship_to: Asia + url: https://www.seeedstudio.com/Home-Assistant-SkyConnect-p-5479.html + logo: /images/distributors/seeed-studio.webp + # Australia + - name: Smart Guys + ship_from: Australia + ship_to: Australia + url: https://smartguys.com.au/home-assistant-skyconnect.html + logo: /images/distributors/smart-guys.webp + # Europe + - name: Alza.cz + ship_from: Czech Republic + ship_to: Europe + url: https://www.alza.cz/home-assistant-skyconnect-usb-hub-d7815713.htm + logo: /images/distributors/alza-cz.webp + - name: Botland + ship_from: Poland + ship_to: Europe + url: https://botland.com.pl/centralki-i-bramki-sieciowe/22759-home-assistant-skyconnect-usb-stick-zgodny-z-zigbeematterthread-794677011635.html + logo: /images/distributors/botland.webp + - name: DinamoTech + ship_from: Italy + ship_to: Europe + url: https://dinamotech.it/products/home-assistant-connect-zbt-1 + logo: /images/distributors/dinamo-tech.webp + - name: Domadoo + ship_from: France + ship_to: Europe + url: https://www.domadoo.fr/fr/box-domotique/6938-dongle-usb-zigbee-30-sky-connect-pour-home-assistant-nabu-casa-0794677011635.html + logo: /images/distributors/domadoo.jpg + - name: Everything Smart Technology + ship_from: UK + ship_to: Europe + url: https://shop.everythingsmart.io/products/home-assistant-skyconnect + logo: /images/distributors/est.webp + - name: eWeLink device store + ship_from: Hungary + ship_to: Europe + url: https://ewelinkstore.com/product/home-assistant-connect-zbt-1-a-zigbee-thread-matter-usb-stick/ + logo: /images/distributors/ewelink.png + - name: HAshop + ship_from: Netherlands + ship_to: Europe + url: https://www.hashop.nl/Home-Assistant-SkyConnect + logo: /images/distributors/ha-shop.webp + - name: Kjell + ship_from: Norway + ship_to: Europe + url: https://www.kjell.com/no/produkter/smarte-hjem/kontroller/nabu-casa-home-assistant-skyconnect-p88431 + logo: /images/distributors/kjell-company.webp + - name: Mauser + ship_from: Portugal + ship_to: Europe + url: https://mauser.pt/catalog/product_info.php?products_id=095-1222 + logo: /images/distributors/mauser.png + - name: mediarath + ship_from: Germany + ship_to: Europe + url: https://mediarath.de/products/home-assistant-connect-zbt-1-zigbee-thread-matter-usb-stick-fur-home-assistant-skyconnect + logo: /images/distributors/mediarath.de.webp + - name: m.nu + ship_from: Sweden + ship_to: Europe + url: https://en.m.nu/zigbee/controllers-zigbee/home-assistant-skyconnect-zigbee-matter-thread + logo: /images/distributors/m-nu.webp + - name: OkosOtthon Bolt + ship_from: Hungary + ship_to: Europe + url: https://okosotthon.bolt.hu/webaruhaz/termek/home-assistant-connect-zbt-1-zigbee-thread-matter-usb-kulcs/ + logo: /images/distributors/okosotthon.png + - name: Pimoroni + ship_from: UK + ship_to: Europe + url: https://shop.pimoroni.com/products/home-assistant-connect-zbt-1 + logo: /images/distributors/pimoroni.webp + - name: RaspberryPi.dk + ship_from: Denmark + ship_to: Europe + url: https://raspberrypi.dk/en/product/home-assistant-skyconnect/ + logo: /images/distributors/RaspberryPi-dk.webp + - name: Robbshop + ship_from: Netherlands + ship_to: Europe + url: https://www.robbshop.nl/home-assistant-skyconnect-zigbee-en-thread-usb + logo: /images/distributors/robb.webp + - name: Seeed Studio + ship_from: Germany + ship_to: Europe + url: https://www.seeedstudio.com/Home-Assistant-SkyConnect-p-5479.html + logo: /images/distributors/seeed-studio.webp + - name: SmarterHOME + ship_from: Slovakia + ship_to: Europe + url: https://smarterhome.sk/sk/zwave-pc-adaptery/home-assistant-connect-zbt-1-zigbee-a-thread-usb-adapter-1646.html + logo: /images/distributors/smarter-home.png + - name: Swiss-Domotique + ship_from: Switzerland + ship_to: Europe + url: https://shop.swiss-domotique.ch/de/smarthome-zentrale/2118-nabu-casa-home-assistant-skyconnect.html + logo: /images/distributors/swiss-domotique.webp + - name: The Pi Hut + ship_from: UK + ship_to: Europe + url: https://thepihut.com/collections/latest-raspberry-pi-products/products/home-assistant-skyconnect + logo: /images/distributors/pi-hut.webp + - name: Webhallen + ship_from: Sweden + ship_to: Europe + url: https://www.webhallen.com/se/product/357205-Home-Assistant-SkyConnect-ZigbeeMatterThread + logo: /images/distributors/webhallen.webp + - name: WIFIShop + ship_from: Romania + ship_to: Europe + url: https://www.wifishop.ro/en/homeassistant/home-assistant-skyconnect.html + logo: /images/distributors/wifishop.webp + - name: Inet.se + ship_from: Sweden + ship_to: Europe + url: https://www.inet.se/produkt/8310064/home-assistant-connect-zbt-1 + logo: /images/distributors/inet.webp +voice-pe: + name: "Home Assistant Voice Preview Edition" + distributors: + # America + - name: ameriDroid + ship_from: US + ship_to: America + url: https://ameridroid.com/products/home-assistant-voice-preview-edition/ + logo: /images/distributors/ameridroid.webp + - name: CloudFree + ship_from: US + ship_to: America + url: https://cloudfree.shop/product/home-assistant-voice-preview-edition/ + logo: /images/distributors/cloudfree.webp + - name: Seeed Studio + ship_from: US + ship_to: America + url: https://www.seeedstudio.com/Home-Assistant-Voice-p-6998.html + logo: /images/distributors/seeed-studio.webp + # Asia + - name: Seeed Studio + ship_from: China + ship_to: Asia + url: https://www.seeedstudio.com/Home-Assistant-Voice-p-6998.html + logo: /images/distributors/seeed-studio.webp + # Australia + - name: OZ Smart Things + ship_from: Australia + ship_to: Australia + url: https://www.ozsmartthings.com.au/products/ha-voice-preview-edition + logo: /images/distributors/oz-smart-things.webp + - name: Smart Guys + ship_from: Australia + ship_to: Australia + url: https://smartguys.com.au/product/home-assistant-voice-preview-edition/ + logo: /images/distributors/smart-guys.webp + # Europe + - name: Alza.cz + ship_from: Czechia + ship_to: Europe + url: https://www.alza.cz/home-assistant-voice-preview-edition-d12741248.htm + logo: /images/distributors/alza-cz.webp + - name: RaspberryPi.dk + ship_from: Denmark + ship_to: Europe + url: https://raspberrypi.dk/en/product/home-assistant-voice-preview-edition/ + logo: /images/distributors/RaspberryPi-dk.webp + - name: Domadoo + ship_from: France + ship_to: Europe + url: https://www.domadoo.fr/fr/box-domotique/7558-nabu-casa-home-assistant-voice-preview-edition-0860011789727.html + logo: /images/distributors/domadoo.jpg + - name: mediarath + ship_from: Germany + ship_to: Europe + url: https://mediarath.de/products/home-assistant-voice-preview-edition-open-source-privacy-focused-voice-assistant-with-esphome + logo: /images/distributors/mediarath.de.webp + - name: Seeed Studio + ship_from: Germany + ship_to: Europe + url: https://www.seeedstudio.com/Home-Assistant-Voice-p-6998.html + logo: /images/distributors/seeed-studio.webp + - name: Dinamotech + ship_from: Italy + ship_to: Europe + url: https://dinamotech.it/products/home-assistant-voice + logo: /images/distributors/dinamo-tech.webp + - name: Botland + ship_from: Poland + ship_to: Europe + url: https://botland.com.pl/asystenci-glosowi/25872-home-assistant-voice-preview-edition-asystent-glosowy-860011789727.html + logo: /images/distributors/botland.webp + - name: Mauser.pt + ship_from: Portugal + ship_to: Europe + url: https://mauser.pt/catalog/product_info.php?products_id=095-4747 + logo: /images/distributors/mauser.png + - name: SmarterHOME + ship_from: Slovakia + ship_to: Europe + url: https://smarterhome.sk/sk/hlasovi-asistenti/home-assistant-voice-preview-edition-1714.html + logo: /images/distributors/smarter-home.png + - name: Webhallen + ship_from: Sweden + ship_to: Europe + url: https://www.webhallen.com/377166 + logo: /images/distributors/webhallen.webp + - name: Swiss-Domotique + ship_from: Switzerland + ship_to: Europe + url: https://shop.swiss-domotique.ch/de/sound/2667-nabu-casa-home-assistant-voice-preview-edition.html + logo: /images/distributors/swiss-domotique.webp + - name: The Pi Hut + ship_from: UK + ship_to: Europe + url: https://thepihut.com/products/home-assistant-voice-preview-edition + logo: /images/distributors/pi-hut.webp + - name: Everything Smart Technology + ship_from: UK + ship_to: Europe + url: https://shop.everythingsmart.io/products/home-assistant-voice-preview-edition + logo: /images/distributors/est.webp + - name: Pimoroni + ship_from: UK + ship_to: Europe + url: https://shop.pimoroni.com/products/home-assistant-voice + logo: /images/distributors/pimoroni.webp + - name: Inet.se + ship_from: Sweden + ship_to: Europe + url: https://www.inet.se/produkt/8310094/home-assistant-voice-preview-edition + logo: /images/distributors/inet.webp + - name: Pi-Shop.ch + ship_from: Switzerland + ship_to: Europe + url: https://www.pi-shop.ch/home-assistant-voice-preview-edition + logo: /images/distributors/pi-shop.webp diff --git a/source/_docs/automation/condition.markdown b/source/_docs/automation/condition.markdown index 3b782367fd9..ea19da75dbf 100644 --- a/source/_docs/automation/condition.markdown +++ b/source/_docs/automation/condition.markdown @@ -3,7 +3,7 @@ title: "Automation conditions" description: "Automations can test conditions when invoked." --- -Conditions are an optional part of an automation rule. They can be used to prevent the automation's actions from being run. After a {% term trigger %} occurred, all conditions will be checked. If any of them do not return true, the automation will stop executing. +Conditions are an optional part of an automation rule. They can be used to prevent the automation's actions from being run. After a {% term trigger %} occurred, all conditions will be checked. The automation will be executed if all conditions return true, otherwise, if any of them does not return true, the automation will stop executing. Conditions look very similar to triggers, but they are very different — a trigger will look at events happening in the system, while a condition only looks at how the system looks right now. A trigger can observe that a switch is being turned on. A condition can only see if a switch is currently on or off. diff --git a/source/_docs/automation/templating.markdown b/source/_docs/automation/templating.markdown index ce3529e1342..4132b0f3eab 100644 --- a/source/_docs/automation/templating.markdown +++ b/source/_docs/automation/templating.markdown @@ -25,6 +25,7 @@ Triggers from all platforms will include the following data. | Template variable | Data | | ---- | ---- | +| `trigger.alias` | Alias of the trigger. | `trigger.id` | The [`id` of the trigger](/docs/automation/trigger/#trigger-id). | `trigger.idx` | Index of the trigger. (The first trigger idx is `0`.) diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 4b0267e80db..a51b2870e3a 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -797,6 +797,8 @@ automation: It's also possible to use [limited templates](/docs/configuration/templating/#limited-templates) for times. +{% raw %} + ```yaml blueprint: input: @@ -821,6 +823,8 @@ blueprint: - "{{ my_hour }}:30:00" ``` +{% endraw %} + ## Time pattern trigger With the time pattern trigger, you can match if the hour, minute or second of the current time matches a specific value. You can prefix the value with a `/` to match whenever the value is divisible by that number. You can specify `*` to match any value (when using the web interface this is required, the fields cannot be left empty). diff --git a/source/_docs/blueprint.markdown b/source/_docs/blueprint.markdown index 1f46b3776ed..436b4eae550 100644 --- a/source/_docs/blueprint.markdown +++ b/source/_docs/blueprint.markdown @@ -18,10 +18,12 @@ This section gives a high-level introduction to blueprints. To view a descriptio ## What is a blueprint? -A blueprint is a {% term script %}, {% term automation %} or [template entity](/docs/integrations/template/) configuration with certain parts marked as configurable. This allows you to create different scripts, automations or template entities based on the same blueprint. +A blueprint is a {% term script %}, {% term automation %} or [template entity](/integrations/template/) configuration with certain parts marked as configurable. This allows you to create different scripts, automations or template entities based on the same blueprint. Imagine you want to control lights based on motion. A blueprint provides the generic {% term automation %} framework, while letting you select one specific motion sensor as a {% term trigger %}, and the exact light to control. This blueprint makes it possible to create two automations. Each automation has their own configuration and act completely independently. Yet, they share some basic automation configuration so that you do not have to set this up every time. +Automations inherit from blueprints, which means that changes made to a blueprint will be reflected in all automations based on that blueprint the next time the automations are reloaded. This occurs as part of Home Assistant starting. To manually reload the automations, go to {% my server_controls title="**Developer tools** > **YAML**" %} and reload the automations. + Blueprints are shared by the community in the [blueprint community forum][blueprint-forums]. [blueprint-forums]: /get-blueprints diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index ca4ed195ee7..822ded95bb0 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -150,6 +150,12 @@ device: the set model. type: string required: false + model_id: + description: > + When set, the list of areas is limited to areas with devices that have + the set model ID. + type: string + required: false entity: description: > When entity options are provided, the list of areas is filtered by areas @@ -485,7 +491,7 @@ devices based on the selector configuration. The value of the input will contain the device ID or a list of device IDs, based on if `multiple` is set to `true`. A device selector can filter the list of devices, based on things like the -manufacturer or model of the device, the entities the device provides or based +manufacturer, model, or model ID of the device, the entities the device provides or based on the domain that provided the device. ![Screenshot of a device selector](/images/blueprints/selector-device.png) @@ -561,6 +567,11 @@ filter: When set, it limits the list of devices to devices that have the set model. type: string required: false + model_id: + description: > + When set, the list of devices is limited to devices that have the set model ID. + type: string + required: false multiple: description: > Allows selecting multiple devices. If set to `true`, the resulting value of @@ -792,6 +803,12 @@ device: the set model. type: string required: false + model_id: + description: > + When set, the list only includes floors with devices that have + the set model ID. + type: string + required: false entity: description: > When entity options are provided, the list only includes floors @@ -1342,6 +1359,10 @@ device: description: When set, it limits the targets to devices by the set model. type: string required: false + model_id: + description: When set, the targets are limited to devices that have the set model ID. + type: string + required: false entity: description: > When entity options are provided, the targets are limited by entities @@ -1539,3 +1560,19 @@ The output of this selector is a list of triggers. For example: entity_id: "sensor.outside_temperature" below: 20 ``` + +### Example - Merging with existing triggers + +If the trigger(s) should exist within a blueprint that already has some default triggers defined, and an additional customizable trigger should be merged, you need to use the `- triggers` syntax in the blueprint. + +```yaml +# Example trigger selector +input: + my_trigger_input: + selector: + trigger: +triggers: + - triggers: !input my_trigger_input + - platform: numeric_state + [...] +``` diff --git a/source/_docs/blueprint/tutorial.markdown b/source/_docs/blueprint/tutorial.markdown index f949fd135dd..44c9dca2483 100644 --- a/source/_docs/blueprint/tutorial.markdown +++ b/source/_docs/blueprint/tutorial.markdown @@ -193,7 +193,7 @@ blueprint: entity: filter: - domain: binary_sensor - - device_class: motion + device_class: motion target_light: name: Lights description: The lights to keep in sync. @@ -224,7 +224,7 @@ blueprint: entity: filter: - domain: binary_sensor - - device_class: motion + device_class: motion target_light: name: Lights description: The lights to keep in sync. diff --git a/source/_docs/configuration/packages.markdown b/source/_docs/configuration/packages.markdown index 466652fec79..f353c194a2f 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -3,7 +3,7 @@ title: "Packages" description: "Describes all there is to know about configuration packages in Home Assistant." --- -Packages in Home Assistant provide a way to bundle different integration's configuration together. With packages we have a way to include different integrations, or different configuration parts using any of the `!include` directives introduced in [splitting the configuration](/docs/configuration/splitting_configuration). +Packages in Home Assistant provide a way to bundle configurations from multiple integrations. With packages, we have a way to include multiple integrations, or parts of integrations using any of the `!include` directives introduced in [splitting the configuration](/docs/configuration/splitting_configuration). Packages are configured under the core `homeassistant/packages` in the configuration and take the format of a package name (no spaces, all lower case) followed by a dictionary with the package configuration. For example, package `pack_1` would be created as: diff --git a/source/_docs/configuration/state_object.markdown b/source/_docs/configuration/state_object.markdown index 7f70fd8a92e..c792feb5e35 100644 --- a/source/_docs/configuration/state_object.markdown +++ b/source/_docs/configuration/state_object.markdown @@ -32,7 +32,7 @@ The `state` prefix indicates that this information is part of the state object ( ### About the state -The screenshot shows three lights in different states (the `state.state`): `on`, `off`, and `unavailable`. Each light comes with its own entity state attributes such as `supported_color_modes`, `supported_features`. These attributes have their own state: the state of `supported_color_modes` is `color_temp` and `hs`, the state of the `supported_features` attribute is `4`. +The screenshot shows three lights in different states (the `state.state`): `on`, `off`, and `unavailable`. Each light comes with its own entity state attributes such as `supported_color_modes`, `supported_features`. These attributes have their own state: the state of the `supported_color_modes` attribute is `color_temp` and `hs`, the state of the `supported_features` attribute is `4`.

Screenshot showing three lights with different states: `on`, `off`, or `unavailable` diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 0ee7d7c73f1..42f9b68c86d 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -473,6 +473,7 @@ The same thing can also be expressed as a test: - `floor_id(lookup_value)` returns the floor ID for a given device ID, entity ID, area ID, or area name. Can also be used as a filter. - `floor_name(lookup_value)` returns the floor name for a given device ID, entity ID, area ID, or floor ID. Can also be used as a filter. - `floor_areas(floor_name_or_id)` returns the list of area IDs tied to a given floor ID or name. Can also be used as a filter. +- `floor_entities(floor_name_or_id)` returns the list of entity IDs tied to a given floor ID or name. Can also be used as a filter. #### Floors examples @@ -1173,6 +1174,31 @@ Some examples: +### Hashing + +The template engine contains a few filters and functions to hash a string of +data. A few very common hashing algorithms are supported: `md5`, `sha1`, +`sha256`, and `sha512`. + +Some examples: + +{% raw %} + +- `{{ md5("Home Assistant") }}` - renders as `f3f2b8b3b40084aa87e92b7ffb02ed13885fea2d07` +- `{{ "Home Assistant" | md5 }}` - renders as `f3f2b8b3b40084aa87e92b7ffb02ed13885fea2d07` + +- `{{ sha1("Home Assistant") }}` - renders as `14bffd017c73917bfda2372aaf287570597b8e82` +- `{{ "Home Assistant" | sha1 }}` - renders as `14bffd017c73917bfda2372aaf287570597b8e82` + +- `{{ sha256("Home Assistant") }}` - renders as `a18f473c9d3ed968a598f996dcf0b9de84de4ee04c950d041b61297a25bcea49` +- `{{ "Home Assistant" | sha256 }}` - renders as `a18f473c9d3ed968a598f996dcf0b9de84de4ee04c950d041b61297a25bcea49` + +- `{{ sha512("Home Assistant") }}` - renders as `f251e06eb7d3439e1a86d6497d6a4531c3e8c809f538be62f89babf147d7d63aca4e77ae475b94c654fd38d8f543f778ce80007d6afef379d8a0e5d3ddf7349d` +- `{{ "Home Assistant" | sha512 }}` - renders as `f251e06eb7d3439e1a86d6497d6a4531c3e8c809f538be62f89babf147d7d63aca4e77ae475b94c654fd38d8f543f778ce80007d6afef379d8a0e5d3ddf7349d` + +{% endraw %} + + ### Regular expressions For more information on regular expressions @@ -1184,6 +1210,72 @@ 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. +### Shuffling + +The template engine contains a filter and function to shuffle a list. + +Shuffling can happen randomly or reproducibly using a seed. When using a seed +it will always return the same shuffled list for the same seed. + +Some examples: + +{% raw %} + +- `{{ [1, 2, 3] | shuffle }}` - renders as `[3, 1, 2]` (_random_) +- `{{ shuffle([1, 2, 3]) }}` - renders as `[3, 1, 2]` (_random_) +- `{{ shuffle(1, 2, 3) }}` - renders as `[3, 1, 2]` (_random_) + +- `{{ [1, 2, 3] | shuffle("random seed") }}` - renders as `[2, 3, 1] (_reproducible_) +- `{{ shuffle([1, 2, 3], seed="random seed") }}` - renders as `[2, 3, 1] (_reproducible_) +- `{{ shuffle([1, 2, 3], "random seed") }}`- renders as `[2, 3, 1] (_reproducible_) +- `{{ shuffle(1, 2, 3, seed="random seed") }}` - renders as `[2, 3, 1] (_reproducible_) + +{% endraw %} + +### Flatten a list of lists + +The template engine provides a filter to flatten a list of lists: `flatten`. + +It will take a list of lists and return a single list with all the elements. +The depth of the flattening can be controlled using the `levels` parameter. +The flattening process is recursive, so it will flatten all nested lists, until +the number of levels (if specified) is reached. + +Some examples: + +{% raw %} + +- `{{ flatten([1, [2, [3]], 4, [5 , 6]]) }}` - renders as `[1, 2, 3, 4, 5, 6]` +- `{{ [1, [2, [3]], 4, [5 , 6]] | flatten }}` - renders as `[1, 2, 3, 4, 5, 6]` + +- `{{ flatten([1, [2, [3]]], levels=1) }}` - renders as `[1, 2, [3]]` +- `{{ [1, [2, [3]]], flatten(levels=1) }}` - renders as `[1, 2, [3]]` + +- `{{ flatten([1, [2, [3]]], 1) }}` - renders as `[1, 2, [3]]` +- `{{ [1, [2, [3]]], flatten(1) }}` - renders as `[1, 2, [3]]` + +{% endraw %} + +### Combining dictionaries + +The template engine provides a function and filter to merge multiple dictionaries: `combine`. + +It will take multiple dictionaries and merge them into a single dictionary. When used as a filter, +the filter value is used as the first dictionary. The optional `recursive` parameter determines +whether nested dictionaries should be merged (defaults to `False`). + +Some examples: + +{% raw %} + +- `{{ {'a': 1, 'b': 2} | combine({'b': 3, 'c': 4}) }}` - renders as `{'a': 1, 'b': 3, 'c': 4}` +- `{{ combine({'a': 1, 'b': 2}, {'b': 3, 'c': 4}) }}` - renders as `{'a': 1, 'b': 3, 'c': 4}` + +- `{{ combine({'a': 1, 'b': {'x': 1}}, {'b': {'y': 2}, 'c': 4}, recursive=True) }}` - renders as `{'a': 1, 'b': {'x': 1, 'y': 2}, 'c': 4}` +- `{{ combine({'a': 1, 'b': {'x': 1}}, {'b': {'y': 2}, 'c': 4}) }}` - renders as `{'a': 1, 'b': {'y': 2}, 'c': 4}` + +{% endraw %} + ## Merge action responses Using action responses we can collect information from various entities at the same time. @@ -1514,6 +1606,44 @@ When a command template renders to a valid `bytes` literal, then MQTT will publi - Template {% raw %}`{{ 16 }}`{% endraw %} renders to payload encoded string `"16"`. - Template {% raw %}`{{ pack(0x10, ">B") }}`{% endraw %} renders to a raw 1 byte payload `0x10`. +### Determining types + +When working with templates, it can be useful to determine the type of +the returned value from a method or the type of a variable at times. + +For this, Home Assistant provides the `typeof()` template function and filter, +which is inspired by the [JavaScript](https://en.wikipedia.org/wiki/JavaScript) +`typeof` operator. It reveals the type of the given value. + +This is mostly useful when you are debugging or playing with templates in +the developer tools of Home Assistant. However, it might be useful in some +other cases as well. + +Some examples: + +{% raw %} + +- `{{ typeof(42) }}` - renders as `int` +- `{{ typeof(42.0) }}` - renders as `float` +- `{{ typeof("42") }}` - renders as `str` +- `{{ typeof([1, 2, 3]) }}` - renders as `list` +- `{{ typeof({"key": "value"}) }}` - renders as `dict` +- `{{ typeof(True) }}` - renders as `bool` +- `{{ typeof(None) }}` - renders as `NoneType` + +- `{{ 42 | typeof }}` - renders as `int` +- `{{ 42.0 | typeof }}` - renders as `float` +- `{{ "42" | typeof }}` - renders as `str` +- `{{ [1, 2, 3] | typeof }}` - renders as `list` +- `{{ {"key": "value"} | typeof }}` - renders as `dict` +- `{{ True | typeof }}` - renders as `bool` +- `{{ None | typeof }}` - renders as `NoneType` + +- `{{ some_variable | typeof }}` - renders the type of `some_variable` +- `{{ states("sensor.living_room") | typeof }}` - renders the type of the result of `states()` function + +{% endraw %} + ## Some more things to keep in mind ### `entity_id` that begins with a number diff --git a/source/_docs/energy/water.markdown b/source/_docs/energy/water.markdown index 1db39015429..e26f36e6519 100644 --- a/source/_docs/energy/water.markdown +++ b/source/_docs/energy/water.markdown @@ -35,7 +35,7 @@ There are also products for water usage monitoring that are based on existing co - [Z-Wave](/integrations/zwave_js) - [Zigbee](/integrations/zha) -- [Matter (BETA)](/integrations/matter) +- [Matter](/integrations/matter) ## Community-made sensors diff --git a/source/_docs/glossary.html b/source/_docs/glossary.html deleted file mode 100644 index 112024e72b0..00000000000 --- a/source/_docs/glossary.html +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: "Glossary" -description: "Home Assistant's Glossary." ---- - -{% assign entries = site.data.glossary | sort: 'term' %} - -The glossary covers terms which are used around Home Assistant. - -

- -{% for entry in entries %} - -
-
- - {{ entry.term }} -
-
- - {{ entry.definition | markdownify | newline_to_br }} - {%- if entry.link -%} - Read more about: {{ entry.term }} - {%- endif -%} - -
-
- -{% endfor %} - -
diff --git a/source/_docs/glossary.markdown b/source/_docs/glossary.markdown new file mode 100644 index 00000000000..cdd270c7081 --- /dev/null +++ b/source/_docs/glossary.markdown @@ -0,0 +1,33 @@ +--- +title: "Glossary" +description: "Home Assistant's Glossary." +--- + +The glossary covers terms which are used around Home Assistant. + +{% assign entries = site.data.glossary | sort: 'term' %} +{% assign current_letter = '' %} + +{% for entry in entries %} + +{% assign first_letter = entry.term | slice: 0 %} +{% if first_letter != current_letter %} +{% assign current_letter = first_letter | upcase %} + +## {{ current_letter }} + +--- + +{% endif %} + +### {{ entry.term }} + +{{ entry.definition | markdownify }} + +{%- if entry.link -%} + +{{ "[Read more about " | append: "_" | append: entry.term | append: "_](" | append: entry.link | append: ")" | markdownify }} + +{%- endif -%} + +{% endfor %} diff --git a/source/_docs/locked_out.md b/source/_docs/locked_out.md index cd40aced017..bca337d5190 100644 --- a/source/_docs/locked_out.md +++ b/source/_docs/locked_out.md @@ -31,7 +31,7 @@ You are the **owner** of the Home Assistant server and you cannot login because - [to access the console from Linux or macOS](https://yellow.home-assistant.io/guides/use-serial-console-linux-macos/). - If you are using another system, connect keyboard and monitor. The procedure might be similar the one used for Green. - If you are using a Home Assistant OVA (virtualization image): - - Access the system console by opening the terminal through your virtualization platform's interface (for example, Proxmox, VMware, VirtualBox). + - Access the system console by opening the terminal through your virtualization platform's interface (for example, Proxmox, VMware, VirtualBox). - Follow the platform-specific steps to interact with the virtual machine's console. 3. In the terminal, enter the `auth list` command. - This command lists all users that are registered on your Home Assistant. @@ -81,7 +81,7 @@ Use this procedure only if the following conditions are met: 3. Once you have opened the Home Assistant command line, enter the following command: - Note: `existing_user` is a placeholder. Replace it with your username. - Note: `new_password` is a placeholder. Replace it with your new password. - - **Command**: `auth reset --username existing_user --password new_password` + - **Command**: `auth reset --username 'existing_user' --password 'new_password'` ![Screencast showing how to enter the ha auth reset command](/images/docs/troubleshooting/home-assistant-cli.webp) - **Troubleshooting**: If you see the message `zsh: command not found: auth`, you likely did not enter the command in the serial console connected to the device itself, but in the terminal within Home Assistant. 4. You can now log in to Home Assistant using this new password. @@ -89,7 +89,7 @@ Use this procedure only if the following conditions are met: #### To reset a user's password, via the container command line If you are running Home Assistant in a container, you can use the command line in the container with the `hass` command to change your password. The steps below refer to a Home Assistant container in Docker named `homeassistant`. Note that while working in the container, commands will take a few moments to execute. - + 1. `docker exec -it homeassistant bash` to open to the container command line 2. `hass` to create a default user, if this is your first time using the tool 3. `hass --script auth --config /config change_password existing_user new_password` to change the password diff --git a/source/_docs/scene.markdown b/source/_docs/scene.markdown index fc635d81941..c657f8f2214 100644 --- a/source/_docs/scene.markdown +++ b/source/_docs/scene.markdown @@ -36,10 +36,6 @@ name: description: Friendly name of the scene. required: true type: string -description: - description: Description of the scene. - required: false - type: string entities: description: Entities to control and their desired state. required: true diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 7025cf68675..43727ded7df 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -62,7 +62,7 @@ The variables {% term action %} allows you to set/override variables that will b ```yaml - alias: "Set variables" variables: - entities: + entities: - light.kitchen - light.living_room brightness: 100 @@ -94,9 +94,7 @@ Variables can be templated. ### Scope of variables -Variables have local scope. This means that if a variable is changed in a nested sequence block, that change will not be visible in an outer sequence block. - -Inside the `if` sequence the `variables` {% term action %} will only alter the `people` variable for that sequence. +The `variables` {% term action %} assigns the values to previously defined variables with the same name. If a variable was not previously defined, it is assigned in the top-level (script run) scope. {% raw %} @@ -111,17 +109,17 @@ sequence: entity_id: device_tracker.paulus state: "home" then: - # At this scope and this point of the sequence, people == 0 - variables: people: "{{ people + 1 }}" - # At this scope, people will now be 1 ... + paulus_home: true - action: notify.notify data: message: "There are {{ people }} people home" # "There are 1 people home" - # ... but at this scope it will still be 0 + # Variable value is now updated - action: notify.notify data: - message: "There are {{ people }} people home" # "There are 0 people home" + message: "There are {{ people }} people home {% if paulus_home is defined %}(including Paulus){% endif %}" + # "There are 1 people home (including Paulus)" ``` {% endraw %} @@ -213,8 +211,8 @@ This {% term action %} evaluates the template, and if true, the script will cont The template is re-evaluated whenever an entity ID that it references changes state. If you use non-deterministic functions like `now()` in the template it will not be continuously re-evaluated, but only when an entity ID that is referenced is changed. If you need to periodically re-evaluate the template, reference a sensor from the [Time and Date](/integrations/time_date/) integration that will update minutely or daily. {% raw %} -```yaml +```yaml # Wait until media player is stopped - alias: "Wait until media player is stopped" wait_template: "{{ is_state('media_player.floor', 'stop') }}" @@ -258,8 +256,8 @@ With both types of waits it is possible to set a timeout after which the script You can also get the script to abort after the timeout by using optional `continue_on_timeout: false`. {% raw %} -```yaml +```yaml # Wait for IFTTT event or abort after specified timeout. - wait_for_trigger: - trigger: event @@ -322,6 +320,7 @@ This can be used to take different actions based on whether or not the condition target: entity_id: switch.some_light ``` + {% endraw %} ## Fire an event @@ -453,7 +452,7 @@ repeat: {% endraw %} Other types are accepted as list items, for example, each item can be a -template, or even an mapping of key/value pairs. +template, or even an mapping of key/value pairs. {% raw %} @@ -509,7 +508,7 @@ For example: - repeat: while: "{{ is_state('sensor.mode', 'Home') and repeat.index < 10 }}" sequence: - - ... + - ... ``` {% endraw %} @@ -559,8 +558,9 @@ For example: - repeat: until: "{{ is_state('device_tracker.iphone', 'home') }}" sequence: - - ... + - ... ``` + {% endraw %} ### Repeat loop variable @@ -691,7 +691,6 @@ automation: {% endraw %} - More `choose` can be used together. This is the case of an IF-IF. The following example shows how a single {% term automation %} can control entities that aren't related to each other but have in common the same trigger. @@ -856,8 +855,8 @@ Some of the caveats of running {% term actions %} in parallel: there is no guarantee that they will be completed in the same order. - If one {% term action %} fails or errors, the other {% term actions %} will keep running until they too have finished or errored. -- Variables created/modified in one parallelized {% term action %} are not available - in another parallelized {% term action %}. Each step in a parallelized has its own scope. +- Variables created/modified in one parallelized {% term action %} can conflict with variables + from another parallelized {% term action %}. Make sure to give them distinct names to prevent that. ## Stopping a script sequence @@ -961,7 +960,7 @@ blueprint: input: input_boolean: name: Boolean - selector: + selector: boolean: actions: diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown index c83eb0534ab..bc2000d9149 100644 --- a/source/_docs/tools/dev-tools.markdown +++ b/source/_docs/tools/dev-tools.markdown @@ -149,7 +149,7 @@ Another use of the {% my developer_statistics title="statistics developer tool" icon. Use date & time to search for the incorrect data point and adjust the value. -![Screenshot showing adjusting the long-term statistic history value](/images/blog/2022-04/adjust-statistics.png) +![Screenshot showing adjusting the long-term statistic history value](/images/docs/developer-tools/adjust-statistics.png) ## Assist tab diff --git a/source/_docs/tools/hass.markdown b/source/_docs/tools/hass.markdown index ba270068b56..d3517c577e3 100644 --- a/source/_docs/tools/hass.markdown +++ b/source/_docs/tools/hass.markdown @@ -5,8 +5,9 @@ description: "Description of hass." The command-line part of Home Assistant is `hass`. +This tool is only available to users of the Home Assistant Core installation method. It is started from the command line on the computer running Home Assistant Core (accessed perhaps via SSH). -```bash +```text $ hass -h usage: hass [-h] [--version] [-c path_to_config_dir] [--safe-mode] [--debug] [--open-ui] [--skip-pip] [-v] [--log-rotate-days LOG_ROTATE_DAYS] diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown index bb21087bc5b..ce183118ca0 100644 --- a/source/_docs/z-wave/controllers.markdown +++ b/source/_docs/z-wave/controllers.markdown @@ -12,13 +12,14 @@ You need to have a compatible Z-Wave stick or module installed. The following de The firmwares of 700 and 800 series Z-Wave controllers have several bugs which impact the stability of the mesh and can cause the controller to become unresponsive. Because there is no known firmware version that is completely fixed, it is recommended to choose a firmware based on the following criteria: - 700 series: - - prefer SDK versions 7.17.2 to 7.18.x + - prefer SDK versions 7.17.2 to 7.18.x or 7.21.6 and newer - SDK versions 7.19.x are okay - avoid SDK versions before 7.17.2 - - avoid SDK versions 7.20 to 7.21.3 + - avoid SDK versions 7.20 to 7.21.5 - 800 series - - prefer SDK versions 7.22.x + - prefer SDK versions 7.23.x and newer + - SDK versions 7.22.x are okay - SDK versions 7.17.2 to 7.19.x are okay - avoid SDK versions before 7.17.2 - avoid SDK versions 7.20 to 7.21.3 diff --git a/source/_includes/asides/common_tasks_navigation.html b/source/_includes/asides/common_tasks_navigation.html index bc1550bdc02..13369b6edc1 100644 --- a/source/_includes/asides/common_tasks_navigation.html +++ b/source/_includes/asides/common_tasks_navigation.html @@ -2,11 +2,11 @@

Common tasks

diff --git a/source/_includes/asides/component_navigation.html b/source/_includes/asides/component_navigation.html index 316971e2dc9..b9af18dbe20 100644 --- a/source/_includes/asides/component_navigation.html +++ b/source/_includes/asides/component_navigation.html @@ -3,7 +3,7 @@ {% assign percentage = 100.0 | times: active_installations | divided_by: site.data.analytics_data.reports_integrations | round: 1 %}
- + {%- if page.ha_config_flow and domain -%} {% my config_flow_start badge domain=domain %} diff --git a/source/_includes/asides/docs_sitemap.html b/source/_includes/asides/docs_sitemap.html index 891b21c3ed8..fb9b3a70d24 100644 --- a/source/_includes/asides/docs_sitemap.html +++ b/source/_includes/asides/docs_sitemap.html @@ -186,14 +186,14 @@
  • - {% icon "mdi:update" %} {% active_link /common-tasks/os/ Common tasks %} + {% icon "mdi:update" %} {% active_link /common-tasks/general/ Common tasks %} {% if root == 'common-tasks' or include.docs_index %}
      +
    • {% active_link /common-tasks/general/ Installation independent %}
    • {% active_link /common-tasks/os/ Home Assistant Operating System %}
    • {% active_link /common-tasks/container/ Home Assistant Container %}
    • {% active_link /common-tasks/core/ Home Assistant Core %}
    • {% active_link /common-tasks/supervised/ Home Assistant Supervised %}
    • -
    • {% active_link /common-tasks/general/ Installation independent %}
    • {% active_link /docs/troubleshooting_general/ General troubleshooting %}
    {% endif %} @@ -279,5 +279,6 @@
  • Home Assistant Green {% icon "tabler:external-link" %}
  • Home Assistant Yellow {% icon "tabler:external-link" %}
  • Home Assistant Connect ZBT-1 {% icon "tabler:external-link" %}
  • +
  • Home Assistant Voice Preview Edition {% icon "tabler:external-link" %}
  • diff --git a/source/_includes/common-tasks/backups.md b/source/_includes/common-tasks/backups.md index 429a787f1e6..532bbcd8410 100644 --- a/source/_includes/common-tasks/backups.md +++ b/source/_includes/common-tasks/backups.md @@ -20,11 +20,11 @@ Before creating a backup, check if you can reduce the size of the backup. This i 1. Check if your configuration directory contains a large database file: - Go to {% my system_health title="**Settings** > **System** > **Repairs**" %}. - - From the three dot menu, select **System information** and under the **Recorder** section, look for the **Estimated Database Size (MiB)**. + - From the three dots {% icon "mdi:dots-vertical" %} menu, select **System information** and under the **Recorder** section, look for the **Estimated Database Size (MiB)**. - By default, the data is kept for 10 days. If you have modified that to a longer period, check the [`recorder`](/integrations/recorder/) integration page for options to keep your database data down to a size that won't cause issues. - Note the keep days, purge interval, and include/exclude options. 2. To check how much space you've used in total, go to {% my system_health title="**Settings** > **System** > **Repairs**" %}. - - From the three dot menu, select **System information**, and check under **Home Assistant Supervisor** > **Disk used**. + - From the three dots {% icon "mdi:dots-vertical" %} menu, select **System information**, and check under **Home Assistant Supervisor** > **Disk used**. - If you have add-ons installed that you no longer use, uninstall those add-ons. Some add-ons require quite a bit of space. 3. If you want to store the backup on your network storage instead of just locally on your system, follow the steps on [adding a new network storage](/common-tasks/os/#add-a-new-network-storage) and select the **Backup** option. @@ -33,35 +33,53 @@ Before creating a backup, check if you can reduce the size of the backup. This i The automatic backup process creates a backup on a predefined schedule and also deletes old, redundant backups. 1. Go to {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}. -2. Under **Automatic backups**, select **Configure automatic backups**. -3. Enable automatic backup. -4. Define the backup schedule. It is recommended to back up daily. +2. Under **Set up backups**, select **Set up backups**. +3. Download the emergency kit and store it somewhere safe. + - You need it to restore encrypted backups. + - To learn more about backup encryption, refer to the documentation on the [backup emergency kit](/more-info/backup-emergency-kit/). +4. Define the backup schedule. + - It is recommended to back up **Daily**, but you can also choose to back up on specific days. + - Define the time: + - **System optimal** sets a time in a predefined time window as shown in the UI. + - **Custom** lets you pick the time when you want the backup to start. + - Make sure you pick a time when all your backup locations are up and running and available. Otherwise, the backup will fail for locations which are not available. 5. Define how many backups you want to keep. - Older backups will be automatically deleted. - For example: if you back up daily, and select 7 backups, then the backup from 8 days ago and older will be deleted. 6. Define the data you want to back up. - - It is recommended to disable media and the share folder to reduce the size of the backup. + - It is recommended to disable media and the shared folder to reduce the size of the backup. - A large backup also takes longer to restore. - Some add-ons may also be quite large. 7. [Define the location for backups](#defining-backup-locations). -8. Backups are encrypted. To be able to restore encrypted backups, download the emergency kit and store it somewhere safe. - - To learn more, refer to the documentation on the [backup emergency kit](/more-info/backup-emergency-kit/). ### Defining backup locations -You might need a backup in case your system has crashed. If you only store backups on the device itself, you won't be able to access them easily. It is recommended to keep a copy on another system and ideally also one off-site. +You might need a backup in case your system has crashed. If you only store backups on the device itself, you won't be able to access them easily. It is recommended to keep a copy on another system (outside of Home Assistant) and ideally also one off-site. + +{% note %} +You will find an overview of integrations which provide a backup location [here](/integrations/#backup). +{% endnote %} #### About the backup storage on Home Assistant Cloud -If you have Home Assistant Cloud, you can store a backup of maximum 5 GB on Home Assistant Cloud. This cloud storage space is available for all existing and new Home Assistant Cloud subscribers without additional cost. It stores one backup file: the backup that was last saved to Home Assistant Cloud. Backups are always encrypted. To restore encrypted backups, you need the encryption key stored in the [backup emergency kit](/more-info/backup-emergency-kit/). +If you have Home Assistant Cloud, you can store a backup of maximum 5 GB on Home Assistant Cloud. This cloud storage space is available for all existing and new Home Assistant Cloud subscribers without additional cost. It stores one backup file: the backup that was last saved to Home Assistant Cloud. These backups are always encrypted. To restore encrypted backups, you need the encryption key stored in the [backup emergency kit](/more-info/backup-emergency-kit/). #### To define the backup location for automatic backups 1. Go to {% my supervisor_backups title="**Settings** > **System** > **Backups**" %} and under **Automatic backups**, select **Configure automatic backups**. -2. Under **Locations**, enable all the backup locations you want to use. +2. Under **Locations**, use the toggle to enable all the backup locations you want to use. - If you don't see Home Assistant Cloud in the list, you are not [logged in](https://www.nabucasa.com/config/). + - If you want to back up to your NAS (such as [Synology](/integrations/synology_dsm/#backup-location)) or a cloud provider (such as [Google Drive](/integrations/google_drive/) or [Microsoft OneDrive](/integrations/onedrive/)), check their integration documentation for specific instructions on setting up a Home Assistant backup. - If you don't see a network storage, you haven't added one. Follow the steps on [adding a new network storage](/common-tasks/os/#add-a-new-network-storage) and select the **Backup** option. - ![Define the backup locations](/images/screenshots/network-storage/backup_locations_all.png) + ![Define the backup locations](/images/screenshots/network-storage/backup_locations_encryption.png) +3. For each enabled location, select the cog {% icon "mdi:cog-outline" %} to enable/disable encryption. + - **Info**: The backup stored on Home Assistant Cloud is always encrypted. + +### Creating a backup automation using the backup action + +If the backup automation settings provided in the UI do not match your use case, you can manually configure your own backup automation using the [backup.create_automatic](/integrations/backup/#action-backupcreate_automatic) action. + +Using the {% my developer_call_service service="backup.create_automatic" %} action in your own automation allows you to create automated backups on any schedule you like, or even add conditions and actions around it. For example, you could make an automation that triggers on a calendar, turns on your NAS, waits until it is online, and then triggers a backup. ### Creating a manual backup @@ -79,25 +97,20 @@ This creates a backup instantly. You can create a manual backup at any time, irr 6. Download the [backup emergency kit](/more-info/backup-emergency-kit/) and store it somewhere safe. Make sure you take note of the backup name it belongs to. 7. To start the backup process, select **Create backup**. -### Alternative: Creating a backup using the Home Assistant Command Line Interface - -1. `ha backups list` - lists backups and their slugnames -2. `ha backups restore slugname` - restores a specific backup -3. `ha backups new --name nameofbackup` - create a backup - -For additional information about command line usage, use the `ha help` command or refer to the [Home Assistant Command Line documentation](/common-tasks/os/#home-assistant-via-the-command-line). - ### Downloading your local backups +When downloading the backup from the Home Assistant backup page, it is decrypted on the fly so that you can view the data using your favorite archive tool. This is done for all backup locations and also when you download from Home Assistant Cloud. + There are multiple ways to download your local backup from your Home Assistant instance and store it on another device: **Option 1**: Download from the backup page: 1. Under {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}, select **Show all backups**. -2. To select one backup, on the list, single-click or tap the backup of interest. - - To select multiple backups, select the {% icon "mdi:order-checkbox-ascending" %} button. -3. In the dialog, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Download backup**. +2. To select multiple backups, select the {% icon "mdi:order-checkbox-ascending" %} button. +3. Select the three dots {% icon "mdi:dots-vertical" %} menu and select **Download backup**. - **Result**: The selected backup is stored in the **Downloads** folder of your computer. +4. If a backup is stored on multiple locations, you can select where you download it from: + - Select the backup, and under **Locations**, select the three dots {% icon "mdi:dots-vertical" %} and select **Download from this location**. **Option 2**: Copy backups from the backups folder: @@ -109,8 +122,16 @@ There are multiple ways to download your local backup from your Home Assistant i If you were logged in to Home Assistant Cloud and had Cloud backup enabled when creating a backup, your last backup is stored on Home Assistant Cloud. -1. To download the backup, log in to your [Home Assistant Cloud account](https://account.nabucasa.com/). -2. Under **Stored files**, you can see the latest available backup file. Select the download button. +There are two ways to download the backup from Home Assistant Cloud: + +- **Option 1**: From the backups page + 1. Got to {% my supervisor_backups title="**Settings** > **System** > **Backups**" %} and select **Show all backups**. + 2. Under **Stored files**, you can see the latest available backup file. Select the download button. + +- **Option 2**: From your Home Assistant Cloud account + 1. Log in to your [Home Assistant Cloud account](https://account.nabucasa.com/). + 2. Select the backup from the list. + 3. Under **Locations**, select the three dots {% icon "mdi:dots-vertical" %} and select **Download from this location**. ### Deleting obsolete backups @@ -120,7 +141,7 @@ To delete old backups, follow these steps: 1. Under {% my supervisor_backups title="**Settings** > **System** > **Backups**" %}, select **Show all backups**. 2. To delete one backup, on the list, select the backup of interest. - - Select the three dots {% icon "mdi:dots-vertical" %} menu and select **Delete** + - Select the three dots {% icon "mdi:dots-vertical" %} menu and select **Delete**. 3. To delete multiple backups, select the {% icon "mdi:order-checkbox-ascending" %} button. - From the list of backups, select all the ones you want to delete and select **Delete selected**. - {% icon "mdi:information-outline" %} Consider keeping at least one recent backup for recovery purposes. diff --git a/source/_includes/common-tasks/commandline.md b/source/_includes/common-tasks/commandline.md index 0c9980962b1..7e14468d21d 100644 --- a/source/_includes/common-tasks/commandline.md +++ b/source/_includes/common-tasks/commandline.md @@ -101,7 +101,7 @@ Use "ha [command] --help" for more information about a command. You can also access the {% term "Home Assistant Operating System" %} via a directly connected keyboard and monitor, the console. -#### Wiping the data disk wipe from the command line +#### Wiping the data disk from the command line In {% term "Home Assistant Operating System" %}, the `ha os datadisk wipe` command wipes the data disk. The command deletes all user data as well as Home Assistant Core, Supervisor, and any installed add-ons. @@ -109,7 +109,12 @@ The command `ha os datadisk wipe` marks the data partition (either internal on t The `ha os datadisk wipe` command can only be run from the local terminal. Connect a display and keyboard and use the terminal. -Note, if you have a Home Assistant Yellow, there is a red hardware button to wipe the data disk. Follow the procedure on [resetting the device](https://yellow.home-assistant.io/guides/factory-reset/). +Note, some systems have a reset button you can use to clear the data disk, instead of using the command line: + +- If you have a Home Assistant Yellow with a Raspberry Pi Compute Module 5, use the command line steps described above. + +- If you have a Home Assistant Yellow with a Raspberry Pi Compute Module 4, there is a red hardware button to wipe the data disk. Follow the procedure on [resetting the Home Assistant Yellow](https://yellow.home-assistant.io/guides/factory-reset/). +- If you have a Home Assistant Green, there is a black hardware button to wipe the data disk. Follow the procedure on [resetting the Home Assistant Green](https://green.home-assistant.io/guides/reset/). #### Listing all users from the command line diff --git a/source/_includes/common-tasks/data_disk.md b/source/_includes/common-tasks/data_disk.md index e1c7257d011..e99ac9ffb80 100644 --- a/source/_includes/common-tasks/data_disk.md +++ b/source/_includes/common-tasks/data_disk.md @@ -25,8 +25,7 @@ If you have been using a data disk previously with {% term "Home Assistant Opera 3. Select **Move data disk**. 4. Select the data disk from the list of available devices. 5. Select **Move**. - -![Screenshot of the "Move datadisk" feature](/images/screenshots/move-datadisk.png) + - Depending on the amount of data, this may take a while. ### Using CLI to move the data partition diff --git a/source/_includes/common-tasks/network_storage.md b/source/_includes/common-tasks/network_storage.md index 45e49c6df28..b8cb9a77ddb 100644 --- a/source/_includes/common-tasks/network_storage.md +++ b/source/_includes/common-tasks/network_storage.md @@ -56,7 +56,7 @@ Server: "[NFS]1 Remote share path": description: The path used to connect to the remote storage server. "[CIFS]2 Username": - description: The username to use when connecting to the storage server. + description: "The username to use when connecting to the storage server. Use User Principal Name for domain accounts. For example: `user@domain.com`." "[CIFS]2 Password": description: The password to use when connecting to the storage server. "[CIFS]2 Share": diff --git a/source/_includes/common-tasks/update.md b/source/_includes/common-tasks/update.md index 14a6e9ad7be..cdff945c3c8 100644 --- a/source/_includes/common-tasks/update.md +++ b/source/_includes/common-tasks/update.md @@ -1,12 +1,10 @@ Best practice for updating Home Assistant Core: -1. Back up your installation{% if page.installation == "os" or page.installation == "supervised" %}, using the [backup functionality](/common-tasks/general/#backups) Home Assistant offers{% endif %}. +1. [Back up your installation](/common-tasks/general/#backups) and store the backup and the [backup emergency kit](/more-info/backup-emergency-kit/) somewhere safe. + - This ensures that you can [restore your installation from backup](/common-tasks/general/#restoring-a-backup) if needed. 2. Check the release notes for backward-incompatible changes on [Home Assistant release notes](/blog/categories/core/). Be sure to check all release notes between the version you are running and the one you are upgrading to. Use the search function in your browser (`CTRL + f` / `CMD + f`) and search for **Backward-incompatible changes**. -{% if page.installation == "os" or page.installation == "supervised" %} -3. Select **Create backup before updating** in case you encounter an issue that requires a rollback. -4. Update Home Assistant. -5. Review persistent notifications and log to see if there are any issues with your configuration that need to be addressed. -{% endif %} +3. Update Home Assistant. +4. Review persistent notifications and log to see if there are any issues with your configuration that need to be addressed. {% if page.installation == "os" or page.installation == "supervised" %} diff --git a/source/_includes/custom/buy-dialog.html b/source/_includes/custom/buy-dialog.html new file mode 100644 index 00000000000..8bbc5bbbfdb --- /dev/null +++ b/source/_includes/custom/buy-dialog.html @@ -0,0 +1,130 @@ +{% if include.product and site.data.products[include.product] %} + {% assign product = site.data.products[include.product] %} + {% assign distributor_regions = product.distributors | group_by: 'ship_to' %} +{% endif %} + +
    +
    +
    +
    {{ product.name }}
    +
    + + + +
    +
    +
    +
    +
    Shipping to
    +
    + {% for distributor_region in distributor_regions %} +
    + {{ distributor_region.name }} +
    + {% endfor %} +
    +
    + +
    + {% for distributor_region in distributor_regions %} +
    + {% assign az_ship_distributors = distributor_region.items | case_insensitive_sort: 'name' | sort: 'ship_from' %} + +
    + {% endfor %} +
    +
    +
    +
    + + + diff --git a/source/_includes/dashboard/edit_dashboard.md b/source/_includes/dashboard/edit_dashboard.md index 6052ea71aaf..678e02333b8 100644 --- a/source/_includes/dashboard/edit_dashboard.md +++ b/source/_includes/dashboard/edit_dashboard.md @@ -10,4 +10,4 @@ To add the {{ title | downcase }} to your user interface: - This means that it is no longer automatically updated when new dashboard elements become available. - Once you've taken control, you can't get this specific dashboard back to update automatically. 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 a card](/dashboards/cards/#adding-cards-to-your-dashboard) to your dashboard. +2. [Add a card and customize actions and features](/dashboards/cards/#adding-cards-to-your-dashboard) to your dashboard. diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md index 8bb79230ad2..6fb6ce909d8 100644 --- a/source/_includes/installation/operating_system.md +++ b/source/_includes/installation/operating_system.md @@ -108,7 +108,7 @@ To write the HAOS image to the boot medium on your x86-64 hardware, there are 2 - This means you will lose all the data as well as the previously installed operating system. - Back up your data before carrying out this procedure. 2. Create a *live operating system* on a USB flash drive: - - Follow the [Ubuntu instructions](https://ubuntu.com/tutorials/try-ubuntu-before-you-install) on writing an Ubuntu iso file onto a USB device. + - Follow the [Ubuntu Desktop instructions](https://ubuntu.com/tutorials/try-ubuntu-before-you-install) on writing an Ubuntu Desktop iso file onto a USB device. 3. Insert the USB flash drive into the system on which you want to run Home Assistant. - Boot the live operating system. - You might need to adjust boot order or use F10 (might be a different F-key depending on the BIOS) to select the USB flash drive as boot device. @@ -462,7 +462,7 @@ Minimum recommended assignments: 1. Start the virtual machine. 2. Observe the boot process of the Home Assistant Operating System. -3. Once completed, you will be able to reach Home Assistant on homeassistant.local:8123. If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at homeassistant:8123 or `http://X.X.X.X:8123` (replace X.X.X.X with your {{site.installation.types[page.installation_type].board}}’s IP address). +3. Once completed, you will be able to reach Home Assistant on homeassistant.local:8123. If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at homeassistant:8123 or `http://X.X.X.X:8123` (replace X.X.X.X with your virtual machine’s IP address). {% endif %} diff --git a/source/_includes/integrations/remove_device_service.md b/source/_includes/integrations/remove_device_service.md index 80f5a56b246..b74c778575c 100644 --- a/source/_includes/integrations/remove_device_service.md +++ b/source/_includes/integrations/remove_device_service.md @@ -1,5 +1,3 @@ ### To remove an integration instance from Home Assistant -1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and select the integration card. -2. From the list of devices, select the integration instance you want to remove. -3. Next to the entry, select the three-dot {% icon "mdi:dots-vertical" %} menu. Then, select **Delete**. +{% include integrations/remove_device_service_steps.md %} \ No newline at end of file diff --git a/source/_includes/integrations/remove_device_service_steps.md b/source/_includes/integrations/remove_device_service_steps.md new file mode 100644 index 00000000000..9096191e1d1 --- /dev/null +++ b/source/_includes/integrations/remove_device_service_steps.md @@ -0,0 +1,3 @@ +1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and select the integration card. +2. From the list of devices, select the integration instance you want to remove. +3. Next to the entry, select the three-dot {% icon "mdi:dots-vertical" %} menu. Then, select **Delete**. diff --git a/source/_includes/site/footer.html b/source/_includes/site/footer.html index b2ecef38574..ca12e4e976f 100644 --- a/source/_includes/site/footer.html +++ b/source/_includes/site/footer.html @@ -85,19 +85,26 @@ title="GitHub" target="_blank" > +
    -
    + +
    + + + +The **My integration** {% term integration %} is used to integrate with the devices of [MyCompany](https://www.mycompany.com). MyCompany creates various smart home appliances and devices and are known for their MyProduct. +Use case: When you combine it with their other device you can do x. + +## Supported devices + +The following devices are known to be supported by the integration: + +- Device 1 +- Device 2 +- Every appliance that runs MyOS + +## Unsupported devices + +The following devices are not supported by the integration: + +- Device 3 +- Appliances built before 2010 + +## Prerequisites + +1. Open the app store and install the **MyProduct** app. +2. Create an account. +3. Add a device to the app. +4. Open the app and go to the **Settings** page. +5. Select **Expose API**. + +{% include integrations/config_flow.md %} + + + + + +{% configuration_basic %} +Host: + description: "The IP address of your bridge. You can find it in your router or in the Integration app under **Bridge Settings** > **Local API**." +Local access token: + description: "The local access token for your bridge. You can find it in the Integration app under **Bridge Settings** > **Local API**." +{% endconfiguration_basic %} + + + +{% configuration %} +Host: + description: "The IP address of your bridge. You can find it in your router or in the Integration app under **Bridge Settings** > **Local API**." + required: false + type: string +Local access token: + description: "The local access token for your bridge. You can find it in the Integration app under **Bridge Settings** > **Local API**." + required: false + type: string +{% endconfiguration %} + +## Configuration options + +The integration provides the following configuration options: + +{% configuration_basic %} +Country code: + description: You can specify the country code (NL or BE) of the country to display on the camera. +Timeframe: + description: Minutes to look ahead for precipitation forecast sensors (minimum 5, maximum 120). +{% endconfiguration_basic %} + +## Supported functionality + +### Entities + +The **My integration** integration provides the following entities. + +#### Buttons + +- **Start backflush** + - **Description**: Starts the backflush process on your machine. You got 15 seconds to turn the paddle after activation. + - **Available for machines**: all + +#### Numbers + +- **Dose** + - **Description**: Dosage (in ticks) for each key + - **Available for machines**: GS3 AV, Linea Mini. + - **Remarks**: GS3 has this multiple times, one for each physical key (1-4), and the entities are disabled by default. + +#### Sensors + +- **Current coffee temperature** + - **Description**: Current temperature of the coffee boiler. + - **Available for machines**: all + - **Remarks**: When the machine reaches temperature, this will be approximately 3 degrees higher than the `Coffee target temperature`, due to different measurement points. + +- **Current steam temperature** + - **Description**: Current temperature of the steam boiler. + - **Available for machines**: Linea Micra, GS3 AV, GS3 MP. + - **Remarks**: - + +#### Selects + +- **Prebrew/-infusion mode** + - **Description**: Whether to use prebrew, preinfusion, or neither. + - **Options**: Disabled, Prebrew, Preinfusion + - **Available for machines**: Linea Micra, Linea Mini, GS3 AV + +- **Steam level** + - **Description**: The level your steam boiler should run at. + - **Options**: 1, 2, 3 + - **Available for machines**: Linea Micra + +#### Updates + +- **Gateway firmware** + - **Description**: Firmware status of the gateway. + - **Available for machines**: all + +## Actions + +The integration provides the following actions. + +### Action: Get schedule + +The `my_integration.get_schedule` action is used to fetch a schedule from the integration. + +- **Data attribute**: `config_entry_id` + - **Description**: The ID of the config entry to get the schedule from. + - **Optional**: No + +## Examples + +### Turning off the LEDs during the night + +The status LEDs on the device can be quite bright. +To tackle this, you can use this blueprint to easily automate the LEDs turning off when the sun goes down. + +link to the blueprint on the [blueprints + exchange](https://community.home-assistant.io/c/blueprints-exchange/53) + +## Data updates + +The **My integration** integration fetches data from the device every 5 minutes by default. +Newer devices (the ones running MyOS) have the possibility to push data. +In this case, pushing data is enabled when the integration is started. If enabling data push fails, the integration uses data {% term polling %}. + +## Known limitations + +The integration does not provide the ability to reboot, which can instead be done via the manufacturer's app. + +## Troubleshooting + +### Can’t set up the device + +#### Symptom: “This device can’t be reached” + +When trying to set up the integration, the form shows the message “This device can’t be reached”. + +##### Description + +This means the settings on the device are incorrect, since the device needs to be enabled for local communication. + +##### Resolution + +To resolve this issue, try the following steps: + +1. Make sure your device is powered up (LEDs are on). +2. Make sure your device is connected to the internet: + - Make sure the app of the manufacturer can see the device. +3. Make sure the device has the local communication enabled: + - Check the device’s settings. + - Check the device’s manual. +... + +### I can't see my devices + +Make sure the devices are visible and controllable via the manufacturer's app. +If they are not, check the device's power and network connection. + +### The device goes unavailable after a day + +Make sure you turned off the device's power-saving mode. + +## Removing the integration + +This integration follows standard integration removal. + +{% include integrations/remove_device_service.md %} + +After deleting the integration, go to the app of the manufacturer and remove the Home Assistant integration from there as well. diff --git a/source/_integrations/acaia.markdown b/source/_integrations/acaia.markdown index 1ea74fc2461..7a5506d6e64 100644 --- a/source/_integrations/acaia.markdown +++ b/source/_integrations/acaia.markdown @@ -34,19 +34,19 @@ Device: description: "The Bluetooth device that is your scale." {% endconfiguration_basic %} -# Available platforms & entities +## Available platforms & entities -## Binary sensors +### Binary sensors - **Timer running**: Whether the timer is currently running on the scale -## Buttons +### Buttons - **Tare**: Tares the scale. - **Reset timer**: Resets the timer. If the timer is running, it will continue to run. - **Start/stop timer**: Starts or stops the timer, depending on whether the timer is currently running. Does not reset, but continue the timer. -## Sensors +### Sensors - **Battery**: Current battery level of the scale. - **Volume flow rate**: Calculates the current flow rate (in mL/s) while brewing. diff --git a/source/_integrations/advantage_air.markdown b/source/_integrations/advantage_air.markdown index 45ec2fb5538..b3abacc71e6 100644 --- a/source/_integrations/advantage_air.markdown +++ b/source/_integrations/advantage_air.markdown @@ -68,7 +68,7 @@ The integration will create a binary sensor for each zone that has a motion sens ### Switch -The integration will create switch entities to toggle the MyFan/ezFan setting, and to toggle air conditioning fresh air mode, if they are supported by your hardware. +The integration will create switch entities to toggle the MyFan/ezFan setting, to toggle air conditioning fresh air mode, and to toggle MySleep$aver, if they are supported by your hardware. With MyPlace, any relays will be created as switch entities. diff --git a/source/_integrations/airgradient.markdown b/source/_integrations/airgradient.markdown index 10e6e9eecff..706f5f75cfc 100644 --- a/source/_integrations/airgradient.markdown +++ b/source/_integrations/airgradient.markdown @@ -25,6 +25,7 @@ ha_zeroconf: true --- The AirGradient integration will fetch data from your [AirGradient devices](https://www.airgradient.com/). +AirGradient creates indoor and outdoor air quality monitors that enable you know if the air quality is healthy or not. They measure metrics such as PM2.5, CO2, TVOCs, and NOx. Both the software and hardware are open-source, allowing you to customize or extend the device functionality. {% important %} In order for the device to be set up or discovered by Home Assistant, the [firmware](https://www.airgradient.com/documentation/firmwares) version should be at least 3.1.1. @@ -32,6 +33,11 @@ In order for the device to be set up or discovered by Home Assistant, the [firmw {% include integrations/config_flow.md %} +{% configuration_basic %} +Host: + description: "The IP address or hostname for your AirGradient device." +{% endconfiguration_basic %} + ## Available sensors The integration will fetch data from each device. The following sensors are supported: @@ -61,3 +67,9 @@ The following entities are supported: - Requesting CO2 calibration - Requesting LED bar test - Toggling sharing metrics with AirGradient + +## Remove integration + +This integration follows standard integration removal, no extra steps are required. + +{% include integrations/remove_device_service.md %} \ No newline at end of file diff --git a/source/_integrations/airq.markdown b/source/_integrations/airq.markdown index 16faef58c42..ffd77f9a3d5 100644 --- a/source/_integrations/airq.markdown +++ b/source/_integrations/airq.markdown @@ -95,3 +95,8 @@ After the integration has been initialized, the user can configure any of the fo - **Show values averaged by the device**. Default: `on`. In its default configuration, air-Q averages the stream of sensor values. The strength of this averaging can be configured on the device side (not exposed through the HA). However, this integration allows to switch between polling the averaged and the raw data from the device. To poll noisy sensor readings from the device, set **Show values averaged by the device** to `off`. - **Clip negative values**. Default: `on`. For baseline calibration purposes, certain sensor values may briefly become negative. The default behavior is to clip such values to 0. + +## Troubleshooting + +For troubleshooting or when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics) and restart the integration. As soon as the issue reoccurs stop the debug logging, which will trigger the download of the debug log file. +Enabling debug logging has a slight performance impact on the system and is not recommended for long-term use. diff --git a/source/_integrations/airthings.markdown b/source/_integrations/airthings.markdown index 6729d81763a..59730db89c7 100644 --- a/source/_integrations/airthings.markdown +++ b/source/_integrations/airthings.markdown @@ -30,7 +30,7 @@ Airthings API setup (needed to acquire the required ID and Secret for the Home A 1. Login [here](https://dashboard.airthings.com/integrations/api-integration) to find your credentials. 2. Select [Integrations](https://dashboard.airthings.com/integrations/api-integration) from the left side-bar. 3. Click on "Request API Client" in order to set up an API connection. -4. Name your API connection ie. "Home Assistant Integration". +4. Name your API connection (e.g., "Home Assistant"). Note: The name field has a character limit and longer names will be truncated. 5. Give the connection an accurate description. 6. Select a Resource Scope. 7. Select an access Type, i.e., Confidential. diff --git a/source/_integrations/airthings_ble.markdown b/source/_integrations/airthings_ble.markdown index afc98831f27..edff202e71d 100644 --- a/source/_integrations/airthings_ble.markdown +++ b/source/_integrations/airthings_ble.markdown @@ -40,6 +40,7 @@ This integration uses the last 6 digits of the serial number. - Wave Radon - Wave Mini - Wave Plus +- Wave Enhance ## Sensors diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown index ca3da05d9d2..10a55d74967 100644 --- a/source/_integrations/alarm_control_panel.mqtt.markdown +++ b/source/_integrations/alarm_control_panel.mqtt.markdown @@ -62,7 +62,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -71,7 +71,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -98,7 +98,7 @@ code_trigger_required: type: boolean default: true command_template: - description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) used for the command payload. Available variables: `action` and `code`." + description: "The [template](/docs/configuration/templating/#using-command-templates-with-mqtt) used for the command payload. Available variables: `action` and `code`." required: false type: template default: action @@ -182,7 +182,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -271,7 +271,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/alexa.smart_home.markdown b/source/_integrations/alexa.smart_home.markdown index 42d6787b4cc..21ea56f7103 100644 --- a/source/_integrations/alexa.smart_home.markdown +++ b/source/_integrations/alexa.smart_home.markdown @@ -151,7 +151,7 @@ Next you need create a Lambda function. - Click `Services` in top navigation bar, expand the menu to display all AWS services, then under `Compute` section click `Lambda` to navigate to Lambda console. Or you may use this [link](https://console.aws.amazon.com/lambda/home) **IMPORTANT - Alexa Skills are only supported in specific AWS regions.** Your current server location will be displayed in the top-right corner (for example, Ohio). Select an available server from the list below ([reference](https://developer.amazon.com/en-US/docs/alexa/smarthome/develop-smart-home-skills-in-multiple-languages.html#deploy)) based on your Amazon account's locale, not your physical location. **Alexa Lambda functions created in other regions will not work properly and may prevent account linking! For example, if your locale is set to English (US) and you live in California, you must use US East (N.Virginia), not US West (Oregon). While the setup process will complete with an incorrect region, the skill will not function, and there will be no clear error messages indicating the cause.** - - **US East (N.Virginia)** region for English (US) or English (CA) skills + - **US East (N.Virginia)** region for English (US), English (CA) or Portuguese (BR) skills - **EU (Ireland)** region for English (UK), English (IN), German (DE), Spanish (ES) or French (FR) skills - **US West (Oregon)** region for Japanese and English (AU) skills. @@ -256,7 +256,7 @@ Self signed certificates will not work, but you can use a free Let's Encrypt cer {% endimportant %} - `Client ID`: - - `https://pitangui.amazon.com/` if you are in US + - `https://pitangui.amazon.com/` if you are in US or BR - `https://layla.amazon.com/` if you are in EU - `https://alexa.amazon.co.jp/` if you are in JP and AU (not verified yet) @@ -323,7 +323,7 @@ alexa: type: map keys: locale: - description: The locale of your Alexa devices. Supported locales are `de-DE`, `en-AU`, `en-CA`, `en-GB`, `en-IN`, `en-US`, `es-ES`, `es-MX`, `es-US`, `fr-CA`, `fr-FR`, `hi-IN`, `it-IT`, `ja-JP`, `nl-NL` and `pt-BR`. See [Alexa Locale](#alexa-locale) for additional information. + description: The locale of your Alexa devices. Supported locales are `de-DE`, `en-AU`, `en-CA`, `en-GB`, `en-IN`, `en-US`, `es-ES`, `es-MX`, `es-US`,`fr-CA`, `fr-FR`, `hi-IN`, `it-IT`, `ja-JP`, `nl-NL`, and `pt-BR`. See [Alexa Locale](#alexa-locale) for additional information. required: false type: string default: en-US diff --git a/source/_integrations/amcrest.markdown b/source/_integrations/amcrest.markdown index 7acef1bc7e0..3f722e85132 100644 --- a/source/_integrations/amcrest.markdown +++ b/source/_integrations/amcrest.markdown @@ -292,8 +292,8 @@ elements: right: 25px bottom: 50px tap_action: - action: call-service - service: amcrest.ptz_control + action: perform-action + perform_action: amcrest.ptz_control service_data: entity_id: camera.lakehouse movement: up @@ -304,8 +304,8 @@ elements: right: 25px bottom: 0px tap_action: - action: call-service - service: amcrest.ptz_control + action: perform-action + perform_action: amcrest.ptz_control service_data: entity_id: camera.lakehouse movement: down @@ -316,8 +316,8 @@ elements: right: 50px bottom: 25px tap_action: - action: call-service - service: amcrest.ptz_control + action: perform-action + perform_action: amcrest.ptz_control service_data: entity_id: camera.lakehouse movement: left @@ -328,8 +328,8 @@ elements: right: 0px bottom: 25px tap_action: - action: call-service - service: amcrest.ptz_control + action: perform-action + perform_action: amcrest.ptz_control service_data: entity_id: camera.lakehouse movement: right @@ -340,8 +340,8 @@ elements: right: 50px bottom: 50px tap_action: - action: call-service - service: amcrest.ptz_control + action: perform-action + perform_action: amcrest.ptz_control service_data: entity_id: camera.lakehouse movement: left_up @@ -352,8 +352,8 @@ elements: right: 0px bottom: 50px tap_action: - action: call-service - service: amcrest.ptz_control + action: perform-action + perform_action: amcrest.ptz_control service_data: entity_id: camera.lakehouse movement: right_up @@ -364,8 +364,8 @@ elements: right: 50px bottom: 0px tap_action: - action: call-service - service: amcrest.ptz_control + action: perform-action + perform_action: amcrest.ptz_control service_data: entity_id: camera.lakehouse movement: left_down @@ -376,8 +376,8 @@ elements: right: 0px bottom: 0px tap_action: - action: call-service - service: amcrest.ptz_control + action: perform-action + perform_action: amcrest.ptz_control service_data: entity_id: camera.lakehouse movement: right_down @@ -388,14 +388,14 @@ elements: bottom: 25px right: 25px tap_action: - action: call-service - service: amcrest.ptz_control + action: perform-action + perform_action: amcrest.ptz_control service_data: entity_id: camera.lakehouse movement: zoom_in hold_action: - action: call-service - service: amcrest.ptz_control + action: perform-action + perform_action: amcrest.ptz_control data: entity_id: camera.lakehouse movement: zoom_out diff --git a/source/_integrations/androidtv_remote.markdown b/source/_integrations/androidtv_remote.markdown index 73f6de751d6..f5be3626215 100644 --- a/source/_integrations/androidtv_remote.markdown +++ b/source/_integrations/androidtv_remote.markdown @@ -569,3 +569,4 @@ cards: - Some devices experience disconnects every 15 seconds. This is typically resolved by rebooting the Android TV device after the initial setup of the integration. - If you are not able to connect to the Android TV device, or are asked to pair it again and again, try force-stopping the Android TV Remote Service and clearing its storage. On the Android TV device, go to **Settings** > **Apps** > **Show system apps**. Then, select **Android TV Remote Service** > **Storage** > **Clear storage**. You will have to pair again. - Some onscreen keyboards enabled by TV manufacturers do not support concurrent virtual and onscreen keyboard use. This presents whenever a text field is selected, such as "search" where a constant **use the keyboard on your mobile device** will show, preventing you from opening the onscreen keyboard to type. This can be overcome by either disabling your 3rd party keyboard and using the default Gboard keyboard or by deselecting **Enable IME** in the **Configure** page of the integration. +- If you can't turn on your Nvidia Shield device, go to **Settings** > **Remotes & accessories** > **Simplified wake buttons** and disable the following options: **SHIELD 2019 Remote: Wake on power and Netflix buttons only** and **Controllers: Wake on NVIDIA or logo buttons only**. diff --git a/source/_integrations/anthropic.markdown b/source/_integrations/anthropic.markdown index cdc18254cdf..3bb8c935176 100644 --- a/source/_integrations/anthropic.markdown +++ b/source/_integrations/anthropic.markdown @@ -67,5 +67,7 @@ Model: Maximum Tokens to Return in Response: description: The maximum number of tokens to generate before stopping. Note that our models may stop _before_ reaching this maximum. This parameter only specifies the absolute maximum number of tokens to generate. Different models have different maximum values for this parameter. See [models](https://docs.anthropic.com/en/docs/models-overview) for details. Temperature: - description: Amount of randomness injected into the response. Use `temperature` closer to `0.0` for analytical / multiple choice, and closer to `1.0` for creative and generative tasks. Note that even with `temperature` of `0.0`, the results will not be fully deterministic. + description: Amount of randomness injected into the response. Use `temperature` closer to `0.0` for analytical / multiple choice, and closer to `1.0` for creative and generative tasks. Note that even with `temperature` of `0.0`, the results will not be fully deterministic. This parameter is ignored if extended thinking is enabled (see below). +Thinking budget: + description: For models with [extending thinking](https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking) support, such as Claude 3.7 Sonnet, this parameter determines the maximum number of tokens Claude is allowed use for its internal reasoning process. Larger budgets can improve response quality by enabling more thorough analysis for complex problems, although Claude may not use the entire budget allocated, especially at ranges above 32K. Anthropic suggests starting at the minimum and increasing the thinking budget incrementally to find the optimal range for Claude to perform well for your use case. Higher token counts may allow you to achieve more comprehensive and nuanced reasoning, but there may also be diminishing returns depending on the task. Be prepared for potentially longer response times due to the additional processing required for the reasoning process. The value must always be less than the `Maximum Tokens` specified. If the value is below `1024`, then extended thinking is disabled. This parameter is ignored if the model does not support extended thinking. {% endconfiguration_basic %} diff --git a/source/_integrations/apollo_automation.markdown b/source/_integrations/apollo_automation.markdown new file mode 100644 index 00000000000..5024f83245f --- /dev/null +++ b/source/_integrations/apollo_automation.markdown @@ -0,0 +1,31 @@ +--- +title: Apollo Automation +description: Connect and control your Apollo Automation ESPHome devices using the ESPHome integration +ha_release: '2025.3' +ha_iot_class: Local Push +ha_category: + - Sensor + - Presence detection +ha_domain: apollo_automation +ha_integration_type: brand +ha_supporting_domain: esphome +ha_supporting_integration: ESPHome +ha_platforms: + - sensor +works_with: + - local +--- + +[Apollo automation](https://apolloautomation.com/) is a member of the Made for ESPHome program. + +Apollo Automation devices work locally and integrate seamlessly with the [ESPHome](/integrations/esphome/) {% term integration %} in Home Assistant. As all connectivity is done locally, status updates and device control from Home Assistant happen instantly. + +{% include integrations/supported_brand.md %} + +## Supported devices + +The following devices are known to be supported by the integration. They are certified under the [Works with Home Assistant](https://partner.home-assistant.io/) program. + +- [MTR-1 Multi-Target Radar Multisensor For Home Assistant (LD2450)](https://apolloautomation.com/products/mtr-1) - A tiny, but powerful radar-based (mmWave) presence sensor that can pack in many other sensors. +- [MSR-2 mmWave Multisensor For Home Assistant (LD2410B)](https://apolloautomation.com/products/msr-2) - An even smaller multisensor that is the successor of the initial community feedback-driven design. +- [AIR-1 Air Quality Sensor For Home Assistant](https://apolloautomation.com/products/air-1) - A small air quality multisensor that can be extended to incorporate a huge variety of sensors. diff --git a/source/_integrations/aquacell.markdown b/source/_integrations/aquacell.markdown index f51bde2caf1..938c97f376a 100644 --- a/source/_integrations/aquacell.markdown +++ b/source/_integrations/aquacell.markdown @@ -14,17 +14,19 @@ ha_platforms: ha_integration_type: device --- -AquaCell is a water-softening device. The [AquaCell](https://www.aquacell-waterontharder.nl/) {% term integration %} allows you to monitor your AquaCell device in Home Assistant. +AquaCell is a water-softening device made by [Culligan](https://culliganinternational.com). The [AquaCell](https://www.aquacell-waterontharder.nl/) {% term integration %} allows you to monitor your AquaCell device in Home Assistant. You will need your Aquacell account information as used in the **AquaCell** app. -This integration also supports [Harvey](https://www.harveywatersofteners.co.uk/) softeners. +This integration also supports other [Culligan brands](https://culliganinternational.com/brands) of water softener, such as [Harvey](https://www.harveywatersofteners.co.uk/) and [TwinTec](https://www.twintec.com/) (made by Harvey) softeners. ## Supported devices -This integration only works for softener models which have an **i-Lid** and are configured through the 'Mijn AquaCell' or 'My Harvey' mobile app. +This integration only works for softener models which have an **i-Lid** and are configured through the 'Mijn AquaCell' or 'myHarvey' mobile app. These models are also recognizable by the required curved salt blocks. + - [AquaCell](https://www.aquacell-waterontharder.nl/aquacell) - [HarveyArc Water Softener](https://www.harveywatersofteners.co.uk/products/water-softeners/harveyarc-water-softener) +- [TwinTec Cobalt](https://www.twintec.com/our-products/tt-cobalt/) ## Prerequisites diff --git a/source/_integrations/assist_satellite.markdown b/source/_integrations/assist_satellite.markdown index 4b5e4f80583..972b3edbf4e 100644 --- a/source/_integrations/assist_satellite.markdown +++ b/source/_integrations/assist_satellite.markdown @@ -43,3 +43,30 @@ target: entity_id: assist_satellite.my_entity media_id: ITEM_ID ``` + +### Action `assist_satellite.start_conversation` + +The {% my developer_call_service service="assist_satellite.start_conversation" %} action first announces a message or media id on the satellite and then listens for one or more voice commands. The satellite's configured [pipeline](/voice_control/voice_remote_local_assistant/) must use a supported [conversation agent](/integrations/conversation), such as [OpenAI](/integrations/openai_conversation) or [Google Generative AI](/integrations/google_generative_ai_conversation). The builtin Assist conversation agent does not support conversations yet. + +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/). + +The `extra_system_prompt` is passed to the [conversation agent](/integrations/conversation) of the satellite's configured [pipeline](/voice_control/voice_remote_local_assistant/). For large language models (LLMs) this will be appended to the prompt given to the model, allowing the LLM to understand the context of a response like "yes" or "no". + +{% my developer_call_service badge service="assist_satellite.start_conversation" %} + +Examples in YAML: + +```yaml +action: assist_satellite.start_conversation +target: + entity_id: assist_satellite.my_entity + start_message: "You left the lights on in the living room. Turn them off?" + extra_system_prompt: "The user has left the lights on in the living room and is being asked if they'd like to turn them off." +``` + +```yaml +action: assist_satellite.start_conversation +target: + entity_id: assist_satellite.my_entity + start_media_id: ITEM_ID +``` diff --git a/source/_integrations/azure_storage.markdown b/source/_integrations/azure_storage.markdown new file mode 100644 index 00000000000..8e16bb27a83 --- /dev/null +++ b/source/_integrations/azure_storage.markdown @@ -0,0 +1,47 @@ +--- +title: Azure Storage +description: Instructions on how to setup Azure storage accounts to be used with backups. +ha_release: 2025.3 +ha_category: + - Backup +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_domain: azure_storage +ha_codeowners: + - '@zweckj' +ha_integration_type: service +ha_quality_scale: bronze +--- + +This integration allows you to use [Azure storage accounts](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-overview) for use with Home Assistant Backups. + +{% include integrations/config_flow.md %} + +{% configuration_basic %} +Storage account name: + description: "The name of the storage account. Only the name, nothing else." +Container name: + description: "Blob container name to store the backups. If the container does not exist, it will be created. Defaults to `hass-backups`." +Storage account key: + description: "One of the two storage account keys. Used to authenticate against the storage account" +{% endconfiguration_basic %} + + +## Known Limitations + +- Only storage accounts that have a default URL `storageaccountname.blob.core.windows.net` are supported at this point +- Since only key based authentication is possible, this has to be enabled in your storage account. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} + +## Troubleshooting + +{% details "Authentication failure" %} + +Check that your storage account allows [`Shared Key` access](https://learn.microsoft.com/en-us/azure/storage/common/shared-key-authorization-prevent?tabs=portal#remediate-authorization-via-shared-key). + +{% enddetails %} diff --git a/source/_integrations/backup.markdown b/source/_integrations/backup.markdown index 5acb2fe5a3b..59b82a5b5f9 100644 --- a/source/_integrations/backup.markdown +++ b/source/_integrations/backup.markdown @@ -3,16 +3,21 @@ title: Backup description: Allow creating backups of container and core installations. ha_category: - Other + - Sensor ha_release: 2022.4 ha_quality_scale: internal ha_domain: backup ha_codeowners: - '@home-assistant/core' ha_iot_class: Calculated +ha_platforms: + - sensor ha_integration_type: system related: - docs: /common-tasks/general/#backups title: Backups + - docs: /common-tasks/general/#defining-backup-locations + title: Backup locations - docs: /getting-started/onboarding/ title: Recover from backup during onboarding - docs: /more-info/backup-emergency-kit/ @@ -25,20 +30,36 @@ To learn how to create and restore a backup, refer to the backup section under [ ## Actions -The **Backup** integration exposes an action that can be used to automate the backup +The **Backup** integration exposes actions that can be used to automate the backup process. However, it is no longer needed to create your own automation. Follow these steps to [set up an automatic backup from the UI](/common-tasks/general/#setting-up-an-automatic-backup-process). -### Action {% my developer_call_service service="backup.create" %} +### Action backup.create_automatic -The {% my developer_call_service service="backup.create" %} action can be used -to create a backup for your Home Assistant instance. +The {% my developer_call_service service="backup.create_automatic" %} action can be used +to create a backup of your Home Assistant instance, using the same settings as those used +by [automatic backups](/common-tasks/general/#setting-up-an-automatic-backup-process). + +This action can be called to create backups with pre-defined settings at a more flexible +schedule than the schedule which can be configured for automatic backups. The action has no additional options or parameters. Example action: +```yaml +action: backup.create_automatic +``` + +### Action backup.create + +The {% my developer_call_service service="backup.create" %} action can be used +to create a backup of your Home Assistant instance. +This action is only available in [core and container installations](/installation/#advanced-installation-methods). +The action has no additional options or parameters. +Example action: + ```yaml action: backup.create ``` @@ -62,3 +83,24 @@ automation: ## Restoring a backup To restore a backup, follow the steps described in [Restoring a backup](/common-tasks/general/#restoring-a-backup). + +## Sensors + +The **Backup** {% term integration %} provides several sensors. + +### Backup Manager State + +The current state of the backup system. Possible states are: + +- Idle +- Creating a backup +- Receiving a backup +- Restoring a backup + +### Next scheduled automatic backup + +The timestamp of the next scheduled automatic backup. + +### Last successful automatic backup + +The timestamp of the last successful automatic backup. diff --git a/source/_integrations/baf.markdown b/source/_integrations/baf.markdown index fda65b81485..963619a8f0a 100644 --- a/source/_integrations/baf.markdown +++ b/source/_integrations/baf.markdown @@ -46,6 +46,10 @@ For devices that support Auto Comfort and are running firmware 3.1 or later, an For devices that support Auto Comfort, a climate {% term entity %} allows adjusting the target temperature. +{% note %} +**Climate and Climate Sensors Become Unavailable:** Climate and some sensors like temperature are provided by the remote, not the fan itself on certain models. When the fan loses connection to the remote, these entities may become unavailable while the fan remains available. Consult vendor documentation on how to re-establish connectivity between the fan and remote and reload the integration to restore entities availability. +{% endnote %} + ### Number Adjusting the minimum and maximum speed for devices that support Auto Comfort is available. diff --git a/source/_integrations/balboa.markdown b/source/_integrations/balboa.markdown index 64778abf60e..a5f3624f350 100644 --- a/source/_integrations/balboa.markdown +++ b/source/_integrations/balboa.markdown @@ -13,14 +13,18 @@ ha_domain: balboa ha_platforms: - binary_sensor - climate + - event - fan - light - select + - switch + - time ha_codeowners: - '@garbled1' - '@natekspencer' ha_config_flow: true ha_integration_type: integration +ha_dhcp: true --- The **Balboa Spa Client** {% term integration %} adds support for [Balboa](https://www.balboawatergroup.com/) Spa WiFi Modules to be used within Home Assistant. @@ -29,9 +33,12 @@ There is currently support for the following device types within Home Assistant: - Binary sensor (Filter cycles and circulation pumps) - Climate +- Event (Last known fault, if any) - Fan (Pumps/Jets) - Light - Select (Low/high temperature range) +- Switch (Enable/disable filter cycle 2) +- Time (Set filter cycle start/end times) ## Compatible hardware diff --git a/source/_integrations/bang_olufsen.markdown b/source/_integrations/bang_olufsen.markdown index 3b0662c2671..38aa8efae7d 100644 --- a/source/_integrations/bang_olufsen.markdown +++ b/source/_integrations/bang_olufsen.markdown @@ -2,16 +2,16 @@ title: Bang & Olufsen description: Instructions on how to integrate Bang & Olufsen devices into Home Assistant. ha_category: + - Event - Media Player - Multimedia - - Event ha_release: 2024.2 ha_iot_class: Local Push ha_domain: bang_olufsen ha_platforms: - diagnostics - - media_player - event + - media_player ha_codeowners: - '@mj23000' ha_config_flow: true @@ -53,7 +53,7 @@ The **Bang & Olufsen** integration uses the [Mozart API](https://bang-olufsen.gi ## Supported features -Currently, a single device with a `media_player` entity is created for each added physical device. For advanced automations, [events](#automations) are fired in Home Assistant. +Currently, for each added physical device, a single device is created that includes a `media_player` entity and, if available, `event` entities. ### Media player @@ -71,9 +71,35 @@ A number of features are available through the media player entity: - Connect to, expand to or unexpand devices. - Set all connected Beolink devices to standby. +### Events + +Event entities are created for each of the physical controls on your device. These controls usually have their own behaviors, so using them for automations is not always ideal. +Available event entities: + +- Bluetooth +- Microphone +- Next +- Play / Pause +- Favourite 1 +- Favourite 2 +- Favourite 3 +- Favourite 4 +- Previous +- Volume + +All of these event entities support the following event types: + +- Release of short press +- Long press +- Release of long press +- Very long press +- Release of very long press + +All devices except the [Beoconnect Core](https://www.bang-olufsen.com/en/dk/accessories/beoconnect-core) support device controls. + ## Limitations -Currently, some features of the Mozart platform such as: +Currently, some features of the Mozart platform are not available through the [public API](https://github.com/bang-olufsen/mozart-open-api). Some may become available at a later point, but until then the [Bang & Olufsen App](https://www.bang-olufsen.com/en/dk/story/apps) can be used to configure these settings and features: - Creating timers and alarms - Retrieving detailed alarm and timer information @@ -87,8 +113,6 @@ And more advanced app-centric features such as: - Adjusting specific sound settings - Pairing remotes -These features are not available through the API. Some may become available at a later point, but until then the [Bang & Olufsen App](https://www.bang-olufsen.com/en/dk/story/apps) can be used to configure these settings and features. - ## Actions ### play_media actions @@ -486,30 +510,6 @@ target: WebSocket notifications received from the device are fired as events in Home Assistant. These can be received by listening to `bang_olufsen_websocket_event` event types, where `device_id` or `serial_number` can be used to differentiate devices. -### Events - -Event entities are created for each of the physical controls on your device. These controls usually have their own behaviors, so using them for automations is not always ideal. -Available event entities: -- Bluetooth -- Microphone -- Next -- Play / Pause -- Favourite 1 -- Favourite 2 -- Favourite 3 -- Favourite 4 -- Previous -- Volume - -All of these event entities support the following event types: -- Release of short press -- Long press -- Release of long press -- Very long press -- Release of very long press - -All devices except the [Beoconnect Core](https://www.bang-olufsen.com/en/dk/accessories/beoconnect-core) support device controls. - ### Getting Deezer URIs To find Deezer playlist, album URIs, and user IDs for Deezer flows, the Deezer website has to be accessed. When navigating to an album, the URL will look something like: , and this needs to be converted to: `album:ALBUM_ID` and the same applies to playlists, which have the format: `playlist:PLAYLIST_ID`. diff --git a/source/_integrations/binary_sensor.mqtt.markdown b/source/_integrations/binary_sensor.mqtt.markdown index 67870e33c85..5b7f8a1be0f 100644 --- a/source/_integrations/binary_sensor.mqtt.markdown +++ b/source/_integrations/binary_sensor.mqtt.markdown @@ -51,7 +51,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -60,7 +60,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -156,7 +156,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -214,7 +214,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a string to be compared to `payload_on`/`payload_off` or an empty string, in which case the MQTT message will be removed. Remove this option when `payload_on` and `payload_off` are sufficient to match your payloads (i.e no preprocessing of original message is required)." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that returns a string to be compared to `payload_on`/`payload_off` or an empty string, in which case the MQTT message will be removed. Remove this option when `payload_on` and `payload_off` are sufficient to match your payloads (i.e no preprocessing of original message is required)." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown index 05c9970fdfd..21fd43fe8da 100644 --- a/source/_integrations/bluetooth.markdown +++ b/source/_integrations/bluetooth.markdown @@ -91,6 +91,8 @@ Some systems may not come with Bluetooth and require a USB adapter. Installing a If you experience an unreliable Bluetooth connection, installing a short USB extension cable between your Bluetooth adapter and your Home Assistant server may improve reliability. +For development and testing, the developers of this Bluetooth integration primarily use a [Feasycom FSC-BP119](https://www.feasycom.com/datasheet/fsc-bp119.pdf) (CSR8510A10) 📶. + ### Known working high-performance adapters #### Cambridge Silicon Radio (CSR) -based adapters @@ -133,6 +135,8 @@ These adapters may require additional patch files available at **More settings** > **Change password**. +- On the web: Visit **Settings** > **Reset password** or go directly to [Reset Password](https://web.getbring.com/app/settings/resetpassword). + +You can still log in with your existing authentication method afterward. {% include integrations/config_flow.md %} +### Configuration parameters + +{% configuration_basic %} +Email: + description: "The email address associated with your Bring! account." +Password: + description: "The password to log in to your Bring! account." +{% endconfiguration_basic %} + ## 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. +- **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. - **List access**: Indicates whether the shopping list is **personal** (private) or **shared** (accessible to others). +## Events + +- **Activities:** The event entity displays the most recent activity on a Bring! shopping list, including the activity type and the profile picture of the user who performed it. There are three types of activities: *Items added* (when a user adds items to the list), *Items removed* (when a user removes items), and *Items changed* (when a user modifies item details or quantity). The event attributes provide additional details, including the list of added, removed, or modified items, the user's name, and the exact time of the activity. + ## Actions You can use the actions from the [to-do list](/integrations/todo/) to create, update, or delete items on your Bring! shopping lists. ### Notifications -The **Bring** integration offers an action to send push notifications to the Bring! mobile apps of other members of a shared shopping list. The Bring! mobile app has 4 predefined notification types. Note: If you want to receive these notifications yourself, you need to use a dedicated account as mentioned above. +The **Bring!** integration offers an action to send push notifications to the Bring! mobile apps of other members of a shared shopping list. The Bring! mobile app has 4 predefined notification types. -| Data attribute | Optional | Description | -| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------- | -| `target` | no | Target Bring! list(s) whose members should be notified. | -| `message` | no | Type of push notification to send to list members. See [Notification types](#available-notification-types). | -| `item` | yes | **Required for `urgent_message`.** Article name to include in the message. For example: *Urgent Message - Please buy cilantro urgently*. | +{% note %} + +If you want to receive these notifications, you must use a dedicated account, as outlined in the [known limitations](#known-limitations). + +{% endnote %} + +| Data attribute | Optional | Description | +| ---------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| `target` | no | Target Bring! list(s) whose members should be notified. | +| `message` | no | Type of push notification to send to list members. See [Notification types](#available-notification-types). | +| `item` | yes | Required for `urgent_message`. Item to include in the message. For example: *Attention! Attention! - We still urgently need: Cilantro*. | ### Available notification types -| Notification type | Text of notification | -| ----------------- | --------------------------------------------------- | -| going_shopping | I'm going shopping! - Last chance to make changes | -| changed_list | List updated - Take a look at the articles | -| shopping_done | Shopping done - The fridge is well stocked | -| urgent_message | Urgent Message - Please buy `Article name` urgently | +| Notification type | Name of notification | +| ------------------- | -------------------------------------------------------------- | +| `going_shopping` | I'm going shopping! - Last chance for adjustments | +| `changed_list` | I changed the list! - Take a look at the items | +| `shopping_done` | The shopping is done! - The fridge is well stocked | +| `urgent_message` | Attention! Attention! - We still urgently need: `[Items]` | + +{% note %} + +The notification that list members receive differs from the label shown in the Bring! app. This variation depends not only on the recipient’s language settings but also on the sender's profile name. Additionally, notifications may change with new app updates. Here are some example notifications: + +- `name` is going shopping for "`shopping list name`"! Last chance to make changes +- `name` went shopping for "`shopping list name`"! The fridge is well stocked +- `name` updated the list "`shopping list name`"! Take a look at the articles +- Attention, something's missing! Please buy `item` urgently + +{% endnote %} ### Sending a going shopping notification @@ -89,3 +143,83 @@ actions: message: urgent_message item: Cilantro ``` + +## Automations + +Get started with these automation examples for **Bring!**, each featuring ready-to-use blueprints! + +### Grocery shopping reminder 🛒 + +Get notified when it's time to go grocery shopping. A notification is sent when your shopping list reaches a set threshold or when urgent items are added. + +{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/bring-grocery-shopping-reminder/843123" %} + +{% details "Example YAML configuration" %} + +{% raw %} + +```yaml +triggers: + - trigger: numeric_state + entity_id: todo.shopping_list + above: 10 + id: shopping list too long + - trigger: numeric_state + entity_id: sensor.shopping_list_urgent + above: 0 + id: shopping is urgent +actions: + - choose: + - conditions: + - condition: trigger + id: shopping list too long + sequence: + - action: + - action: notify.notify + data: + message: >- + The list is getting long, plan a trip to the grocery shop in + the next days + title: Shopping needed soon 🛒 + - conditions: + - condition: trigger + id: shopping is urgent + sequence: + - action: + - action: notify.notify + data: + title: 🚨 Time to go shopping! 🛒 + message: Urgent groceries needed! Grab your shopping bag and go! + - delay: + hours: 1 +mode: single +alias: "Bring!: Grocery shopping reminder 🛒" +description: "Get notified when it's time to go grocery shopping. A notification is sent when your shopping list reaches a set threshold or when urgent items are added." +``` + +{% endraw %} + +{% enddetails %} + +## Data updates + +This integration syncs your lists by {% term polling %} the **Bring!** service every 90 seconds or immediately after an action is performed in Home Assistant, such as adding an item. If you prefer a less frequent update, **custom polling interval** can also be defined — see [Defining a custom polling interval](/common-tasks/general/#defining-a-custom-polling-interval) for details. + +## Known limitations + +- Changes made in Home Assistant are reflected instantly in the **Bring!** app, while changes in the Bring! app may be delayed by up to 90 seconds due to the polling interval. +- To receive push notifications in the **Bring!** app when items are added or removed in Home Assistant, or when triggered by the `bring.send_message` action, it is recommended to use a dedicated account (such as `email:name+ha@example.com`) when setting up the integration. + +## Troubleshooting + +The **Bring!** integration relies on an active internet connection to communicate with Bring!. If you encounter issues, verify that your network connection is stable. Additionally, the Bring! service itself may experience downtime, whether unexpected or due to scheduled maintenance. + +- A **502 - Bad Gateway** error (`aiohttp.client_exceptions.ClientResponseError: 502, message='Bad Gateway'`) is known to occur occasionally (1–2 times per day) but is usually temporary. The integration will retry automatically after 90 seconds, so there’s no need to take action. + +In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue reoccurs, stop the debug logging again (*download of debug log file will start automatically*). Further, if still possible, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report. + +## Remove integration + +This integration can be removed by following these steps: + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/bt_smarthub.markdown b/source/_integrations/bt_smarthub.markdown index 46ecaffb4ab..7ea9f917376 100644 --- a/source/_integrations/bt_smarthub.markdown +++ b/source/_integrations/bt_smarthub.markdown @@ -20,6 +20,8 @@ ha_quality_scale: legacy This platform offers presence detection by looking at connected devices to a [BT Smart Hub](https://en.wikipedia.org/wiki/BT_Smart_Hub) based router. This router is sometimes referred to as the BT Home Hub 6. +It has been reported that the Plusnet Hub Two also works with this integration. + ## Configuration To use a BT Smart Hub router in your installation, add the following to your {% term "`configuration.yaml`" %} file. diff --git a/source/_integrations/bticino.markdown b/source/_integrations/bticino.markdown index 36a08a851f0..77585f198f7 100644 --- a/source/_integrations/bticino.markdown +++ b/source/_integrations/bticino.markdown @@ -3,6 +3,7 @@ title: BTicino description: Connect and control your BTicino devices using the Netatmo integration ha_category: - Binary sensor + - Button - Camera - Climate - Cover @@ -24,6 +25,7 @@ ha_codeowners: ha_config_flow: true ha_platforms: - binary_sensor + - button - camera - climate - cover diff --git a/source/_integrations/bubendorff.markdown b/source/_integrations/bubendorff.markdown index 993fb43bdac..fc102ac0b13 100644 --- a/source/_integrations/bubendorff.markdown +++ b/source/_integrations/bubendorff.markdown @@ -3,6 +3,7 @@ title: Bubendorff description: Connect and control your Bubendorff devices using the Netatmo integration ha_category: - Binary sensor + - Button - Camera - Climate - Cover @@ -24,6 +25,7 @@ ha_codeowners: ha_config_flow: true ha_platforms: - binary_sensor + - button - camera - climate - cover diff --git a/source/_integrations/burbank_water_and_power.markdown b/source/_integrations/burbank_water_and_power.markdown new file mode 100644 index 00000000000..01208f5b406 --- /dev/null +++ b/source/_integrations/burbank_water_and_power.markdown @@ -0,0 +1,20 @@ +--- +title: Burbank Water and Power (BWP) +description: Get energy usage from Burbank Water and Power (BWP) using the Opower integration +ha_category: + - Energy + - Sensor +ha_release: 2023.8 +ha_domain: burbank_water_and_power +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/button.mqtt.markdown b/source/_integrations/button.mqtt.markdown index 98eeb6fa466..8cda3240c31 100644 --- a/source/_integrations/button.mqtt.markdown +++ b/source/_integrations/button.mqtt.markdown @@ -40,7 +40,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -49,7 +49,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -57,7 +57,7 @@ availability_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -144,7 +144,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: diff --git a/source/_integrations/cambridge_audio.markdown b/source/_integrations/cambridge_audio.markdown index 9894aa83eb7..e6ada106d95 100644 --- a/source/_integrations/cambridge_audio.markdown +++ b/source/_integrations/cambridge_audio.markdown @@ -17,6 +17,7 @@ ha_codeowners: ha_config_flow: true ha_integration_type: device ha_zeroconf: true +ha_quality_scale: platinum --- The **Cambridge Audio** {% term integration %} allows you to control all receivers and streamers that support the [StreamMagic](https://www.cambridgeaudio.com/usa/en/products/streammagic) app. diff --git a/source/_integrations/camera.markdown b/source/_integrations/camera.markdown index 85caa1c4dc2..90d3ef5626c 100644 --- a/source/_integrations/camera.markdown +++ b/source/_integrations/camera.markdown @@ -104,12 +104,12 @@ For example, the following action in an automation would take a recording from " ```yaml actions: - variables: - entity_id: camera.yourcamera # Store the camera entity_id in a variable for reuse + my_camera_id: camera.yourcamera # Store the camera entity_id in a variable for reuse - action: camera.record target: - entity_id: '{{ entity_id }}' + entity_id: '{{ my_camera_id }}' data: - filename: '/tmp/{{ entity_id }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.mp4' + filename: '/tmp/{{ my_camera_id }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.mp4' ``` {% endraw %} @@ -132,12 +132,12 @@ For example, the following action in an automation would take a snapshot from "y ```yaml actions: - variables: - entity_id: camera.yourcamera # Store the camera entity_id in a variable for reuse + my_camera_id: camera.yourcamera # Store the camera entity_id in a variable for reuse - action: camera.snapshot target: - entity_id: '{{ entity_id }}' + entity_id: '{{ my_camera_id }}' data: - filename: '/tmp/{{ entity_id }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg' + filename: '/tmp/{{ my_camera_id }}_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg' ``` {% endraw %} diff --git a/source/_integrations/camera.mqtt.markdown b/source/_integrations/camera.mqtt.markdown index ff672f202b9..32b8827f32a 100644 --- a/source/_integrations/camera.mqtt.markdown +++ b/source/_integrations/camera.mqtt.markdown @@ -50,7 +50,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -59,7 +59,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -146,7 +146,7 @@ image_encoding: required: false type: string json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: diff --git a/source/_integrations/cast.markdown b/source/_integrations/cast.markdown index 447b11597d9..01c52c8c31e 100644 --- a/source/_integrations/cast.markdown +++ b/source/_integrations/cast.markdown @@ -54,9 +54,11 @@ Home Assistant Cast requires your Home Assistant installation to be accessible v {% note %} -Chromecasts generally ignore DNS servers from DHCP and will instead use Google's DNS servers, 8.8.8.8 and 8.8.4.4. This means media URLs must either be specifying the IP-address of the server directly, e.g. `http://192.168.1.1:8123/movie.mp4`, or be publicly resolvable, e.g. `http://homeassistant.internal.mydomain.com:8123/movie.mp4` where `homeassistant.internal.mydomain.com` resolves to `192.168.1.1`. A hostname which can't be publicly resolved, e.g. `http://homeassistant.local:8123/movie.mp4` will fail to play. +Chromecasts generally don't resolve hosts through mDNS and also ignore DNS servers from DHCP, they instead use Google's public DNS servers, 8.8.8.8 and 8.8.4.4. -This is important when casting TTS or local media sources; the cast integration will cast such media from the `external_url` if [configured](/integrations/homeassistant/#editing-the-general-settings-in-yaml), otherwise from the Home Assistant Cloud if configured, otherwise from the [`internal_url`](/integrations/homeassistant/#editing-the-general-settings-in-yaml). Note that the Home Assistant Cloud will not be used if an `external_url` is configured. +This means media URLs must either be specifying the IP-address of the server directly, e.g. `http://192.168.1.1:8123/movie.mp4`, or be publicly resolvable, e.g. `http://homeassistant.internal.mydomain.com:8123/movie.mp4` where `homeassistant.internal.mydomain.com` resolves to `192.168.1.1` using Google's DNS servers. A hostname which can't be publicly resolved, e.g. `http://homeassistant.local:8123/movie.mp4` will fail to play. + +This is important when casting TTS or local media sources; the cast integration will cast such media from the local Home Assistant URL, which can be configured by navigating to **{% my network title="Settings > System > Network" %}** or by configuring an [`internal_url`](/integrations/homeassistant/#editing-the-general-settings-in-yaml). {% endnote %} diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown index f0149f75f5a..6d13385fa05 100644 --- a/source/_integrations/climate.mqtt.markdown +++ b/source/_integrations/climate.mqtt.markdown @@ -54,7 +54,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -63,7 +63,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -187,7 +187,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -281,7 +281,7 @@ precision: type: float default: 0.1 for Celsius and 1.0 for Fahrenheit. preset_mode_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `preset_mode_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `preset_mode_command_topic`. required: false type: template preset_mode_command_topic: @@ -293,7 +293,7 @@ preset_mode_state_topic: required: false type: string preset_mode_value_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`. required: false type: template preset_modes: @@ -311,6 +311,27 @@ retain: required: false type: boolean default: false +swing_horizontal_mode_command_template: + description: A template to render the value sent to the `swing_horizontal_mode_command_topic` with. + required: false + type: template +swing_horizontal_mode_command_topic: + description: The MQTT topic to publish commands to change the swing horizontal mode. + required: false + type: string +swing_horizontal_mode_state_template: + description: A template to render the value received on the `swing_horizontal_mode_state_topic` with. + required: false + type: template +swing_horizontal_mode_state_topic: + description: The MQTT topic to subscribe for changes of the HVAC swing horizontal mode. If this is not set, the swing horizontal mode works in optimistic mode (see below). + required: false + type: string +swing_horizontal_modes: + description: A list of supported swing horizontal modes. + required: false + default: ['on', 'off'] + type: list swing_mode_command_template: description: A template to render the value sent to the `swing_mode_command_topic` with. required: false @@ -333,7 +354,7 @@ swing_modes: default: ['on', 'off'] type: list target_humidity_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `target_humidity_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `target_humidity_command_topic`. required: false type: template target_humidity_command_topic: @@ -345,7 +366,7 @@ target_humidity_state_topic: required: false type: string target_humidity_state_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the climate `target_humidity` state. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value for the climate `target_humidity` state. required: false type: template temperature_command_template: @@ -461,6 +482,9 @@ mqtt: - "off" - "cool" - "fan_only" + swing_horizontal_modes: + - "on" + - "off" swing_modes: - "on" - "off" @@ -478,6 +502,7 @@ mqtt: mode_command_template: "{{ value if value=="off" else "on" }}" temperature_command_topic: "study/ac/temperature/set" fan_mode_command_topic: "study/ac/fan/set" + swing_horizontal_mode_command_topic: "study/ac/swingH/set" swing_mode_command_topic: "study/ac/swing/set" precision: 1.0 ``` diff --git a/source/_integrations/cloud.markdown b/source/_integrations/cloud.markdown index a3dc3111ea5..7bcc001f8ef 100644 --- a/source/_integrations/cloud.markdown +++ b/source/_integrations/cloud.markdown @@ -3,6 +3,8 @@ title: Home Assistant Cloud description: Enable the Home Assistant Cloud integration. ha_release: '0.60' ha_category: + - Backup + - Speech-to-text - Text-to-speech - Voice ha_iot_class: Cloud Push @@ -16,7 +18,7 @@ ha_platforms: ha_integration_type: system --- -The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa and Google Assistant. [Learn more.](/cloud) +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa and Google Assistant. It also enables a secure remote connection, speech-to-text, text-to-speech, an offsite backup location, Webhooks support, and better WebRTC. [Learn more.](/cloud) ## Configuration @@ -29,7 +31,7 @@ cloud: Documentation of further configuration possibilities are located at [NabuCasa](https://www.nabucasa.com/config/) -Once activated, go to the configuration panel in Home Assistant and create an account and log in. If you are not seeing the **Settings** panel, make sure you have the following option enabled in your {% term "`configuration.yaml`" %} file. +Once activated, go to the configuration panel in Home Assistant, create an account, and log in. If you are not seeing the **Settings** panel, make sure you have the following option enabled in your {% term "`configuration.yaml`" %} file. ```yaml config: diff --git a/source/_integrations/comelit.markdown b/source/_integrations/comelit.markdown index d4791c03906..cf1c4ae93a6 100644 --- a/source/_integrations/comelit.markdown +++ b/source/_integrations/comelit.markdown @@ -28,7 +28,9 @@ ha_platforms: ha_integration_type: hub --- -The Comelit SimpleHome integration allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/domotica-e-smart-home). +The **Comelit SimpleHome** {% term integration %} allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/home-building-automation/). + +## Supported devices There is support for the following platform types within Home Assistant: @@ -37,6 +39,36 @@ There is support for the following platform types within Home Assistant: {% include integrations/config_flow.md %} -## Alarm control panel +{% configuration_basic %} + host: + description: The IP address of the Comelit SmartHome device. + port: + description: The TCP port of the Comelit SmartHome device. The default is port 80 (standard for HTTP). + pin: + description: The PIN of the Comelit SmartHome device. + type: + description: The type of Comelit SmartHome device. + keys: + bridge: + description: Comelit Serial Bridge. + vedo: + description: Comelit VEDO System. +{% endconfiguration_basic %} + +## Data updates + +This integration {% term polling polls %} data from the device every 5 seconds by default. + +## Supported functionality + +The **Comelit SimpleHome** {% term integration %} provides the following entities: + +### Alarm control panel 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. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/command_line.markdown b/source/_integrations/command_line.markdown index ab738b8f315..7b76fce566c 100644 --- a/source/_integrations/command_line.markdown +++ b/source/_integrations/command_line.markdown @@ -22,6 +22,7 @@ ha_codeowners: related: - docs: /docs/configuration/ title: Configuration file +ha_quality_scale: legacy --- The **Command line** {% term integration %} offers functionality that issues specific commands to get data or to control a device. diff --git a/source/_integrations/cookidoo.markdown b/source/_integrations/cookidoo.markdown index 0a7a4788fff..7dc2e7c19fa 100644 --- a/source/_integrations/cookidoo.markdown +++ b/source/_integrations/cookidoo.markdown @@ -11,6 +11,9 @@ ha_codeowners: ha_domain: cookidoo ha_integration_type: service ha_platforms: + - button + - diagnostics + - sensor - todo related: - docs: /integrations/todo @@ -23,6 +26,7 @@ related: title: Cookidoo the official Thermomix recipe platform - url: https://www.vorwerk.com/ title: Vorwerk GmbH +ha_quality_scale: silver --- The **Cookidoo** {% term integration %} allows you to interact with your shopping lists of [Cookidoo the official Thermomix recipe platform](https://cookidoo.international/) within Home Assistant. @@ -62,6 +66,39 @@ The _clear shopping list_ button entity allows you to clear both the shopping li This button entity will appear automatically in your Home Assistant instance after adding the integration. You can use it in automations or add it to your dashboard using the Button card. +## Sensor entities + +### Diagnostics + +1. **Subscription** + - State: `premium`, `trial`, or `free` + - Description: Indicates the current subscription type + - `premium`: Yearly subscription with full recipe access + - `trial`: Time-limited premium access (available during account creation or new device linking) + - `free`: Limited recipe access with full shopping list features + +2. **Subscription expiration date** + - State: ISO 8601 timestamp or `unknown` + - Description: Shows when the current subscription expires + - For `premium` and `trial` subscriptions: Timestamp of expiration date + - For `free` subscriptions: Returns `unknown` state + +These sensor entities will appear automatically in your Home Assistant instance after adding the integration. + +{% details "Example state attributes" %} + +```yaml +subscription: + state: premium + icon: mdi:account-star + +subscription_expiration_date: + state: "2025-01-15T23:59:59+00:00" + icon: mdi:clock-reactivate +``` + +{% enddetails %} + ## Known Limitations {% important %} diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown index f847fd28ad5..83a7eb46647 100644 --- a/source/_integrations/cover.mqtt.markdown +++ b/source/_integrations/cover.mqtt.markdown @@ -57,7 +57,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -66,7 +66,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -131,7 +131,7 @@ device: required: false type: string device_class: - description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`. + description: Sets the [class of the device](/integrations/cover/#device_class), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`. required: false type: string enabled_by_default: @@ -157,7 +157,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -203,6 +203,11 @@ payload_stop: required: false type: string default: STOP +payload_stop_tilt: + description: The command payload that stops the tilt. + required: false + type: string + default: stop platform: description: Must be `cover`. Only allowed and required in [MQTT auto discovery device messages](/integrations/mqtt/#device-discovery-payload). required: true @@ -218,7 +223,7 @@ position_open: type: integer default: 100 position_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `position_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `position_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false type: template position_topic: @@ -236,7 +241,7 @@ retain: type: boolean default: false set_position_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{% raw %}{{ position }}{% endraw %}`. Within the template the following variables are available: `entity_id`, `position`, the target position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to define the position to be sent to the `set_position_topic` topic. Incoming position value is available for use in the template `{% raw %}{{ position }}{% endraw %}`. Within the template the following variables are available: `entity_id`, `position`, the target position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false type: template set_position_topic: @@ -278,7 +283,7 @@ tilt_closed_value: type: integer default: 0 tilt_command_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `tilt_command_topic` topic. Within the template the following variables are available: `entity_id`, `tilt_position`, the target tilt position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) that can be used to extract the payload for the `tilt_command_topic` topic. Within the template the following variables are available: `entity_id`, `tilt_position`, the target tilt position in percent; `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false type: template tilt_command_topic: @@ -306,7 +311,7 @@ tilt_optimistic: type: boolean default: "`true` if `tilt_status_topic` is not defined, else `false`" tilt_status_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `tilt_status_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `tilt_status_topic` topic. Within the template the following variables are available: `entity_id`, `position_open`; `position_closed`; `tilt_min`; `tilt_max`. The `entity_id` can be used to reference the entity's attributes with help of the [states](/docs/configuration/templating/#states) template function;" required: false type: template tilt_status_topic: @@ -318,7 +323,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `state_topic` topic." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `state_topic` topic." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/cozytouch.markdown b/source/_integrations/cozytouch.markdown index cc92b45491e..29159385581 100644 --- a/source/_integrations/cozytouch.markdown +++ b/source/_integrations/cozytouch.markdown @@ -24,11 +24,6 @@ ha_supporting_integration: Overkiz ha_release: 2022.2 ha_codeowners: - '@imicknl' - - '@vlebourl' - - '@tetienne' - - '@nyroDev' - - '@tronix117' - - '@alexfp14' ha_config_flow: true ha_platforms: - alarm_control_panel diff --git a/source/_integrations/decora_wifi.markdown b/source/_integrations/decora_wifi.markdown index ed78193941a..9d9df97cbd0 100644 --- a/source/_integrations/decora_wifi.markdown +++ b/source/_integrations/decora_wifi.markdown @@ -15,14 +15,16 @@ related: ha_quality_scale: legacy --- -Support for [Leviton Decora Wi-Fi](https://www.leviton.com/products/residential/automation-smart-home/decora-smart-all/decora-smart-with-wifi-technology) dimmers/switches via the MyLeviton API. +Support for [Leviton Decora Wi-Fi](https://leviton.com/products/residential/smart-home/smart-switches) dimmers/switches via the MyLeviton API. Supported devices (tested): -- [DW6HD1-BZ](https://www.leviton.com/products/dw6hd-1bz) (Decora Smart Wi-Fi 600W Dimmer) -- [DW15P-1BW](https://www.leviton.com/products/dw15p-1bw) (Decora Smart Wi-Fi Plug-in Outlet) -- - [DW15S-1BZ](https://www.leviton.com/products/dw15s-1bz) (Decora Smart Wi-Fi 15A Switch) +- [DW6HD1-BZ](https://leviton.com/products/dw6hd-1bz) (Decora Smart Wi-Fi 600W Dimmer) +- [DW15P-1BW](https://leviton.com/products/dw15p-1bw) (Decora Smart Wi-Fi Plug-in Outlet) +- [DW15S-1BZ](https://leviton.com/products/dw15s-1bz) (Decora Smart Wi-Fi 15A Switch) - [D215S-2RW](https://store.leviton.com/products/decora-smart-wi-fi-switch-2nd-gen-d215s-2rw) (Decora Smart Wi-Fi 15A Switch - 2nd Gen) +- [DN15S-1BW](https://leviton.com/products/dn15s-1bw) (Decora Smart No-Neutral Switch) via [MLWSB-1BW](https://leviton.com/products/mlwsb-1bw) (Decora Smart Wi-Fi Bridge for No-Neutral Switch and Dimmer) +- [D2MSD-1BW](https://leviton.com/products/d2msd-1bw) (Decora Smart Motion Sensing Dimmer Switch, Wi-Fi 2nd Gen) To enable these lights, add the following lines to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/decorquip.markdown b/source/_integrations/decorquip.markdown new file mode 100644 index 00000000000..23ec8bb3384 --- /dev/null +++ b/source/_integrations/decorquip.markdown @@ -0,0 +1,22 @@ +--- +title: Decorquip Dream +description: Connect and control your Decorquip Dream devices using the Motionblinds integration +ha_category: + - Cover +ha_domain: decorquip +ha_integration_type: virtual +ha_supporting_domain: motion_blinds +ha_supporting_integration: Motionblinds +ha_release: 2020.12 +ha_codeowners: + - '@starkillerOG' +ha_config_flow: true +ha_platforms: + - button + - cover + - sensor +ha_iot_class: Local Push +ha_dhcp: true +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/demo.markdown b/source/_integrations/demo.markdown index 51220503363..0e40663f820 100644 --- a/source/_integrations/demo.markdown +++ b/source/_integrations/demo.markdown @@ -42,6 +42,7 @@ ha_platforms: - tts - update - vacuum + - valve - water_heater - weather ha_integration_type: integration @@ -81,6 +82,7 @@ Available demo platforms: - [Text-to-speech](/integrations/tts/) (`tts`) - [Update](/integrations/update/) (`update`) - [Vacuum](/integrations/vacuum/) (`vacuum`) +- [Valve](/integrations/valve/) (`valve`) - [Water heater](/integrations/water_heater/) (`water_heater`) - [Weather](/integrations/weather/) (`weather`) diff --git a/source/_integrations/denonavr.markdown b/source/_integrations/denonavr.markdown index f3ed085c50c..2d494c01b7b 100644 --- a/source/_integrations/denonavr.markdown +++ b/source/_integrations/denonavr.markdown @@ -45,6 +45,7 @@ Known supported devices: - Denon AVR-X3500H - Denon AVR-X3600H - Denon AVR-X3700H +- Denon AVR-X3800H - Denon AVC-X3800H - Denon AVR-X4100W - Denon AVR-X4300H @@ -64,6 +65,7 @@ Known supported devices: - Denon AVR-3312 - Denon AVR-3313CI - Denon AVR-4810 +- Denon AVR-E300 - Denon AVR-S650H - Denon AVC-S660H - Denon AVR-S710W @@ -75,6 +77,7 @@ Known supported devices: - Denon AVR-S940H - Denon AVR-S950H - Denon AVR-S960H +- Denon AVR-S970H - Denon DN-500AV - Denon DRA-800H - Marantz AV7702 diff --git a/source/_integrations/device_tracker.markdown b/source/_integrations/device_tracker.markdown index 4695ebd93c4..0d8a4841115 100644 --- a/source/_integrations/device_tracker.markdown +++ b/source/_integrations/device_tracker.markdown @@ -55,6 +55,7 @@ device_tracker: - platform: netgear host: IP_ADDRESS username: YOUR_USERNAME + password: YOUR_PASSWORD interval_seconds: 10 consider_home: 180 new_device_defaults: diff --git a/source/_integrations/device_tracker.mqtt.markdown b/source/_integrations/device_tracker.mqtt.markdown index b6f5ae80915..5efd902efbf 100644 --- a/source/_integrations/device_tracker.mqtt.markdown +++ b/source/_integrations/device_tracker.mqtt.markdown @@ -50,7 +50,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -59,7 +59,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -120,7 +120,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -189,7 +189,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a device tracker state." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that returns a device tracker state." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/device_trigger.mqtt.markdown b/source/_integrations/device_trigger.mqtt.markdown index 82fad046f0e..174807d66fa 100644 --- a/source/_integrations/device_trigger.mqtt.markdown +++ b/source/_integrations/device_trigger.mqtt.markdown @@ -97,7 +97,7 @@ device: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/dexcom.markdown b/source/_integrations/dexcom.markdown index a31e6d65f25..efe2f1d2358 100644 --- a/source/_integrations/dexcom.markdown +++ b/source/_integrations/dexcom.markdown @@ -18,7 +18,9 @@ The Dexcom integration allows you to view your CGM data from [Dexcom](https://ww ## Prerequisites -You will need to set up the [Dexcom Share](https://provider.dexcom.com/education-research/cgm-education-use/videos/setting-dexcom-share-and-follow) feature in your Dexcom G6 App to use this integration. Enabling the Dexcom Share service requires setup of at least one follower. The integration will use the Dexcom user's credentials, not the follower's credentials. +You will need to set up the Dexcom Share feature in your Dexcom [G6](https://provider.dexcom.com/education-research/cgm-education-use/videos/setting-dexcom-share-and-follow) or [G7](https://www.dexcom.com/faqs/how-do-i-share-my-dexcom-g7-glucose-data-with-followers) app to use this integration. Enabling the Dexcom Share service requires setup of at least one follower. The integration will use the Dexcom user's credentials, not the follower's credentials. + +Your Dexcom account must have an email address—not a phone number—as its primary user ID. If you normally log into your Dexcom account using a phone number, then this integration will not work. It is unfortunately not possible to change from a phone to email user ID after an account is created, so you will need to create a new Dexcom account in this case. {% include integrations/config_flow.md %} diff --git a/source/_integrations/discovergy.markdown b/source/_integrations/discovergy.markdown index e628c03aad1..98b92390a9b 100644 --- a/source/_integrations/discovergy.markdown +++ b/source/_integrations/discovergy.markdown @@ -14,6 +14,7 @@ ha_platforms: - diagnostics - sensor ha_integration_type: service +ha_quality_scale: silver --- The **inexogy** {% term integration %} allows users to integrate their [inexogy](https://inexogy.com/) smart meters into Home Assistant. @@ -29,6 +30,12 @@ The integration supports the following meters within Home Assistant: For this {% term integration %}, you need a inexogy smart meter, a [inexogy account](https://my.inexogy.com/) and your credentials. {% include integrations/config_flow.md %} +{% configuration_basic %} +"Email address": + description: "Email address to connect Home Assistant to your inexogy account" +Password: + description: "Password for the account to connect Home Assistant to inexogy" +{% endconfiguration_basic %} ## Electricity meter @@ -40,3 +47,9 @@ In case you have a combined meter for consumption and production, the all-time t ## Gas meter A Sensor {% term entity %} is being added for total gas consumption. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/dsmr.markdown b/source/_integrations/dsmr.markdown index 50009f3d4ec..fb3a87ad2f4 100644 --- a/source/_integrations/dsmr.markdown +++ b/source/_integrations/dsmr.markdown @@ -22,6 +22,7 @@ A sensor platform for Belgian, Dutch, Luxembourg and Swedish Smart Meters which - For official information about the P1 port refer to: [P1 Companion Standard](https://www.netbeheernederland.nl/sites/default/files/2024-02/dsmr_5.0.2_p1_companion_standard.pdf) - For unofficial hardware connection examples refer to: [Domoticx](http://domoticx.com/p1-poort-slimme-meter-hardware/) - For official information about the Swedish variant refer to: [Swedish specification](https://www.energiforetagen.se/globalassets/energiforetagen/det-erbjuder-vi/kurser-och-konferenser/elnat/branschrekommendation-lokalt-granssnitt-v2_0-201912.pdf). +- For official information about the E.ON Hungary variant refer to: [E.ON Hungary P1 port specification](https://www.eon.hu/content/dam/eon/eon-hungary/documents/Lakossagi/aram/muszaki-ugyek/P1_port_felhasznaloi_interfesz_felhasznaloi_tajekoztato_%2020240702.pdf) - Supports [P1 cables](http://www.rfxcom.com/epages/78165469.sf/nl_NL/?ObjectPath=/Shops/78165469/Products/19602) integrated in a [RFXtrx device](http://www.rfxcom.com/epages/78165469.sf/nl_NL/?ObjectPath=/Shops/78165469/Products/18103).

    @@ -35,6 +36,7 @@ A sensor platform for Belgian, Dutch, Luxembourg and Swedish Smart Meters which - For Luxembourg meters, choose DSMR version `5L` - For Swedish meters, choose DSMR version `5S` - For EasyMeter Q3D, choose DSMR version `Q3D` +- For E-ON Hungary meters (and for most of other Hungarian meters), choose DSMR version `5EONHU` ### Options @@ -54,16 +56,20 @@ This integration is known to work for: - Iskra ME382 / MT382 (DSMR 2.2) - ISKRA AM550 (DSMR 5.0) -- Landis+Gyr E350 (DMSR 4) +- Landis+Gyr E350 (DSMR 4) +- Landis+Gyr E360 (DSMR 5)* - Landis+Gyr ZCF110 / ZM F110 (DSMR 4.2) - Kaifa E0026 - Kaifa MA304C (DSMR 4.2) - Kamstrup 382JxC (DSMR 2.2) - Sagemcom XS210 ESMR5 -- Sagemcom T211 +- Sagemcom T211 +- Sagemcom MA304 - Ziv E0058 ESMR5 - EasyMeter Q3D +Remarks: +\* The E360 requires a special P1 cable, various webstores sell these specific to the E360. ### M-Bus support A smart meter can have multiple subdevices, also known as [M-Bus](https://m-bus.com/) devices. diff --git a/source/_integrations/eastron.markdown b/source/_integrations/eastron.markdown index 233d3baba7a..826ea9fd210 100644 --- a/source/_integrations/eastron.markdown +++ b/source/_integrations/eastron.markdown @@ -18,6 +18,7 @@ ha_platforms: - sensor - switch ha_iot_class: Local Polling +ha_dhcp: true ha_zeroconf: true --- diff --git a/source/_integrations/easyenergy.markdown b/source/_integrations/easyenergy.markdown index 6f9c111d98d..f7f9ab43472 100644 --- a/source/_integrations/easyenergy.markdown +++ b/source/_integrations/easyenergy.markdown @@ -13,7 +13,7 @@ ha_domain: easyenergy ha_platforms: - diagnostics - sensor -ha_integration_type: integration +ha_integration_type: service --- The **easyEnergy** {% term integration %} integrates the [easyEnergy](https://www.easyenergy.com) API platform with Home Assistant. @@ -228,4 +228,4 @@ template: This integration follows standard integration removal steps. If you also use the template sensors, you need to remove them manually. -{% include integrations/remove_device_service.md %} \ No newline at end of file +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown index d7baa7c6a61..d90c107318c 100644 --- a/source/_integrations/ecobee.markdown +++ b/source/_integrations/ecobee.markdown @@ -10,7 +10,6 @@ ha_category: - Sensor - Switch - Weather -featured: true ha_release: 0.9 ha_iot_class: Cloud Polling ha_config_flow: true diff --git a/source/_integrations/eheimdigital.markdown b/source/_integrations/eheimdigital.markdown index d25ef224a97..5850c8dcf8a 100644 --- a/source/_integrations/eheimdigital.markdown +++ b/source/_integrations/eheimdigital.markdown @@ -2,6 +2,7 @@ title: EHEIM Digital description: Instructions on how to set up EHEIM Digital with Home Assistant. ha_category: + - Climate - Light ha_release: 2025.1 ha_iot_class: Local Polling @@ -11,7 +12,10 @@ ha_codeowners: ha_domain: eheimdigital ha_integration_type: hub ha_platforms: + - climate - light +ha_quality_scale: bronze +ha_zeroconf: true --- The **EHEIM Digital** {% term integration %} allows you to control your [EHEIM Digital](https://eheim.com/en_GB/aquatics/eheim-digital/) smart aquarium devices from Home Assistant. @@ -36,6 +40,13 @@ Currently, the following devices and entities are supported: - **Brightness**: Controlling the brightness of both light channels - **Daycycle mode effect**: Automatically controls the brightness based on the daytime as configured on the device +### [EHEIM thermocontrol+e](https://eheim.com/en_GB/aquatics/eheim-digital/aquarium-heaters/) + +#### Climate + +- **Target temperature**: Controlling the target temperature of the heater (which corresponds to the day temperature in Bio and Smart mode) +- **Presets / Operation mode**: Switching between Manual, Bio and Smart mode + Support for additional EHEIM Digital devices and entities will be added in future updates. ## Remove integration diff --git a/source/_integrations/electric_kiwi.markdown b/source/_integrations/electric_kiwi.markdown index b61e4cea626..bb1b7ce081a 100644 --- a/source/_integrations/electric_kiwi.markdown +++ b/source/_integrations/electric_kiwi.markdown @@ -13,6 +13,7 @@ ha_platforms: - select - sensor ha_integration_type: hub +ha_quality_scale: bronze --- [Electric Kiwi](https://www.electrickiwi.co.nz/) is an independent power and broadband company in New Zealand, offering variable rates for peak, shoulder, and off-peak pricing with a selectable hour of free power. @@ -24,3 +25,53 @@ This integration uses the official [Electric Kiwi API](https://developer.electri {% note %} The configuration uses `client_id` and `client_secret` provided to Home Assistant, so all you need to do is install the integration and authenticate using your account credentials. {% endnote %} + + +## Supported functionality + +The integration provides `sensor` entities with account balances, billing, and hour of free power start and end time. It also provides a `select` entity to change the hour of free power. + +## Use cases + +This integration can be used as part of an automation, for example, to turn on/off appliances automatically. + +## Example automations + +{% details "Run the heat pump during the hour of free power" %} + +{% raw %} + +```yaml +alias: "Turn on expensive heat pump" +description: "Turn on the heat pump when the hour of free power starts" +triggers: + - at: sensor.hour_of_free_power_start + trigger: time +actions: + - action: climate.turn_on + target: + entity_id: climate.heat_pump + data: {} +``` + +```yaml +alias: "Turn off expensive heat pump" +description: "Turn off the heat pump when the hour of free power ends" +triggers: + - at: sensor.hour_of_free_power_end + trigger: time +actions: + - action: climate.turn_off + target: + entity_id: climate.heat_pump + data: {} +``` + +{% endraw %} +{% enddetails %} + +## Remove integration + +This integration follows standard integration removal, no extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/elevenlabs.markdown b/source/_integrations/elevenlabs.markdown index e5ff68d2f02..02bdedc78c5 100644 --- a/source/_integrations/elevenlabs.markdown +++ b/source/_integrations/elevenlabs.markdown @@ -15,11 +15,12 @@ ha_codeowners: --- 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. + ## Prerequisites -- You need an ElevenLabs account to use this integration. A free account suffices for basic usage. +- You need an ElevenLabs account to use this integration. A free account suffices for basic usage. - For custom voices or more quota you need a subscription. -- You need your API key from the ElevenLabs website. +- You need your API key from the ElevenLabs website. {% include integrations/config_flow.md %} @@ -44,6 +45,32 @@ target: data: media_player_entity_id: media_player.giant_tv message: Hello, can you hear me now? + options: + voice: + model: ``` +### Configuration + +Below settings can be configured in the options of the integration and in the `options` parameter of the `tts.speak` service. + +{% configuration %} + +voice: + description: "Voice ID for the ElevenLabs voice to use. Will override the default voice of the entity!" + required: false + type: string +model: + description: "Model ID for the model to use. Will override the default model of the entity!" + required: false + type: string + +{% endconfiguration %} + For more information about using text-to-speech with Home Assistant and more details on all the options it provides, see the [TTS documentation](/integrations/tts/). + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/energyzero.markdown b/source/_integrations/energyzero.markdown index 457d389a488..27a4c61d4d4 100644 --- a/source/_integrations/energyzero.markdown +++ b/source/_integrations/energyzero.markdown @@ -12,7 +12,7 @@ ha_domain: energyzero ha_platforms: - diagnostics - sensor -ha_integration_type: integration +ha_integration_type: service --- The **EnergyZero** {% term integration %} integrates the [EnergyZero](https://www.energyzero.nl/) API platform with Home Assistant. @@ -151,10 +151,10 @@ To use the response data from the actions, you can create a template sensor that ```yaml template: - - triggers: + - trigger: - trigger: time_pattern hours: "*" - actions: + action: - action: energyzero.get_energy_prices response_variable: prices data: diff --git a/source/_integrations/enigma2.markdown b/source/_integrations/enigma2.markdown index e917968c9f9..6460dff7f6c 100644 --- a/source/_integrations/enigma2.markdown +++ b/source/_integrations/enigma2.markdown @@ -14,8 +14,84 @@ ha_platforms: ha_integration_type: device --- -The `enigma2` platform allows you to control a Linux based set-top box which is running [Enigma2](https://github.com/oe-alliance/oe-alliance-enigma2) with the OpenWebif plugin installed. +The **Enigma2** {% term integration %} allows you to control a Linux based set-top box which is running [Enigma2](https://github.com/oe-alliance/oe-alliance-enigma2) with the OpenWebif plugin installed. -[OpenWebif](https://github.com/E2OpenPlugins/e2openplugin-OpenWebif) is an open source web interface for Enigma2 based set-top boxes. +[OpenWebif](https://github.com/E2OpenPlugins/e2openplugin-OpenWebif) is an open-source web interface for Enigma2 based set-top boxes. + +### Prerequisites + +Your device needs to have the OpenWebif plugin installed. On most devices it is installed by default, if not, it is available via the Plugins menu within your Enigma2 distribution. + +Please beware that the OpenWebif setting "Require client cert for HTTPS" is not supported. {% include integrations/config_flow.md %} + +{% configuration_basic %} +Host: + description: "The IP address or hostname of your device." +Port: + description: "The port number of the OpenWebif service running. (default: 80)." +Username: + description: "The username, if HTTP(S) authentication is enabled." +Password: + description: "The password, if HTTP(S) authentication is enabled." +Uses an SSL certificate: + description: "Whether HTTPS is enabled." +Verify SSL certificate: + description: "Whether the SSL certificate should be verified." +{% endconfiguration_basic %} + +## Configuration options + +The integration provides the following configuration options: + +{% configuration_basic %} +Turn off to deep standby: + description: "Shuts the device down (called Deep Standby) on turning off the device. **Important**: When the device is in *Deep Standby*, it can no longer be reached! Turning on the device is only possible via one of the following methods: Wake on LAN, Power button on the device, or the Remote control." +Bouquet to use as media source: + description: "Sets the bouquet to use for the source list." +{% endconfiguration_basic %} + +## Entities + +Currently, the following entity is exposed: + +### Media player + +The following actions are supported: + +- Play/Pause +- Channel up and down (using the previous/next track buttons in the media player controls) +- Volume control +- Channel switching via source list + +The bouquet for the source list can be configured via the Configuration options. + +## Data updates + +This integration fetches data from the device every 15 seconds by default. + +## Troubleshooting + +### Getting a 403.6 IP address rejected error on setup + +#### Description + +OpenWebif has a protection by default, so that only devices in the same subnet can connect to the device. + +#### Resolution + +There are two possible solutions to resolve this problem: + +- Enable HTTP(S) authentication (recommended for security) +- Enable the OpenWebif setting "Enable access from VPNs" + +{% note %} +If you choose to enable VPN access without authentication, ensure your network is properly secured as OpenWebif is not designed for publicly facing the internet. +{% endnote %} + +## Remove integration + +This integration follows standard integration removal, no extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/enphase_envoy.markdown b/source/_integrations/enphase_envoy.markdown index 40740524122..d8d840873f1 100644 --- a/source/_integrations/enphase_envoy.markdown +++ b/source/_integrations/enphase_envoy.markdown @@ -42,9 +42,9 @@ This integration does not work with: ## Prerequisites - The Envoy must be configured and commissioned. -- The Envoy must be on your local network with IPV4 connectivity from Home Assistant. +- The Envoy must be on your local network with IPV4 connectivity from Home Assistant. (Also See troubleshooting, [periodic network connection issues](#periodic-network-connection-issues)) - Envoy firmware version 3.9 or newer. -- With Envoy firmware 7 and greater +- With Envoy firmware 7 and greater: - an Enlighten cloud username and password. - Home Assistant 2023.9 or newer. @@ -59,7 +59,8 @@ The configuration of an individual Envoy requires you to enter the following inf Host: description: "The name or IP address of the Envoy to configure.
    Will be pre-filled if the Envoy was auto-discovered" Username: - description: "For firmware version 7.0 and later, enter your Enlighten cloud username
    For firmware before 7.0, enter username *installer* without a password." + description: "For firmware version 7.0 and later, enter your Enlighten cloud username. The Enlighten cloud username (and password) will be used to obtain a 1-year-valid token from the enphase web-site when first configured or upon expiry. +
    For firmware before 7.0, enter username *installer* without a password." Password: description: "For firmware version 7.0 and later, enter your Enlighten cloud password
    For firmware before 7.0, with username *installer*, leave blank." {% endconfiguration_basic %} @@ -75,6 +76,12 @@ Always use a new connection when requesting data from the Envoy: description: "No/Yes
    Some older Envoy firmware may exhibit connection issues when using the default keep-alive connection and report failures. When set, this option disables the use of keep-alive and builds a new connection at each data request. This makes the communication more reliable for these firmware versions. Reported for the Envoy-R, but may apply to other older firmware versions as well." {% endconfiguration_basic %} +## Reconfigure + +This integration supports updating the Envoy configuration through a `reconfigure` menu option. The reconfiguration allows for changing the Envoy IP address, username, and/or password. Use this menu option if your Enlighten credentials or the device's IP address has changed and needs to be manually updated. The latter is typically automatically detected and updated. + +Use this menu option also when an Envoy firmware upgrade requires a switch from local Envoy username/password to token-based authentication with Enlighten username/password (refer to [required manual input](#required-manual-input)). + ## Removing the integration This integration follows standard integration removal. No extra steps are required. @@ -83,87 +90,310 @@ This integration follows standard integration removal. No extra steps are requir ## Capabilities -This integration will offer various sensors depending on the configuration of your Enphase system. Sensors are available for the following: +This integration offers various entities depending on the configuration of your Enphase system. The Envoy can communicate with Enphase IQ micro-inverters, Enphase ACB and IQ batteries, Enphase Ensemble Enpower switch and load shedding relays and Enphase compatible generators. -- Current energy production & consumption -- Historical energy production & consumption -- Power production per-inverter +{% note %} -_Consumption sensors require your Envoy to be properly configured with consumption CT sensors installed._ +- You may know referred product names under other names from the past or future. +- In this documentation, the term SN is used for a device serial-number placeholder. Entities will contain the actual serial-number of the device. +{% endnote %} -### With current transformers +### Solar production data -For Envoy S Metered / IQ Gateway Metered with installed and configured current transformers (CT), additional features are available: +All Envoy models with solar inverters, with or without installed production CT, for all firmware versions, report solar current and historical production data. -- 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 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] +#### Aggregated production data -[^1]: For multiphase systems, the Envoy sums the voltages of the phases. This may be valid for split-phase, but for 3-phase systems, use the individual phases rather than the summed value. -[^2]: If this value is non-zero, consult the diagnostic report of the Envoy and look for `raw_data` - `/ivp/meters` - `statusFlags` for set flags (`production-imbalance` | `negative-production` | `power-on-unused-phase` | `negative-total-consumption`). +The Envoy device reports aggregated data for all connected micro-inverters. -### With batteries +##### Production sensor entities -For Enphase Ensemble systems with the Enpower/IQ System Controller and Encharge/IQ Batteries installed, additional features are available: +- **Envoy SN Current power production**: Current aggregated inverter power production in W. +- **Envoy SN Energy production last seven days**: Energy produced in previous 7 days, not including today's, in Wh, display scaled to kWh. (See known limitations [Energy Incorrect](#energy-incorrect)). This entity is not logged in statistics. +- **Envoy SN Energy production today**: Energy produced since midnight in Wh, default display scaled to kWh. (See known limitations [Late reset](#late-reset), [Energy Incorrect](#energy-incorrect)). +- **Envoy SN Lifetime energy production**: Lifetime energy production in Wh, default display scaled to MWh. (See known limitations [Lifetime reset](#lifetime-reset)). -- 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. ** -- 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 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) +

    + Envoy device +
    Envoy device with solar production entities.
    +
    -For system with both older type ACB batteries and Encharge/IQ Batteries: +When used with [multiphase CT phase data](#ct-aggregate-and-phase-data), disabled phase entities are available as well. -- Sensors for ACB Battery State of Charge in %, battery state (charging, idle, discharging), current available energy in Wh and current power flow in W. -- Sensors for aggregated ACB and Encharge battery status for current State of Charge in %, current available energy in Wh and total battery capacity in Wh. +#### Individual micro-inverter production data -*: 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. +The Envoy reports individual micro-inverter device production data. SN is the micro-inverter serial-number. -**: 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. +##### Sensor entities -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. +- **Inverter SN**: Current power generated by the inverter in W. +- **Inverter SN last reported**: Time when Envoy last received a data update from the inverter. Typical update rate for an inverter to the Envoy is every 5 minutes. This entity is disabled by default for all inverters. -## Envoy authentication requirements +
    + micro-inverter device +
    Micro-inverter device with solar production entities.
    +
    -For newer models running firmware 7 and greater, you will need your Enlighten cloud username and password. The integration will use these credentials to obtain an Envoy access token from the Enlighten cloud. +### House consumption data -For models running firmware 5 and older, use `installer` for the username. No password is required. The integration will automatically detect the `installer` password. +House consumption data requires an Envoy Metered equipped and configured with at least 1 consumption [CT](#current-transformers). -## Enpower load shedding relays +#### Consumption Sensor Entities -The Enphase Enpower has 4 load shedding relays that can be used to control non-essential loads in your home. These have two main modes of operation: +- **Envoy SN Current power consumption**: Current power consumption in W. +- **Envoy SN Lifetime energy consumption**: Lifetime energy consumption in Wh, default display scaled to MWh. +- **Envoy SN Energy consumption last seven days**: Energy consumption in previous 7 days, not including today's, in Wh, display scaled to kWh. (See known limitations [Energy Incorrect](#energy-incorrect)) This entity is not logged in statistics. +- **Envoy SN Energy consumption today**: Energy consumption since midnight in Wh, default display scaled to kWh. (See known limitations [Energy Incorrect](#energy-incorrect)) -### Standard +
    + consumption entities +
    Envoy metered with CT reporting production and consumption entities.
    +
    -When the mode entity is set to standard, you can simply set the state of the relay to be powered or not powered for each mode of operation: on grid, off grid, and on generator. +When used with [multiphase CT phase data](#ct-aggregate-and-phase-data), disabled phase entities are available but not shown. Enable as needed. -### Battery level +### Current Transformers -When the relay mode is set to battery level, the relays will turn on and off based on the remaining battery level of your Encharge batteries. Two number entities are available to control the cutoff and restore levels for the relays. When the battery level drops below the cutoff level, the relays will turn off. When the battery level rises above the restore level, the relays will turn back on. +The Envoy Metered can be equipped with up-to 6 CT. These can be assigned to production, consumption and/or storage measurements in single or multiple phase setups. -## Data updates +The below diagram shows CT installation positions and how they are referred to. -The integration collects data by default every 60 seconds. To customize the collection interval, refer to [defining a custom polling interval](/common-tasks/general/#defining-a-custom-polling-interval). Specify one single entity from the envoy device as target of the action using the `+ choose entity` button. Updating one entity will update all entities of the Envoy and the related devices like the inverters; there is no need to specify multiple or all entities or add (all) inverter entities. When using multiple Envoys, add one entity for each envoy as targets or create separate custom polling intervals with a single entity as needed. +- The production CT measures the energy exchange between Solar production and the switchboard. +- If the consumption CT is installed as **Load only** a.k.a. **total-consumption** it measures energy exchange from the switchboard to the loads/house. +- If the consumption CT is installed as **Load with Solar** a.k.a. **net-consumption**, it measures energy exchange between the switchboard and the grid. +- The storage CT measures the energy exchange between the battery storage and the switchboard. + +
    + ct model +
    Envoy current transformers.
    +
    + +{% note %} +This in no way represents a configuration direction, as actual configuration is driven by local rules, installer designs and Enphase installation guidelines. Variations may exist, based on specific needs or rules. This merely describes a simplified view and naming conventions used in this documentation to clarify integration operation. Refer to [Enphase documentation](https://enphase.com/installers/resources/documentation/communication) for more information. +{% endnote %} + +When an Envoy Metered is equipped with a production CT, the CT data will be used to provide the [aggregated solar production data](#aggregated-production-data). Likewise, the installed consumption CT will be the source for the [house consumption data](#house-consumption-data). + +Either a net-consumption or a total-consumption CT is installed. The Envoy will calculate the data for the other one. + +#### CT Aggregate and phase data + +When using [CT](#current-transformers) in multiphase enabled configurations, both aggregated and individual phase data is available. If only 1 phase is configured, phase data is the same as the aggregated data and no phase entities are created. If more than 1 phase is configured, disabled phase entities for each phase are created, enable them as needed. + +Phase entity names are the names used for the aggregated entities, with the phase name in the post-fix. Phase names are **L1**, **L2**, **L3**. For example, once enabled, [**lifetime energy production**](#solar-production-data) on phase 3 is available as **Envoy SN Lifetime energy production L3**. + +#### Current transformer entities + +CT measure multiple properties of the energy exchange which are available as Envoy device entities. These are all disabled by default, enable them as desired. + +##### Production CT sensor entities + +- **Envoy SN Frequency production CT**: Frequency in Hz. +- **Envoy SN Voltage production CT**: Voltage in V. (see limitations [Summed voltage](#summed-voltage)) +- **Envoy SN Production CT current**: Current in A. +- **Envoy SN Powerfactor production CT**: Powerfactor, ratio of active to apparent power. +- **Envoy SN Metering status production CT**: Status of the metering process: `normal`, `not-metering`, `check-wiring`. +- **Envoy SN Meter status flags active production CT**: Count of CT status flags active. See troubleshooting [CT Active flag count is non-zero](#ct-active-flag-count-is-non-zero) when non-zero. + +##### Net-consumption CT sensor entities + +- **Envoy SN Frequency net consumption CT**: Frequency in Hz . +- **Envoy SN Voltage net consumption CT**: Voltage in V. (see limitations [Summed voltage](#summed-voltage) +- **Envoy SN net consumption CT current**: Current in A. +- **Envoy SN Powerfactor net consumption CT**: Power factor, ratio of active to apparent power. +- **Envoy SN Metering status net consumption CT**: Status of the metering process: `normal`, `not-metering`, `check-wiring`. +- **Envoy SN Meter status flags active net consumption CT**: Count of CT status flags active. See troubleshooting [CT Active flag count is non-zero](#ct-active-flag-count-is-non-zero) when non-zero. + +##### Storage CT sensor entities + +- **Envoy SN Frequency storage CT**: Frequency in Hz. +- **Envoy SN Voltage storage CT**: Voltage in V. (see limitations [Summed voltage](#summed-voltage) +- **Envoy SN storage CT current**: Current in A. +- **Envoy SN Powerfactor storage CT**: Power factor, ratio of active to apparent power. +- **Envoy SN Metering status storage CT**: Status of the metering process: `normal`, `not-metering`, `check-wiring`. +- **Envoy SN Meter status flags active storage CT**: Count of CT status flags active. See troubleshooting [CT Active flag count is non-zero](#ct-active-flag-count-is-non-zero) when non-zero. + +For storage CT energy entities refer to [battery sensor](#aggregated-iq-battery-sensor-entities) description. + +### Grid sensor entities + +When the Envoy Metered is equipped with a [net-consumption CT](#current-transformers), entities for Grid import and export are available. + +- **Envoy SN Current net power consumption**: Current power exchange from (positive) / to (negative) the grid in W, default display in kW. +- **Envoy SN Lifetime net energy consumption**: Lifetime energy consumed / imported from the grid in Wh, default display in MWh. +- **Envoy SN Lifetime net energy production**: Lifetime energy produced / exported to the grid in Wh, default display in MWh. + +When used with [multiphase CT phase data](#ct-aggregate-and-phase-data), disabled phase entities are available as well. + +#### Grid Balanced import/export sensor entities + +When the Envoy Metered is equipped with a [total-consumption CT](#current-transformers) instead of a [net-consumption CT](#current-transformers), no individual entities for Grid import and export are available, as these are not measured. Instead, the balance (difference) of grid import and export is available in a single entity, disabled by default, enable as desired. + +- **Envoy SN balanced net power consumption**: Current power exchange from (positive) / to (negative) the grid in W, default display in kW. + (This is the same value as [Envoy SN Current net power consumption](#grid-sensor-entities) when using a net-consumption CT.) +- **Envoy SN Lifetime balanced net energy consumption**: Lifetime energy balance (difference) of imported and exported grid energy in Wh, default display in kWh. + +When used with [multiphase CT phase data](#ct-aggregate-and-phase-data), disabled phase entities are available as well. + +### Battery Storage data + +Enphase battery systems of multiple generations and configurations can provide integration entity data. + +- **AC-Batteries**: first generation battery setup, no longer in production. +- **IQ Batteries**: current Enphase battery models. + +The batteries can be implemented in stand-alone configuration or as part of Enphase Ensemble systems with the Enpower/IQ System Controller. + +#### IQ battery data + +##### Aggregated IQ battery sensor entities + +Aggregated IQ battery data includes all installed IQ Batteries. + +- **Envoy SN Battery**: Current aggregated state of charge in % +- **Envoy SN Available battery energy**: Current aggregated IQ battery energy content in Wh +- **Envoy SN Battery capacity**: Aggregated maximum IQ battery energy content in Wh +- **Envoy SN Reserve battery level**: Configured aggregated IQ Battery backup state of charge in % +- **Envoy SN Reserve battery energy**: Configured aggregated IQ battery backup energy content in Wh + +If a [storage CT](#storage-ct-sensor-entities) is installed: + +- **Envoy SN Current battery discharge**: Current power in/out of the battery in W. +- **Envoy SN Lifetime battery energy discharged**: Lifetime energy discharged from the battery in Wh, default display format MWh. +- **Envoy SN Lifetime battery energy charged**: Lifetime energy charged in the battery in Wh, default display format MWh. + +
    + aggregated iq battery +
    Envoy Aggregated IQ battery Sensor entities with no storage CT nor Enpower installed.
    +
    + +{% note %} +If an Enpower device is installed, then **Charge from grid**, **Reserve battery level**, and **Storage mode** are available as [Enpower device entities](#enpower-binary-sensor-entities) instead of Envoy device entities. +{% endnote %} + +#### Individual IQ battery data + +For each IQ Battery, an Encharge device is created, linked to the Envoy parent device. Each encharge devices offers individual battery sensors. + +##### Individual IQ battery sensor entities + +- **Encharge SN Battery**: Current state of charge of the battery in % +- **Encharge SN Power**: Current power in W +- **Encharge SN Apparent Power**: Current apparent power in VA +- **Encharge SN Temperature**: Current temperature in degrees C or F, based on your localization. +- **Encharge SN Last reported**: Time when Envoy received last update from the battery. + +##### Individual IQ battery binary sensor entities + +- **Encharge SN Communicating**: Communication status of encharge battery, Connected / Disconnected. This is a diagnostics entity. +- **Encharge SN DC Switch**: DC Switched off status of encharge battery, On / Off. This is a diagnostics entity. + +
    + iq battery +
    Envoy Encharge IQ battery sensor entities.
    +
    + +#### AC-battery data + +No individual AC-battery data is available, only aggregated AC-battery data for all AC-batteries. + +##### AC-battery sensor entities + +- **ACB SN Battery**: Current AC-battery state of charge in % +- **ACB SN Battery state**: AC-battery state: charging, idle, discharging +- **ACB SN Power**: Current AC-battery power in W +- **Envoy SN Available ACB battery energy**: Current AC-battery energy content in Wh + +
    + acb battery +
    Envoy AC-battery sensor entities.
    +
    + +##### Aggregated IQ and AC battery sensor entities + +If both IQ and AC batteries are used, aggregated battery data for all installed IQ batteries and AC batteries is available. + +- **Envoy SN Aggregated Battery SOC**: Overall aggregated battery state of charge in % +- **Envoy SN Aggregated Available battery energy**: Overall aggregated battery energy content in Wh +- **Envoy SN Aggregated Battery capacity**: Overall aggregated maximum battery energy content in Wh + +The below figure shows the 3 aggregated entities along with the [AC-battery energy](#ac-battery-sensor-entities) and 3 of the [IQ Battery aggregate](#aggregated-iq-battery-sensor-entities) values. + +
    + aggregated acb iq battery +
    Envoy aggregated ACB and IQ battery sensor entities.
    +
    + +### Enpower data + +Data for an installed Enphase Enpower off-grid enabling switch is available in various entities for an Enpower device. + +#### Enpower binary sensor entities + +- **Enpower SN Grid status**: status of the grid. + +#### Enpower number entities + +- **Enpower SN Reserve battery level**: reserve battery level to maintain for outages in %. Changing the value, on the UI or in an [action](#action-numberset_value), will update the setting in the Envoy. Also see limitations, [No battery controls](#no-battery-controls). + +#### Enpower select entities + +- **Enpower SN Storage mode**: Current configured storage mode, `Full backup`, `Self consumption`, `Savings mode`. Changing the selection, in the UI or in an [action](#action-selectselect), will update the setting in the Envoy. Also see limitations, [No battery controls](#no-battery-controls). + +#### Enpower sensor entities + +- **Enpower SN Temperature**: Current temperature in degrees C or F, based on your localization. +- **Enpower SN Last reported**: Time when Envoy received last update from the enpower device. +- **Enpower SN Communicating**: Communication status of enpower switch, Connected / Disconnected. This is a diagnostics entity. + +#### Enpower switch entities + +- **Enpower SN Charge from grid**: Allow or disallow charging Encharge/IQ batteries from grid when a charge schedule is active. Changing the switch, in the UI or in an [action](#action-switchturn_onswitchturn_offswitchtoggle), will update the setting in the Envoy. If no charge schedule is active, changing the setting will not have an immediate effect. Also see limitations, [No battery controls](#no-battery-controls). +- **Enpower SN Grid enabled**: Enable or disable grid connection. Note that the Enpower has a slight delay built-in between receiving these commands and actually switching the system on or off grid. + +
    + envoy enpower +
    Envoy Enpower entities.
    +
    + +{% note %} +If no Enpower is installed, then **Charge from grid**, **Reserve battery level**, and **Storage mode** are available as [Envoy device entities](#aggregated-iq-battery-data) instead of Enpower device entities. +{% endnote %} + +### Enpower load shedding relays + +With the Enpower/IQ System Controller installed, entities for the state and control of the Enpower's four load-shedding relays are available. In battery installations without load-shedding and off-grid functionality, used in many EU countries, these sensors and switches are not available. + +The Enphase Enpower has 4 load shedding relays (volt-free contacts, often referred to as dry-contacts) that can be used to control non-essential loads in your home. These have two main modes of operation: + +- **Standard**: When the mode entity is set to standard, you can simply set the state of the relay to be powered or not powered for each mode of operation: on grid, off grid, and on generator. + +- **Battery level**: When the relay mode is set to battery level, the relays will turn on and off based on the remaining battery level of your Encharge IQ batteries. Two number entities are available to control the cutoff and restore levels for the relays. When the battery level drops below the cutoff level, the relays will turn off, removing power from attached loads. When the battery level rises above the restore level, the relays will turn back on and restore power to attached loads. + +The names of entities and devices are derived from the load_name configured in the Enpower device. + +#### Dry-contact number entities + +- **LOAD_NAME cutoff battery level**: battery level below which relay will turn off when in `Battery level` mode. +- **LOAD_NAME restore battery level**: battery level above which the relay will turn back on when in `Battery level` mode. + +#### Dry-contact select entities + +- **LOAD_NAME mode**: dry-contact operational mode: `standard` or `battery` +- **LOAD_NAME Grid action**: dry-contact on grid action: `Powered`, `Not powered`, `Follow schedule`, `None` +- **LOAD_NAME Micro-grid action**: dry-contact on micro-grid action: `Powered`, `Not powered`, `Follow schedule`, `None` +- **LOAD_NAME Generator action**: dry-contact on generator action: `Powered`, `Not powered`, `Follow schedule`, `None` + +
    + envoy dry-contact +
    Envoy Enpower dry-contact entities.
    +
    + +## Data polling interval + +All data is collected in one coordinated collection cycle and sourced from a limited set of endpoints on the Envoy. For example, three different values sourced from the same endpoint are not pulled in three different requests but provided from the same single request. This method minimizes the number of requests to the Envoy. The local REST API of the Envoy is used. Only when the 1-year valid token is to expire, 1 month before due data, a new token is requested from the Enphase Enlighten website. + +The integration collects data for all entities by default every 60 seconds. To customize the collection interval, refer to [defining a custom polling interval](/common-tasks/general/#defining-a-custom-polling-interval). Specify one single entity from the envoy device as target of the action using the `+ choose entity` button. Updating one entity will update all entities of the Envoy and the related devices like the inverters; there is no need to specify multiple or all entities or add (all) inverter entities. When using multiple Envoys, add one entity for each envoy as targets or create separate custom polling intervals with a single entity as needed. Envoy installations without installed CT, collect individual solar inverter data every 5 minutes. This collection does not occur for each inverter at the same time in the 5-minute period. Shortening the collection interval will at best show updates for individual inverters quicker, but not yield more granular data. @@ -173,21 +403,176 @@ With installed CT, data granularity in This integration supports updating the Envoy configuration through a `reconfigure` menu option. The reconfiguration allows for changing the Envoy IP address, username, and/or password. Use this menu option if your Enlighten credentials or the device's IP address has changed and needs to be manually updated. The latter is typically automatically detected and updated. -Use this menu option also when an Envoy firmware upgrade requires a switch from local Envoy username/password to token-based authentication with Enlighten username/password (refer to [authentication requirements](#envoy-authentication-requirements)). +Use this menu option also when an Envoy firmware upgrade requires a switch from local Envoy username/password to token-based authentication with Enlighten username/password (refer to [required manual input](#required-manual-input)). + +## Firmware updates + +The firmware version is read from the envoy when the configuration entry is loaded. The firmware version is then used in the process of determining capabilities and required authorization methods. The firmware version is available as the `sw_version` attribute of the configuration entry and shown on the device view of the envoy. + +Every 4 hours, the actual firmware version in the Envoy is compared to the known one. If the actual version differs, the configuration entry is reloaded to effect any needed configuration changes. If the moment of the firmware update is known, a manual reload on the envoy configuration entry can be done to achieve the same. + +The firmware version is not available as an entity, but rather as an attribute of the envoy. To use the firmware in automation, scripts or templates, use below example with any envoy entity. + +{% raw %} + +```yaml +{{device_attr(device_id('sensor.envoy_SN_current_power_production'),'sw_version')}} +``` + +{% endraw %} ## Energy dashboard -This integration provides several values suitable for the energy dashboard: +This integration provides several entities suitable for the energy dashboard. -- For `Solar production`, use the `Envoy Lifetime energy production` entity. -- For `Grid consumption`, use the `Envoy Lifetime net energy consumption` entity.[^3] -- For `Return to grid`, use the `Envoy Lifetime net energy production` entity.[^3] -- For `Energy going into the battery`, use the the `Envoy Lifetime battery energy charged` entity.[^5] -- For `Energy coming out off the battery`, use the the `Envoy Lifetime battery energy discharged` entity.[^5] +### Solar panels -[^3]: Only applies when using Envoy S Metered / IQ Gateway Metered with installed and configured CT. +For **Solar production**, use the **Envoy SN Lifetime energy production** entity. Overall this has proven to be more stable as the daily value reported by the Envoy. (See known limitations [Late reset](#late-reset), [Energy Incorrect](#energy-incorrect)). -[^5]: Only applies when using Envoy S Metered / IQ Gateway Metered / IQ Combiner with installed and configured storage / battery CT. +### Electricity grid + +Whether there is data available to use with the electricity grid depends on the installed CT, if any. Also, see Limitations, [Balancing grid meter](#balancing-grid-meter). + +#### Electricity grid with net-consumption CT + +With a [net-consumption CT](#grid-sensor-entities) installed, both grid consumption and return to grid data is available. + +- For **Grid consumption**, use the **Envoy SN Lifetime net energy consumption** entity. +- For **Return to grid**, use the **Envoy SN Lifetime net energy production** entity. + +#### Electricity grid with total-consumption CT + +With a [total-consumption CT](#grid-balanced-importexport-sensor-entities) installed, only the balanced grid import-export value is available. This value is not suited for direct use with the energy dashboard. It will require some templating to split the value into an import and export value. + +{% details "Concept to split balanced Grid value into individual import-export values" %} + +The concept is to track value changes of the **Envoy SN Lifetime balanced net energy consumption** entity, add positive changes to a grid_import entity and add negative changes to a grid_export entity. + +{% raw %} + +```yaml + +- trigger: + - platform: state + entity_id: sensor.envoy_sn_lifetime_balanced_net_energy_consumption + + sensor: + - name: "Grid import" + unique_id: calculated_envoy_grid_import + unit_of_measurement: "Wh" + state: "{{ this.state | int(0) + ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | max }}" + device_class: energy + state_class: total_increasing + - name: "Grid export" + unique_id: calculated_envoy_grid_export + unit_of_measurement: "Wh" + state: "{{ this.state | int(0) - ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | min }}" + device_class: energy + state_class: total_increasing +``` + +{% endraw %} + +The above example does not address handling `unavailable` or `unknown` states, value changes over Home Assistant outages nor changing UOM to a preferred one. Examples for these exist in various community topics. + +{% tip %} +Alternatively, this can be done by splitting the **Envoy SN balanced net power consumption** into power import and export and two Riemann sum integral helpers to calculate energy from the power values. +{% endtip %} + +{% enddetails %} + +### Home battery storage + +Whether there is data available to use with the electricity grid depends on the installed storage CT, if any. + +#### Home battery storage with storage CT + +With a [storage CT](#aggregated-iq-battery-sensor-entities) installed, data for both Energy coming out and going into the battery is available. + +- For **Energy going into the battery**, use the **Envoy SN Lifetime battery energy charged** entity. +- For **Energy coming out of the battery**, use the **Envoy SN Lifetime battery energy discharged** entity. + +#### Home battery storage without storage CT + +Without a [storage CT](#aggregated-iq-battery-sensor-entities) installed, only the current Power in and out of individual batteries, or the current aggregated battery energy content is available. These values are not suited for direct use with the energy dashboard. It will require some templating to split the value into an import and export values. + +##### Home battery storage data using battery power + +Battery power is the current power flow in or out of an individual battery. Using the summed Power values of all batteries, the result needs to be split in 2 entities, representing total power in and power out. Next, each entity needs to be integrated into energy, using two Riemann sum integral helpers. The resulting data can be used for Energy going into the battery and Energy coming out of the battery. + +{% details "Concept to split Battery power value into individual import-export power values" %} + +The concept is to first sum all battery Power values using a combine state helper. Then track value changes of the summed value entity, add positive changes to a battery_charge power entity and add negative changes to a battery_discharge power entity. + +{% raw %} + +```yaml + +- trigger: + - platform: state + entity_id: sensor.envoy_sn_summed_battery_power_entity + + sensor: + - name: "Battery charge power" + unique_id: calculated_envoy_battery_charge_power + unit_of_measurement: "W" + state: "{{ this.state | int(0) + ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | max }}" + device_class: power + state_class: measurement + - name: "Battery discharge power" + unique_id: calculated_envoy_battery_discharge_power + unit_of_measurement: "W" + state: "{{ this.state | int(0) - ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | min }}" + device_class: power + state_class: measurement +``` + +{% endraw %} + +The above example does not address handling `unavailable` or `unknown` states, value changes over Home Assistant outages nor conversion losses. + +{% enddetails %} + +##### Home battery storage data on the available battery energy + +Changes in the Available battery energy are a result from Energy going in or out of the battery. Splitting these energy changes into 2 entities, one tracking positive changes, one the negative changes, results in data that can be used for Energy going into the battery and Energy coming out off the battery. This method does not account for conversion losses as Energy content changes do not exactly match actual energy flow in and out of the battery. + +{% details "Concept to split Available battery energy value into individual import-export values" %} + +The concept is to track value changes of the **Envoy SN Available battery energy** entity, add positive changes to a battery_charge entity and add negative changes to a battery_discharge entity. + +{% raw %} + +```yaml + +- trigger: + - platform: state + entity_id: sensor.envoy_sn_available_battery_energy + + sensor: + - name: "Battery charge" + unique_id: calculated_envoy_battery_charge + unit_of_measurement: "Wh" + state: "{{ this.state | int(0) + ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | max }}" + device_class: energy + state_class: total_increasing + - name: "Battery discharge" + unique_id: calculated_envoy_battery_discharge + unit_of_measurement: "Wh" + state: "{{ this.state | int(0) - ([0, (trigger.to_state.state | int(0) - trigger.from_state.state | int(0))] | min }}" + device_class: energy + state_class: total_increasing +``` + +{% endraw %} + +The above example does not address handling `unavailable` or `unknown` states, value changes over Home Assistant outages nor conversion losses. + +{% enddetails %} + +### Individual devices + +Although not a replacement for individual energy or power measurement devices, with multiphase CT installed, [energy consumption for phases](#ct-aggregate-and-phase-data) is available. These can be used for individual devices, if of interest. ## Actions @@ -227,7 +612,7 @@ This action changes the setting for the Enpower `Reserve battery level`. | Data attribute | Optional | Description | | - | - | - | -| `entity_id` | no | Name(s) of entities, e.g., `number.enpower_12345678901001_reserve_battery_level`. | +| `entity_id` | no | Name(s) of entities. For example, `number.enpower_12345678901001_reserve_battery_level`. | | `value` | no | The target value between 0 and 100 to set Enpower reserve battery level to. | Example: @@ -276,12 +661,75 @@ Technically `select.first`, `select.last`, `select.previous`, `select.next` are ## Know issues and limitations -- [Envoy firmware](https://enphase.com/installers/resources/documentation/communication?&f[0]=document%3A217) versions come with changing behavior, features and issues. Firmware is pushed to the Envoy by Enphase, while 'not always communicated in detail upfront'. This may result in sudden changes in the Envoy behavior and is always accompanied by an outage while Envoy is being updated. -- As of Envoy firmware 8.2.4225, the Envoy no longer supports setting battery modes, enabling/disabling charging from the grid, or changing reserve battery level through the local REST API used by HA. Until a resolution is found, you will need to use the Enphase APP to control these. +### Firmware changes + +[Envoy firmware](https://enphase.com/installers/resources/documentation/communication?&f[0]=document%3A217) versions come with changing behavior, features, and potential issues. Firmware is pushed to the Envoy by Enphase, while 'not always communicated in detail upfront'. This may result in sudden changes in the Envoy behavior and is always accompanied by an outage while Envoy is being updated. + +### No battery controls + +As of Envoy firmware 8.2.4225, the Envoy no longer supports the following operations through the local REST API used by Home Assistant: + +- Setting battery modes +- Enabling/disabling charging from the grid +- Changing reserve battery level + +Until a resolution is found, you must use the Enphase App to control these features. + +### Late reset + +When using Envoy Metered with CT, not all firmware versions reset 'Energy production today' at midnight. Delays of up to 15 minutes have been reported. In this case, best use a utility meter with the `Lifetime energy production` entity for daily reporting. + +### Energy incorrect + +When using Envoy Metered with CT + +- not all firmware versions report `Energy production today` and/or `Energy consumption today` correctly. Zero data and unexpected spikes have been reported. In this case, best use a utility meter with the `Lifetime energy production` or `Lifetime energy consumption` entity for daily reporting. +- not all firmware versions report `Energy production last seven days` and/or `Energy consumption last seven days` correctly. Zero and unexpected values have been reported. +- `Energy production today` has been reported not to reset to zero at the start of the day. Instead, it resets to a non-zero value that gradually increases over time. This issue has also been reported as starting suddenly overnight. For daily reporting, it is recommended to use a utility meter with the `Lifetime energy production` entity. + +{% details "History examples for Today's energy production value not resetting to zero" %} + +
    + envoy today non zero reset +
    Envoy Today's energy production value exhibits a daily reset to an ever increasing non-zero value.
    +
    + +
    + envoy today step change +
    Envoy Today's energy production value exhibits a sudden onset of non-zero resets.
    +
    +{% enddetails %} + +### Lifetime reset + +Envoy Metered without installed CT, running older firmware versions, reportedly resets **Lifetime energy production** to 0 when reaching 1.2 MWh. For use with the energy dashboard, the reset is not an issue. In a recent firmware version 8.x.x the reset is solved, but results in a one-time step change to the full lifetime value. This has impact on the energy dashboard, it can be solved by setting the statistics value for that moment to 0 in [Developer Tools: Statistics](/docs/tools/dev-tools/#statistics-tab) + +{% details "History example for Envoy Lifetime energy production value reset" %} + +
    + envoy dry-contact +
    Envoy Lifetime energy production value reset.
    +
    + +{% enddetails %} + +### Summed Voltage + +The Envoy Metered in multiphase setup, sums the voltages of the phases measured on the CT for the aggregated data. This may be valid for split-phase, but for 3-phase systems, use the individual phases rather than the summed value. + +### Balancing grid meter + +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. This other phase pulls the missing 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 net-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. ## Troubleshooting -- The Envoy should not be both on your local LAN and local Wi-Fi at the same time. This may cause auto-discovery to switch back and forth between the interfaces resulting in brief outages every 30 minutes. If you experience these frequent brief outages, make sure only 1 interface is used. +### Periodic network connection issues + +If you experience periodic connection issues, ensure the Envoy is connected to only one interface (either Ethernet OR Wi-Fi, not both). The Envoy should not be both on your local LAN (Ethernet) and local Wi-Fi simultaneously. Having both connections active can cause auto-discovery to alternate between interfaces, resulting in connection interruptions approximately every 30 minutes. + +### CT Active flag count is non-zero + +The **CT active flag count** value shows the number of CT status flags that are raised. In a normal state, the value of **CT active flag count** is zero. If the value is non-zero, consult the [diagnostic](#diagnostics) report of the Envoy and look for `raw_data` - `/ivp/meters` - `statusFlags` for set flags, one or more from (`production-imbalance` | `negative-production` | `power-on-unused-phase` | `negative-total-consumption`). Their somewhat descriptive names may be an indication of installation issues. ### Debug logs and diagnostics diff --git a/source/_integrations/environment_canada.markdown b/source/_integrations/environment_canada.markdown index bd450f2e51e..6e28177f92b 100644 --- a/source/_integrations/environment_canada.markdown +++ b/source/_integrations/environment_canada.markdown @@ -36,8 +36,7 @@ The integration will create the entities listed below. Some of the entities are ### Weather -- Current conditions and daily forecast -- Current conditions and hourly forecast (disabled by default) +- Current conditions, daily forecast, and hourly forecast ### Camera @@ -108,9 +107,13 @@ Not all weather stations provide a complete set of weather/sensor data. The data ## Template sensors -The configuration snippet below adds a useful [template sensors](/integrations/template/) showing the current "feels like" temperature among air temperature, humidex, and wind chill. +The configuration snippets below add [template sensors](/integrations/template/). See the [weather integration](/integrations/weather/) for additional examples. -Replace `NAME` with the name used to configure your integration. +Replace `NAME` with the weather entity used in your configuration. + +### Feels Like + +A sensor that takes into account the humidex or wind chill for what the temperature feels like. {% raw %} @@ -132,9 +135,48 @@ template: {% endraw %} +### Additional Forecast Data + +The configuration snippet below adds a template sensor containing the current forecast information as attributes and the text summary of the forecast for the current day. + +{% raw %} + +```yaml +- trigger: + - platform: time_pattern + hours: "/4" + - platform: homeassistant + event: start + - platform: event + event_type: event_template_reloaded + action: + - service: environment_canada.get_forecasts + target: + entity_id: weather.ottawa_kanata_orleans_forecast + response_variable: forecasts + sensor: + - name: Weather Forecast Daily + unique_id: weather_forecast_daily + state: "{{ states('weather.NAME') }}" + attributes: + daily: "{{ forecasts['weather.NAME']['daily_forecast'] }}" + hourly: "{{ forecasts['weather.NAME']['hourly_forecast'] }}" + summary: "{{ forecasts['weather.NAME']['daily_forecast'][0]['text_summary'] }}" + temperature_unit: "{{ state_attr('weather.NAME', 'temperature_unit') }}" +``` + +{% endraw %} ## Actions +### Action `environment_canada.get_forecasts` + +Get the raw forecast data from Environment Canada. Returns both the `daily_forecast` and the `hourly_forecast` data. + +| Data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | Weather entity to get forecast for. + ### Action `environment_canada.set_radar_type` Sets the type of radar to retrieve for the camera. diff --git a/source/_integrations/esera_onewire.markdown b/source/_integrations/esera_onewire.markdown index 5ede478d2e5..a765ea23837 100644 --- a/source/_integrations/esera_onewire.markdown +++ b/source/_integrations/esera_onewire.markdown @@ -15,9 +15,11 @@ ha_config_flow: true ha_platforms: - binary_sensor - diagnostics + - select - sensor - switch ha_iot_class: Local Polling +ha_zeroconf: true --- {% include integrations/supported_brand.md %} diff --git a/source/_integrations/esphome.markdown b/source/_integrations/esphome.markdown index a4caee5af55..11c0552bdc1 100644 --- a/source/_integrations/esphome.markdown +++ b/source/_integrations/esphome.markdown @@ -18,6 +18,7 @@ ha_domain: esphome ha_zeroconf: true ha_platforms: - alarm_control_panel + - assist_satellite - binary_sensor - button - camera @@ -94,3 +95,18 @@ sensor: ``` The entity will be named `Temperature` and will default to having an entity_id of `sensor.temperature`. + +## Obtaining logs from the device + +1. To have the device send logs to Home Assistant, in the [options flow](#options), enable `Subscribe to logs from the device`. + - They are logged under the `homeassistant.components.esphome` logger at the equivalent level. + +2. To adjust the logging level, there are two options: + - enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), + - or use the [Developer Tools](/docs/tools/dev-tools/#actions-tab) to call the [`logger.set_level`](/integrations/logger/#action-set_level) action to specify the desired level: + + ```yaml + action: logger.set_level + data: + homeassistant.components.esphome: debug + ``` diff --git a/source/_integrations/event.mqtt.markdown b/source/_integrations/event.mqtt.markdown index 7393e23030c..07f0ae45700 100644 --- a/source/_integrations/event.mqtt.markdown +++ b/source/_integrations/event.mqtt.markdown @@ -42,7 +42,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -51,7 +51,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -142,7 +142,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -186,7 +186,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value and render it to a valid JSON event payload. If the template throws an error, the current state will be used instead." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value and render it to a valid JSON event payload. If the template throws an error, the current state will be used instead." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown index 8832c7c3461..29b117987ca 100644 --- a/source/_integrations/fan.mqtt.markdown +++ b/source/_integrations/fan.mqtt.markdown @@ -49,7 +49,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -58,7 +58,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -66,7 +66,7 @@ availability_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -149,7 +149,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -171,7 +171,7 @@ optimistic: type: boolean default: "`true` if no state topic defined, else `false`." direction_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `direction_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `direction_command_topic`. required: false type: template direction_command_topic: @@ -183,11 +183,11 @@ direction_state_topic: required: false type: string direction_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the direction." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the direction." required: false type: template oscillation_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `oscillation_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `oscillation_command_topic`. required: false type: template oscillation_command_topic: @@ -199,7 +199,7 @@ oscillation_state_topic: required: false type: string oscillation_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the oscillation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the oscillation." required: false type: template payload_available: @@ -243,7 +243,7 @@ payload_reset_preset_mode: type: string default: '"None"' percentage_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `percentage_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `percentage_command_topic`. required: false type: template percentage_command_topic: @@ -255,7 +255,7 @@ percentage_state_topic: required: false type: string percentage_value_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `percentage` value from the payload received on `percentage_state_topic`. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `percentage` value from the payload received on `percentage_state_topic`. required: false type: template platform: @@ -263,7 +263,7 @@ platform: required: true type: string preset_mode_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `preset_mode_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `preset_mode_command_topic`. required: false type: template preset_mode_command_topic: @@ -275,7 +275,7 @@ preset_mode_state_topic: required: false type: string preset_mode_value_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `preset_mode` value from the payload received on `preset_mode_state_topic`. required: false type: template preset_modes: @@ -308,7 +308,7 @@ state_topic: required: false type: string state_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the state." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the state." required: false type: template unique_id: diff --git a/source/_integrations/filter.markdown b/source/_integrations/filter.markdown index fc3af0bc185..3e619cfc8e4 100644 --- a/source/_integrations/filter.markdown +++ b/source/_integrations/filter.markdown @@ -11,6 +11,7 @@ ha_quality_scale: internal ha_codeowners: - '@dgomes' ha_domain: filter +ha_config_flow: true ha_platforms: - sensor ha_integration_type: helper @@ -27,7 +28,38 @@ The `filter` {% term integration %} enables sensors that process the states of o

    -## Configuration +{% include integrations/config_flow.md %} + +{% note %} +The UI configuration only supports setting one filter. For more advanced configurations where multiple filters are needed, please use the YAML configuration option to configure your filter sensor. +{% endnote %} + +Further information about these configuration options can be found under the [YAML configuration](#yaml-configuration) + +{% configuration_basic %} +Name: + description: The name the sensor should have. +Entity: + description: The entity that provides the input. Only `sensor` entities are supported. +Filter: + description: Algorithm to be used to filter data. Available filters are "Lowpass", "Outlier", "Range", "Throttle", "Time throttle" and "Moving Average (Time based)". +Precision: + description: Defines the precision of the filtered state. +Window size: + description: Size of the window of previous states. Time-based filters require a time period, while other filters require an integer. +Time constant: + description: Loosely relates to the amount of time it takes for a state to influence the output. +Radius: + description: Band radius from median of previous states. +Type: + description: Defines the type of Simple Moving Average. +Lower bound: + description: Lower bound for filter range. +Upper bound: + description: Upper bound for filter range. +{% endconfiguration_basic %} + +## YAML Configuration To enable Filter Sensors 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/flexit_bacnet.markdown b/source/_integrations/flexit_bacnet.markdown index 09fcc2b778f..e1639f5da83 100644 --- a/source/_integrations/flexit_bacnet.markdown +++ b/source/_integrations/flexit_bacnet.markdown @@ -17,12 +17,15 @@ ha_codeowners: - '@lellky' - '@piotrbulinski' ha_config_flow: true +ha_quality_scale: silver --- Integrates [Flexit](https://www.flexit.no/en/) Nordic series air handling unit into Home Assistant. ## Prerequisites +Your Flexit device should be equipped with an ethernet port, and no additional modules should be required. This integration communicates with the BACnet protocol over Ethernet. + To configure the integration, you need to obtain the IP address and Device ID for the unit. 1. Open the Flexit Go app on your mobile. @@ -32,6 +35,15 @@ To configure the integration, you need to obtain the IP address and Device ID fo 5. Go to **More** > **Installer** > **Communication** > **BACnet settings**. 6. Note down the **IP address** and **Device ID**. +{% include integrations/config_flow.md %} + +{% configuration_basic %} +IP address: + description: "The IP address of your Flexit Nordic device." +Device ID: + description: "The Device ID of your Flexit Nordic device. This is usually 2." +{% endconfiguration_basic %} + ## Platforms This integration supports the following platforms. @@ -74,9 +86,16 @@ The integration adds entities for setting setpoints for the fan in the respectiv - High - Cooker hood +The integration adds entities for setting remaining time in minutes for: + + - Fireplace mode runtime (in minutes) + ### Switch -The integration adds an entity for a switch called _Electric heater_ that controls the heating element in the unit. +The integration adds the following switches: + +- _Electric heater_ that controls the heating element in the unit. +- _Fireplace mode_ that enables or disables the Fireplace mode. ### A note about shutting down the device @@ -88,4 +107,12 @@ If you need to shut down the unit, make sure to take all necessary precautions, Furthermore, Flexit recommends unplugging the unit from the power socket before replacing a filter. To prevent damage, always initiate a controlled shutdown from the control panel (or, in the future, from an action in Home Assistant) before unplugging the device. -{% include integrations/config_flow.md %} +## Data updates + +The integration {% term polling polls %} data from the Flexit device every 60 seconds by default. This interval is not configurable. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/flexom.markdown b/source/_integrations/flexom.markdown index 54f4abe1177..33c82c7c898 100644 --- a/source/_integrations/flexom.markdown +++ b/source/_integrations/flexom.markdown @@ -24,11 +24,6 @@ ha_supporting_integration: Overkiz ha_release: 2022.2 ha_codeowners: - '@imicknl' - - '@vlebourl' - - '@tetienne' - - '@nyroDev' - - '@tronix117' - - '@alexfp14' ha_config_flow: true ha_platforms: - alarm_control_panel diff --git a/source/_integrations/flick_electric.markdown b/source/_integrations/flick_electric.markdown index c1e11e3fe44..91928e6309d 100644 --- a/source/_integrations/flick_electric.markdown +++ b/source/_integrations/flick_electric.markdown @@ -18,10 +18,107 @@ ha_integration_type: service {% include integrations/config_flow.md %} +{% configuration_basic %} +Username: + description: "Username used to log into Flick Electric." +Password: + description: "Password used to log into Flick Electric." +Client ID: + description: "Client ID to authenticate (see below note)." +Client Secret: + description: "Client Secret to authenticate (see below note)." +Account: + description: "Address of the account to add (required when user has multiple active accounts)." +{% endconfiguration_basic %} + {% note %} -The configuration uses the client ID and secret used by the app at the time of release. If this stops working, you can find the new ones by using a MITM proxy with the mobile app. The app will call `https://api.flick.energy/identity/oauth/token` with the `client_id` and `client_secret`. +For most users, Client ID/Secret can be left blank. -You can then use these values during the configuration. +Home Assistant by default uses the client ID and secret from the Flick Electric mobile app at the time of release. + +If this stops working, you can find the new ones by using a MITM proxy with the mobile app. The app will call `https://api.flick.energy/identity/oauth/token` with the `client_id` and `client_secret`. {% endnote %} + +## Supported functionality + +The integration provides a `sensor` entity with the power price for the current time interval. + +The attributes of the entity have a breakdown of the pricing components, such as `generation` and `network` charges. + +{% note %} + +The power price shown is in cents, and is *excluding GST*. You can customize this by creating a template sensor: + +1. Go to +{% my helpers title="**Settings** > **Devices** & **Services** > **Helpers**" %} and click the add button; +2. Choose the **{% my config_flow_start domain="template" title="Template" %}** option +3. Select **Add a template sensor**. + +{% raw %} + +To add GST: + +- **State template**: `{{ states.sensor.flick_power_price * 1.15 }}` +- **Unit of measurement**: `¢/kWh` + +To convert to dollars: + +- **State template**: `{{ states.sensor.flick_power_price / 100 }}` +- **Unit of measurement**: `$/kWh` + +{% endraw %} + +{% endnote %} + +## Use cases + +This integration can be used as part of an automation, for example to turn on/off appliances automatically. + +## Example automations + +{% details "Turn off the heat pump when price is above 40¢/kWH" %} + +{% raw %} + +```yaml +alias: "Turn off expensive heat pump" +description: "Turn off the heat pump when price is above 40¢/kWH" +triggers: + - trigger: numeric_state + entity_id: sensor.flick_power_price + above: 40 +actions: + - action: climate.turn_off + target: + entity_id: climate.heat_pump + data: {} +``` + +{% endraw %} +{% enddetails %} + +## Data updates + +The integration will {% term polling poll %} the Flick Electric API every 5 minutes to check for the current power price. You can also use the `homeassistant.update_entity` action to trigger a refresh on-demand. + +## Remove integration + +This integration follows standard integration removal, no extra steps are required. + +{% include integrations/remove_device_service.md %} + +## Troubleshooting + +{% details "Cannot get pricing for this account. Please check user permissions" %} + +API is unable to find pricing for the selected account. Check with Flick Electric to ensure that your user is configured correctly. + +{% enddetails %} + +{% details "No services are active on this Flick account" %} + +Only active accounts are supported by this integration. If your account is active but is not able to be selected, check with Flick Electric to ensure that it is showing as active in their system. + +{% enddetails %} diff --git a/source/_integrations/flux.markdown b/source/_integrations/flux.markdown index f5214ca6c94..7ef893e597f 100644 --- a/source/_integrations/flux.markdown +++ b/source/_integrations/flux.markdown @@ -84,7 +84,7 @@ disable_brightness_adjust: type: boolean default: false mode: - description: Select how color temperature is passed to lights. Valid values are `xy`, `mired` and `rgb`. + description: Select how color temperature is passed to lights. Valid values are `xy`, `mired` (alias to kelvin) and `rgb`. required: false default: xy type: string diff --git a/source/_integrations/foscam.markdown b/source/_integrations/foscam.markdown index 00a7c6911a7..905a7c3a2bf 100644 --- a/source/_integrations/foscam.markdown +++ b/source/_integrations/foscam.markdown @@ -73,10 +73,11 @@ elements: right: 25px bottom: 50px tap_action: - action: call-service - action: foscam.ptz - data: + action: perform-action + perform_action: foscam.ptz + target: entity_id: camera.bedroom + data: movement: up - type: icon icon: "mdi:arrow-down" @@ -85,10 +86,11 @@ elements: right: 25px bottom: 0px tap_action: - action: call-service - action: foscam.ptz - data: + action: perform-action + perform_action: foscam.ptz + target: entity_id: camera.bedroom + data: movement: down - type: icon icon: "mdi:arrow-left" @@ -97,10 +99,11 @@ elements: right: 50px bottom: 25px tap_action: - action: call-service - action: foscam.ptz - data: + action: perform-action + perform_action: foscam.ptz + target: entity_id: camera.bedroom + data: movement: left - type: icon icon: "mdi:arrow-right" @@ -109,10 +112,11 @@ elements: right: 0px bottom: 25px tap_action: - action: call-service - action: foscam.ptz - data: + action: perform-action + perform_action: foscam.ptz + target: entity_id: camera.bedroom + data: movement: right - type: icon icon: "mdi:arrow-top-left" @@ -121,10 +125,11 @@ elements: right: 50px bottom: 50px tap_action: - action: call-service - action: foscam.ptz - data: + action: perform-action + perform_action: foscam.ptz + target: entity_id: camera.bedroom + data: movement: top_left - type: icon icon: "mdi:arrow-top-right" @@ -133,10 +138,11 @@ elements: right: 0px bottom: 50px tap_action: - action: call-service - action: foscam.ptz - data: + action: perform-action + perform_action: foscam.ptz + target: entity_id: camera.bedroom + data: movement: top_right - type: icon icon: "mdi:arrow-bottom-left" @@ -145,10 +151,11 @@ elements: right: 50px bottom: 0px tap_action: - action: call-service - action: foscam.ptz - data: + action: perform-action + perform_action: foscam.ptz + target: entity_id: camera.bedroom + data: movement: bottom_left - type: icon icon: "mdi:arrow-bottom-right" @@ -157,10 +164,11 @@ elements: right: 0px bottom: 0px tap_action: - action: call-service - action: foscam.ptz - data: + action: perform-action + perform_action: foscam.ptz + target: entity_id: camera.bedroom + data: movement: bottom_right ``` diff --git a/source/_integrations/frankever.markdown b/source/_integrations/frankever.markdown new file mode 100644 index 00000000000..4da40a21c3e --- /dev/null +++ b/source/_integrations/frankever.markdown @@ -0,0 +1,49 @@ +--- +title: FrankEver +description: Integrate FrankEver (Powered by Shelly) devices +ha_category: + - Binary sensor + - Climate + - Cover + - Energy + - Event + - Light + - Number + - Select + - Sensor + - Switch + - Text + - Update + - Valve +ha_release: '0.115' +ha_codeowners: + - '@balloob' + - '@bieniu' + - '@thecode' + - '@chemelli74' + - '@bdraco' +ha_iot_class: Local Push +ha_domain: frankever +ha_config_flow: true +ha_zeroconf: true +ha_platforms: + - binary_sensor + - button + - climate + - cover + - diagnostics + - event + - light + - number + - select + - sensor + - switch + - text + - update + - valve +ha_integration_type: virtual +ha_supporting_domain: shelly +ha_supporting_integration: Shelly +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/fritz.markdown b/source/_integrations/fritz.markdown index c880b79257b..a21a9fe3825 100644 --- a/source/_integrations/fritz.markdown +++ b/source/_integrations/fritz.markdown @@ -26,6 +26,9 @@ ha_platforms: - update ha_ssdp: true ha_integration_type: integration +related: + - docs: /common-tasks/general/#enabling-or-disabling-entities + title: Enabling or disabling entities --- The AVM FRITZ!Box Tools integration allows you to control your [AVM FRITZ!Box](https://en.avm.de/products/fritzbox/) router and have presence detection for connected network devices. @@ -99,6 +102,14 @@ Due to security reasons, AVM implemented the ability to enable/disable a port fo **Note 2**: Only works if you have a dedicated IPv4 address (_it won't work with DS-Lite_) +### WiFi switches + +WiFi {% term switches %} are created for each SSID the FRITZ!Box is serving. With these switches, one can activate and deactivate each single SSID. + +**Note 1**: In a mesh setup, the WiFi settings are adopted by each mesh repeater (_**Home Network > Mesh > Mesh Settings > Automatically Adopting Settings from the Mesh**_) + +**Note 2**: For mesh repeaters, these switches are disabled by default, but can be enabled. When your mesh is based on a WiFi connection between the mesh master and the mesh repeater, the WiFi switches won't be created for the mesh repeater either. + ## Example Automations and Scripts ### Script: Reconnect / get new IP diff --git a/source/_integrations/fronius.markdown b/source/_integrations/fronius.markdown index edd4aaf32a5..586a914e1f4 100644 --- a/source/_integrations/fronius.markdown +++ b/source/_integrations/fronius.markdown @@ -15,6 +15,7 @@ ha_platforms: - sensor ha_dhcp: true ha_integration_type: integration +ha_quality_scale: gold --- The Fronius integration polls a [Fronius](https://www.fronius.com/) solar inverter or datalogger for details of a Fronius SolarNet setup and integrate it in your Home Assistant installation. diff --git a/source/_integrations/fujitsu_fglair.markdown b/source/_integrations/fujitsu_fglair.markdown index 76add58481b..3d7a76e06f2 100644 --- a/source/_integrations/fujitsu_fglair.markdown +++ b/source/_integrations/fujitsu_fglair.markdown @@ -46,4 +46,3 @@ This integration supports the following functionalities (if the devices support ## Outside temperature On units that support it, this integration will expose a temperature sensor that reports the outside temperature that the unit is sensing. - diff --git a/source/_integrations/fyta.markdown b/source/_integrations/fyta.markdown index 73b2d560887..19378fa5291 100644 --- a/source/_integrations/fyta.markdown +++ b/source/_integrations/fyta.markdown @@ -13,8 +13,11 @@ ha_domain: fyta ha_platforms: - binary_sensor - diagnostics + - image - sensor ha_integration_type: hub +ha_quality_scale: platinum +ha_dhcp: true --- The **FYTA** {% term integration %} uses the open API of [FYTA](https://www.fyta.de) to obtain the data from your plant sensors and integrate these into Home Assistant. @@ -57,6 +60,10 @@ The following binary sensors are currently available per plant: - Repotted - Sensor update available +### Image + +The picture created or chosen in the FYTA app is also exposed to Home Assistant. + ### Sensors The following sensors are currently available per plant: diff --git a/source/_integrations/generic.markdown b/source/_integrations/generic.markdown index f85209c2108..0f3e3ba0d76 100644 --- a/source/_integrations/generic.markdown +++ b/source/_integrations/generic.markdown @@ -59,11 +59,11 @@ Use wallclock as timestamps: In this section, you find some real-life examples of how to use this camera platform. -### Weather graph from yr.no +### Weather graph from USA National Weather Service -- Still Image URL: `https://www.yr.no/en/content/1-72837/meteogram.svg` +You can display a GIF from the web as a still image. -Instructions on how to locate the SVG for your location are available at [developer.yr.no](https://developer.yr.no/doc/guides/available-widgets/) +- Still Image URL: `https://radar.weather.gov/ridge/standard/CONUS_0.gif` ### Local image diff --git a/source/_integrations/gios.markdown b/source/_integrations/gios.markdown index 789f8f9720a..fe712f2b20d 100644 --- a/source/_integrations/gios.markdown +++ b/source/_integrations/gios.markdown @@ -17,8 +17,11 @@ ha_integration_type: service The `gios` integration uses the [GIOŚ](http://powietrze.gios.gov.pl/pjp/current) web service as a source for air quality data for your location. -## Setup - -To obtain ID of the measuring station, go to [GIOŚ](http://powietrze.gios.gov.pl/pjp/current) page, select the measuring station on the map and click the "More Info" link. The address of the opened page will look like this: `http://powietrze.gios.gov.pl/pjp/current/station_details/chart/291` and `291` will be ID of the measuring station. - {% include integrations/config_flow.md %} + +{% configuration_basic %} +Measuring station: + description: "Select a measuring station from the list." +Name: + description: "Service name in Home Assistant, by default, this is the name of your Home Assistant instance. For example `Home`." +{% endconfiguration_basic %} diff --git a/source/_integrations/go2rtc.markdown b/source/_integrations/go2rtc.markdown index 6adfe996883..63eb269eb75 100644 --- a/source/_integrations/go2rtc.markdown +++ b/source/_integrations/go2rtc.markdown @@ -11,7 +11,7 @@ ha_domain: go2rtc ha_integration_type: system related: - docs: /installation/ -ha_quality_scale: legacy +ha_quality_scale: internal --- go2rtc is an open source project providing a camera streaming application that supports formats such as RTSP, WebRTC, HomeKit, FFmpeg, RTMP. The **go2rtc** {% term integration %} connects to a go2rtc instance and provides a WebRTC proxy for all your cameras. To learn more about go2rtc, refer to the [project's GitHub page](https://github.com/AlexxIT/go2rtc/). diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown index 18b4597e37e..fc3cda1d2c1 100644 --- a/source/_integrations/google_assistant.markdown +++ b/source/_integrations/google_assistant.markdown @@ -29,67 +29,63 @@ For Home Assistant Cloud users, documentation can be found [here](https://www.na The Google Assistant integration (without Home Assistant Cloud) requires a bit more setup than most due to the way Google requires Assistant Apps to be set up. -{% important %} -To use Google Assistant, your Home Assistant configuration has to be [externally accessible with a hostname and SSL certificate](/docs/configuration/remote/). If you haven't already configured that, you should do so before continuing. If you make DNS changes to accomplish this, please ensure you have allowed up to the full 48 hours for DNS changes to propagate, otherwise, Google may not be able to reach your server. Once you have confirmed you can reach your Home Assistant from outside your home network, you can set up the Google integration: -{% endimportant %} +### Prerequisites + +To use Google Assistant, your Home Assistant configuration has to be [externally accessible with a hostname and SSL certificate](/docs/configuration/remote/). + +- If you haven't already configured that, you should do so before continuing. +- If you make DNS changes to accomplish this, ensure you have allowed up to the full 48 hours for DNS changes to propagate, otherwise, Google may not be able to reach your server. +- Once you have confirmed you can reach your Home Assistant from outside your home network, you can set up the Google integration: ### Google Cloud Platform configuration -1. Create a new project in the [Actions on Google console](https://console.actions.google.com/). - 1. Select **New Project** and give your project a name. - 2. Select the **Smart Home** card, then select the **Start Building** button. - 3. Under **Quick Setup**, select **Name your Smart Home action**. Give your Action a name - Home Assistant will appear in the Google Home app as `[test] ` - 4. Select the **Overview** tab at the top of the page to go back. - 5. Select **Build your Action**, then select **Add Action(s)**. - 6. Add your Home Assistant URL: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant` in the **Fulfillment URL** textbox, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / IP address and the port under which your Home Assistant is reachable. - 7. Select **Save**. - 8. Select the three little dots (more) icon in the upper right corner, select **Project settings**. - 9. Make note of the **Project ID** that are listed on the **General** tab of the **Settings** page. -2. **Account linking** is required for your app to interact with Home Assistant. - 1. Start by going back to the **Overview** tab. - 2. Select on **Setup account linking** under the **Quick Setup** section of the **Overview** page. - 3. If asked, leave options as they default **No, I only want to allow account creation on my website** and select **Next**. - 4. Then if asked, for the **Linking type** select **OAuth** and **Authorization Code**. Select **Next**. - 5. Enter the following: - 1. Client ID: `https://oauth-redirect.googleusercontent.com/r/[YOUR_PROJECT_ID]`. (Replace `[YOUR_PROJECT_ID]` with your project ID from above) - 2. Client Secret: Anything you like, Home Assistant doesn't need this field. - 3. Authorization URL: `https://[YOUR HOME ASSISTANT URL:PORT]/auth/authorize`. (Replace `[YOUR HOME ASSISTANT URL:PORT]` with your values.) - 4. Token URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL:PORT]/auth/token`. (Replace `[YOUR HOME ASSISTANT URL:PORT]` with your values.) - Select **Next**, then **Next** again. - 6. In the **Configure your client** **Scopes** textbox, type `email` and select **Add scope**, then type `name` and select **Add scope** again. - 7. Do **NOT** check **Google to transmit clientID and secret via HTTP basic auth header**. - 8. Select **Next**, then select **Save**. +1. Create a new project in the [Google Developer Console](https://console.home.google.com/projects). + 1. Select **Create a Project** + 2. On the **Get started** page, select **Create project**. + - Give your project a name and select **Create project**. + 3. Save your Project ID (it's under the main project name) for use below. + 4. Select **Add a Cloud-to-Cloud integration**. + 5. In the bottom right corner, select **Next: Develop**, then select **Next: Setup**. + 6. Select all applicable device types (you can select them all). + 7. Create an app icon 144 x 144 pixels and upload it. + 8. Under **Account Linking**, in the **OAuth Client ID** field, enter `https://oauth-redirect.googleusercontent.com/r/[YOUR_PROJECT_ID]`. + 9. Replace `[YOUR_PROJECT_ID]` with your project ID from above. + 10. Fill in the details: + - In the **Client Secret** field, add any string (without special characters).Home Assistant doesn't need this field. + - In the **Authorization URL** field, enter `https://[yourdomain:port]/auth/authorize`. + - In the **Token URL** field, enter `https://[yourdomain:port]/auth/token`. + - In the **Cloud fulfillment URL** field, enter `https://[yourdomain:port]/api/google_assistant`. + - For now, skip **Local fulfillment** and **App Flip**. + - Under **Scope(s)**, enter `email`. Select **Add scope** and enter `name`. + - Leave the checkbox **Have Google transmit Client ID and secret via HTTP basic auth header** unchecked/cleared. + - Select **Save**. + - **Result**: You will see your project saved with the status **Draft**. + - You do not need to test. - Screenshot: Account linking - -3. Select the **Develop** tab at the top of the page, then, in the upper right hand corner, select the **Test** button to generate the draft version Test App. If you don't see this option, go to the **Test** tab instead, select the **Settings** button in the top right below the header, and ensure **On device testing** is enabled (if it isn't, enable it). - -4. Enable device sync ([see below for more information](#enable-device-sync)). - 1. Go to [Google Cloud Platform](https://console.cloud.google.com/). - 2. Go to **Select a project**. - 3. In the window that popped up, select your newly created project from step 1. - 4. Go to the menu and select **APIs and Services** and next **Credentials**. - 5. In the **Credentials** view, select **Create credentials** and next **Service account**. +2. In the left hand menu of your project, select the **Analytics** link. + - Select the hamburger {% icon "mdi:hamburger-menu" %} menu on the top left and select **APIs and Services**. +3. Enable device sync ([see below for more information](#enable-device-sync)). + 1. In the left hand menu, select **Credentials**. + 2. In the **Credentials** view, select **Create credentials** and next **Service account**. 1. **Service account name**: Give your account a self-selected name. 2. Select **Create and Continue**. 3. Under **Select a role**, select **Service Accounts** > **Service Account Token Creator**. 4. Select **Continue** and then **Done**. - 6. Under **Service Accounts**, there should now be an account called [name from 5.1]@[projectname].iam.gserviceaccount.com. - 7. Select the pencil button of that service account. - 8. Go to **Keys** and **Add key**. - 9. Create a private key in JSON format. - 10. This will start a download of a JSON file. + 3. Under **Service Accounts**, there should now be an account called [name from 3.2.1]@[projectname].iam.gserviceaccount.com. + 4. Select the pencil button of that service account. + 5. Go to **Keys** and **Add key**. + 6. Create a private key in JSON format. + 7. This will start a download of a JSON file. 1. Rename the file to `SERVICE_ACCOUNT.JSON`. - 2. Add this file to your config-folder. This will be the same folder as your{% term "`configuration.yaml`" %}. - 11. Go back to [Google Cloud Platform](https://console.cloud.google.com/) and select **Close**. - 12. Then select **Save**. - 13. Go to the **Search products and resources** and search for **Homegraph API** and select it. - 14. Enable the HomeGraph API. + 2. In Home Assistant, add this file to your config-folder. This will be the same folder as your {% term "`configuration.yaml`" %}. + 8. Go to the **Search (/) for resources, documentation, products, and more** at the top middle and search for **Homegraph API** and select it. + 9. Enable the HomeGraph API. -5. Add the `google_assistant` integration configuration to your{% term "`configuration.yaml`" %} file and restart Home Assistant following the [configuration guide](#yaml-configuration) below. -6. Add services in the Google Home App (note that app versions may be slightly different). +4. Add the `google_assistant` integration configuration to your {% term "`configuration.yaml`" %} file and restart Home Assistant following the [configuration guide](#yaml-configuration) below. +5. Add services in the Google Home App (note that app versions may be slightly different). 1. Open the Google Home app. - 2. Select the `+` button on the top left corner, select **Set up device**. In the **Set up a device** screen, select **Works with Google**. You should have `[test] ` listed under **Add new**. Selecting that should lead you to a browser to login your Home Assistant instance, then redirect back to a screen where you can set rooms and nicknames for your devices if you wish. + 2. Select the Devices tab at the bottom and select the `+ Add` button on the bottom right corner. + 3. In the **Choose a device** screen, select **Works with Google Home**. You should have `[test] ` listed under **Add new**. Selecting that should lead you to a browser to log in to your Home Assistant instance, then redirect back to a screen where you can set rooms and nicknames for your devices if you wish. {% important %} If you've added Home Assistant to your phone's home screen, you have to first remove it from the home screen. Otherwise, this HTML5 app will show up instead of a browser. Using it would prevent Home Assistant redirecting back to the Google Home app. @@ -99,22 +95,19 @@ If you've added Home Assistant to your phone's home screen, you have to first re If you want to allow other household users to control the devices: -1. Open the project you created in the [Actions on Google console](https://console.actions.google.com/). -2. Select **Test** on the top of the page, then select **Simulator** located to the page left, then click the three little dots (more) icon in the upper right corner of the console. -3. Select **Manage user access**. This redirects you to the Google Cloud Platform IAM permissions page. -4. Select **Grant access** at the top of the page. +1. Open the project you created in the [Google Developer Console](https://console.home.google.com/projects). +2. Select **Members** on the top of the page. This redirects you to the Google Cloud Platform IAM permissions page. +3. Select **Grant access** at the middle of the page. 1. Enter the email address of the user you want to add. 2. Select **Select a role** and choose **Project** > **Viewer**. 3. Select **Save**. - 4. Copy and share the Actions project link (`https://console.actions.google.com/project/YOUR_PROJECT_ID/simulator`) with the new user. -5. Have the new user open the link with their own Google account, agree to the **Terms of Service** popup. Then select **Start Testing**, select **Version - Draft** in the dropdown, and select **Done**. -6. Have the new user go to their **Google Assistant** app to add `[test] your app name` to their account. + 4. Copy and share the project link (`https://console.home.google.com/projects/YOUR_PROJECT_ID`) with the new user. +4. Have the new user open the link with their own Google account, agree to the **Terms of Service** popup(s). +5. Have the new user go to their **Google Assistant** app to add `[test] your app name` to their account. -### Enable device sync +### Utilize device sync -If you want to support active reporting of state to Google's server (configuration option `report_state`) and synchronize Home Assistant devices with the Google Home app (`google_assistant.request_sync` service), you will need to create a service account. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have set up this component, you will need to call this service (or command) each time you add a new device in Home Assistant that you wish to control via the Google Assistant integration. This allows you to update devices without unlinking and relinking an account (see [below](#troubleshooting)). - -The service account is created by following Step 4 (Enable device sync) in the previous section [Google Cloud Platform configuration](#google-cloud-platform-configuration). +You are now able to support active reporting of state to Google's server (configuration option `report_state`) and synchronize Home Assistant devices with the Google Home app (`google_assistant.request_sync` service). Try it with "OK Google, sync my devices" - the Google Home app should import your exposed Home Assistant devices and prompt you to assign them to rooms. @@ -138,24 +131,24 @@ This is because the Google Assistant device will connect directly to the IP of y For secure remote access, use a reverse proxy such as the {% my supervisor_addon addon="core_nginx_proxy" title="NGINX SSL" %} add-on instead of directing external traffic straight to Home Assistant. {% endimportant %} -1. Open the project you created in the [Actions on Google console](https://console.actions.google.com/). -2. Select **Develop** on the top of the page, then select **Actions** located in the hamburger menu on the top left. -3. Upload Javascript files +1. Open the project you created in the [Google Developer Console](https://console.home.google.com/projects). +2. Expand the **Cloud-to-cloud** menu on the left and select **Develop**, then select **Edit** next to your integration. +3. Scroll down and enable **Local fulfillment** +4. Upload Javascript files 1. Download `app.js` from [here](https://github.com/NabuCasa/home-assistant-google-assistant-local-sdk/releases/latest) - 2. Select the **Upload JavaScript files** button. - 3. Select **Upload your JavaScript targeting Node** and upload the `app.js` from step 3.1. - 4. Select **Upload your JavaScript targeting Chrome (browser)** and upload the `app.js` from step 3.1. -4. Check the box **Support local query** under **Add capabilities**. -5. Add device scan configuration: - 1. Select **+ New scan config** if no configuration exists. - 2. Select **MDNS**. - 3. Set **MDNS service name** to `_home-assistant._tcp.local` + 2. Select **Upload your JavaScript targeting Node** and upload the `app.js` from step 4.1. + 3. Select **Upload your JavaScript targeting Chrome (browser)** and upload the same `app.js` from step 4.1. +5. Check the box **Support local queries**. +6. Add device scan configuration: + 1. Select **+ Add scan configuration** if no configuration exists. + 2. For Discovery protocol select **mDNS**. + 3. Set **Enter mDNS service name** to `_home-assistant._tcp.local` 4. Select **Add field**, then under **Select a field**, choose **Name**. 5. Enter a new **Value** field set to `.*\._home-assistant\._tcp\.local` -6. Save your changes. -7. Either wait for 30 minutes, or restart all your Google Assistant devices. -8. Restart Home Assistant Core. -9. With a Google Assistant device, try saying "OK Google, sync my devices." This can be helpful to avoid issues, especially if you are enabling local fulfillment sometime after adding cloud Google Assistant support. +7. Scroll to bottom of page and **Save** your changes. +8. Either wait for 30 minutes, or restart all your Google Assistant devices. +9. Restart Home Assistant Core. +10. With a Google Assistant device, try saying "OK Google, sync my devices." This can be helpful to avoid issues, especially if you are enabling local fulfillment sometime after adding cloud Google Assistant support. You can debug the setup by following [these instructions](https://developers.home.google.com/local-home/test#debugging_from_chrome). @@ -266,6 +259,7 @@ Currently, the following domains are available to be used with Google Assistant, - input_button - input_select (option/setting/mode/value) - light (on/off/brightness/rgb color/color temp) +- lawn_mower (dock/start/pause) - lock - media_player (on/off/set volume (via set volume)/source (via set input source)/control playback) - scene (on) diff --git a/source/_integrations/google_drive.markdown b/source/_integrations/google_drive.markdown new file mode 100644 index 00000000000..e2cc4715a47 --- /dev/null +++ b/source/_integrations/google_drive.markdown @@ -0,0 +1,55 @@ +--- +title: Google Drive +description: Instructions on how to use Google Drive in Home Assistant. +ha_category: + - Backup +ha_iot_class: Cloud Polling +ha_release: '2025.2' +ha_config_flow: true +ha_domain: google_drive +ha_codeowners: + - '@tronikos' +ha_integration_type: service +ha_quality_scale: platinum +google_dev_console_link: https://console.developers.google.com/start/api?id=drive +api: Google Drive API +api_link: https://console.developers.google.com/start/api?id=drive +related: + - docs: /common-tasks/general/#backups + title: Creating backups in Home Assistant + - url: https://drive.google.com + title: Google Drive + - url: https://console.developers.google.com/start/api?id=drive + title: Google Developer Console +--- + +This {% term integration %} allows you to connect your [Google Drive](https://drive.google.com) with Home Assistant Backups. When you set up this integration, your Google Drive will have a new folder called Home Assistant where all the backups will be stored. You can rename this folder to whatever you like in Google Drive at any point in time. If you delete the folder, it will automatically be re-created as long as you have the {% term integration %} enabled. + +For a video walkthrough of the setup instructions, see this video from 13:50 to 19:20 + + +## 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 [Google Sheets](/integrations/google_sheets), [Nest](/integrations/nest), [YouTube](/integrations/youtube), and [Google Mail](/integrations/google_mail). +These are not the same as *Device Auth* credentials previously recommended for [Google Calendar](/integrations/google). + +{% include integrations/google_client_secret.md %} + +{% include integrations/config_flow.md %} + +{% include integrations/google_oauth.md %} + +## Removing the integration + +{% include integrations/remove_device_service.md %} + +- If you remove the integration, the Home Assistant folder in Google Drive is not automatically deleted. You have to manually delete it in Google Drive. + +## Known limitations + +- The integration can only access files that it creates in the Home Assistant folder. It cannot access or modify any other files in your Google Drive. + +## 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_generative_ai_conversation.markdown b/source/_integrations/google_generative_ai_conversation.markdown index 390c218d922..77313d10c43 100644 --- a/source/_integrations/google_generative_ai_conversation.markdown +++ b/source/_integrations/google_generative_ai_conversation.markdown @@ -34,14 +34,14 @@ This integration requires an API key to use, [which you can generate here](https {% include integrations/config_flow.md %} -### Generate an API Key +## Generate an API Key The Google Generative AI API key is used to authenticate requests to the Google Generative AI API. To generate an API key take the following steps: - Visit the [API Keys page](https://aistudio.google.com/app/apikey) to retrieve the API key you'll use to configure the integration. On the same page, you can see your plan: *free of charge* if the associated Google Cloud project doesn't have billing, or *pay-as-you-go* if the associated Google Cloud project has billing enabled. -Comparison of the plans is available [at this pricing page](https://ai.google.dev/pricing). The major differences include: the free of charge plan is rate limited, free prompts/responses are used for product improvement, and the free plan is not available in all [regions](https://ai.google.dev/gemini-api/docs/available-regions). +Comparison of the plans is available [at this pricing page](https://ai.google.dev/pricing). The major differences include: the free of charge plan is rate limited, and free prompts/responses are used for product improvement. {% include integrations/option_flow.md %} @@ -73,7 +73,7 @@ Safety settings: ## Talking to Super Mario -You can use an OpenAI Conversation integration to [talk to Super Mario and, if you want, have him control devices in your home](/voice_control/assist_create_open_ai_personality/). +You can use this integration to [talk to Super Mario and, if you want, have him control devices in your home](/voice_control/assist_create_open_ai_personality/). The tutorial is using OpenAI, but this could also be done with the Google Generative AI integration. @@ -85,15 +85,16 @@ The tutorial is using OpenAI, but this could also be done with the Google Genera This action isn't tied to any integration entry, so it won't use the model, prompt, or any of the other settings in your options. If you only want to pass text, you should use the `conversation.process` action. {% endtip %} -Allows you to ask Gemini Pro or Gemini Pro Vision to generate content from a prompt consisting of text and optionally images. +Allows you to ask Gemini Pro or Gemini Pro Vision to generate content from a prompt consisting of text and optionally attachments (images, PDFs, etc.). This action populates [response data](/docs/scripts/perform-actions#use-templates-to-handle-response-data) with the generated content. | Data attribute | Optional | Description | Example | | ---------------------- | -------- | ----------------------------------------------- | ------------------- | | `prompt` | no | The prompt for generating the content. | Describe this image | -| `image_filename` | yes | File names for images to include in the prompt. | /tmp/image.jpg | +| `filenames` | yes | File names for attachments to include in the prompt. | /tmp/image.jpg | {% raw %} + ```yaml action: google_generative_ai_conversation.generate_content data: @@ -101,9 +102,10 @@ data: Very briefly describe what you see in this image from my doorbell camera. Your message needs to be short to fit in a phone notification. Don't describe stationary objects or buildings. - image_filename: /tmp/doorbell_snapshot.jpg + filenames: /tmp/doorbell_snapshot.jpg response_variable: generated_content ``` + {% endraw %} The response data field `text` will contain the generated content. @@ -111,17 +113,37 @@ The response data field `text` will contain the generated content. Another example with multiple images: {% raw %} + ```yaml action: google_generative_ai_conversation.generate_content data: prompt: >- Briefly describe what happened in the following sequence of images from my driveway camera. - image_filename: + filenames: - /tmp/driveway_snapshot1.jpg - /tmp/driveway_snapshot2.jpg - /tmp/driveway_snapshot3.jpg - /tmp/driveway_snapshot4.jpg response_variable: generated_content ``` + {% endraw %} + +## Video tutorial + +This video tutorial explains how Google Generative AI can be set up, how you can send an AI-generated message to your smart speaker when you arrive home, and how you can analyze an image taken from your doorbell camera as soon as someone rings the doorbell. + + + +## Troubleshooting + +- To aid in diagnosing issues it may help to turn up verbose logging by adding these to your {% term "`configuration.yaml`" %}: + +```yaml +logger: + logs: + homeassistant.components.conversation: debug + homeassistant.components.conversation.chat_log: debug + homeassistant.components.google_generative_ai_conversation: debug +``` diff --git a/source/_integrations/google_sheets.markdown b/source/_integrations/google_sheets.markdown index 26ab362f9ac..46bc8ef141a 100644 --- a/source/_integrations/google_sheets.markdown +++ b/source/_integrations/google_sheets.markdown @@ -17,7 +17,7 @@ api2: Google Sheets API api2_link: https://console.cloud.google.com/apis/enableflow?apiid=sheets.googleapis.com --- -The Google Sheets integration allows you to connect your [Google Drive](https://drive.google.com) to Home Assistant. The integration adds an actiion to allow you to append rows to a Sheets document. The idea is that you can store data on there for further processing. When you set up a config entry, your drive will have a new sheet called Home Assistant. You can then rename this to whatever you like. +The Google Sheets integration allows you to connect your [Google Drive](https://drive.google.com) to Home Assistant. The integration adds an action to allow you to append rows to a Sheets document. The idea is that you can store data on there for further processing. When you set up a config entry, your drive will have a new sheet called Home Assistant. You can then rename this to whatever you like. **Note**: The integration currently only has access to that one document that is created during setup. diff --git a/source/_integrations/google_travel_time.markdown b/source/_integrations/google_travel_time.markdown index 0d844ccd1fb..e7b798ca2b9 100644 --- a/source/_integrations/google_travel_time.markdown +++ b/source/_integrations/google_travel_time.markdown @@ -24,6 +24,8 @@ You need to register for an API key by following the instructions [here](https:/ A quota can be set against the API to avoid exceeding the free credit amount. Set the 'Elements per day' to a limit of 645 or less. Details on how to configure a quota can be found [here](https://developers.google.com/maps/documentation/distance-matrix/usage-and-billing#set-caps) +**Starting March 2025** Google will change the pricing scheme from the US$200 per month credit to 10,000 free requests. You should adjust your limit to 322 or less. You can find more information on the pricing changes in the [Google developer documentation](https://developers.google.com/maps/billing-and-pricing/faq#pricing-sheet). + {% include integrations/config_flow.md %} Notes: diff --git a/source/_integrations/govee_ble.markdown b/source/_integrations/govee_ble.markdown index 3b3d42b25ea..4761b081e6c 100644 --- a/source/_integrations/govee_ble.markdown +++ b/source/_integrations/govee_ble.markdown @@ -10,7 +10,6 @@ ha_release: 2022.8 ha_iot_class: Local Push ha_codeowners: - '@bdraco' - - '@PierreAronnax' ha_domain: govee_ble ha_config_flow: true ha_platforms: @@ -32,7 +31,7 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot - H5052 Hygrometer Thermometer - H5071 Hygrometer Thermometer - H5072 Hygrometer Thermometer -- H5074 Hygrometer Thermometer +- H5074 Hygrometer Thermometer (Active scans required) - [H5075 Bluetooth Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-bluetooth-hygrometer-thermometer-h5075) - [H5100 Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-h5100-mini-hygrometer-thermometer-sensors) - H5101 Hygrometer Thermometer @@ -49,6 +48,7 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot - H5125 2 Button Switch - H5126 6 Button Switch - H5127 Presence Sensor +- H5130 Pressure Sensor - [H5177/5178 Bluetooth Thermo-Hygrometer](https://us.govee.com/collections/thermo-hydrometer/products/bluetooth-thermo-hygrometer) - H5174 Hygrometer Thermometer - [H5179 Hygrometer Thermometer](https://us.govee.com/products/wi-fi-temperature-humidity-sensor) diff --git a/source/_integrations/govee_light_local.markdown b/source/_integrations/govee_light_local.markdown index 543e3305e3f..183270944d6 100644 --- a/source/_integrations/govee_light_local.markdown +++ b/source/_integrations/govee_light_local.markdown @@ -22,17 +22,23 @@ To enable local control on your Govee device, refer to the instructions availabl ## Supported devices +H6008, +H600D, +H6022, +H6042, H6046, H6047, H6051, H6052, H6056, H6059, +H605D, H6061, H6062, H6065, H6066, H6067, +H6069, H606A, H6072, H6073, @@ -50,6 +56,10 @@ H610A, H610B, H6110, H6117, +H612A, +H612B, +H612F, +H6144, H6159, H615A, H615B, @@ -57,6 +67,7 @@ H615C, H615D, H615E, H6163, +H6167, H6168, H6172, H6173, @@ -79,17 +90,24 @@ H61A3, H61A5, H61A8, H61B2, +H61B3, H61B5, H61BA, H61BC, H61BE, +H61C2, H61C3, H61C5, H61D3, H61D5, H61E0, H61E1, +H61E5, +H61E6, H61F5, +H6609, +H6640, +H6641, H7012, H7013, H7020, @@ -108,7 +126,9 @@ H7055, H705A, H705B, H705C, +H705D, H705E, +H705F, H7060, H7061, H7062, @@ -120,7 +140,19 @@ H706B, H706C, H7075, H70A1, +H70A2, +H70A3, H70B1, +H70B3, +H70BC, H70C1, -H70C2 -H70C2 +H70C2, +H70C4, +H70C5, +H70D1, +H805C, +H8072 + +{% note %} +Some scenes may not be supported from all devices. If you find a scene that's not working with a specific model, please open an issue at the [underling library](https://github.com/Galorhallen/govee-local-api/issues) +{% endnote %} diff --git a/source/_integrations/group.markdown b/source/_integrations/group.markdown index ad9fde5655b..0e73ffb8cf4 100644 --- a/source/_integrations/group.markdown +++ b/source/_integrations/group.markdown @@ -53,6 +53,9 @@ The following entities can be grouped: - [event (events)](/integrations/event/) - [media player (media players)](/integrations/media_player/) - [notify (notifications)](/integrations/notify/) +- [sensor (sensors)](/integrations/sensor/) +- [number (numbers)](/integrations/number/) +- [input_number (input_numbers)](/integrations/input_number/) {% include integrations/config_flow.md %} @@ -115,10 +118,12 @@ In short, when any group member entity is `unlocked`, the group will also be `un - The group state is `unavailable` if all group members are `unavailable`. - Otherwise, the group state is `unknown` if all group members are `unknown` or `unavailable`. - Otherwise, the group state is `jammed` if at least one group member is `jammed`. +- Otherwise, the group state is `opening` if at least one group member is `opening`. - Otherwise, the group state is `locking` if at least one group member is `locking`. +- Otherwise, the group state is `open` if at least one group member is `open`. - Otherwise, the group state is `unlocking` if at least one group member is `unlocking`. -- Otherwise, the group state is `unlocked` if at least one group member is `unlocked`. -- Otherwise, the group state is `locked`. +- Otherwise, the group state is `locked` if all group members are `locked`. +- Otherwise, the group state is `unlocked`. ### Notify entity groups @@ -136,7 +141,7 @@ In short, when any group member entity is `unlocked`, the group will also be `un - Otherwise, the group state is `on` if at least one group member is not `off`, `unavailable` or `unknown`. - Otherwise, the group state is `off`. -### Sensor groups +### Sensor, number, and input_number groups - The group state is combined / calculated based on `type` selected to determine the minimum, maximum, latest (last), mean, median, range, product, standard deviation, or sum of the collected states. - Members can be any `sensor`, `number` or `input_number` holding numeric states. diff --git a/source/_integrations/gstreamer.markdown b/source/_integrations/gstreamer.markdown index 9f66b31fc5c..2001492bda7 100644 --- a/source/_integrations/gstreamer.markdown +++ b/source/_integrations/gstreamer.markdown @@ -43,7 +43,7 @@ Only the `music` media type is supported. And then install the following system dependencies: -Debian/Ubuntu/Rasbian: +Debian/Ubuntu/Raspberry Pi OS (formerly Raspbian): ```bash sudo apt-get install python3-gst-1.0 \ @@ -52,7 +52,7 @@ sudo apt-get install python3-gst-1.0 \ gstreamer1.0-tools ``` -Red Hat/Centos/Fedora: +Red Hat/CentOS/Fedora: ```bash sudo yum install -y python-gstreamer1 gstreamer1-plugins-good \ diff --git a/source/_integrations/habitica.markdown b/source/_integrations/habitica.markdown index 6b23b8dd191..237adde36af 100644 --- a/source/_integrations/habitica.markdown +++ b/source/_integrations/habitica.markdown @@ -3,9 +3,9 @@ title: Habitica description: Instructions on enabling Habitica support for your Home Assistant ha_category: - Calendar + - Image - Sensor - To-do list - - Image ha_release: 0.78 ha_iot_class: Cloud Polling ha_domain: habitica @@ -14,10 +14,10 @@ ha_platforms: - button - calendar - diagnostics + - image - sensor - switch - todo - - image ha_codeowners: - '@tr4nt0r' ha_config_flow: true @@ -31,6 +31,7 @@ related: title: To-do list card - url: https://habitica.com/ title: Habitica +ha_quality_scale: platinum --- The Habitica {% term integration %} enables you to monitor your adventurer's progress and stats from [Habitica](https://habitica.com/) in Home Assistant and seamlessly integrates your to-do's, daily tasks, and many more things. @@ -91,6 +92,11 @@ Verify SSL certificate: - **Gems**: Shows the total number of gems currently owned by your Habitica character, used for purchasing items and customizations. - **Mystic hourglasses**: Displays the number of mystic hourglasses earned as a subscriber, which can be redeemed for exclusive items from past events. - **Strength, intelligence, constitution, perception**: Display your character's attribute points (stats). The sensors' attributes provide a breakdown of contributions from level, battle gear, class equip bonus, allocation, and buffs. +- **Eggs**: Shows the total number of eggs in your inventory. The sensor's attributes provide a detailed list of each egg type and quantity. +- **Pet food**: Displays the total amount of food available. The sensor's attributes list each food type and its quantity. Feed it to your pets and they may grow into a sturdy steed. +- **Saddles**: Indicates the number of saddles owned, used for instantly raising pets to mounts. +- **Hatching potions**: Shows the total count of available hatching potions. The sensor's attributes detail each potion type and quantity. Pour them on an egg to hatch a pet. +- **Quest scrolls**: Displays the total number of quest scrolls in your inventory. A list of each quest scroll and its quantity is provided in the sensor's attributes. ## Binary sensors @@ -109,8 +115,8 @@ The following Habitica tasks are available as to-do lists in Home Assistant. You ## Calendars -- **To-Do calendar:** Lists the due dates for all active to-do tasks. Each event on this calendar represents a to-do item that has a set due date, making it easy to track upcoming deadlines and plan accordingly. -- **Dailies calendar:** Displays all daily tasks that are scheduled for today and are still active. It also shows all tasks scheduled for future dates, helping you stay organized and track upcoming routines. The calendar sensor will be active if there are unfinished tasks for today and display the next due daily (based on sort order if there are multiple tasks due for that day). +- **To-Do calendar**: Lists the due dates for all active to-do tasks. Each event on this calendar represents a to-do item that has a set due date, making it easy to track upcoming deadlines and plan accordingly. +- **Dailies calendar**: Displays all daily tasks that are scheduled for today and are still active. It also shows all tasks scheduled for future dates, helping you stay organized and track upcoming routines. The calendar sensor will be active if there are unfinished tasks for today and display the next due daily (based on sort order if there are multiple tasks due for that day). - **To-Do reminders calendar**: Lists events for reminders associated with your to-dos in Habitica, helping you track when notifications for specific to-dos are expected. - **Dailies reminders calendar**: Shows events for reminders linked to your Habitica dailies, ensuring you know when notifications for your dailies will occur. @@ -129,13 +135,13 @@ If you've unlocked the class system, button controls for casting player and part - **Ethereal surge**: You sacrifice Mana so the rest of your party, except for other mages, gains MP. (based on: INT) - **Earthquake**: Your mental power shakes the earth and buffs your party's intelligence. (based on: unbuffed INT) -- **Chilling frost:** With one cast, ice freezes all your streaks so they won't reset to zero tomorrow. +- **Chilling frost**: With one cast, ice freezes all your streaks so they won't reset to zero tomorrow. ### Warrior - **Defensive stance**: You crouch low and gain a buff to constitution. (based on: unbuffed CON) - **Valorous presence**: Your boldness buffs your whole party's strength. (based on: unbuffed STR) -- **Intimidating gaze:** Your fierce stare buffs your whole Party's constitution. (based on: unbuffed CON) +- **Intimidating gaze**: Your fierce stare buffs your whole Party's constitution. (based on: unbuffed CON) ### Rogue @@ -167,9 +173,9 @@ Use a skill or spell from your Habitica character on a specific task to affect i #### Available skills -- **Rogue:** `pickpocket`, `backstab` -- **Warrior:** `smash` -- **Mage:** `fireball` +- **Rogue**: `pickpocket`, `backstab` +- **Warrior**: `smash` +- **Mage**: `fireball` To use task aliases, make sure **Developer Mode** is enabled under [**Settings -> Site Data**](https://habitica.com/user/settings/siteData). Task aliases can only be edited via the **Habitica** web client. @@ -206,7 +212,9 @@ Terminate your party's ongoing quest. All progress will be lost, and the quest r | `config_entry` | no | Config entry of the character to abort the quest. | {% note %} + Actions marked with 🔒 have usage restrictions. See action descriptions for details. + {% endnote %} ### Action `habitica.start_quest` 🔒 @@ -259,20 +267,170 @@ Use a transformation item from your Habitica character's inventory on a member o - **Snowball**: `snowball` (transforms into a snowfriend) - **Spooky sparkles**: `spooky_sparkles` (transforms into a ghost) - **Seafoam**: `seafoam` (transforms into a starfish) -- **Shiny seed** `shiny_seed` (transforms into flower) +- **Shiny seed**: `shiny_seed` (transforms into flower) ### Action `habitica.get_tasks` Fetch tasks from your Habitica account, with optional filters to narrow down the results for more precise task retrieval. -| Data attribute | Optional | Description | -| -------------- | -------- | -------------------------------------------------------------------------------------------------------- | -| config_entry | no | Choose the Habitica character to retrieve tasks from. | -| type | yes | Filter tasks by type. Valid types: "habits", "dailies", "todos", "rewards". | -| priority | yes | Filter tasks by difficulty. Valid values: "trivial", "easy", "medium", "hard". | -| task | yes | Select specific tasks by matching their name (or task ID). | -| tag | yes | Filter tasks that have one or more of the selected tags. | -| keyword | yes | Filter tasks by keyword, searching across titles, notes, and checklists. | +| Data attribute | Optional | Description | +| ---------------- | -------- | -------------------------------------------------------------------------------------------------------- | +| `config_entry` | no | Choose the Habitica character to retrieve tasks from. | +| `type` | yes | Filter tasks by type. Valid types: `habits`, `dailies`, `todos`, `rewards`. | +| `priority` | yes | Filter tasks by difficulty. Valid values: `trivial`, `easy`, `medium`, `hard`. | +| `task` | yes | Select specific tasks by matching their name (or task ID). | +| `tag` | yes | Filter tasks that have one or more of the selected tags. | +| `keyword` | yes | Filter tasks by keyword, searching across titles, notes, and checklists. | + +### Action `habitica.update_reward` + +Updates a specific reward for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to update a reward. | +| `task` | no | The name (or task ID) of the reward you want to update. | +| `rename` | yes | The new title for the Habitica reward. | +| `notes` | yes | The new notes for the Habitica reward. | +| `cost` | yes | Update the cost of a reward. | +| `tag` | yes | Add tags to the Habitica reward. If a tag does not already exist, a new one will be created. | +| `remove_tag` | yes | Remove tags from the Habitica reward. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.create_reward` + +Creates a reward for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a reward. | +| `name` | no | The title for the Habitica reward. | +| `notes` | yes | The notes for the Habitica reward. | +| `cost` | no | The cost of the reward. | +| `tag` | yes | Add tags to the Habitica reward. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.update_habit` + +Updates a specific habit for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to update a habit. | +| `task` | no | The name (or task ID) of the habit you want to update. | +| `rename` | yes | The new title for the Habitica habit. | +| `notes` | yes | The new notes for the Habitica habit. | +| `up_down` | yes | Update if the habit is good and rewarding (positive), bad and penalizing (negative) or both. Valid values: `up`, `down`, or `[up, down]` | +| `priority` | yes | Update the difficulty of a habit. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `frequency` | yes | Update when a habit's counter resets. Valid values: `daily`, `weekly`, `monthly` | +| `tag` | yes | Add tags to the Habitica habit. If a tag does not already exist, a new one will be created. | +| `remove_tag` | yes | Remove tags from the Habitica habit. | +| `counter_up` | yes | Update the up counter of a positive habit. | +| `counter_down` | yes | Update the down counter of a negative habit. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.create_habit` + +Creates a habit for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a habit. | +| `name` | no | The title for the Habitica habit. | +| `notes` | yes | The notes for the Habitica habit. | +| `up_down` | yes | Defines if the habit is good and rewarding (positive), bad and penalizing (negative) or both. Valid values: `up`, `down`, or `[up, down]` | +| `priority` | yes | Sets the difficulty of the habit. Valid values: `trivial`, `easy`, `medium`, `hard`. Default: `easy` | +| `frequency` | yes | Defines when the habit's counter resets. Valid values: `daily`, `weekly`, `monthly`. Default: `daily` | +| `tag` | yes | Add tags to the Habitica habit. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.update_todo` + +Updates a specific to-do for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to update a to-do. | +| `task` | no | The name (or task ID) of the to-do you want to update. | +| `rename` | yes | The new title for the Habitica to-do. | +| `notes` | yes | The new notes for the Habitica to-do. | +| `add_checklist_item` | yes | The items to add to the to-do's checklist. | +| `remove_checklist_item` | yes | Remove items from a to-do's checklist. | +| `score_checklist_item` | yes | Mark items from a to-do's checklist as completed. | +| `unscore_checklist_item` | yes | Undo completion of items of a to-do's checklist. | +| `priority` | yes | Update the difficulty of a to-do. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `date` | yes | The to-do's due date. | +| `clear_date` | yes | Remove the due date from a to-do. | +| `reminder` | yes | Add reminders to a Habitica to-do. | +| `remove_reminder` | yes | Remove specific reminders from a Habitica to-do. | +| `clear_reminder` | yes | Remove all reminders from a Habitica to-do. | +| `tag` | yes | Add tags to the Habitica to-do. If a tag does not already exist, a new one will be created. | +| `remove_tag` | yes | Remove tags from the Habitica to-do. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.create_todo` + +Creates a to-do for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a to-do. | +| `name` | no | The title for the Habitica to-do. | +| `notes` | yes | The notes for the Habitica to-do. | +| `add_checklist_item` | yes | The items to add to the to-do's checklist. | +| `priority` | yes | The difficulty of the to-do. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `date` | yes | The to-do's due date. | +| `reminder` | yes | Add reminders to a Habitica to-do. | +| `tag` | yes | Add tags to the Habitica to-do. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.update_daily` + +Updates a specific daily for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to update a daily. | +| `task` | no | The name (or task ID) of the daily you want to update. | +| `rename` | yes | The new title for the Habitica daily. | +| `notes` | yes | The new notes for the Habitica daily. | +| `add_checklist_item` | yes | The items to add to the daily's checklist. | +| `remove_checklist_item` | yes | Remove items from a daily's checklist. | +| `score_checklist_item` | yes | Mark items from a daily's checklist as completed. | +| `unscore_checklist_item` | yes | Undo completion of items of a daily's checklist. | +| `priority` | yes | Update the difficulty of a daily. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `start_date` | yes | Defines when the daily task becomes active and specifies the exact weekday or day of the month it repeats on. | +| `frequency` | yes | The repetition interval of a daily. Valid values: `daily`, `weekly`, `monthly`, `yearly`. | +| `every_x` | yes | The number of intervals (`days`, `weeks`, `months`, or `years`) after which the daily repeats, based on the chosen repetition interval. A value of 0 makes the daily inactive (a *Gray Daily*). | +| `repeat` | yes | The days of the week the daily repeats. Applicable when the repetition interval is set to weekly. | +| `repeat_monthly` | yes | Whether a monthly recurring task repeats on the same calendar day each month (`day_of_month`), or on the same weekday and week of the month (`day_of_week`), based on the start date. Applicable when the repetition interval is set to monthly. | +| `reminder` | yes | Add reminders to a Habitica daily. | +| `remove_reminder` | yes | Remove specific reminders from a Habitica daily. | +| `clear_reminder` | yes | Remove all reminders from a Habitica daily. | +| `tag` | yes | Add tags to the Habitica daily. If a tag does not already exist, a new one will be created. | +| `remove_tag` | yes | Remove tags from the Habitica daily. | +| `streak` | yes | Adjust or reset the streak counter of the daily. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | + +### Action `habitica.create_daily` + +Creates a daily for the selected Habitica character. + +| Data attribute | Optional | Description | +| -------------- | -------- | -------------------------------------------------------------------------------------------- | +| `config_entry` | no | Select the Habitica account to create a daily. | +| `name` | no | The title for the Habitica daily. | +| `notes` | yes | The new notes for the Habitica daily. | +| `add_checklist_item` | yes | The items to add to the daily's checklist. | +| `priority` | yes | The difficulty of a daily. Valid values: `trivial`, `easy`, `medium`, `hard` | +| `start_date` | yes | The date when the daily becomes active and specifies the exact weekday or day of the month it repeats on. | +| `frequency` | yes | The repetition interval of a daily. Valid values: `daily`, `weekly`, `monthly`, `yearly`. | +| `every_x` | yes | The number of intervals (`days`, `weeks`, `months`, or `years`) after which the daily repeats, based on the chosen repetition interval. A value of 0 makes the daily inactive (a *Gray Daily*). | +| `repeat` | yes | The days of the week the daily repeats. Applicable when the repetition interval is set to weekly. | +| `repeat_monthly` | yes | Whether a monthly recurring task repeats on the same calendar day each month (`day_of_month`), or on the same weekday and week of the month (`day_of_week`), based on the start date. Applicable when the repetition interval is set to monthly. | +| `reminder` | yes | Add reminders to a Habitica daily. | +| `tag` | yes | Add tags to the Habitica daily. If a tag does not already exist, a new one will be created. | +| `alias` | yes | A task alias can be used instead of the name or task ID. Only dashes, underscores, and alphanumeric characters are supported. The task alias must be unique among all your tasks. | ## Automations @@ -410,6 +568,12 @@ This integration performs the following requests: Please keep these limits in mind to avoid exceeding Habitica's request allowance. Efforts are ongoing to optimize the integration and reduce the number of requests it makes. +## Troubleshooting + +The Habitica integration relies on an active internet connection to communicate with **Habitica**. If you encounter issues, verify that your network connection is stable. Additionally, the Habitica service itself may experience downtime, whether unexpected or due to scheduled maintenance. In these trying times of uncertainty and challenge, when fate tests your resolve, seek guidance from the [Habitica Outage Instructions](https://habitica.fandom.com/wiki/Outage_Instructions) on the community-maintained Habitica wiki — wisdom shared by adventurers who have faced such trials before. + +In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue reoccurs stop the debug logging again (*download of debug log file will start automatically*). Further, if still possible, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report. + ## Remove integration This integration can be removed by following these steps: diff --git a/source/_integrations/harvey.markdown b/source/_integrations/harvey.markdown index 17c6f3266ba..6f794a63162 100644 --- a/source/_integrations/harvey.markdown +++ b/source/_integrations/harvey.markdown @@ -4,7 +4,7 @@ description: Integrate Harvey water softeners with Home Assistant using the Aqua ha_category: - Sensor ha_domain: harvey -ha_release: 2025.1 +ha_release: 2024.7 ha_integration_type: virtual ha_supporting_domain: aquacell ha_supporting_integration: AquaCell diff --git a/source/_integrations/heicko.markdown b/source/_integrations/heicko.markdown new file mode 100644 index 00000000000..3adac1eea53 --- /dev/null +++ b/source/_integrations/heicko.markdown @@ -0,0 +1,22 @@ +--- +title: Heicko +description: Connect and control your Heicko devices using the Motionblinds integration +ha_category: + - Cover +ha_domain: heicko +ha_integration_type: virtual +ha_supporting_domain: motion_blinds +ha_supporting_integration: Motionblinds +ha_release: 2020.12 +ha_codeowners: + - '@starkillerOG' +ha_config_flow: true +ha_platforms: + - button + - cover + - sensor +ha_iot_class: Local Push +ha_dhcp: true +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/heos.markdown b/source/_integrations/heos.markdown index dca127e6f53..4c358912588 100644 --- a/source/_integrations/heos.markdown +++ b/source/_integrations/heos.markdown @@ -11,8 +11,10 @@ ha_codeowners: ha_domain: heos ha_ssdp: true ha_platforms: + - diagnostics - media_player -ha_integration_type: integration +ha_integration_type: hub +ha_quality_scale: platinum --- The HEOS {% term integration %} is used to connect a [HEOS](https://www.denon.com/en-gb/category/heos/) System to Home Assistant. HEOS is a wireless audio ecosystem @@ -27,6 +29,7 @@ Add this integration to automate playback and group configuration of HEOS-capabl - Controlling play mode (e.g., play/pause), volume, mute, and shuffle - Playing HEOS favorites, playlists, quick selects, URLs - Setting the source to physical inputs (e.g., `AUX1`) +- Browsing HEOS music services (for example, **Tidal**) and sources (such as **Favorites**) - Grouping and ungrouping HEOS devices - Clearing playlists @@ -38,12 +41,12 @@ Add this integration to automate playback and group configuration of HEOS-capabl {% include integrations/config_flow.md %} {% note %} -Only a single instance of the integration is needed to access the entire HEOS system on the network. It will only connect to a single {% term host %}. +A single instance of the integration adds all devices in the HEOS system to Home Assistant. When setup through discovery, it will automatically select the best {% term host %}. The integration will automatically reconnect and fail over to other hosts in the HEOS system if the configured host goes offline. {% endnote %} {% configuration_basic %} Host: - description: "The host name or IP address (e.g., \"192.168.1.2\") of your HEOS-capable product. If you have more than one device, select, or enter a host, that is connected to the LAN via wire or has the strongest wireless signal." + description: "The host name or IP address (e.g., \"192.168.1.2\") of your HEOS-capable product. If you have more than one device, enter a host that is connected to the LAN via wire and is always powered on." {% endconfiguration_basic %} ## Configuration options @@ -78,9 +81,26 @@ This integration follows standard integration removal. No extra steps are requir 1. Go to **{% my integrations icon title="Settings > Devices & Services" %}**. 2. Select **Denon HEOS**. Click the three-dot {% icon "mdi:dots-vertical" %} menu and then select **Delete**. -## Playing media +## Actions -### Play a favorite +In addition to the standard [Media Player actions](/integrations/media_player#actions), the HEOS integration provides the following {% term actions %}: + +Group volume actions: `media_player.group_volume_set`, `media_player.group_volume_down`, and `media_player.group_volume_up` for entities joined to a group. + +### Action `media_player.group_volume_set` + +Sets the group's volume while preserving member volume ratios. This action can be called on any entity in a group. + +| Data attribute | Optional | Description | +|------------------------|----------|------------------------------------------------------------------| +| `entity_id` | yes | A media player entity that is joined to a group. | +| `volume_level` | no | The volume level, where 0 is inaudible, 1 is the maximum volume. | + +## Examples + +### Playing media + +#### Play a favorite You can play a HEOS favorite by number or name with the `media_player.play_media` action. Example action data payload: @@ -98,7 +118,7 @@ data: | `media_content_type` | no | Set to the value `favorite` | | `media_content_id` | no | (e.g., `1`) or name (e.g., `Thumbprint Radio`) of the HEOS favorite | -### Play a playlist +#### Play a playlist You can play a HEOS playlist with the `media_player.play_media` action. Example action data payload: @@ -116,7 +136,7 @@ data: | `media_content_type` | no | Set to the value `playlist` | | `media_content_id` | no | The name of the HEOS playlist | -### Play a Quick Select +#### Play a Quick Select You can play a HEOS Quick Select by number or name with the `media_player.play_media` action. Example action data payload: @@ -134,7 +154,7 @@ data: | `media_content_type` | no | Set to the value `quick_select` | | `media_content_id` | no | The quick select number (e.g., `1`) or name (e.g., `Quick Select 1`) | -### Play a URL +#### Play a URL You can play a URL through a HEOS media player using the `media_player.play_media` action. The HEOS player must be able to reach the URL. @@ -158,9 +178,9 @@ data: | `media_content_type` | no | Set to the value `url` | | `media_content_id` | no | The full URL to the stream (max 255 characters) | -## Grouping players +### Grouping players -### Join +#### Join To group HEOS media players together for synchronous playback, use the `media_player.join` action. @@ -184,7 +204,7 @@ data: | `entity_id` | yes | The media player entity whose playback will be expanded to the players specified in `group_members`. | | `group_members` | no | The player entities which will be synced with the playback from `entity_id`. | -### Unjoin +#### Unjoin For removing a HEOS player from a group, use the `media_player.unjoin` action. @@ -198,9 +218,11 @@ data: | ---------------------- | -------- | ------------------------------------------------ | | `entity_id` | yes | Remove this media player from any player groups. | -## Actions -The HEOS integration makes available the standard [Media Player actions](/integrations/media_player#actions). +{% note %} + +Actions may fail if they cannot be processed by the HEOS device. For example, attempting to call `media_player.clear_playlist` when the queue is empty will result in an error. To prevent this from halting a script or automation, set [`continue_on_error: true`](/docs/scripts/#continuing-on-error) in the action call. +{% endnote %} ## Supported devices @@ -223,6 +245,10 @@ HEOS pushes data to Home Assistant via the local network when data and entity st - {% term TTS %} is not supported. - The maximum length of a URL that can be used in the `play_media` action is 255 characters due to a limitation in the HEOS firmware. +## Logging and diagnostics + +The HEOS integration supports [Home Assistant debug logs and diagnostics](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics). Diagnostics are available at both the integration entry and device level. + ## Troubleshooting ### Missing favorites diff --git a/source/_integrations/here_travel_time.markdown b/source/_integrations/here_travel_time.markdown index 22f420aaa82..145df81eef8 100644 --- a/source/_integrations/here_travel_time.markdown +++ b/source/_integrations/here_travel_time.markdown @@ -20,7 +20,9 @@ The `here_travel_time` sensor provides travel time from the [HERE Routing API](h You need to register for an API key by following the instructions in the [API Developer Guide](https://www.here.com/docs/bundle/routing-api-developer-guide-v8/page/topics/send-request.html). -HERE offers a Limited Plan which includes 1000 free transactions per day. If you are not [updating sensors on demand](#updating-sensors-on-demand-using-automation), you can track 3 routes without exceeding the limit. You can provide payment details to increase this to 5000 free transactions per day. More information can be found [on the pricing page](https://www.here.com/get-started/pricing) +HERE offers a Limited Plan which includes 1000 free transactions per day. If you are not [updating sensors on demand](#updating-sensors-on-demand-using-automation), you can track 3 routes without exceeding the limit. + +You can provide payment details if you want to pay for unlimited transactions. Be aware that the amount of transactions included for free in the paid plan might be _less_ than the 1000 transactions per day in the free plan. More information can be found [on the pricing page](https://www.here.com/get-started/pricing) {% include integrations/config_flow.md %} diff --git a/source/_integrations/hexaom.markdown b/source/_integrations/hexaom.markdown index 03973151a48..25437cfe148 100644 --- a/source/_integrations/hexaom.markdown +++ b/source/_integrations/hexaom.markdown @@ -24,11 +24,6 @@ ha_supporting_integration: Overkiz ha_release: 2022.2 ha_codeowners: - '@imicknl' - - '@vlebourl' - - '@tetienne' - - '@nyroDev' - - '@tronix117' - - '@alexfp14' ha_config_flow: true ha_platforms: - alarm_control_panel diff --git a/source/_integrations/hi_kumo.markdown b/source/_integrations/hi_kumo.markdown index 61f5bec0c58..cb21484f899 100644 --- a/source/_integrations/hi_kumo.markdown +++ b/source/_integrations/hi_kumo.markdown @@ -24,11 +24,6 @@ ha_supporting_integration: Overkiz ha_release: 2022.2 ha_codeowners: - '@imicknl' - - '@vlebourl' - - '@tetienne' - - '@nyroDev' - - '@tronix117' - - '@alexfp14' ha_config_flow: true ha_platforms: - alarm_control_panel diff --git a/source/_integrations/history.markdown b/source/_integrations/history.markdown index 87603d666a4..b6695317c50 100644 --- a/source/_integrations/history.markdown +++ b/source/_integrations/history.markdown @@ -44,7 +44,7 @@ You can access the **History** panel from the side bar. To export the data, foll By default, the recorder stores the sensor data for 10 days. Older data is purged automatically. The data for the last 10 days is taken from the recorder. -If you select a time frame that exceeds 10 days, the data is taken from the long term statistics table. The long term statistics data is sampled and averaged once per hour, to save storage. Therefore, the values might look different from what you see from the recorder data, which shows the measured values at the sample rate defined for that sensor. +If you select a time frame that exceeds 10 days, the data is taken from the long term statistics table. The long term statistics data is sampled and averaged once per hour, to save storage. Therefore, the values might look different from what you see from the recorder data, which shows the measured values at the sample rate defined for that sensor. The detailed data will be shown with a darker line on graphs. If the chosen time frame exceeds the retention period defined in the recorder, the long term statistics table is used as a data source. diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown index 78c08936659..bc340880ce1 100644 --- a/source/_integrations/history_stats.markdown +++ b/source/_integrations/history_stats.markdown @@ -124,7 +124,7 @@ Depending on the sensor type you choose, the `history_stats` integration can sho - **count**: How many times the tracked entity matched the configured state during the time period. This will count states (for example, how many times a light was in the `on` state during the time period), as opposed to counting state transitions (for example, how many times a light was *turned* `on`). The difference is if the entity was already in the desired state at the start of the time period, that scenario will be counted with this sensor type. {% note %} -For a count sensor that uses a time period that does not slide (such as one that resets upon each hour, as opposed to one which considers the trailing 60 minutes), consider using [customization](/docs/configuration/customizing-devices/#customizing-an-entity-in-yaml) to change the `state_class` to `total_increasing` to generate statistics that track the `sum`. This is useful when emulating the behavior of a `utility_meter` helper that has a defined reset cycle. Without intervention, the `state_class` of any `history_stats` sensor will be `measurement` and will therefore generate `average`, `min`, and `max` statistics. +For a **time** or **count** sensor that uses a time period that does not slide (such as one that resets upon each hour, as opposed to one which considers the trailing 60 minutes), consider using [customization](/docs/configuration/customizing-devices/#customizing-an-entity-in-yaml) to change the `state_class` to `total_increasing` to generate statistics that track the `sum`. This is useful when emulating the behavior of a `utility_meter` helper that has a defined reset cycle. Without intervention, the `state_class` of any `history_stats` sensor will be `measurement` and will therefore generate `average`, `min`, and `max` statistics. {% endnote %} ## Time periods diff --git a/source/_integrations/home_connect.markdown b/source/_integrations/home_connect.markdown index 54f380b9e66..5fdae6f55f1 100644 --- a/source/_integrations/home_connect.markdown +++ b/source/_integrations/home_connect.markdown @@ -3,6 +3,7 @@ title: Home Connect description: Instructions on how to set up the Home Connect integration within Home Assistant. ha_category: - Binary sensor + - Button - Hub - Light - Number @@ -16,9 +17,11 @@ ha_domain: home_connect ha_codeowners: - '@DavidMStraub' - '@Diegorro98' + - '@MartinHjelmare' ha_config_flow: true ha_platforms: - binary_sensor + - button - diagnostics - light - number @@ -31,30 +34,21 @@ ha_integration_type: integration The Home Connect integration allows users to integrate their home appliances supporting the Home Connect standard for Bosch and Siemens using the [official cloud API](https://developer.home-connect.com). -The integration will add one Home Assistant device for each connected home appliance which will have the following entities: +## Use cases -- A power switch -- If the device has programs: - - Two select entities that will allow you to select and start a program between the available ones. - - A timestamp sensor for remaining time and a numeric sensor for the progress percentage. -- Light: - - Hoods: - - Functional light: on/off and brightness - - Ambient light: on/off, brightness, HSV and RGB - - Dishwasher: on/off, brightness, HS and RGB - - Cooling appliances: Both, external and internal lights, on/off and brightness -- Numbers that set the temperature of cooling appliances. -- Time for alarm clock for cooktops and ovens. -- Multiple sensors that report the different states and events reported by the appliance. -- Binary sensors that show binary states of the appliance. +- Monitor the multiple sensors of the appliance and trigger automations based on these sensors. +- Start programs on your appliances from your dashboard. +- Monitor the program status of the appliances. +- Control the light of your appliances. +- Adjust the appliance settings. {% note %} Note that it depends on the appliance and on API permissions which of the features are supported. {% endnote %} -{% note %} -Some devices only have the state `on` and turn off is not supported by the appliance, check [power state availability at Home Connect API documentation](https://api-docs.home-connect.com/settings/#power-state) for more information. -{% endnote %} +## Supported devices + +You can find information about supported devices on the [Home Connect website](https://www.home-connect.com/global/smart-home-appliances). ## Prerequisites @@ -72,7 +66,6 @@ Some devices only have the state `on` and turn off is not supported by the appli {% important %} -- **Power on** all your appliances during the integration configuration process; otherwise, appliance programs list will be empty. - To update the appliance programs list, you can reload the Home Connect integration when an appliance is turned on. If the re-initialization process is not triggered by reload, restart the Home Assistant when an appliance is turned on. - After performing the steps above, [log out](https://developer.home-connect.com/user/logout) of your Home Connect Developer account. If you don't do this, the configuration steps below will fail during OAuth authentication with the message `“error”: “unauthorized_client”`. - The provided Home Connect User Account email address **must** be all lowercase; otherwise, it will result in authentication failures. @@ -97,72 +90,980 @@ Internal examples: `http://192.168.0.2:8123/auth/external/callback`, `http://hom The integration configuration will ask for the *Client ID* and *Client Secret* created above. See [Application Credentials](/integrations/application_credentials) for more details. +## Supported functionality + +{% note %} + +- The entities availability depends on the appliance type, but the appliance might not support all the entities for its type. +- Some appliances don't report data while they are turned off, so corresponding entities will not appear in the Home Connect integration after loading until the appliances are turned on. +{% endnote %} + +### Binary sensor + +{% details "List of binary sensors" %} + +- **Connectivity**: + - **Description**: Shows the connectivity status of the appliance. + - **Availability**: All appliances +- **Remote control**: + - **Description**: Indicates if the remote control is enabled. + - **Availability**: Cooktop, Hood, Oven, Warming Drawer, Dishwasher, Washer, Dryer, Washer Dryer +- **Remote start**: + - **Description**: Indicates if a program can be started remotely. + - **Availability**: Coffee maker, Hood, Oven, Warming Drawer, Dishwasher, Washer, Dryer, Washer Dryer +- **Local control**: + - **Description**: Indicates whether the home appliance is currently physically controlled by the user. + - **Availability**: Coffee maker, Cooktop, Hood, Oven, Warming Drawer, Washer, Dryer, Washer Dryer +- **Bottle cooler door**: + - **Description**: Indicates if the bottle cooler door is open. + - **Availability**: Fridge freezer, Refrigerator +- **Common chiller door**: + - **Description**: Indicates if the common chiller door is open. + - **Availability**: Fridge freezer, Refrigerator +- **Chiller door**: + - **Description**: Indicates if the chiller door is open. + - **Availability**: Fridge freezer, Refrigerator +- **Left chiller door**: + - **Description**: Indicates if the left chiller door is open. + - **Availability**: Fridge freezer, Refrigerator +- **Right chiller door**: + - **Description**: Indicates if the right chiller door is open. + - **Availability**: Fridge freezer, Refrigerator +- **Flex compartment door**: + - **Description**: Indicates if the flex compartment door is open. + - **Availability**: Fridge freezer +- **Freezer door**: + - **Description**: Indicates if the freezer door is open. + - **Availability**: Freezer, Fridge freezer +- **Refrigerator door**: + - **Description**: Indicates if the refrigerator door is open. + - **Availability**: Fridge freezer, Refrigerator +- **Wine compartment door**: + - **Description**: Indicates if the wine compartment door is open. + - **Availability**: Wine cooler +- **Battery charging state**: + - **Description**: Describes if the appliance is charging or discharging. + - **Availability**: Cleaning robot +- **Charging connection**: + - **Description**: Indicates if the appliance is connected or disconnected. + - **Availability**: Cleaning robot + +{% enddetails %} + +### Button + +{% details "List of buttons" %} + +- **Stop program**: + - **Description**: Stops the active program. + - **Availability**: All the appliances with programs +- **Pause program** + - **Description**: Pauses the active program. + - **Availability**: Oven, Cleaning robot, Washer, Dryer, Washer dryer +- **Resume program** + - **Description**: Resumes the paused program. + - **Availability**: Oven, Cleaning robot, Dishwasher, Washer, Dryer, Washer dryer +- **Open door** + - **Description**: Opens the door of the appliance. + - **Availability**: Oven, Freezer, Fridge freezer, Refrigerator +- **Partial open door** + - **Description**: Opens the door of the appliance partially. + - **Availability**: Oven + +{% enddetails %} + +### Light + +{% details "List of light entities" %} + +- **Internal light**: + - **Description**: Controls the internal light of cooling appliances. + - **Availability**: Freezer, Fridge freezer, Refrigerator, Wine cooler + - **Controls**: On/off, brightness +- **External light**: + - **Description**: Controls the external light of cooling appliances. + - **Availability**: Freezer, Fridge freezer, Refrigerator, Wine cooler + - **Controls**: On/off, brightness +- **Functional light**: + - **Description**: Controls the functional light of a hood. + - **Availability**: Hood + - **Controls**: On/off, brightness +- **Ambient light**: + - **Description**: Controls the ambient light of an appliance. + - **Availability**: Hood, Dishwasher + - **Controls**: On/off, brightness, HSV, RGB + +{% enddetails %} + +### Number + +{% details "List of number entities" %} + +#### Settings + +- **Refrigerator setpoint temperature**: + - **Description**: Sets the refrigerator temperature. + - **Availability**: Fridge freezer, Refrigerator +- **Freezer setpoint temperature**: + - **Description**: Sets the freezer temperature. + - **Availability**: Freezer, Fridge freezer +- **Bottle cooler setpoint temperature**: + - **Description**: Sets the bottle cooler temperature. + - **Availability**: Fridge freezer, Refrigerator +- **Chiller setpoint temperature**: + - **Description**: Sets the chiller temperature. + - **Availability**: Fridge freezer, Refrigerator +- **Left Chiller setpoint temperature**: + - **Description**: Sets the left chiller temperature. + - **Availability**: Fridge freezer, Refrigerator +- **Right Chiller setpoint temperature**: + - **Description**: Sets the right chiller temperature. + - **Availability**: Fridge freezer, Refrigerator +- **Wine compartment setpoint temperature**: + - **Description**: Sets the wine compartment temperature. + - **Availability**: Wine cooler +- **Wine compartment 2 setpoint temperature**: + - **Description**: Sets the second wine compartment temperature. + - **Availability**: Wine cooler +- **Wine compartment 3 setpoint temperature**: + - **Description**: Sets the third wine compartment temperature. + - **Availability**: Wine cooler +- **Color temperature percent**: + - **Description**: Sets the color temperature of the functional light in percent (warm light: 0 %, cold light: 100 %). To use it, Color temperature select entity must be set to `custom`. + - **Availability**: Hood +- **i-Dos 1 Base Level**: + - **Description**: Sets the basis dosing volume for i-Dos content 1. + - **Availability**: Washer, Washer dryer +- **i-Dos 2 Base Level**: + - **Description**: Sets the basis dosing volume for i-Dos content 2. + - **Availability**: Washer, Washer dryer + +#### Program options + +- **Duration**: + - **Description**: Defines the run-time of the program. Afterwards, the appliance is stopped. + - **Availability**: Oven +- **Start in relative**: + - **Description**: Defines when the program should start, in seconds from now. + - **Availability**: Oven, Dishwasher +- **Finish in relative**: + - **Description**: Defines when the program should end, in seconds from now. + - **Availability**: Dryer, Washer, Washer dryer +- **Fill quantity**: + - **Description**: Describes the amount of water (in ml) used in a coffee machine program. + - **Availability**: Coffee maker +- **Setpoint temperature**: + - **Description**: Defines the target cavity temperature, which will be held by the oven. + - **Availability**: Oven + +{% enddetails %} + +### Select + +{% details "List of select entities" %} + +#### Programs + +- **Active program**: + - **Description**: Represents the active program of the appliance, and selecting an option will start the program. + - **Availability**: All the appliances with programs +- **Selected program**: + - **Description**: Represents the selected program of the appliance, and selecting an option will select the program. + - **Availability**: All the appliances with programs + +{% details "Program options" %} +Both entities can use these options, but the availability of these will depend on the appliance. + +- **Clean all**: `consumer_products_cleaning_robot_program_cleaning_clean_all` +- **Clean map**: `consumer_products_cleaning_robot_program_cleaning_clean_map` +- **Go home**: `consumer_products_cleaning_robot_program_basic_go_home` +- **Ristretto**: `consumer_products_coffee_maker_program_beverage_ristretto` +- **Espresso**: `consumer_products_coffee_maker_program_beverage_espresso` +- **Espresso doppio**: `consumer_products_coffee_maker_program_beverage_espresso_doppio` +- **Coffee**: `consumer_products_coffee_maker_program_beverage_coffee` +- **XL coffee**: `consumer_products_coffee_maker_program_beverage_x_l_coffee` +- **Caffe grande**: `consumer_products_coffee_maker_program_beverage_caffe_grande` +- **Espresso macchiato**: `consumer_products_coffee_maker_program_beverage_espresso_macchiato` +- **Cappuccino**: `consumer_products_coffee_maker_program_beverage_cappuccino` +- **Latte macchiato**: `consumer_products_coffee_maker_program_beverage_latte_macchiato` +- **Caffe latte**: `consumer_products_coffee_maker_program_beverage_caffe_latte` +- **Milk froth**: `consumer_products_coffee_maker_program_beverage_milk_froth` +- **Warm milk**: `consumer_products_coffee_maker_program_beverage_warm_milk` +- **Kleiner brauner**: `consumer_products_coffee_maker_program_coffee_world_kleiner_brauner` +- **Grosser brauner**: `consumer_products_coffee_maker_program_coffee_world_grosser_brauner` +- **Verlaengerter**: `consumer_products_coffee_maker_program_coffee_world_verlaengerter` +- **Verlaengerter braun**: `consumer_products_coffee_maker_program_coffee_world_verlaengerter_braun` +- **Wiener melange**: `consumer_products_coffee_maker_program_coffee_world_wiener_melange` +- **Flat white**: `consumer_products_coffee_maker_program_coffee_world_flat_white` +- **Cortado**: `consumer_products_coffee_maker_program_coffee_world_cortado` +- **Cafe cortado**: `consumer_products_coffee_maker_program_coffee_world_cafe_cortado` +- **Cafe con leche**: `consumer_products_coffee_maker_program_coffee_world_cafe_con_leche` +- **Cafe au lait**: `consumer_products_coffee_maker_program_coffee_world_cafe_au_lait` +- **Doppio**: `consumer_products_coffee_maker_program_coffee_world_doppio` +- **Kaapi**: `consumer_products_coffee_maker_program_coffee_world_kaapi` +- **Koffie verkeerd**: `consumer_products_coffee_maker_program_coffee_world_koffie_verkeerd` +- **Galao**: `consumer_products_coffee_maker_program_coffee_world_galao` +- **Garoto**: `consumer_products_coffee_maker_program_coffee_world_garoto` +- **Americano**: `consumer_products_coffee_maker_program_coffee_world_americano` +- **Red eye**: `consumer_products_coffee_maker_program_coffee_world_red_eye` +- **Black eye**: `consumer_products_coffee_maker_program_coffee_world_black_eye` +- **Dead eye**: `consumer_products_coffee_maker_program_coffee_world_dead_eye` +- **Hot water**: `consumer_products_coffee_maker_program_beverage_hot_water` +- **Pre_rinse**: `dishcare_dishwasher_program_pre_rinse` +- **Auto 1**: `dishcare_dishwasher_program_auto_1` +- **Auto 2**: `dishcare_dishwasher_program_auto_2` +- **Auto 3**: `dishcare_dishwasher_program_auto_3` +- **Eco 50ºC**: `dishcare_dishwasher_program_eco_50` +- **Quick 45ºC**: `dishcare_dishwasher_program_quick_45` +- **Intensive 70ºC**: `dishcare_dishwasher_program_intensiv_70` +- **Normal 65ºC**: `dishcare_dishwasher_program_normal_65` +- **Glass 40ºC**: `dishcare_dishwasher_program_glas_40` +- **Glass care**: `dishcare_dishwasher_program_glass_care` +- **Night wash**: `dishcare_dishwasher_program_night_wash` +- **Quick 65ºC**: `dishcare_dishwasher_program_quick_65` +- **Normal 45ºC**: `dishcare_dishwasher_program_normal_45` +- **Intensive 45ºC**: `dishcare_dishwasher_program_intensiv_45` +- **Auto half load**: `dishcare_dishwasher_program_auto_half_load` +- **Intensive power**: `dishcare_dishwasher_program_intensiv_power` +- **Magic daily**: `dishcare_dishwasher_program_magic_daily` +- **Super 60ºC**: `dishcare_dishwasher_program_super_60` +- **Kurz 60ºC**: `dishcare_dishwasher_program_kurz_60` +- **Express sparkle 65ºC**: `dishcare_dishwasher_program_express_sparkle_65` +- **Machine care**: `dishcare_dishwasher_program_machine_care` +- **Steam fresh**: `dishcare_dishwasher_program_steam_fresh` +- **Maximum cleaning**: `dishcare_dishwasher_program_maximum_cleaning` +- **Mixed load**: `dishcare_dishwasher_program_mixed_load` +- **Cotton**: `laundry_care_dryer_program_cotton` +- **Synthetic**: `laundry_care_dryer_program_synthetic` +- **Mix**: `laundry_care_dryer_program_mix` +- **Blankets**: `laundry_care_dryer_program_blankets` +- **Business shirts**: `laundry_care_dryer_program_business_shirts` +- **Down feathers**: `laundry_care_dryer_program_down_feathers` +- **Hygiene**: `laundry_care_dryer_program_hygiene` +- **Jeans**: `laundry_care_dryer_program_jeans` +- **Outdoor**: `laundry_care_dryer_program_outdoor` +- **Synthetic refresh**: `laundry_care_dryer_program_synthetic_refresh` +- **Towels**: `laundry_care_dryer_program_towels` +- **Delicates**: `laundry_care_dryer_program_delicates` +- **Super 40ºC**: `laundry_care_dryer_program_super_40` +- **Shirts 15ºC**: `laundry_care_dryer_program_shirts_15` +- **Pillow**: `laundry_care_dryer_program_pillow` +- **Anti shrink**: `laundry_care_dryer_program_anti_shrink` +- **My drying time**: `laundry_care_dryer_program_my_time_my_drying_time` +- **Cold (variable time)**: `laundry_care_dryer_program_time_cold` +- **Warm (variable time)**: `laundry_care_dryer_program_time_warm` +- **In basket**: `laundry_care_dryer_program_in_basket` +- **Cold (20 min)**: `laundry_care_dryer_program_time_cold_fix_time_cold_20` +- **Cold (30 min)**: `laundry_care_dryer_program_time_cold_fix_time_cold_30` +- **Cold (60 min)**: `laundry_care_dryer_program_time_cold_fix_time_cold_60` +- **Warm (30 min)**: `laundry_care_dryer_program_time_warm_fix_time_warm_30` +- **Warm (40 min)**: `laundry_care_dryer_program_time_warm_fix_time_warm_40` +- **Warm (60 min)**: `laundry_care_dryer_program_time_warm_fix_time_warm_60` +- **Dessous**: `laundry_care_dryer_program_dessous` +- **Automatic**: `cooking_common_program_hood_automatic` +- **Venting**: `cooking_common_program_hood_venting` +- **Delayed shut off**: `cooking_common_program_hood_delayed_shut_off` +- **Pre-heating**: `cooking_oven_program_heating_mode_pre_heating` +- **Hot air**: `cooking_oven_program_heating_mode_hot_air` +- **Hot air eco**: `cooking_oven_program_heating_mode_hot_air_eco` +- **Hot air grilling**: `cooking_oven_program_heating_mode_hot_air_grilling` +- **Top bottom heating**: `cooking_oven_program_heating_mode_top_bottom_heating` +- **Top bottom heating eco**: `cooking_oven_program_heating_mode_top_bottom_heating_eco` +- **Bottom heating**: `cooking_oven_program_heating_mode_bottom_heating` +- **Pizza setting**: `cooking_oven_program_heating_mode_pizza_setting` +- **Slow cook**: `cooking_oven_program_heating_mode_slow_cook` +- **Intensive heat**: `cooking_oven_program_heating_mode_intensive_heat` +- **Keep warm**: `cooking_oven_program_heating_mode_keep_warm` +- **Preheat ovenware**: `cooking_oven_program_heating_mode_preheat_ovenware` +- **Special Heat-Up for frozen products**: `cooking_oven_program_heating_mode_frozen_heatup_special` +- **Desiccation**: `cooking_oven_program_heating_mode_desiccation` +- **Defrost**: `cooking_oven_program_heating_mode_defrost` +- **Proof**: `cooking_oven_program_heating_mode_proof` +- **Hot air + 30 RH**: `cooking_oven_program_heating_mode_hot_air_30_steam` +- **Hot air + 60 RH**: `cooking_oven_program_heating_mode_hot_air_60_steam` +- **Hot air + 80 RH**: `cooking_oven_program_heating_mode_hot_air_80_steam` +- **Hot air + 100 RH**: `cooking_oven_program_heating_mode_hot_air_100_steam` +- **Sabbath programme**: `cooking_oven_program_heating_mode_sabbath_programme` +- **90 Watt**: `cooking_oven_program_microwave_90_watt` +- **180 Watt**: `cooking_oven_program_microwave_180_watt` +- **360 Watt**: `cooking_oven_program_microwave_360_watt` +- **600 Watt**: `cooking_oven_program_microwave_600_watt` +- **900 Watt**: `cooking_oven_program_microwave_900_watt` +- **1000 Watt**: `cooking_oven_program_microwave_1000_watt` +- **Max**: `cooking_oven_program_microwave_max` +- **Warming drawer**: `cooking_oven_program_heating_mode_warming_drawer` +- **Cotton**: `laundry_care_washer_program_cotton` +- **Cotton eco**: `laundry_care_washer_program_cotton_cotton_eco` +- **Cotton eco 40/60ºC**: `laundry_care_washer_program_cotton_eco_4060` +- **Cotton color**: `laundry_care_washer_program_cotton_colour` +- **Easy care**: `laundry_care_washer_program_easy_care` +- **Mix**: `laundry_care_washer_program_mix` +- **Mix night wash**: `laundry_care_washer_program_mix_night_wash` +- **Delicates silk**: `laundry_care_washer_program_delicates_silk` +- **Wool**: `laundry_care_washer_program_wool` +- **Sensitive**: `laundry_care_washer_program_sensitive` +- **Auto 30ºC**: `laundry_care_washer_program_auto_30` +- **Auto 40ºC**: `laundry_care_washer_program_auto_40` +- **Auto 60ºC**: `laundry_care_washer_program_auto_60` +- **Chiffon**: `laundry_care_washer_program_chiffon` +- **Curtains**: `laundry_care_washer_program_curtains` +- **Dark wash**: `laundry_care_washer_program_dark_wash` +- **Dessous**: `laundry_care_washer_program_dessous` +- **Monsoon**: `laundry_care_washer_program_monsoon` +- **Outdoor**: `laundry_care_washer_program_outdoor` +- **Plush toy**: `laundry_care_washer_program_plush_toy` +- **Shirts blouses**: `laundry_care_washer_program_shirts_blouses` +- **Sport fitness**: `laundry_care_washer_program_sport_fitness` +- **Towels**: `laundry_care_washer_program_towels` +- **Water proof**: `laundry_care_washer_program_water_proof` +- **Power speed <59 min**: `laundry_care_washer_program_power_speed_59` +- **Super 15 min**: `laundry_care_washer_program_super_153045_super_15` +- **Super 15/30 min**: `laundry_care_washer_program_super_153045_super_1530` +- **Down duvet**: `laundry_care_washer_program_down_duvet_duvet` +- **Rinse spin drain**: `laundry_care_washer_program_rinse_rinse_spin_drain` +- **Drum clean**: `laundry_care_washer_program_drum_clean` +- **Cotton**: `laundry_care_washer_dryer_program_cotton` +- **Cotton eco 40/60ºC**: `laundry_care_washer_dryer_program_cotton_eco_4060` +- **Mix**: `laundry_care_washer_dryer_program_mix` +- **Easy care**: `laundry_care_washer_dryer_program_easy_care` +- **Wash and dry (60 min)**: `laundry_care_washer_dryer_program_wash_and_dry_60` +- **Wash and dry (90 min)**: `laundry_care_washer_dryer_program_wash_and_dry_90` + +{% enddetails %} + +#### Settings + +- **Current map**: + - **Description**: Represents the currently selected map of the cleaning robot. + - **Availability**: Cleaning robot + -
    + Options: (click to view) + + - **Temporary map**: `consumer_products_cleaning_robot_option_reference_map_id_temp_map` + - **Map 1**:`consumer_products_cleaning_robot_option_reference_map_id_map_1` + - **Map 2**:`consumer_products_cleaning_robot_option_reference_map_id_map_2` + - **Map 3**:`consumer_products_cleaning_robot_option_reference_map_id_map_3` + +
    +- **Functional light color temperature**: + - **Description**: Represents the color temperature of the functional light. + - **Availability**: Hood + -
    + Options: (click to view) + + - **Custom**: `cooking_hood_enum_type_color_temperature_custom` + - **Warm**: `cooking_hood_enum_type_color_temperature_warm` + - **Warm to Neutral**: `cooking_hood_enum_type_color_temperature_warm_to_neutral` + - **Neutral**: `cooking_hood_enum_type_color_temperature_neutral` + - **Neutral to Cold**: `cooking_hood_enum_type_color_temperature_neutral_to_cold` + - **Cold**: `cooking_hood_enum_type_color_temperature_cold` + +
    +- **Ambient light color**: + - **Description**: Represents the color of the ambient light. + - **Availability**: Hood, Dishwasher + -
    + Options: (click to view) + + - **Custom**: `b_s_h_common_enum_type_ambient_light_color_custom_color` + - **1**: `b_s_h_common_enum_type_ambient_light_color_color_1` + - ... + - **99**: `b_s_h_common_enum_type_ambient_light_color_color_99` + +
    + +#### Program options + +- **Reference map ID**: + - **Description**: Defines which reference map is to be used. + - **Availability**: Cleaning robot + -
    + Options: (click to view) + + - **Temporary map**: `consumer_products_cleaning_robot_option_reference_map_id_temp_map` + - **Map 1**:`consumer_products_cleaning_robot_option_reference_map_id_map_1` + - **Map 2**:`consumer_products_cleaning_robot_option_reference_map_id_map_2` + - **Map 3**:`consumer_products_cleaning_robot_option_reference_map_id_map_3` + +
    +- **Cleaning mode**: + - **Description**: Defines the favoured cleaning mode. + - **Availability**: Cleaning robot + -
    + Options: (click to view) + + - **Silent**: `consumer_products_cleaning_robot_enum_type_cleaning_modes_silent` + - **Standard**: `consumer_products_cleaning_robot_enum_type_cleaning_modes_standard` + - **Power**: `consumer_products_cleaning_robot_enum_type_cleaning_modes_power` + +
    +- **Bean amount**: + - **Description**: Represents the amount of coffee beans used in a coffee machine program. + - **Availability**: Coffee maker + -
    + Options: (click to view) + + - **Very mild**: `consumer_products_coffee_maker_enum_type_bean_amount_very_mild` + - **Mild**: `consumer_products_coffee_maker_enum_type_bean_amount_mild` + - **Mild +**: `consumer_products_coffee_maker_enum_type_bean_amount_mild_plus` + - **Normal**: `consumer_products_coffee_maker_enum_type_bean_amount_normal` + - **Normal +**: `consumer_products_coffee_maker_enum_type_bean_amount_normal_plus` + - **Strong**: `consumer_products_coffee_maker_enum_type_bean_amount_strong` + - **Strong +**: `consumer_products_coffee_maker_enum_type_bean_amount_strong_plus` + - **Very strong**: `consumer_products_coffee_maker_enum_type_bean_amount_very_strong` + - **Very strong +**: `consumer_products_coffee_maker_enum_type_bean_amount_very_strong_plus` + - **Extra strong**: `consumer_products_coffee_maker_enum_type_bean_amount_extra_strong` + - **Double shot**: `consumer_products_coffee_maker_enum_type_bean_amount_double_shot` + - **Double shot +**: `consumer_products_coffee_maker_enum_type_bean_amount_double_shot_plus` + - **Double shot ++**: `consumer_products_coffee_maker_enum_type_bean_amount_double_shot_plus_plus` + - **Triple shot**: `consumer_products_coffee_maker_enum_type_bean_amount_triple_shot` + - **Triple shot +**: `consumer_products_coffee_maker_enum_type_bean_amount_triple_shot_plus` + - **Coffee ground**: `consumer_products_coffee_maker_enum_type_bean_amount_coffee_ground` + +
    +- **Coffee temperature**: + - **Description**: Represents the coffee temperature used in a coffee machine program. + - **Availability**: Coffee maker + -
    + Options: (click to view) + + - **88ºC**: `consumer_products_coffee_maker_enum_type_coffee_temperature_88_c` + - **90ºC**: `consumer_products_coffee_maker_enum_type_coffee_temperature_90_c` + - **92ºC**: `consumer_products_coffee_maker_enum_type_coffee_temperature_92_c` + - **94ºC**: `consumer_products_coffee_maker_enum_type_coffee_temperature_94_c` + - **95ºC**: `consumer_products_coffee_maker_enum_type_coffee_temperature_95_c` + - **96ºC**: `consumer_products_coffee_maker_enum_type_coffee_temperature_96_c` + +
    +- **Bean container**: + - **Description**: Defines the preferred bean container. + - **Availability**: Coffee maker + -
    + Options: (click to view) + + - **Left**: `consumer_products_coffee_maker_enum_type_bean_container_selection_right` + - **Right**: `consumer_products_coffee_maker_enum_type_bean_container_selection_left` + +
    +- **Flow rate**: + - **Description**: Defines the water-coffee contact time. The duration extends to coffee intensity. + - **Availability**: Coffee maker + -
    + Options: (click to view) + + - **Normal**: `consumer_products_coffee_maker_enum_type_flow_rate_normal` + - **Intense**: `consumer_products_coffee_maker_enum_type_flow_rate_intense` + - **Intense plus**: `consumer_products_coffee_maker_enum_type_flow_rate_intense_plus` + +
    +- **Coffee milk ratio**: + - **Description**: Defines the amount of milk. + - **Availability**: Coffee maker + -
    + Options: (click to view) + + - **10%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_10_percent` + - **20%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_20_percent` + - **25%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_25_percent` + - **30%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_30_percent` + - **40%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_40_percent` + - **50%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_50_percent` + - **55%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_55_percent` + - **60%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_60_percent` + - **65%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_65_percent` + - **67%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_67_percent` + - **70%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_70_percent` + - **75%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_75_percent` + - **80%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_80_percent` + - **85%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_85_percent` + - **90%**: `consumer_products_coffee_maker_enum_type_coffee_milk_ratio_90_percent` + +
    +- **Hot water temperature**: + - **Description**: Defines the temperature suitable for the type of tea. + - **Availability**: Coffee maker + -
    + Options: (click to view) + + - **White tea**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_white_tea` + - **Green tea**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_green_tea` + - **Black tea**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_black_tea` + - **50ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_50_c` + - **55ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_55_c` + - **60ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_60_c` + - **65ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_65_c` + - **70ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_70_c` + - **75ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_75_c` + - **80ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_80_c` + - **85ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_85_c` + - **90ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_90_c` + - **95ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_95_c` + - **97ºC**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_97_c` + - **122ºF**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_122_f` + - **131ºF**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_131_f` + - **140ºF**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_140_f` + - **149ºF**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_149_f` + - **158ºF**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_158_f` + - **167ºF**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_167_f` + - **176ºF**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_176_f` + - **185ºF**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_185_f` + - **194ºF**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_194_f` + - **203ºF**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_203_f` + - **Max**: `consumer_products_coffee_maker_enum_type_hot_water_temperature_max` + +
    +- **Drying target**: + - **Description**: Describes the drying target for a dryer program. + - **Availability**: Dryer + -
    + Options: (click to view) + + - **Iron dry**: `laundry_care_dryer_enum_type_drying_target_iron_dry` + - **Gentle dry**: `laundry_care_dryer_enum_type_drying_target_gentle_dry` + - **Cupboard dry**: `laundry_care_dryer_enum_type_drying_target_cupboard_dry` + - **Cupboard dry plus**: `laundry_care_dryer_enum_type_drying_target_cupboard_dry_plus` + - **Extra dry**: `laundry_care_dryer_enum_type_drying_target_extra_dry` + +
    +- **Venting level**: + - **Description**: Defines the required fan setting. + - **Availability**: Hood + -
    + Options: (click to view) + + - **Fan off** `cooking_hood_enum_type_stage_fan_off` + - **Fan stage 1** `cooking_hood_enum_type_stage_fan_stage_01` + - **Fan stage 2** `cooking_hood_enum_type_stage_fan_stage_02` + - **Fan stage 3** `cooking_hood_enum_type_stage_fan_stage_03` + - **Fan stage 4** `cooking_hood_enum_type_stage_fan_stage_04` + - **Fan stage 5** `cooking_hood_enum_type_stage_fan_stage_05` + +
    +- **Intensive level**: + - **Description**: Defines the intensive setting. + - **Availability**: Hood + -
    + Options: (click to view) + + - **Intensive stage off**: `cooking_hood_enum_type_intensive_stage_intensive_stage_off` + - **Intensive stage 1**: `cooking_hood_enum_type_intensive_stage_intensive_stage1` + - **Intensive stage 2**: `cooking_hood_enum_type_intensive_stage_intensive_stage2` + +
    +- **Warming level**: + - **Description**: Defines the level of the warming drawer. + - **Availability**: Oven + -
    + Options: (click to view) + + - **Low**: `cooking_oven_enum_type_warming_level_low` + - **Medium**: `cooking_oven_enum_type_warming_level_medium` + - **High**: `cooking_oven_enum_type_warming_level_high` + +
    +- **Temperature**: + - **Description**: Defines the temperature of the washing program. + - **Availability**: Washer, Washer dryer + -
    + Options: (click to view) + + - **Cold**: `laundry_care_washer_enum_type_temperature_cold` + - **20ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_20` + - **30ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_30` + - **40ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_40` + - **50ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_50` + - **60ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_60` + - **70ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_70` + - **80ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_80` + - **90ºC clothes**: `laundry_care_washer_enum_type_temperature_g_c_90` + - **Cold**: `laundry_care_washer_enum_type_temperature_ul_cold` + - **Warm**: `laundry_care_washer_enum_type_temperature_ul_warm` + - **Hot**: `laundry_care_washer_enum_type_temperature_ul_hot` + - **Extra hot**: `laundry_care_washer_enum_type_temperature_ul_extra_hot` + +
    +- **Spin speed**: + - **Description**: Defines the spin speed of a washer program. + - **Availability**: Washer, Washer dryer + -
    + Options: (click to view) + + - **Off**: `laundry_care_washer_enum_type_spin_speed_off` + - **400 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_400` + - **600 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_600` + - **700 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_700` + - **800 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_800` + - **900 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_900` + - **1000 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1000` + - **1200 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1200` + - **1400 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1400` + - **1600 rpm**: `laundry_care_washer_enum_type_spin_speed_r_p_m_1600` + - **Off**: `laundry_care_washer_enum_type_spin_speed_ul_off` + - **Low**: `laundry_care_washer_enum_type_spin_speed_ul_low` + - **Medium**: `laundry_care_washer_enum_type_spin_speed_ul_medium` + - **High**: `laundry_care_washer_enum_type_spin_speed_ul_high` + +
    +- **Vario perfect**: + - **Description**: Defines if a cycle saves energy (Eco Perfect) or time (Speed Perfect). + - **Availability**: Washer + -
    + Options: (click to view) + + - **Off**: `laundry_care_common_enum_type_vario_perfect_off` + - **Eco perfect**: `laundry_care_common_enum_type_vario_perfect_eco_perfect` + - **Speed perfect**: `laundry_care_common_enum_type_vario_perfect_speed_perfect` + +
    + +{% enddetails %} + +### Sensor + +{% details "List of binary sensors" %} + +- **Finish time**: + - **Description**: Represents the time when the program will end. + - **Availability**: Coffee maker, Hood, Oven, Dishwasher, Dryer, Washer, Washer dryer + +{% note %} +This sensor will be available only if the program is running +{% endnote %} + +- **Program progress**: + - **Description**: Represents the progress of the program. + - **Availability**: Coffee maker, Hood, Oven, Warming drawer, Dishwasher, Dryer, Washer, Washer dryer + +{% note %} +This sensor will be available only if the program is running +{% endnote %} + +- **Operation state**: + - **Description**: Represents the current operation state of the device. + - **Availability**: All the appliances with programs + -
    + Options: (click to view) + + - **Inactive**: `inactive` + - **Ready**: `ready` + - **Delayed start**: `delayedstart` + - **Run**: `run` + - **Pause**: `pause` + - **Action required**: `actionrequired` + - **Finished**: `finished` + - **Error**: `error` + - **Aborting**: `aborting` + +
    +- **Door state**: + - **Description**: Represents the current state of the door. + - **Availability**: Oven, Dishwasher, Dryer, Washer, Washer dryer, Freezer, Fridge freezer, Refrigerator, Wine cooler + -
    + Options: (click to view) + + - **Closed**: `closed` + - **Locked**: `locked` + - **Open**: `open` + +
    +- **Coffee counter**: + - **Description**: Represents the number of coffees made. + - **Availability**: Coffee maker +- **Powder coffee counter**: + - **Description**: Represents the number of powder coffees made. + - **Availability**: Coffee maker +- **Hot water counter**: + - **Description**: Represents the milliliters of hot water dispensed. + - **Availability**: Coffee maker +- **Hot water cups**: + - **Description**: Represents the number of hot water cups dispensed. + - **Availability**: Coffee maker +- **Hot milk counter**: + - **Description**: Represents the number of hot milk cups dispensed. + - **Availability**: Coffee maker +- **Frothy milk counter**: + - **Description**: Represents the number of frothy milk cups dispensed. + - **Availability**: Coffee maker +- **Milk counter**: + - **Description**: Represents the number of milk cups dispensed. + - **Availability**: Coffee maker +- **Coffee and milk counter**: + - **Description**: Represents the number of coffee and milk cups dispensed. + - **Availability**: Coffee maker +- **Ristretto Espresso counter**: + - **Description**: Represents the number of Ristretto Espresso cups dispensed. + - **Availability**: Coffee maker +- **Battery level**: + - **Description**: Represents the level of the battery. + - **Availability**: Cleaning robot +- **Camera state**: + - **Description**: Represents the state of the camera. + - **Availability**: Cleaning robot + -
    + Options: (click to view) + + - **Disabled**: `disabled` + - **Sleeping**: `sleeping` + - **Ready**: `ready` + - **Streaming local**: `streaminglocal` + - **Streaming cloud**: `streamingcloud` + - **Streaming local and cloud**: `streaminglocalancloud` + - **Error**: `error` + +
    +- **Last selected map**: + - **Description**: Represents the last selected map of the cleaning robot. + - **Availability**: Cleaning robot + -
    + Options: (click to view) + + - **Temporary map**: `tempmap` + - **Map 1**: `map1` + - **Map 2**: `map2` + - **Map 3**: `map3` + +
    +- **Current cavity temperature**: + - **Description**: Represents the current cavity temperature. + - **Availability**: Oven + +{% important %} +It is not recommended to use the **Current cavity temperature** sensor because the temperature might not provide the necessary accuracy. +{% endimportant %} + +#### Event sensors + +{% details "Event sensor options" %} +All the event sensors will have the following possible values: + +- **Confirmed**: `confirmed` +- **Present**: `present` +- **Off**: `off` + +{% enddetails %} + +- **Program aborted**: + - **Description**: Event triggered each time a program is successfully canceled. + - **Availability**: Cook processor, Cleaning robot, Dishwasher +- **Program finished**: + - **Description**: Event triggered each time a program run is successfully finished. + - **Availability**: Cook processor, Cooktop, Hood, Oven, Cleaning robot, Dishwasher, Washer, Washer dryer +- **Alarm clock elapsed**: + - **Description**: Event triggered when the alarm clock has elapsed. + - **Availability**: Cooktop, Oven +- **Pre-heat finished**: + - **Description**: Event triggered when **Fast pre-heat** program option is active and the preheating phase is finished. + - **Availability**: Cooktop, Oven +- **Regular pre-heat finished**: + - **Description**: Event triggered when the preheating phase is finished (and the **Fast pre-heat** option is not active nor supported). + - **Availability**: Oven +- **Drying process finished**: + - **Description**: Event triggered when the drying process is finished. + - **Availability**: Dryer +- **Salt nearly empty**: + - **Description**: Event triggered when the salt supply is running low. + - **Availability**: Dishwasher +- **Rinse aid nearly empty**: + - **Description**: Event triggered when the rinse aid supply is running low. + - **Availability**: Dishwasher +- **Bean container empty**: + - **Description**: Event triggered when the bean container is empty. + - **Availability**: Coffee maker +- **Water tank empty**: + - **Description**: Event triggered when the water tank is empty. + - **Availability**: Coffee maker +- **Drip tray full**: + - **Description**: Event triggered when the drip tray is full. + - **Availability**: Coffee maker +- **Keep milk tank cool**: + - **Description**: Event triggered when the user should remove the milk container and put it in a cool place so that the milk stays fresh. + - **Availability**: Coffee maker +- **Descaling in 20 cups**: + - **Description**: Event triggered when there are 20 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Descaling in 15 cups**: + - **Description**: Event triggered when there are 15 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Descaling in 10 cups**: + - **Description**: Event triggered when there are 10 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Descaling in 5 cups**: + - **Description**: Event triggered when there are 5 cups left before the descaling process is required. + - **Availability**: Coffee maker +- **Device should be descaled**: + - **Description**: Event triggered when the device should be descaled. + - **Availability**: Coffee maker +- **Device descaling overdue**: + - **Description**: Event triggered when the device descaling is overdue. + - **Availability**: Coffee maker +- **Device descaling blockage**: + - **Description**: Event triggered when the device descaling is blocked. + - **Availability**: Coffee maker +- **Device should be cleaned**: + - **Description**: Event triggered when the device should be cleaned. + - **Availability**: Coffee maker +- **Device cleaning overdue**: + - **Description**: Event triggered when the device cleaning is overdue. + - **Availability**: Coffee maker +- **Calc'N'Clean in 20 cups**: + - **Description**: Event triggered when there are 20 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Calc'N'Clean in 15 cups**: + - **Description**: Event triggered when there are 15 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Calc'N'Clean in 10 cups**: + - **Description**: Event triggered when there are 10 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Calc'N'Clean in 5 cups**: + - **Description**: Event triggered when there are 5 cups left before the Calc'N'Clean process is required. + - **Availability**: Coffee maker +- **Device should be Calc'N'Cleaned**: + - **Description**: Event triggered when the device should be Calc'N'Cleaned. + - **Availability**: Coffee maker +- **Device Calc'N'Clean overdue**: + - **Description**: Event triggered when the device Calc'N'Clean is overdue. + - **Availability**: Coffee maker +- **Device Calc'N'Clean blockage**: + - **Description**: Event triggered when the device Calc'N'Clean is blocked. + - **Availability**: Coffee maker +- **Freezer door alarm**: + - **Description**: Event triggered when the freezer door was left open too long. + - **Availability**: Freezer, Fridge freezer +- **Refrigerator door alarm**: + - **Description**: Event triggered when the refrigerator door was left open too long. + - **Availability**: Fridge freezer, Refrigerator +- **Freezer temperature alarm**: + - **Description**: Event triggered when the freezer temperature is too high. + - **Availability**: Freezer, Fridge freezer +- **Empty dust box and clean filter**: + - **Description**: Event triggered when the user has to empty the dust box and clean the filter. + - **Availability**: Cleaning robot +- **Cleaning robot is stuck**: + - **Description**: Event triggered when the cleaning robot is stuck and isn't able to continue its run. + - **Availability**: Cleaning robot +- **Docking station not found**: + - **Description**: Event triggered when the cleaning robot wasn't able to find the charging station. + - **Availability**: Cleaning robot +- **Poor i-Dos 1 fill level**: + - **Description**: Event triggered when i-Dos content 1 is poor. + - **Availability**: Washer +- **Poor i-Dos 2 fill level**: + - **Description**: Event triggered when i-Dos content 2 is poor. + - **Availability**: Washer +- **Grease filter max saturation nearly reached**: + - **Description**: Event triggered when the grease filters need to be cleaned soon + - **Availability**: Hood +- **Grease filter max saturation reached**: + - **Description**: Event triggered when the grease filters are saturated + - **Availability**: Hood + +{% enddetails %} + +### Switch + +{% details "List of switch entities" %} + +- **Power**: + - **Description**: Turns on and turns off or sets the standby mode of the device. + - **Availability**: All the appliances + +{% note %} +Some devices only have the state `on` and turn off is not supported by the appliance, check [power state availability at Home Connect API documentation](https://api-docs.home-connect.com/settings/#power-state) for more information. +{% endnote %} + +- **Child lock**: + - **Description**: Represents the state of the child lock. + - **Availability**: Coffee maker, Cooktop, Oven, Warming drawer, Dishwasher, Dryer, Washer, Washer dryer, Freezer, Fridge freezer, Refrigerator, Wine cooler +- **Cup warmer**: + - **Description**: Enables/Disables the cup warmer. + - **Availability**: Coffee maker +- **Freezer super mode**: + - **Description**: Cool the freezer compartment to the lowest temperature until disabled or a timeout. + - **Availability**: Freezer, Fridge freezer +- **Refrigerator super mode**: + - **Description**: Cool the refrigerator compartment to the lowest temperature until disabled or a timeout. + - **Availability**: Fridge freezer, Refrigerator +- **Eco mode**: + - **Description**: Enables/Disables the eco-friendly mode. + - **Availability**: Freezer, Fridge freezer, Refrigerator +- **Sabbath mode**: + - **Description**: Enables/Disables the Sabbath mode, which disables various functions (e.g. lighting, acoustic signals) to ensure that practising Jews can use the appliance on the Sabbath. + - **Availability**: Oven, Freezer, Fridge freezer, Refrigerator, Wine cooler +- **Vacation mode**: + - **Description**: Enables/Disables the vacation mode, which reduces the energy consumption of the appliance by switching the refrigerator temperature to +14ºC. The temperature in the freezer is maintained according to the setting. + - **Availability**: Fridge freezer, Refrigerator +- **Fresh mode**: + - **Description**: Enables/Disables the fresh mode, which reduces the temperature automatically in the refrigerator compartment to 2ºC. The freezer remains unchanged. + - **Availability**: Fridge freezer, Refrigerator +- **Dispenser enabled**: + - **Description**: Enables/Disables the ice water dispenser. + - **Availability**: Fridge freezer, Refrigerator +- **Freezer door assistant**: + - **Description**: Enables/Disables the automatic door opening for the freezer compartment + - **Availability**: Freezer, Fridge freezer +- **Fridge door assistant**: + - **Description**: Enables/Disables the automatic door opening for the refrigerator/freezer compartment + - **Availability**: Fridge freezer, Refrigerator + +{% enddetails %} + +### Time + +{% details "List of time entities" %} + +- **Alarm clock** + - **Description**: Sets the alarm clock. + - **Availability**: Cooktop, Oven + +{% enddetails %} + ## Actions The Home Connect integration makes various actions available. -Available actions: `set_option_active`, `set_option_selected`, `pause_program`, `resume_program`, `select_program`, `start_program` and `change_setting` +Available actions: `set_program_and_options`, and `change_setting` -### Action `home_connect.set_option_active` +### Action `home_connect.set_program_and_options` -Sets an option for the active program. +Starts or selects a program. If the `program` attribute is not set, this action sets the options for the active or the selected program. | Data attribute | Optional | Description | |---------------------------|----------|--------------------------------------------------| -| `device_id` | no | Id of a device associated with the home appliance. | -| `key` | no | Key of the option. | -| `value` | no | Value of the option. | -| `unit` | yes | Unit for the option. | - -### Action `home_connect.set_option_selected` - -Sets an option for the selected program. - -| Data attribute | Optional | Description | -|---------------------------|----------|--------------------------------------------------| -| `device_id` | no | Id of a device associated with the home appliance. | -| `key` | no | Key of the option. | -| `value` | no | Value of the option. | -| `unit` | yes | Unit for the option. | - -### Action `home_connect.pause_program` - -Pauses the current running program. - -| Data attribute | Optional | Description | -|---------------------------|----------|--------------------------------------------------| -| `device_id` | no | Id of a device associated with the home appliance. | - -### Action `home_connect.resume_program` - -Resumes a paused program. - -| Data attribute | Optional | Description | -|---------------------------|----------|--------------------------------------------------| -| `device_id` | no | Id of a device associated with the home appliance. | - -### Action `home_connect.select_program` - -Selects a program without starting it. - -| Data attribute | Optional | Description | -|---------------------------|----------|--------------------------------------------------| -| `device_id` | no | Id of a device associated with the home appliance. | -| `program` | no | Program to select. | -| `key` | yes | Key of the option. | -| `value` | yes | Value of the option. | -| `unit` | yes | Unit for the option. | - -### Action `home_connect.start_program` - -Selects a program and starts it. - -| Data attribute | Optional | Description | -|---------------------------|----------|--------------------------------------------------| -| `device_id` | no | Id of a device associated with the home appliance. | -| `program` | no | Program to select. | -| `key` | yes | Key of the option. | -| `value` | yes | Value of the option. | -| `unit` | yes | Unit for the option. | +| `device_id` | no | ID of the device. | +| `affects_to` | no | Selects if the program affected by the action should be the active or the selected program. | +| `program` | yes | Program to select. If set, it will start or select a program depending on `affects_to`. | +| `consumer_products_cleaning_robot_option_reference_map_id` | yes | Defines which reference map is to be used. | +| `consumer_products_cleaning_robot_option_cleaning_mode` | yes | Defines the favoured cleaning mode. | +| `consumer_products_coffee_maker_option_bean_amount` | yes | Describes the amount of coffee beans used in a coffee machine program. | +| `consumer_products_coffee_maker_option_fill_quantity` | yes | Describes the amount of water (in ml) used in a coffee machine program. | +| `consumer_products_coffee_maker_option_coffee_temperature` | yes | Describes the coffee temperature used in a coffee machine program. | +| `consumer_products_coffee_maker_option_bean_container` | yes | Defines the preferred bean container. | +| `consumer_products_coffee_maker_option_flow_rate` | yes | Defines the water-coffee contact time. The duration extends to coffee intensity. | +| `consumer_products_coffee_maker_option_multiple_beverages` | yes | Defines if double dispensing is enabled. | +| `consumer_products_coffee_maker_option_coffee_milk_ratio` | yes | Defines the amount of milk. | +| `consumer_products_coffee_maker_option_hot_water_temperature` | yes | Defines the temperature suitable for the type of tea. | +| `b_s_h_common_option_start_in_relative` | yes | Defines when the program should start, in seconds from now. For example: a value of 9000 means in 2 h 30 min. | +| `dishcare_dishwasher_option_intensiv_zone` | yes | Defines if the cleaning is done with higher spray pressure on the lower basket for very dirty pots and pans. | +| `dishcare_dishwasher_option_brilliance_dry` | yes | Defines if the program sequence is optimized with a special drying cycle to ensure more shine on glasses and plastic items. | +| `dishcare_dishwasher_option_vario_speed_plus` | yes | Defines if the program duration is shortened dynamically (up to 66% less run time) with the usual optimum cleaning and drying. | +| `dishcare_dishwasher_option_silence_on_demand` | yes | Defines if the extra silent mode is activated for a selected period of time. | +| `dishcare_dishwasher_option_half_load` | yes | Defines if economical cleaning is enabled for smaller loads. This reduces energy and water consumption and also saves time. The utensils can be placed in the upper and lower baskets. | +| `dishcare_dishwasher_option_extra_dry` | yes | Defines if improved drying for glasses and plasticware is enabled. | +| `dishcare_dishwasher_option_hygiene_plus` | yes | Defines if the cleaning is done with increased temperatures. This ensures maximum hygienic cleanliness for regular use. | +| `dishcare_dishwasher_option_eco_dry` | yes | Defines if the door is opened automatically for extra energy efficient and effective drying. | +| `dishcare_dishwasher_option_zeolite_dry` | yes | Defines if the program sequence is optimized with special drying cycle ensures improved drying for glasses, plates and plasticware. | +| `laundry_care_dryer_option_drying_target` | yes | Describes the drying target for a dryer program. For example: Iron Dry, Cupboard Dry, Extra Dry. | +| `cooking_hood_option_venting_level` | yes | Defines the required fan setting. | +| `cooking_hood_option_intensive_level` | yes | Defines the intensive setting. | +| `cooking_oven_option_setpoint_temperature` | yes | Defines the target cavity temperature, which will be held by the oven. | +| `b_s_h_common_option_duration` | yes | Defines the run-time of the program. Afterwards, the appliance is stopped. | +| `cooking_oven_option_fast_pre_heat` | yes | Defines if the cooking compartment is heated up quickly. Please note that the setpoint temperature has to be equal to or higher than 100 °C or 212 °F. Otherwise, the fast pre-heat option is not activated. | +| `cooking_oven_option_warming_level` | yes | Defines the level of the warming drawer. | +| `laundry_care_washer_option_temperature` | yes | Defines the temperature of the washing program. | +| `laundry_care_washer_option_spin_speed` | yes | Defines the spin speed of a washer program. | +| `b_s_h_common_option_finish_in_relative` | yes | Defines when the program should end, in seconds from now. For example: a value of 9000 means in 2 h 30 min. | +| `laundry_care_washer_option_i_dos1_active` | yes | Defines if the detergent feed is activated / deactivated. (i-Dos content 1) | +| `laundry_care_washer_option_i_dos2_active` | yes | Defines if the detergent feed is activated / deactivated. (i-Dos content 2) | +| `laundry_care_washer_option_vario_perfect` | yes | Defines if a cycle saves energy (Eco Perfect) or time (Speed Perfect). | ### Action `home_connect.change_setting` @@ -173,3 +1074,186 @@ Changes a setting. | `device_id` | no | Id of a device associated with the home appliance. | | `key` | no | Key of the setting. | | `value` | no | Value of the setting. | + +## Automation examples + +Get started with these automation examples + +### Send a notification when the appliance ends the program + +{% details "Example YAML configuration" %} + +{% raw %} + +```yaml +alias: "Notify when program ends" +triggers: + - trigger: state + entity_id: + - sensor.appliance_operation_state + to: finished +actions: + - service: notify.notify + data: + message: "The appliance has finished the program." +``` + +{% endraw %} +{% enddetails %} + +### Start a program when electricity is cheap + +Because electricity is typically cheaper at night, this automation will activate the silent mode when starting the program at night. + +{% details "Example YAML configuration" %} + +{% raw %} + +```yaml +alias: "Start program when electricity is cheap" +triggers: + - trigger: state + entity_id: sensor.electricity_price + to: "0.10" +conditions: + - condition: state + entity_id: sensor.diswasher_door + state: closed +actions: + - if: + - condition: time + after: '22:00:00' + before: '06:00:00' + then: + - service: home_connect.set_program_and_options + data: + device_id: "your_device_id" + affects_to: "active_program" + program: "dishcare_dishwasher_program_eco_50" + options: + - key: "dishcare_dishwasher_option_silence_on_demand" + value: true + else: + - service: home_connect.set_program_and_options + data: + device_id: "your_device_id" + affects_to: "active_program" + program: "dishcare_dishwasher_program_eco_50" +``` + +{% endraw %} +{% enddetails %} + +## Data updates + +This integration uses server-sent events from the Home Connect API to receive live updates from the appliances. +When the configuration entry is loaded or after a streaming error (for example after disconnection), the integration will request all data (such as appliance info, available commands, programs, settings, and status) for all appliances. +If a new appliance is added to the account, the integration will request data for the new appliance and expose the related entities automatically. + +## Known limitations + +- The Home Connect API does not fully match the Home Connect app. Some programs, options, or settings available in the app may not be accessible or usable via the API. +- This integration supports only one integration entry, as the Home Connect API does not allow for the unique identification of an account. + +## Troubleshooting + +### I could not configure the Home Connect integration + +#### Symptom: I tried to configure the Home Connect integration, but it failed with the message `Error while obtaining access token.` + +##### Description + +This problem might occur when the application credentials are not correctly configured. + +##### Solution + +To solve the above issue, follow these steps: + +1. Go to {% my integrations title="**Settings** > **Devices & services**" %}. +2. In the top right corner, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Application credentials**. + + ![Devices and services overflow menu](/images/integrations/application_credentials/devices-and-services-menu.png) + + ![Application credential list](/images/integrations/application_credentials/application-credentials.png) +3. Select the three dots {% icon "mdi:dots-vertical" %} menu from the application credentials you created for the Home Connect integration and select **Delete**. +4. Add the Home Connect integration again under {% my integrations title="**Settings** > **Devices & services**" %} + +### Missing options at the "active program" and "selected program" entities + +#### Symptom: "Although I have options, some programs that are available on the app are not in the list of options at the "active program" and "selected program" entities" + +Some programs that are available to select on the app, on the physical device or in the diagnostics file from the device are missing at the "active program" and "selected program" entities. + +##### Description + +If you see programs in the app or the physical device that are missing in the integration, first check if they are available in the [diagnostics file](https://www.home-assistant.io/docs/configuration/troubleshooting/#download-diagnostics). If they are in the diagnostics file, it means the API can send them to the integration, but the integration can't recognize them. + +##### Solution + +The program key needs to be added to the integration. To help with that, you can open an issue at [aiohomeconnect](https://github.com/MartinHjelmare/aiohomeconnect) about the missing program key. + +#### Symptom: "No programs available at the "active program" and "selected program" entities nor in the diagnostics file" + +There are no programs available to select at the "active program" and "selected program" entities, and the downloaded device diagnostics file does not list any programs. + +##### Description + +The Home Connect API is not sending any programs to the integration. + +##### Solution + +There's no solution for this issue. The only thing that can be done is reporting the issue to Home Connect through these channels: + +- [Home Connect service and contact](https://www.home-connect.com/us/en/support/contact-and-service) +- [Home Connect developer Help & Support](https://developer.home-connect.com/support) + +### Unavailable entities for a device + +#### Symptom: "The entities related to an appliance were available but no longer are" + +After reloading the Home Connect integration, the entities related to an appliance that used to be available are no longer available. +Also, when downloading the diagnostics data from the device entry, the following data is obtained: + +```json +{ + "data": { + "connected": false, + "status": {}, + "programs": null + } +} +``` + +##### Description + +Unavailable entities can have multiple causes: + +- The appliance is turned off. When it is turned off, the appliance is disconnected and the API does not retrieve information about the appliance. +- The appliance is experiencing a network issue. +- The Home Connect API is experiencing issues. + +##### Solution + +To try to solve the above issues, follow these steps: + +1. Turn on the appliance and reload the Home Connect integration. +2. If the appliance is turned on and the issue persists, check the network connection of the appliance and perform a soft reset on the appliance. +3. If the issue persists, check the connection of the appliance with the Home Connect API by checking it in the Home Connect app. + 1. Open the Home Connect app. + 2. Go to the appliance that is experiencing the issue. + 3. At the bottom of the screen, open the settings menu. + 4. Go to the **Network** section. + 5. Verify if the appliance is connected to the cloud: + - If the line between the appliance and the cloud is red and with a red warning icon {% icon "mdi:alert-outline" %}, the appliance is not connected to the Home Connect API. + - If the line between the appliance and the cloud is green, the appliance is connected to the cloud. +4. If everything is correct and the issue persists, contact Home Connect support. + - [Home Connect service and contact](https://www.home-connect.com/us/en/support/contact-and-service) + - [Home Connect developer Help & Support](https://developer.home-connect.com/support) + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} + +After deleting the integration, go to [your applications at the Home Connect Developer portal](https://developer.home-connect.com/applications), find the application that you were using for Home Assistant, click on details and click on "Delete Application". diff --git a/source/_integrations/home_plus_control.markdown b/source/_integrations/home_plus_control.markdown index e8d1d1c263c..876bf968739 100644 --- a/source/_integrations/home_plus_control.markdown +++ b/source/_integrations/home_plus_control.markdown @@ -3,6 +3,7 @@ title: Legrand Home+ Control description: Connect and control your Legrand Home+ Control devices using the Netatmo integration ha_category: - Binary sensor + - Button - Camera - Climate - Cover @@ -24,6 +25,7 @@ ha_codeowners: ha_config_flow: true ha_platforms: - binary_sensor + - button - camera - climate - cover diff --git a/source/_integrations/homeassistant.markdown b/source/_integrations/homeassistant.markdown index e468fdf2ff5..c6022b62da3 100644 --- a/source/_integrations/homeassistant.markdown +++ b/source/_integrations/homeassistant.markdown @@ -47,8 +47,6 @@ To get started with the general settings in YAML, follow these steps: currency: USD country: US time_zone: "America/Los_Angeles" - external_url: "https://www.example.com" - internal_url: "http://homeassistant.local:8123" allowlist_external_dirs: - "/usr/var/dumping-ground" - "/tmp" @@ -101,11 +99,11 @@ currency: type: string default: "EUR" external_url: - description: "The URL that Home Assistant is available on from the internet. For example: `https://example.duckdns.org:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported." + description: "The URL that Home Assistant is available on from the internet. For example: `https://example.duckdns.org:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported. This can also be configured by navigating to **{% my network title="Settings > System > Network" %}**." required: false type: string internal_url: - description: "The URL that Home Assistant is available on from your local network. For example: `http://homeassistant.local:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported." + description: "The URL that Home Assistant is available on from your local network. For example: `http://192.168.0.10:8123`. Note that this setting may only contain a protocol, hostname and port; using a path is not supported. This can also be configured by navigating to **{% my network title="Settings > System > Network" %}**." required: false type: string customize: diff --git a/source/_integrations/homee.markdown b/source/_integrations/homee.markdown new file mode 100644 index 00000000000..3ec752e1fda --- /dev/null +++ b/source/_integrations/homee.markdown @@ -0,0 +1,75 @@ +--- +title: Homee +description: Instructions on how to setup Homee devices in Home Assistant. +ha_category: + - Cover +ha_config_flow: true +ha_release: 2025.2 +ha_iot_class: Local Push +ha_codeowners: + - '@Taraman17' +ha_domain: homee +ha_platforms: + - binary_sensor + - button + - cover + - light + - number + - select + - sensor + - switch + - valve +ha_integration_type: hub +ha_quality_scale: bronze +--- + +[Homee](https://hom.ee) is a smart home system, able to integrate various protocols such as Z-Wave, Zigbee, EnOcean, and more. The Homee {% term integration %} will let you use the {% term devices %} from your Homee in Home Assistant. + +There is currently support for the following device types in Home Assistant: + +- binary sensor +- button +- cover +- light +- number +- sensor +- select +- switch +- valve + +## Prerequisites + +You need to create a new user in your Homee app. Create a user that is only used by Home Assistant. For security reasons, it's recommended to: + +- Use a strong, unique password. +- Restrict the user's permissions for what you want to do from Home Assistant. +- Do not use this account for any other purpose. + +1. In your Homee app, in the top-left corner, tap the menu button. +2. On the top right of the opening menu, tap the gear {% icon "mdi:gear-outline" %} icon. +3. Choose **Manage users**. +4. Choose **Add user** and configure the desired values. + +{% include integrations/config_flow.md %} + +{% configuration_basic %} +Host: + description: The IP Address of your Homee. +User: + description: The username you chose in the Prerequisites. +Password: + description: The password for that user. +{% endconfiguration_basic %} + +Available devices will automatically show up in your Home Assistant installation. +New devices added to Homee will be automatically discovered after a restart of Home Assistant. This restart is only required when adding new devices, not for state updates of existing devices. + +## Limitations + +Changed values are reported from Homee in defined time intervals and not always in realtime. For example, while a cover moves, the position is updated only every few seconds and intermediate states may be missed by Home Assistant. + +## Removing the integration + +This integration follows standard integration removal, and once the integration is removed, you can also remove the dedicated user from your Homee. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index 0d8c72b7bf3..e04c82fe4a0 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -406,7 +406,7 @@ The following integrations are currently supported: | Integration | Type Name | Description | | ------------------------------------------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | alarm_control_panel | SecuritySystem | All security systems. | -| automation / input_boolean / remote / scene / script / vacuum | Switch | All represented as switches. | +| automation / input_boolean / lawn_mower / remote / scene / script / vacuum | Switch | All represented as switches. | | input_select / select | Switch | Represented as a power strip with buttons for each option. | | binary_sensor | Sensor | Support for `co2`, `door`, `garage_door`, `gas`, `moisture`, `motion`, `occupancy`, `opening`, `smoke` and `window` device classes. Defaults to the `occupancy` device class for everything else. | | camera | Camera | All camera devices. **HomeKit Secure Video is not supported at this time.** | diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown index 0f6345c135e..79957aa0a26 100644 --- a/source/_integrations/homematicip_cloud.markdown +++ b/source/_integrations/homematicip_cloud.markdown @@ -7,6 +7,7 @@ ha_category: - Button - Climate - Cover + - Event - Hub - Light - Lock @@ -22,6 +23,7 @@ ha_platforms: - button - climate - cover + - event - light - lock - sensor @@ -41,6 +43,7 @@ There is currently support for the following device types within Home Assistant: - Button - Climate - Cover +- Event - Light - Lock - Sensor @@ -149,6 +152,9 @@ Within this delay the device registration should be completed in the App, otherw - Module for Hoermann drives (*HMIP-MOD-HO*) - Hunter Douglas & erfal window blinds (*HMIP-HDM1*) +- homematicip_cloud.event + - Doorbell Event for devices *HmIP-DSD-PCB* and others where ChannelRole equals DOOR_BELL_INPUT + - homematicip_cloud.light - Switch actuator and meter for brand switches (*HmIP-BSM*) - Dimming actuator for brand switches (*HmIP-BDT*) diff --git a/source/_integrations/homewizard.markdown b/source/_integrations/homewizard.markdown index 5b56947165a..8b42457f3bb 100644 --- a/source/_integrations/homewizard.markdown +++ b/source/_integrations/homewizard.markdown @@ -31,11 +31,16 @@ Integration for the [HomeWizard Energy](https://www.homewizard.com) platform. It - [Wi-Fi Energy Socket](https://www.homewizard.com/energy-socket): Sensors for power import/export and energy consumption, and switches for controlling the outlet (model: `HWE-SKT`). - [Wi-Fi Watermeter](https://www.homewizard.com/watermeter): Sensors for active and total water usage (model: `HWE-WTR`). - [Wi-Fi kWh Meter](https://www.homewizard.com/kwh-meter): Sensors for power import/export and energy consumption (models: `HWE-KWH1`, `HWE-KWH3`, `SDM230-wifi`, and `SDM630-wifi`.). +- [Plug-In Battery](https://www.homewizard.com/nl/plug-in-battery/): Sensors for power import/export, energy consumption, production, and state of charge (model: `HWE-BAT`). ## Enable the API You have to enable the local API to allow Home Assistant to communicate with your device. Do this in the HomeWizard Energy app: +{% tip %} +You can skip this step if you are configuring your Wi-Fi P1 Meter with firmware version 6 or higher, or your Plug-In Battery. These products use a different authentication method that doesn't require enabling the local API. +{% endtip %} + 1. Go to Settings (gear icon in the upper-right). 2. Go to 'Meters'. 3. Select your device. @@ -48,45 +53,70 @@ IP address: description: "The IP address of your device. You can find it in your router." {% endconfiguration_basic %} -## Sensors +## Supported functionality -Sensors for the P1 meter, Energy Socket, and kWh meter: +The HomeWizard integration provides sensors about what your device is measuring or doing. All of them are provided as {% term entities %} in Home Assistant. Below is an overview of the entities provided by this integration. -- **Energy import/export (kWh)**: Total energy imported or exported since installation. Each tariff has its own sensor (e.g., T1, T2) and a sensor for the combined value. -- **Power (W)**: Active power that is measured on each phase. +### P1 Meter -Sensors for P1 meter, only available when the smart meter exposes these values: +_Not all sensors are provided by all Smart Meters, only the available sensors are shown in the integration._ -- **Gas usage (m³)**: Total gas used since the installation of the gas meter. A gas meter sends its measurement once every 5 minutes or per hour, depending on the version of the smart meter. +- **Energy import/export (kWh)**: Total energy imported or exported since installation of your smart meter. Each tariff has its own sensor (e.g., T1, T2) and a sensor for the combined value. +- **Power (W)**: Active power measured, each phase has its own sensor. +- **Voltage (V)**: Active voltage measured, each phase has its own sensor. +- **Current (A)**: Active current measured, each phase has its own sensor. - **Tariff**: Current tariff that is used. Can be used to keep consumption as low as possible during peak hours. -- **Voltage (V)**: Active voltage measured on each phase. -- **Current (A)**: Active current measured on each phase. - **Frequency (Hz)**: Net frequency. - **Voltage sags and swells**: Number of times a voltage sag or swell has been detected. - **Power failures**: Two sensors indicate the number of power failures detected by the smart meter. One for all power failures and another for 'long' power failures. - **Peak demand**: Belgium users are starting to get charged for the peak usage per month (see [capaciteitstarief](https://www.fluvius.be/thema/factuur-en-tarieven/capaciteitstarief)). Two sensors are available: one shows the current quarterly average, and another shows the peak measured this month. Both sensors are provided directly from the smart meter and can be used to keep the peak as low as possible. -Sensors for Energy Socket and kWh meter: +External meters, like a gas or water meter, can be connected to your Smart meter. Each device is exposed as a separate {% term device %} with its own measurement. -- **Voltage (V)**: Active voltage measured on each phase. -- **Current (A)**: Active current measured on each phase. +### kWh Meter + +- **Energy import/export (kWh)**: Total energy imported or exported measured by kWh meter. +- **Power (W)**: Active power that is measured, each phase has its own sensor. +- **Voltage (V)**: Active voltage measured, each phase has its own sensor. +- **Current (A)**: Active current measured, each phase has its own sensor. - **Frequency (Hz)**: Net frequency. -- **Reactive power (VAR)**: Active reactive power measurement on each phase. -- **Apparent power (VA)**: Active apparent power measurement on each phase. +- **Reactive power (VAR)**: Active reactive power measurement, each phase has its own sensor. +- **Apparent power (VA)**: Active apparent power measurement, each phase has its own sensor. -Sensors for Water meter: +### Energy Socket + +- **Energy import/export (kWh)**: Total energy imported or exported measured by Energy Socket. +- **Power (W)**: Active power that is measured. +- **Voltage (V)**: Active voltage measured. +- **Current (A)**: Active current measured. +- **Frequency (Hz)**: Net frequency. +- **Reactive power (VAR)***: Active reactive power measurement. +- **Apparent power (VA)***: Active apparent power measurement. + +{% note %} +Reactive power and apparent power are not available for all hardware versions, this depends on the internal metering chip. +{% endnote %} + +The Energy Socket also has a switch to control the outlet state and a status light that can be controlled. + +- **Switch**: Controls the outlet state of the Energy Socket. This switch is permanently on when _Switch Lock_ is turned on. Use this to control the power of simple devices, such as a heater or a charger. +- **Switch lock**: Forces the outlet state to the _on_ position and disables the physical button. This option is useful when the socket is used for a device that must not be turned off, such as a refrigerator. +- **Status light brightness**: Controls the brightness of the green status light. This light turns on when the switch is on. + +### Watermeter - **Water usage (L/min)**: Flow of water measured at that time. - **Total water usage (m³)**: Total water usage since the installation of the HomeWizard Water meter. -## Energy Socket +### Plug-In Battery -The Energy Socket outlet state and status light can be controlled. There are two switches: - -- **Switch**: Controls the outlet state of the Energy Socket. This switch is permanently on when _Switch Lock_ is turned on. Use this to control the power of simple devices, such as a heater or a charger. -- **Switch lock**: Forces the outlet state to the _on_ position and disables the physical button. This option is useful when the socket is used for a device that must not be turned off, such as a refrigerator. - -You can also control the green status light brightness with **Status light brightness**. This light turns on when the switch is on. +- **Energy import/export (kWh)**: Total energy imported or exported by the battery. +- **Power (W)**: Active power consumed or produced by the battery. +- **Voltage (V)**: Active voltage measured. +- **Current (A)**: Active current consumed or produced by the battery. +- **Frequency (Hz)**: Net frequency. +- **Cycles**: Number of charge cycles the battery has gone through. +- **State of charge (%)**: The current state of charge of the battery. ## Identify @@ -97,7 +127,7 @@ _This feature is not available for the kWh Meter._ The HomeWizard Energy devices are designed to work with the HomeWizard Energy app and require communication with the HomeWizard cloud to function with the app. The "Cloud connection" configuration toggle can be used to turn off all communication with the HomeWizard cloud, making the device fully local. The device cannot communicate with the app, and the device won't receive any future firmware updates. -Cloud communication is restored when the switch is turned on again. Cloud communications are also restored after a factory reset, or when the device is put in pairing mode. +This feature is not available for the Plug-In Battery. Cloud communication is restored when the switch is turned on again. Cloud communications are also restored after a factory reset, or when the device is put in pairing mode. ## Examples @@ -107,6 +137,10 @@ If you know the energy characteristics of your washing machine, you can create a - [Appliance Power Monitor Blueprint With Elapsed Time and Energy Used Variables](https://community.home-assistant.io/t/appliance-power-monitor-blueprint-with-elapsed-time-and-energy-used-variables/549073), created by [@Jhonattan-Souza](https://community.home-assistant.io/u/jhonattan-souza) +### Add your Energy data to the Energy dashboard + +The HomeWizard Energy integration provides data that can be used in the Energy dashboard. To add your data to the Energy dashboard, follow the steps in the [Energy dashboard documentation](/home-energy-management). + ## Data fetching interval The integration is {% term polling %} new data every 5 seconds. There is no limitation on the number or frequency of requests that can be made to the device. @@ -134,6 +168,19 @@ It may happen that you can't find your devices or they won't show up in the inte - Make sure you have enabled the local API in device settings via the HomeWizard Energy app. - Make sure both Home Assistant and the device are on the same network. +### Which button do I need to press to configure the device? + +1. During setup, you may be asked to press a button on your device to authenticate it with Home Assistant. + - **P1 Meter**: Press the white button on the front of the P1 Meter. + - **Plug-In Battery**: Press the black touch button on the front of the device. You will hear a beep. + - **Energy Socket**, **Water Meter** and **kWh Meter**: they do not require this step. +2. After pressing the button, you must select **Continue** within 30 seconds to complete the setup. + - If the setup times out, you may need to press the button again. + +## I can't find sensors like voltage, current, or frequency + +Some sensors are disabled by default. You can enable them in the integration setup. See the [enabling or disabling entities](/common-tasks/general/#enabling-or-disabling-entities) documentation for more information. + ## Remove integration This integration follows standard integration removal. diff --git a/source/_integrations/honeywell.markdown b/source/_integrations/honeywell.markdown index 3b6f9e9d1b0..ed77ed07352 100644 --- a/source/_integrations/honeywell.markdown +++ b/source/_integrations/honeywell.markdown @@ -14,6 +14,7 @@ ha_domain: honeywell ha_platforms: - climate - diagnostics + - humidifier - sensor - switch ha_integration_type: integration diff --git a/source/_integrations/html5.markdown b/source/_integrations/html5.markdown index b1c425cb28e..c5317a29df3 100644 --- a/source/_integrations/html5.markdown +++ b/source/_integrations/html5.markdown @@ -29,7 +29,7 @@ The `html5` platform can only function if all of the following requirements are - You are using Chrome and/or Firefox on any desktop platform, ChromeOS or Android. Or you added your Home Assistant instance to your home screen on iOS 16.4 or higher. - Your Home Assistant instance is accessible from outside your network over HTTPS or can perform an alternative [Domain Name Verification Method](https://support.google.com/webmasters/answer/9008080#domain_name_verification) on the domain used by Home Assistant. -- If using a proxy, HTTP basic authentication must be off for registering or unregistering for push notifications. It can be re-enabled afterwards. +- If using a proxy, HTTP basic authentication must be disabled to register or deregister push notifications. It can be re-enabled afterwards. - If you don't run Hass.io: `pywebpush` must be installed. `libffi-dev`, `libpython-dev` and `libssl-dev` must be installed prior to `pywebpush` (i.e., `pywebpush` probably won't automatically install). - 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. @@ -83,7 +83,7 @@ data: #### Data -Any parameters that you pass in the notify payload that aren't valid for use in the HTML5 notification (`actions`, `badge`, `body`, `dir`, `icon`, `image`, `lang`, `renotify`, `requireInteraction`, `tag`, `timestamp`, `vibrate`, `priority`, `ttl`) will be sent back to you in the [callback events](#automating-notification-events). +Any parameters that you pass in the notify payload that aren't valid for use in the HTML5 notification (`actions`, `badge`, `body`, `dir`, `icon`, `image`, `lang`, `renotify`, `requireInteraction`, `tag`, `timestamp`, `vibrate`, `priority`, `ttl`, `silent`) will be sent back to you in the [callback events](#automating-notification-events). ```yaml title: Front door @@ -195,7 +195,7 @@ Common event payload parameters are: | Parameter | Description | | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `action` | The `action` key that you set when sending the notification of the action clicked. Only appears in the `clicked` event. | -| `data` | The data dictionary you originally passed in the notify payload, minus any parameters that were added to the HTML5 notification (`actions`, `badge`, `body`, `dir`, `icon`, `image`, `lang`, `renotify`, `requireInteraction`, `tag`, `timestamp`, `vibrate`). | +| `data` | The data dictionary you originally passed in the notify payload, minus any parameters that were added to the HTML5 notification (`actions`, `badge`, `body`, `dir`, `icon`, `image`, `lang`, `renotify`, `requireInteraction`, `tag`, `timestamp`, `vibrate`, `silent`). | | `tag` | The unique identifier of the notification. Can be overridden when sending a notification to allow for replacing existing notifications. | | `target` | The target that this notification callback describes. | | `type` | The type of event callback received. Can be `received`, `clicked` or `closed`. | diff --git a/source/_integrations/hue.markdown b/source/_integrations/hue.markdown index 0c6924f16b4..ed661f822a8 100644 --- a/source/_integrations/hue.markdown +++ b/source/_integrations/hue.markdown @@ -64,7 +64,7 @@ You can use this action for example if you'd like to start/stop Dynamic Mode. ## Hue remotes and switches -Hue remotes such as the Dimmer Switch are stateless devices, meaning that they do not have a on/off state like regular entities in Home Assistant. Instead, such devices emit the event `hue_event` when a button is pressed. You can test what events come in using the event {% my developer_events title="developer tools in Home Assistant" %} and subscribe to the `hue_event`. Once you know what the event data looks like, you can use this to create automations. +Hue remotes such as the Dimmer Switch are stateless devices, meaning that they do not have an on/off state like regular entities in Home Assistant. Instead, such devices emit the event `hue_event` when a button is pressed. You can test what events come in using the event {% my developer_events title="developer tools in Home Assistant" %} and subscribe to the `hue_event`. Once you know what the event data looks like, you can use this to create automations. {% note %} At the time of writing, there's a limitation on the Hue API that each device can only send one event per second. This means that button events are rate-limited to 1 per second. This is brought to the attention of Signify and it will hopefully be fixed soon. diff --git a/source/_integrations/humidifier.mqtt.markdown b/source/_integrations/humidifier.mqtt.markdown index 26039efe1c0..e82c0821ec6 100644 --- a/source/_integrations/humidifier.mqtt.markdown +++ b/source/_integrations/humidifier.mqtt.markdown @@ -59,7 +59,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -68,7 +68,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -84,7 +84,7 @@ current_humidity_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -145,7 +145,7 @@ device: required: false type: string device_class: - description: The device class of the MQTT device. Must be either `humidifier`, `dehumidifier` or `null`. + description: The [device class](/integrations/humidifier/#device-class) of the MQTT device. Must be either `humidifier`, `dehumidifier` or `null`. required: false type: string default: humidifier @@ -172,7 +172,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -234,7 +234,7 @@ payload_reset_mode: type: string default: '"None"' target_humidity_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `target_humidity_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `target_humidity_command_topic`. required: false type: template target_humidity_command_topic: @@ -246,11 +246,11 @@ target_humidity_state_topic: required: false type: string target_humidity_state_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the humidifier `target_humidity` state. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value for the humidifier `target_humidity` state. required: false type: template mode_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `mode_command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `mode_command_topic`. required: false type: template mode_command_topic: @@ -262,7 +262,7 @@ mode_state_topic: required: false type: string mode_state_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value for the humidifier `mode` state. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value for the humidifier `mode` state. required: false type: template modes: @@ -289,7 +289,7 @@ state_topic: required: false type: string state_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a value from the state." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a value from the state." required: false type: template unique_id: diff --git a/source/_integrations/husqvarna_automower.markdown b/source/_integrations/husqvarna_automower.markdown index c6df677ca77..90b2695470c 100644 --- a/source/_integrations/husqvarna_automower.markdown +++ b/source/_integrations/husqvarna_automower.markdown @@ -29,6 +29,7 @@ ha_platforms: - switch ha_integration_type: integration ha_domain: husqvarna_automower +ha_quality_scale: silver --- The Husqvarna Automower integration provides connectivity with Husqvarna Automowers lawn mowers through Husqvarna's cloud API. Only mowers with *Automower® Connect* or with the *Automower® Connect Module* are supported. @@ -147,6 +148,7 @@ The integration will create the following sensors: - Battery level - Cutting blade usage time (if available) - Error. For example: *Mower tilted*, *outside geofence*. +- Downtime (if available) - Restricted reason. For example: *Week schedule*, *frost*, or *daily limit*. - Mode - Next start @@ -157,6 +159,7 @@ The integration will create the following sensors: - Total drive distance - Total running time - Total searching time +- Uptime (if available) - Work area (if available). For example: *My lawn*, *Front lawn*, *Back lawn* For each work area with activated systematic mowing these sensors are created: diff --git a/source/_integrations/hvv_departures.markdown b/source/_integrations/hvv_departures.markdown index a1d77aca6c3..08b6342798e 100644 --- a/source/_integrations/hvv_departures.markdown +++ b/source/_integrations/hvv_departures.markdown @@ -75,8 +75,7 @@ If the selected station has elevators, binary sensors will be available. You have to apply for credentials via the HVV website. You can see their official guide [here](https://www.hvv.de/de/fahrplaene/abruf-fahrplaninfos/datenabruf) (the page is only available in German). -In your mail, tell them you are using your API credentials for use within Home Assistant. They will send you a contract you will have to sign and send back. After about a week, you will receive your API credentials. - +In your mail, tell them you are using your API credentials for use within Home Assistant. They will subsequently send your API credentials in a follow-up response. ## Data Data is provided by [HVV](https://www.hvv.de/). diff --git a/source/_integrations/ibeacon.markdown b/source/_integrations/ibeacon.markdown index 38e771d94e8..c984360909c 100644 --- a/source/_integrations/ibeacon.markdown +++ b/source/_integrations/ibeacon.markdown @@ -14,8 +14,6 @@ ha_platforms: ha_bluetooth: true ha_config_flow: true ha_integration_type: integration -ha_codeowners: - - '@bdraco' --- {% include integrations/config_flow.md %} diff --git a/source/_integrations/idasen_desk.markdown b/source/_integrations/idasen_desk.markdown index f31ab9e81bd..4d938794280 100644 --- a/source/_integrations/idasen_desk.markdown +++ b/source/_integrations/idasen_desk.markdown @@ -12,12 +12,13 @@ ha_platforms: - button - cover - sensor -ha_integration_type: integration +ha_integration_type: device ha_codeowners: - '@abmantis' +ha_quality_scale: bronze --- -The IKEA IDÅSEN integration allows you to connect your IKEA Idåsen motorized desk to Home Assistant, making it possible to control the desk height and also monitor height changes from the physical controller. +The IKEA IDÅSEN {% term integration %} allows you to connect your [IKEA Idåsen](https://www.ikea.com/us/en/cat/idasen-system-47424/) motorized desk to Home Assistant, making it possible to control the desk height and also monitor height changes from the physical controller. {% tip %} @@ -47,3 +48,9 @@ This integration provides two buttons to connect and disconnect to/from the desk Height: description: The current height of the desk, in meters. {% endconfiguration_basic %} + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/igloohome.markdown b/source/_integrations/igloohome.markdown index b2edd90bbe3..9a606b4a7e8 100644 --- a/source/_integrations/igloohome.markdown +++ b/source/_integrations/igloohome.markdown @@ -11,12 +11,14 @@ ha_codeowners: ha_domain: igloohome ha_platforms: - sensor -ha_integration_type: device +ha_integration_type: integration +ha_quality_scale: bronze --- -The **igloohome** {% term integration %} grants Home Assistant access to paired [smart access device\(s\)](https://www.igloohome.co/#products). The features of this integration includes: +The **igloohome** {% term integration %} grants Home Assistant access to paired [smart access device\(s\)](https://www.igloohome.co/#products) via the [igloodeveloper API](https://igloocompany.stoplight.io/docs/igloohome-api/1w1cuv56ge5xq-overview). The features of this integration include: - For [Bridge](https://www.igloohome.co/products/bridge) owners: + - Lock/Unlock/Open locks that are linked to a bridge. - Regular updates of all linked devices' battery level. - For non-bridge owners: @@ -74,4 +76,12 @@ Some generic troubleshooting steps: ### Authentication problems - Verify that your [API credentials](https://access.igloocompany.co/api-access) are correctly filled in. -- Ensure your API credentials have not expired or been revoked. \ No newline at end of file +- Ensure your API credentials have not expired or been revoked. + +### Unable to lock/unlock/open lock + +- Verify that the bridge is: + - powered on + - has an active internet connection + - and is within Bluetooth range of the lock +- If you've changed the link between the bridge and the lock, reload the config entry. diff --git a/source/_integrations/image.mqtt.markdown b/source/_integrations/image.mqtt.markdown index 9186abdae55..7ff40d7cb14 100644 --- a/source/_integrations/image.mqtt.markdown +++ b/source/_integrations/image.mqtt.markdown @@ -48,7 +48,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -57,7 +57,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -153,7 +153,7 @@ image_topic: required: exclusive type: string json_attributes_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. required: false type: template json_attributes_topic: @@ -173,7 +173,7 @@ unique_id: required: false type: string url_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the image URL from a message received at `url_topic`. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the image URL from a message received at `url_topic`. required: false type: template url_topic: diff --git a/source/_integrations/imgw_pib.markdown b/source/_integrations/imgw_pib.markdown index 04ae3c4787c..0bc138daad0 100644 --- a/source/_integrations/imgw_pib.markdown +++ b/source/_integrations/imgw_pib.markdown @@ -10,7 +10,6 @@ ha_codeowners: - '@bieniu' ha_domain: imgw_pib ha_platforms: - - binary_sensor - diagnostics - sensor ha_integration_type: integration @@ -18,19 +17,10 @@ ha_integration_type: integration IMGW-PIB integration uses hydrological data from [Institute of Meteorology and Water Management - National Research Institute](https://hydro.imgw.pl) to present information about rivers and water reservoirs in Poland. -## Binary sensors - -Binary sensor entities added to Home Assistant: - -- Flood alarm -- Flood warning - ## Sensors Sensor entities added to Home Assistant: -- Flood alarm level (disabled by default) -- Flood warning level (disabled by default) - Water level - Water temperature (if a given hydrological station supports it) diff --git a/source/_integrations/incomfort.markdown b/source/_integrations/incomfort.markdown index b2d991fdb5a..af3132936f9 100644 --- a/source/_integrations/incomfort.markdown +++ b/source/_integrations/incomfort.markdown @@ -1,6 +1,6 @@ --- -title: Intergas InComfort/Intouch Lan2RF gateway -description: Instructions on how to integrate an Intergas Lan2RF gateway with Home Assistant. +title: Intergas gateway +description: Instructions on how to integrate an Intergas gateway with Home Assistant. ha_category: - Binary sensor - Climate @@ -14,15 +14,20 @@ ha_domain: incomfort ha_platforms: - binary_sensor - climate + - diagnostics - sensor - water_heater ha_integration_type: integration ha_config_flow: true +ha_dhcp: true --- -The `incomfort` {% term integration %} links Home Assistant with your Intergas Lan2RF gateway, including the boiler and any room thermostats attached to it. +This integration links Home Assistant with your Intergas gateway, including the boiler and any room thermostats attached to it. +The integration uses the [incomfort-client](https://pypi.org/project/incomfort-client/) library. -It uses the [incomfort](https://pypi.org/project/incomfort-client/) client library. +### Supported devices + +The Intergas Gateway connects thermostats based on the OpenTherm standard. An example of such a thermostat is the [Comfort Touch Thermostat](https://www.intergas-verwarming.nl/en/consumer/products/comfort-touch-thermostat/). The thermostats and LAN2RF gateway are often sold as a set. The gateway is suitable for use with Intergas Kombi Kompakt HRE and HReco appliances from year of manufacture 2014. If the Comfort Touch thermostat is used together with the gateway, then this will work in combination with Intergas Kombi Kompakt HRE, HReco, or Xtreme devices from year of manufacture 2017. ### Boiler @@ -30,16 +35,33 @@ The boiler is represented as a **Water heater** device. It will report the boile Note that the `current_temperature` will switch between the CV (circulating volume) and Tap temperatures according to the current operating mode of the boiler. If the boiler is neither pumping nor tapping, it will be reported as the higher of the two. -In addition, there is a **Sensor** for each of CV pressure, CV temperature, and Tap temperature, and a **Binary sensor** that will be `on` if there is a fault with the boiler (the fault code will be a state attribute). - ### Rooms -Any room thermostats (there can be 0, 1 or 2) are represented as **Climate** devices. They will report the thermostat's `temperature` (setpoint, target temperature) and `current_temperature` and the setpoint can be changed. +Any room thermostats (there can be 0, 1 or 2) are represented as **Climate** devices. They will report the thermostat's target `temperature` and `current_temperature` and the target temperature can be changed. This is similar to changing the target temperature override using the Comfort Touch App that comes with the thermostat/gateway. Note that any override will be reset when a new set point is reached on the thermostat's schedule. {% include integrations/config_flow.md %} +{% configuration_basic %} +host: + description: "Hostname or IP-address of the Intergas gateway." + required: true + type: string +username: + description: "The username to log into the gateway. This is `admin` in most cases." + required: false + type: string +password: + description: "The password to log into the gateway, is printed at the bottom of the gateway or is `intergas` for some older devices." + required: false + type: string +{% endconfiguration_basic %} + The hub does not have to be in the same network as HA, but must be reachable via port 80/HTTP. +The above configuration can also be adjusted later via +{% my integrations title="**Settings** > **Devices & services**" %}, +select "Intergas gateway" and click {% icon "mdi:dots-vertical" %} and select **Reconfigure**. + {% important %} Some older room thermostats might report the wrong setpoint when the setpoint is manually changed on the room thermostat. If you encounter this behavior, you can enable the `Legacy setpoint handling` option. @@ -48,6 +70,34 @@ Some older room thermostats might report the wrong setpoint when the setpoint is {% include integrations/option_flow.md %} +### Sensors for diagnostics + +Note that **all** sensors are disabled by default. + +- **Sensors** + - Boiler Pressure: Indicates the boilers pressure. + - Boiler Temperature: Indicates the central heating temperature. + - Boiler Tap temperature: Indicates the tap water temperature. +- **Binary sensors** + - Boiler Burner: Indicates if the burner is on. + - Boiler Fault: Indicates if there is a problem. The fault code is set as an attribute. + - Boiler Hot water tap: Indicates if the hot water tap is running. + - Boiler Pump: Indicate the pump is running for cental heating. + +## Troubleshooting + +In case setting up an older gateway type fails, then try to leave `username` and `password` fields empty. + +## Data updates + +The Intergas gateway will fetch state data from the gateway every 30 seconds. When the target temperature on the thermostat is changed, it might take some time for the set point to be updated on the Home Assistant climate {% term entity %}. + +## Remove integration + +This integration follows standard integration removal, no extra steps are required. + +{% include integrations/remove_device_service.md %} + ## Automation To send an alert if the CV pressure is too low or too high, consider the following example: @@ -58,7 +108,7 @@ To send an alert if the CV pressure is too low or too high, consider the followi - alias: "Low CV Pressure Alert" triggers: - trigger: numeric_state - entity_id: sensor.cv_pressure + entity_id: sensor.boiler_pressure below: 1.0 actions: - action: notify.pushbullet_notifier diff --git a/source/_integrations/influxdb.markdown b/source/_integrations/influxdb.markdown index e099e09c796..ac8cfcfb8cc 100644 --- a/source/_integrations/influxdb.markdown +++ b/source/_integrations/influxdb.markdown @@ -64,7 +64,7 @@ port: default: 8086 path: type: string - description: Path to use if your InfuxDB is running behind a reverse proxy. + description: Path to use if your InfluxDB is running behind a reverse proxy. required: false username: type: string @@ -369,7 +369,7 @@ port: default: 8086 path: type: string - description: Path to use if your InfuxDB is running behind a reverse proxy. + description: Path to use if your InfluxDB is running behind a reverse proxy. required: false username: type: string diff --git a/source/_integrations/inkbird.markdown b/source/_integrations/inkbird.markdown index 2dacbd1c3ef..867e3b68454 100644 --- a/source/_integrations/inkbird.markdown +++ b/source/_integrations/inkbird.markdown @@ -26,6 +26,9 @@ Integrates [INKBIRD](https://www.inkbird.com/) devices into Home Assistant. - [INKBIRD Bluetooth BBQ Thermometer IBT-6XS](https://inkbird.com/products/bluetooth-bbq-thermometer-ibt-6xs) - [INKBIRD Bluetooth Grill Thermometer IBT-4XS](https://inkbird.com/products/bluetooth-grill-thermometer-ibt-4xs) - [INKBIRD Bluetooth Grill Thermometer IBT-2X](https://inkbird.com/products/bluetooth-grill-thermometer-ibt-2x) +- [INKBIRD Bluetooth Hygrometer Thermometer ITH-11-B](https://inkbird.com/products/bluetooth-hygrometer-thermometer-ith-11-b) +- [INKBIRD Bluetooth Hygrometer Thermometer ITH-13-B](https://inkbird.com/products/bluetooth-hygrometer-thermometer-ith-13-b) +- [INKBIRD Bluetooth Hygrometer Thermometer ITH-21-B](https://inkbird.com/products/bluetooth-hygrometer-thermometer-ith-21-b) - [Nutrichef Smart Wireless Grill Thermometer](https://nutrichefkitchen.com/products/pwirbbq40) - [Nutrichef Smart Bluetooth BBQ Grill Thermometer](https://nutrichefkitchen.com/products/pwirbbq80-1) diff --git a/source/_integrations/integration.markdown b/source/_integrations/integration.markdown index d097abdaa4c..edb6c25afe5 100644 --- a/source/_integrations/integration.markdown +++ b/source/_integrations/integration.markdown @@ -18,7 +18,7 @@ ha_platforms: ha_integration_type: helper --- -This integrations provides the [Riemann sum](https://en.wikipedia.org/wiki/Riemann_sum) +This integration provides the [Riemann sum](https://en.wikipedia.org/wiki/Riemann_sum) of the values provided by a source sensor. The Riemann sum is an approximation of an **integral** by a finite sum. diff --git a/source/_integrations/intent_script.markdown b/source/_integrations/intent_script.markdown index d8a70a8f69e..c6d7c3e7b04 100644 --- a/source/_integrations/intent_script.markdown +++ b/source/_integrations/intent_script.markdown @@ -105,7 +105,7 @@ available in the `action_response` variable. conversation: intents: EventCountToday: - - "How many meetings do I have today?" + - "How many meetings do I have today" intent_script: EventCountToday: diff --git a/source/_integrations/iometer.markdown b/source/_integrations/iometer.markdown new file mode 100644 index 00000000000..ddbdcb376f9 --- /dev/null +++ b/source/_integrations/iometer.markdown @@ -0,0 +1,63 @@ +--- +title: IOmeter +description: Instructions on how to integrate IOmeter within Home Assistant. +ha_release: 2025.3 +ha_category: + - Energy + - Sensor +ha_codeowners: + - '@MaestroOnICe' +ha_quality_scale: bronze +ha_domain: iometer +ha_integration_type: device +ha_iot_class: Local Polling +ha_config_flow: true +ha_zeroconf: true +ha_platforms: + - sensor +--- + +The **IOmeter** {% term integration %} fetches data from your [IOmeter](https://iometer.de/produkt/) device, by using the local HTTP API. + +IOmeter is a German company that provides the IOmeter device for reading electricity meters. + +{% important %} +In order for the IOmeter to be used by Home Assistant, the Core/Bridge firmware version should be at least 62/69. +{% endimportant %} + +{% include integrations/config_flow.md %} + +### Configuration parameters + +{% configuration_basic %} +IP address: + description: The IP address of your IOmeter. +{% endconfiguration_basic %} + +## Data updates + +The integration will update its sensors by polling the IOmeter Bridge every ten seconds for new values. We recommend using USB-C power for the IOmeter Core instead of batteries. + +## Available sensors + +The following sensors are supported: + +- Power (W): Active power +- Total energy usage (kWh): How much energy the meter used +- Total energy returned (kWh): How much energy the meter returned to the grid +- Meter number: Electricity meter number +- Pin status: Electricity meter pin status +- Core battery level: Battery level of the IOmeter Core in percent +- Core power status: Battery or USB-C power for the IOmeter Core +- Signal strength WiFi: WiFi connection strength of the Bridge +- Signal strength Core/Bridge: Sub-GHz connection strength between Core and Bridge + +## Troubleshooting + +There are no commonly known issues with this integration. + +## Remove integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/iotty.markdown b/source/_integrations/iotty.markdown index 6a8e90219db..8f872c21537 100644 --- a/source/_integrations/iotty.markdown +++ b/source/_integrations/iotty.markdown @@ -8,7 +8,6 @@ ha_category: ha_iot_class: Cloud Polling ha_config_flow: true ha_codeowners: - - '@pburgio' - '@shapournemati-iotty' ha_domain: iotty ha_platforms: @@ -41,14 +40,20 @@ US version: EU version: -- [iotty Smart Switch](https://iotty.uk/collections/prodotti-singoli/products/e1-e2-plus-smart-switch-for-lights-and-gates) -- [iotty Smart Switch (variant)](https://iotty.uk/collections/prodotti-singoli/products/e1-e2-plus-smart-switch-for-lights-and-gates?variant=48626603032911) -- [iotty Plus Interruttore Intelligente](https://iotty.it/collections/prodotti-singoli/products/i3-plus-interruttore-intelligente-per-luci-e-cancelli) +- [E1 PLUS Smart Switch - for lights and gates](https://iotty.uk/collections/prodotti-singoli/products/e1-e2-plus-smart-switch-for-lights-and-gates) +- [E2 PLUS Smart Switch - for lights and gates](https://iotty.uk/collections/prodotti-singoli/products/e1-e2-plus-smart-switch-for-lights-and-gates?variant=48626603032911) +- [i3 PLUS Smart Switch - for lights and gates](https://iotty.it/collections/prodotti-singoli/products/i3-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) +- [E2S PLUS Smart Shades Switch - for shutters and blinds](https://iotty.uk/collections/frontpage/products/e2s-plus-smart-shades-switch-for-shutters-and-blinds) +- [i3S PLUS Smart Shades Switch - for shutters and blinds](https://iotty.it/collections/prodotti-singoli/products/i3s-plus-interruttore-intelligente-per-tende-e-tapparelle) + +### iotty Outlet + +- [OiT PLUS Smart Outlet](https://iotty.it/collections/prodotti-singoli/products/oit-plus-presa-intelligente) +- [ODE PLUS Smart Outlet](https://iotty.de/collections/prodotti-singoli/products/ode-plus-smarte-steckdose) +- [OFR PLUS Smart Outlet](https://iotty.fr/collections/prodotti-singoli/products/ofr-plus-prise-intelligente) ### iotty Outlet diff --git a/source/_integrations/ipp.md b/source/_integrations/ipp.md index ffbcdb21318..6f0cb9a41c3 100644 --- a/source/_integrations/ipp.md +++ b/source/_integrations/ipp.md @@ -6,7 +6,6 @@ ha_category: ha_release: 0.108 ha_iot_class: Local Polling ha_config_flow: true -ha_quality_scale: platinum ha_codeowners: - '@ctalkington' ha_domain: ipp diff --git a/source/_integrations/iron_os.markdown b/source/_integrations/iron_os.markdown index 5655d2c0d12..ff8129f796c 100644 --- a/source/_integrations/iron_os.markdown +++ b/source/_integrations/iron_os.markdown @@ -2,13 +2,13 @@ title: IronOS description: Instructions on how to integrate IronOS-based Pinecil V2 devices with Home Assistant. ha_category: - - Number - - Sensor - - Update - Binary sensor - - Select - Button + - Number + - Select + - Sensor - Switch + - Update ha_iot_class: Local Polling ha_release: 2024.8 ha_config_flow: true @@ -17,13 +17,14 @@ ha_codeowners: ha_domain: iron_os ha_integration_type: integration ha_platforms: - - number - - sensor - - update - binary_sensor - - select - button + - diagnostics + - number + - select + - sensor - switch + - update --- The **IronOS** {% term integration %} seamlessly connects Home Assistant with PINE64's Pinecil V2 soldering irons, allowing for remote monitoring and control. This integration provides real-time updates on temperature, power, and various other settings and diagnostic information. @@ -101,6 +102,8 @@ The following controls allow you to customize the settings and options for your - **Button locking mode:** Configures whether buttons can be locked to prevent accidental presses, with options for disabled, full locking, or boost only. - **Display orientation mode:** Sets the display orientation with options for left-handed, right-handed, or automatic adjustment. - **Startup behavior:** Defines the mode the device enters on power-up: disabled, sleeping mode, idle mode (heat-off until moved), or soldering mode. +- **Soldering tip type:** Select the type of soldering tip in use: TS100 long/Hakko T12, Pinecil short, or PTS200 short. The auto-sense option enables automatic detection of the tip type. This feature requires IronOS v2.23 or higher. +- **Hall effect sleep timeout:** Specifies the duration of inactivity after which the device enters sleep mode when a hall effect sensor (if present) detects proximity to a magnet. This feature requires IronOS v2.23 or higher. ### User interface settings @@ -125,7 +128,7 @@ The following controls allow you to customize the settings and options for your - **Power Delivery timeout:** Defines how long the firmware will attempt to negotiate USB-PD before switching to Quick Charge. Lower values are recommended for faster PD negotiation. - **Power limit:** Sets a custom wattage cap for the device to maintain the **average** power below this value. Note: Peak power cannot be controlled. When using USB-PD, the limit will be the lower of this setting and the power supply's advertised wattage. - **Quick Charge voltage:** Adjusts the maximum voltage for Quick Charge negotiation. Does not affect USB-PD. Ensure the setting aligns with the current rating of your power supply for safety. -- **Power Delivery 3.1 EPR (Extended Power Range):** Enables EPR mode, allowing input voltages up to 28V with a [compatible USB-C power supply](https://wiki.pine64.org/wiki/Pinecil_Power_Supplies#EPR_PD3.1,_140W_Chargers) +- **Power Delivery 3.1 EPR (Extended Power Range):** Enables EPR mode, allowing input voltages up to 28V with a [compatible USB-C power supply](https://wiki.pine64.org/wiki/Pinecil_Power_Supplies#EPR_PD3.1,_140W_Chargers). Options are *on*, *off*, and *safe* (does not dynamically request more power). The *safe* option requires IronOS v2.23 or higher. ### Advanced settings @@ -148,7 +151,7 @@ Get started with this automation example for IronOS with a ready-to-use blueprin Automatically activate the fume extractor when soldering begins and deactivate it when the soldering iron is idle. -{% my blueprint_import badge blueprint_url="https://community.home-assistant.io/t/ironos-soldering-fume-extractor-automation-pinecil-v2/802156" %} +{% my blueprint_import badge blueprint_url="" %} {% details "Example YAML configuration" %} @@ -213,6 +216,8 @@ This integration maintains an active Bluetooth connection while the device is po CONFIG_BT_GATTC_MAX_CACHE_CHAR: "100" ``` +In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue reoccurs, stop the debug logging again (_download of debug log file will start automatically_). Further, if still possible, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report. + ## Removing the integration This integration can be removed by following these steps: diff --git a/source/_integrations/islamic_prayer_times.markdown b/source/_integrations/islamic_prayer_times.markdown index 281b409f590..74081d68936 100644 --- a/source/_integrations/islamic_prayer_times.markdown +++ b/source/_integrations/islamic_prayer_times.markdown @@ -52,13 +52,13 @@ sensors: ## Configuration -### Prayer calcuation method +### Prayer calculation method Default: Islamic Society of North America A prayer times calculation method. Methods identify various schools of thought about how to compute the timings. If not specified, it defaults to Islamic Society of North America. -### Latatude Adjustment Method +### Latitude Adjustment Method Default: Middle of the night @@ -72,4 +72,4 @@ Default: Standard (mid sunset to sunrise) Default: Shafi -Method for adjusting Asr time calcuation, if not specified, it defaults to Shafi. +Method for adjusting Asr time calculation, if not specified, it defaults to Shafi. diff --git a/source/_integrations/ituran.markdown b/source/_integrations/ituran.markdown index 10dd69f8590..3e9b635fb88 100644 --- a/source/_integrations/ituran.markdown +++ b/source/_integrations/ituran.markdown @@ -14,7 +14,8 @@ ha_domain: ituran ha_platforms: - device_tracker - sensor -ha_integration_type: integration +ha_integration_type: hub +ha_quality_scale: silver --- The **Ituran** {% term integration %} allows you to retrieve information from your Ituran-equipped vehicle using the [Ituran APP service](https://www.ituran.co.il/ituranfront/comfort-services-2/ituran-app-comfort). It pulls information from the Ituran web service regarding the vehicle's location. @@ -44,7 +45,7 @@ The Ituran {% term integration %} will track the location of each vehicle regist ### Sensor -The Ituran {% term integration %} also exposes the following sensor for each registered vehicle: +The Ituran {% term integration %} also exposes the following sensors for each registered vehicle: - **Address** - The address that corresponds with the vehicle's location, as determined by Ituran - **Battery voltage** - The measured voltage (V) of the car battery. If not supported by the installation, the value will be set to `-1` @@ -56,6 +57,7 @@ The Ituran {% term integration %} also exposes the following sensor for each reg ## Known limitations - While this integration is configured with your account, you won't be able to use the official app, as only one connection at a time is supported + - As a workaround, it's possible to add another user from the app, with a different ID and mobile phone number that will be dedicated for Home Assistant use. - The vehicle's heading value is unreliable when it's not in motion - The mileage value is not read from the vehicle's odometer but is calculated from GPS, which may result in slight variations from the actual odometer reading diff --git a/source/_integrations/jellyfin.markdown b/source/_integrations/jellyfin.markdown index 378ceed096a..439852d6149 100644 --- a/source/_integrations/jellyfin.markdown +++ b/source/_integrations/jellyfin.markdown @@ -9,7 +9,7 @@ ha_category: ha_release: '2021.12' ha_iot_class: Local Polling ha_codeowners: - - '@j-stienstra' + - '@RunC0deRun' - '@ctalkington' ha_config_flow: true ha_domain: jellyfin diff --git a/source/_integrations/jewish_calendar.markdown b/source/_integrations/jewish_calendar.markdown index 4fcfd3116d9..80cd540a228 100644 --- a/source/_integrations/jewish_calendar.markdown +++ b/source/_integrations/jewish_calendar.markdown @@ -84,53 +84,56 @@ Time sensor states are represented as ISO8601 formatted *UTC time*. ### Holiday sensor -The holiday sensor includes 3 attributes: *type*, *type_id*, and *id*. -The *type_id* is useful for cases to condition automations based on a range of types. +The holiday sensor includes 2 attributes: *type*, and *id*. + +The *id* is useful for automations so they're not language-dependent. On Rosh Chodesh Tevet, which always falls on Chanukah, the sensor will report both values: "Rosh Chodesh, Chanukah". +In Israel, on the 30th of Shvat, the sensor will report: "Rosh Chodesh, Family day". On the 22nd of Tishrei it will report: "Shmini Atzeret, Simchat Torah". + The following is the list of holidays the sensor knows about with their selected type: -| ID | English | Hebrew | Type | Type_ID | -|----------------------|----------------------------|-----------------------|---------------------------|:-------:| -| erev_rosh_hashana | Erev Rosh Hashana | ערב ראש השנה | EREV_YOM_TOV | 2 | -| rosh_hashana_i | Rosh Hashana I | א' ראש השנה | YOM_TOV | 1 | -| rosh_hashana_ii | Rosh Hashana II | ב' ראש השנה | YOM_TOV | 1 | -| tzom_gedaliah | Tzom Gedaliah | צום גדליה | FAST_DAY | 5 | -| erev_yom_kippur | Erev Yom Kippur | עיוה"כ | EREV_YOM_TOV | 2 | -| yom_kippur | Yom Kippur | יום הכפורים | YOM_TOV | 1 | -| erev_sukkot | Erev Sukkot | ערב סוכות | EREV_YOM_TOV | 2 | -| sukkot | Sukkot | סוכות | YOM_TOV | 1 | -| sukkot_ii | Sukkot II | שני של סוכות | YOM_TOV | 1 | -| hol_hamoed_sukkot | Hol hamoed Sukkot | חול המועד סוכות | HOL_HAMOED | 3 | -| hoshana_raba | Hoshana Raba | הושענא רבה | EREV_YOM_TOV | 2 | -| shmini_atzeret | Shmini Atzeret | שמיני עצרת | YOM_TOV | 1 | -| simchat_torah | Simchat Torah | שמחת תורה | YOM_TOV | 1 | -| chanukah | Chanukah | חנוכה | MELACHA_PERMITTED_HOLIDAY | 4 | -| rabin_memorial_day | Yitzhak Rabin memorial day | יום הזכרון ליצחק רבין | MEMORIAL_DAY | 8 | -| asara_btevet | Asara B'Tevet | צום עשרה בטבת | FAST_DAY | 5 | -| tu_bshvat | Tu B'Shvat | ט"ו בשבט | MINOR_HOLIDAY | 7 | -| family_day | Family Day | יום המשפחה | ISRAEL_NATIONAL_HOLIDAY | 9 | -| memorial_day_unknown | Memorial day for fallen whose place of burial is unknown | יום הזיכרון לחללי מערכות ישראל שמקום קבורתם לא נודע | MEMORIAL_DAY | 8 | -| taanit_esther | Ta'anit Esther | תענית אסתר | FAST_DAY | 5 | -| purim | Purim | פורים | MELACHA_PERMITTED_HOLIDAY | 4 | -| shushan_purim | Shushan Purim | שושן פורים | MELACHA_PERMITTED_HOLIDAY | 4 | -| erev_pesach | Erev Pesach | ערב פסח | EREV_YOM_TOV | 2 | -| pesach | Pesach | פסח | YOM_TOV | 1 | -| pesach_ii | Pesach II | שני של פסח | YOM_TOV | 1 | -| hol_hamoed_pesach | Hol hamoed Pesach | חול המועד פסח | HOL_HAMOED | 3 | -| pesach_vii | Pesach VII | שביעי פסח | YOM_TOV | 1 | -| pesach_viii | Pesach VIII | אחרון של פסח | YOM_TOV | 1 | -| yom_hashoah | Yom HaShoah | יום השואה | MEMORIAL_DAY | 8 | -| yom_hazikaron | Yom HaZikaron | יום הזכרון | MEMORIAL_DAY | 8 | -| yom_haatzmaut | Yom HaAtzma'ut | יום העצמאות | MODERN_HOLIDAY | 6 | -| lag_bomer | Lag B'Omer | ל"ג בעומר | MINOR_HOLIDAY | 7 | -| yom_yerushalayim | Yom Yerushalayim | יום ירושלים | MODERN_HOLIDAY | 6 | -| erev_shavuot | Erev Shavuot | ערב שבועות | EREV_YOM_TOV | 2 | -| shavuot | Shavuot | שבועות | YOM_TOV | 1 | -| shavuot_ii | Shavuot II | שני של שבועות | YOM_TOV | 1 | -| tzom_tammuz | Tzom Tammuz | צום שבעה עשר בתמוז | FAST_DAY | 5 | -| zeev_zhabotinsky_day | Zeev Zhabotinsky day | יום זאב ז'בוטינסקי | MEMORIAL_DAY | 8 | -| tisha_bav | Tish'a B'Av | תשעה באב | FAST_DAY | 5 | -| tu_bav | Tu B'Av | ט"ו באב | MINOR_HOLIDAY | 7 | -| rosh_chodesh | Rosh Chodesh | ראש חודש | ROSH_CHODESH | 10 | +| ID | English | Hebrew | Type | +|----------------------|----------------------------|-----------------------|---------------------------| +| erev_rosh_hashana | Erev Rosh Hashana | ערב ראש השנה | EREV_YOM_TOV | +| rosh_hashana_i | Rosh Hashana I | א' ראש השנה | YOM_TOV | +| rosh_hashana_ii | Rosh Hashana II | ב' ראש השנה | YOM_TOV | +| tzom_gedaliah | Tzom Gedaliah | צום גדליה | FAST_DAY | +| erev_yom_kippur | Erev Yom Kippur | עיוה"כ | EREV_YOM_TOV | +| yom_kippur | Yom Kippur | יום הכפורים | YOM_TOV | +| erev_sukkot | Erev Sukkot | ערב סוכות | EREV_YOM_TOV | +| sukkot | Sukkot | סוכות | YOM_TOV | +| sukkot_ii | Sukkot II | שני של סוכות | YOM_TOV | +| hol_hamoed_sukkot | Hol hamoed Sukkot | חול המועד סוכות | HOL_HAMOED | +| hoshana_raba | Hoshana Raba | הושענא רבה | EREV_YOM_TOV | +| shmini_atzeret | Shmini Atzeret | שמיני עצרת | YOM_TOV | +| simchat_torah | Simchat Torah | שמחת תורה | YOM_TOV | +| chanukah | Chanukah | חנוכה | MELACHA_PERMITTED_HOLIDAY | +| rabin_memorial_day | Yitzhak Rabin memorial day | יום הזכרון ליצחק רבין | MEMORIAL_DAY | +| asara_btevet | Asara B'Tevet | צום עשרה בטבת | FAST_DAY | +| tu_bshvat | Tu B'Shvat | ט"ו בשבט | MINOR_HOLIDAY | +| family_day | Family Day | יום המשפחה | ISRAEL_NATIONAL_HOLIDAY | +| memorial_day_unknown | Memorial day for fallen whose place of burial is unknown | יום הזיכרון לחללי מערכות ישראל שמקום קבורתם לא נודע | MEMORIAL_DAY | +| taanit_esther | Ta'anit Esther | תענית אסתר | FAST_DAY | +| purim | Purim | פורים | MELACHA_PERMITTED_HOLIDAY | +| shushan_purim | Shushan Purim | שושן פורים | MELACHA_PERMITTED_HOLIDAY | +| erev_pesach | Erev Pesach | ערב פסח | EREV_YOM_TOV | +| pesach | Pesach | פסח | YOM_TOV | +| pesach_ii | Pesach II | שני של פסח | YOM_TOV | +| hol_hamoed_pesach | Hol hamoed Pesach | חול המועד פסח | HOL_HAMOED | +| pesach_vii | Pesach VII | שביעי פסח | YOM_TOV | +| pesach_viii | Pesach VIII | אחרון של פסח | YOM_TOV | +| yom_hashoah | Yom HaShoah | יום השואה | MEMORIAL_DAY | +| yom_hazikaron | Yom HaZikaron | יום הזכרון | MEMORIAL_DAY | +| yom_haatzmaut | Yom HaAtzma'ut | יום העצמאות | MODERN_HOLIDAY | +| lag_bomer | Lag B'Omer | ל"ג בעומר | MINOR_HOLIDAY | +| yom_yerushalayim | Yom Yerushalayim | יום ירושלים | MODERN_HOLIDAY | +| erev_shavuot | Erev Shavuot | ערב שבועות | EREV_YOM_TOV | +| shavuot | Shavuot | שבועות | YOM_TOV | +| shavuot_ii | Shavuot II | שני של שבועות | YOM_TOV | +| tzom_tammuz | Tzom Tammuz | צום שבעה עשר בתמוז | FAST_DAY | +| zeev_zhabotinsky_day | Zeev Zhabotinsky day | יום זאב ז'בוטינסקי | MEMORIAL_DAY | +| tisha_bav | Tish'a B'Av | תשעה באב | FAST_DAY | +| tu_bav | Tu B'Av | ט"ו באב | MINOR_HOLIDAY | +| rosh_chodesh | Rosh Chodesh | ראש חודש | ROSH_CHODESH | diff --git a/source/_integrations/juicenet.markdown b/source/_integrations/juicenet.markdown index e4add243f45..b32fd2a348d 100644 --- a/source/_integrations/juicenet.markdown +++ b/source/_integrations/juicenet.markdown @@ -22,8 +22,13 @@ ha_integration_type: integration The `juicenet` platform pulls data from a [JuiceNet](https://evcharging.enelx.com/products/juicebox) charging station equipped with a Wi-Fi connection. It will access and make available all of the devices attached to your account. It also exposes a switch allowing you to charge your car now instead of waiting for the pre-set schedule. +{% important %} +This integration can no longer be set up as the required API token cannot be obtained. However, if you have it working, it may remain functional. +{% endimportant %} + {% include integrations/config_flow.md %} + ## Sensor The `juicenet` sensor platform allows you to get data from your [JuiceNet](https://evcharging.enelx.com/products/juicebox) charger. diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown index 9f762782209..b7ec84d3746 100644 --- a/source/_integrations/knx.markdown +++ b/source/_integrations/knx.markdown @@ -122,32 +122,86 @@ knx: ## Connection -Connection parameters are set up when adding the integration and can be changed from the `Integrations` panel. - -Use `route back` if your tunneling server is located on a different network. +Connection parameters are configured during integration setup and can be modified later in the integrations settings. ### KNX Secure -The KNX integration supports IP Secure and Data Secure . +The KNX integration supports both IP Secure and Data Secure. + +#### IP Secure + +IP Secure credentials can be provided in two ways: + +1. Using a `.knxkeys` file: This file can be exported from ETS and imported into the integration settings. +2. Manual configuration: If you are not using Data Secure, you can manually input the required IP Secure credentials in the integration settings. + +#### Data Secure -You can configure the IP Secure credentials either manually or by providing a `.knxkeys` file, which you can obtain by exporting the keyring in ETS as seen in the screenshot below. Data Secure credentials are always sourced from a `.knxkeys` file. You can import or update the Keyring file from the integrations settings. -For Data Secure, please make sure that all secured group addresses you want to use in Home Assistant are assigned to a tunnel of your interface or a dummy device in ETS and all participating devices are updated accordingly. +{% important %} -![Export Keyring in ETS5](/images/integrations/knx/export_keyring_ets.png) +Assign all secured group addresses that Home Assistant will use to either the interface's tunnel endpoint or a dummy device in ETS before exporting the Keyring file. -If you decide to configure IP Secure manually you will need the user ID, the user password and the device authentication password. +{% endimportant %} -The user id 0 is reserved and the user id 1 is used for management tasks, thus you will need to specify a user id that is 2 or higher according to the tunneling channel you would like to use. +When updating secure groups, ensure all participating devices, routers, and couplers applications are updated as well. After making changes, load the updated Keyring file into Home Assistant. -The following screenshot will show how you can get the device authentication password in ETS. +### Tunneling -![Obtain device authentication password in ETS](/images/integrations/knx/device_authentication_password.png) +Tunneling uses a KNX IP Interface to connect to the KNX bus. Most KNX IP Routers also support tunneling connections. This is the recommended connection type and is also used when selecting an "Automatic" connection in the integration setup. -The user password can be obtained almost the same way as seen in the below screenshot. +For modern interfaces (supporting TCP or IP Secure) you can select a specific tunnel endpoint to be used. Make sure that Home Assistant is the only client connecting to this tunnel endpoint. +It is recommended to connect the group addresses you want to use to the tunnel endpoint that Home Assistant uses. For secure group addresses, this is mandatory. -![Obtain the user password in ETS](/images/integrations/knx/user_password.png) +If you use KNX IP Secure tunneling or Data Secure, export the Keyring file from ETS and import it in the KNX integration settings. + +![Tunnel endpoint setup in ETS 6](/images/integrations/knx/knx_ets_tunnel.png) + +{% note %} + +If you want Home Assistant to use a specific individual address, you can change the address of the used tunnel endpoint in ETS. + +{% endnote %} + +{% details "Manual IP Secure tunneling credentials" %} + +If you opt for manual configuration of IP Secure tunneling, you will need the following: + +1. User-ID: Use a User-ID of 2 or higher. (IDs 0 and 1 are reserved). +The first tunnel endpoint in ETS will typically use User-ID `2`, the second `3`, and so on. +2. User password. +3. Device authentication code (optional). + +![Obtain the tunnel User-ID and password in ETS](/images/integrations/knx/knx_ets_tunnel_password.png) + +The following screenshot will show how you can find the device authentication code in ETS. + +![Obtain device authentication code in ETS](/images/integrations/knx/knx_ets_authentication_code.png) + +{% enddetails %} + +### Routing + +Routing communicates with KNXnet/IP routers via IP Multicast. + +When using routing: + +1. Add a dummy device in ETS at the same topology level as your routers. +2. Assign this dummy device the same individual address configured in the KNX integration setup. +3. Connect all group addresses that Home Assistant will use to the dummy device. +This ensures routers and couplers maintain updated filter tables and enables the use of secure group addresses in Home Assistant. +4. If you use KNX IP Secure routing or Data Secure groups, export the Keyring file from ETS and import it in the KNX integration settings. + +![Routing dummy setup in ETS 6](/images/integrations/knx/knx_ets_dummy.png) + +{% details "Manual IP Secure routing credentials" %} + +If you opt for manual configuration of IP Secure routing, you will need the backbone key. This can be found in the ETS "Project Security" report. + +![Backbone key in ETS Project Security report](/images/integrations/knx/knx_ets_backbone_key.png) + +{% enddetails %} ## Triggers @@ -416,7 +470,7 @@ automation: ### Register event -The `knx.event_register` action can be used to register (or unregister) group addresses to fire `knx_event` Events. Events for group addresses configured in the `event` key in `configuration.yaml` cannot be unregistered. See [knx_event](#events) +The `knx.event_register` action can be used to register (or unregister) group addresses to fire `knx_event` Events. Events for group addresses configured in the `event` key in {% term "`configuration.yaml`" %} cannot be unregistered. See [knx_event](#events) {% configuration %} address: @@ -436,7 +490,7 @@ type: ### Register exposure -The `knx.exposure_register` action can be used to register (or unregister) exposures to the KNX bus. Exposures defined in `configuration.yaml` can not be unregistered. Per address only one exposure can be registered. See [expose](#exposing-entity-states-entity-attributes-or-time-to-knx-bus) +The `knx.exposure_register` action can be used to register (or unregister) exposures to the KNX bus. Exposures defined in {% term "`configuration.yaml`" %} can not be unregistered. Per address only one exposure can be registered. See [expose](#exposing-entity-states-entity-attributes-or-time-to-knx-bus) {% configuration %} remove: @@ -542,9 +596,18 @@ respond_to_read: ## Binary sensor -The KNX binary sensor platform allows you to monitor [KNX](https://www.knx.org/) binary sensors. +The KNX binary sensor platform allows you to monitor [KNX](https://www.knx.org/) binary sensors like window/door contacts, motion detectors, alarms, etc. -Binary sensors are read-only. To write to the KNX bus configure an exposure [KNX Integration Expose](/integrations/knx/#exposing-entity-states-entity-attributes-or-time-to-knx-bus). +{% note %} + +Binary sensors are read-only entities. To write to the KNX bus, configure a [KNX Switch entity](#switch) or use the [`knx.send` action](#send). + +{% endnote %} + +Binary sensor entities can be created from the frontend in the KNX panel or via YAML. + + +{% details "Configuration of KNX binary sensor entities via YAML" %} ```yaml knx: @@ -585,7 +648,7 @@ device_class: required: false type: string reset_after: - description: Reset back to "off" state after specified seconds. + description: Reset back to "off" state after specified time in seconds. required: false type: float invert: @@ -599,7 +662,7 @@ ignore_internal_state: type: boolean default: false context_timeout: - description: The time in seconds between multiple identical telegram payloads would count towards the internal counter that is used for automations. Ex. You have automations in place that trigger your lights on button press and another set of lights if you click that button twice. This setting defines the time that a second button press would count toward, so if you set this 3.0 you can take up to 3 seconds in order to trigger the second button press. If set `ignore_internal_state` will be set to `true` internally. Maximum value is 10.0. + description: The time in seconds between multiple identical telegram payloads would count towards an internal counter that can be used for automations. This setting defines the time window that a second telegram would count toward a single state change. So if you set this 3.0 you can take up to 3 seconds in order to trigger the second button press, and a single press would take 3 seconds to trigger a Home Assistant state update. If this is set, `ignore_internal_state` will be set to `true` internally. Maximum value is 10.0. required: false type: float default: None @@ -610,14 +673,14 @@ entity_category: default: None {% endconfiguration %} -### Support for automations +{% enddetails %} -You can use a built in event in order to trigger an automation (e.g. to switch on a light when a switch was pressed). +### Automation example -Let's pretend you have a binary sensor with the name `Livingroom.Switch` and you want to switch one light on when the button was pressed once and two other lights when the button was pressed twice. `context_timeout` has to be configured in order for this to work. +Let's pretend you have configured a binary sensor with the name `Livingroom Switch` and you want to toggle a light when the button was pressed once and another light when the button was pressed twice. +`context_timeout` has to be configured in order for this to work and the switch would have to send the same payloads on each press (`on` - `on` within the time window). ```yaml -# Example automation.yaml entry automation: - triggers: - trigger: numeric_state @@ -625,54 +688,22 @@ automation: attribute: counter above: 0 below: 2 - condition: - - condition: state - entity_id: binary_sensor.cover_abstell - state: "on" actions: - - action: light.turn_on - entity_id: light.hue_color_lamp_1 - + - action: light.toggle + entity_id: light.livingroom_ceiling_lamp - 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" actions: - - action: light.turn_on + - action: light.toggle target: entity_id: - - light.hue_bloom_1 - - light.hue_bloom_2 - + - light.livingroom_floor_lamp ``` -{% configuration %} -name: - description: A name for this device used within Home Assistant. - required: false - type: string -counter: - description: Set to 2 if you only want the action to be executed if the button was pressed twice. Set to 3 for three times button pressed. - required: false - type: integer - default: 1 -hook: - description: Indicates if the automation should be executed on what state of the binary sensor. Values are "on" or "off". - required: false - type: string - default: "on" -action: - description: Specify a list of actions analog to the [automation rules](/docs/automation/action/). - required: false - type: list -{% endconfiguration %} - ## Button The KNX button platform allows to send concurrent predefined values via the frontend or an action. When a user presses the button, the assigned generic raw payload is sent to the KNX bus. @@ -740,7 +771,7 @@ entity_category: The KNX climate platform is used as an interface to KNX thermostats and room controllers. -To use your KNX thermostats in your installation, add the following lines to your top level [KNX Integration](/integrations/knx) configuration key in `configuration.yaml`: +To use your KNX thermostats in your installation, add the following lines to your top level [KNX Integration](/integrations/knx) configuration key in {% term "`configuration.yaml`" %}: ```yaml # Example configuration.yaml entry @@ -1000,6 +1031,22 @@ fan_zero_mode: required: false type: string default: "off" +swing_address: + description: KNX address for turning the (vertical) swing on/off. *DPT 1* + required: false + type: [string, list] +swing_state_address: + description: KNX address for gathering the current state (on/off) of the (vertical) swing. *DPT 1* + required: false + type: [string, list] +swing_horizontal_address: + description: KNX address for turning the horizontal swing on/off. *DPT 1* + required: false + type: [string, list] +swing_horizontal_state_address: + description: KNX address for gathering the current state (on/off) of the horizontal swing. *DPT 1* + required: false + type: [string, list] entity_category: description: The [category](https://developers.home-assistant.io/docs/core/entity#generic-properties) of the entity. required: false @@ -1017,7 +1064,7 @@ Unlike most KNX devices, Home Assistant defines 0% as closed and 100% as fully o Home Assistant will, by default, `close` a cover by moving it in the `DOWN` direction in the KNX nomenclature, and `open` a cover by moving it in the `UP` direction. {% endnote %} -To use your KNX covers in your installation, add the following lines to your top level [KNX Integration](/integrations/knx) configuration key in `configuration.yaml`: +To use your KNX covers in your installation, add the following lines to your top level [KNX Integration](/integrations/knx) configuration key in your {% term "`configuration.yaml`" %}: ```yaml # Example configuration.yaml entry @@ -1243,7 +1290,7 @@ The KNX fan integration is used to control KNX fans. Following control types are - Percentage controlled: Fans that set the percentage directly from 0-100%. - Step controlled: Fans which have a fixed amount of steps to set. The integration will convert percentage to step automatically. The `max_step` attribute is set to the number of steps of the fan, not counting the `off`-step. Example: A fan supports the steps 0 to 3. To use this fan the `max_step` attribute has to be set to `3`. The integration will convert the percentage `66 %` to the step `2` when sending data to KNX. -To use your KNX fan in your installation, add the following lines to your top level [KNX Integration](/integrations/knx) configuration key in `configuration.yaml`: +To use your KNX fan in your installation, add the following lines to your top-level [KNX Integration](/integrations/knx) configuration key in your {% term "`configuration.yaml`" %}: ```yaml # Example configuration.yaml entry @@ -1777,7 +1824,11 @@ entity_category: The KNX sensor platform allows you to monitor [KNX](https://www.knx.org/) sensors. -Sensors are read-only. To write to the KNX bus configure a [Number](#number), an exposure [KNX Integration Expose](/integrations/knx/#exposing-entity-states-entity-attributes-or-time-to-knx-bus) or use the `knx.send` action. +{% note %} + +Sensors are read-only entities. To write to the KNX bus, configure a [KNX Number entity](#number) or use the [`knx.send` action](#send). + +{% endnote %} ```yaml # Example configuration.yaml entry @@ -1788,7 +1839,7 @@ knx: type: percent ``` -In order to actively read the sensor data from the bus every 30 minutes you can add the following lines to your `configuration.yaml`: +In order to actively read the sensor data from the bus every 30 minutes you can add the following lines to your {% term "`configuration.yaml`" %}: ```yaml # Example configuration.yaml entry @@ -2225,7 +2276,7 @@ entity_category: The KNX weather platform is used as an interface to KNX weather stations. -To use your KNX weather station in your installation, add the following lines to your top level [KNX Integration](/integrations/knx) configuration key in `configuration.yaml`: +To use your KNX weather station in your installation, add the following lines to your top-level [KNX Integration](/integrations/knx) configuration key in your {% term "`configuration.yaml`" %}: ```yaml # Example configuration.yaml entry @@ -2334,8 +2385,8 @@ entity_category: ### Logs for the KNX integration -`xknx`, the library used for KNX communication, provides various logging handlers for monitoring and debug purposes. -Add the following lines to your Home Assistant `configuration.yaml` to activate them: +The [`xknx` library](https://github.com/XKNX/xknx) is used for KNX communication. It provides various logging handlers for monitoring and debug purposes. +Add the following lines to your Home Assistant {% term "`configuration.yaml`" %} to activate them: ```yaml logger: @@ -2352,6 +2403,7 @@ logger: xknx.knx: debug # logs incoming and outgoing KNX/IP frames xknx.raw_socket: warning # logs incoming UDP/TCP frames in raw hex format at socket level # Loggers for xknx internals + xknx.ga_dpt: warning # logs when payloads can't be decoded with given project file information xknx.state_updater: warning # provides information about the state updater ``` @@ -2403,3 +2455,17 @@ The `unique_id` for KNX entities is generated based on required configuration va - weather: `address_temperature` There can not be multiple entities on the same platform sharing these exact group addresses, even if they differ in other configuration. + +## Remove integration + +This integration can be removed by following these steps: + +{% include integrations/remove_device_service.md %} + +In addition, remove `knx:` from your {% term "`configuration.yaml`" %}. + +{% warning %} + +Removing the integration will delete an uploaded keyring file, ETS project information, telegram history, and all entity configuration done via the UI panel. + +{% endwarning %} diff --git a/source/_integrations/lamarzocco.markdown b/source/_integrations/lamarzocco.markdown index 15169b00d82..8906fa9cb90 100644 --- a/source/_integrations/lamarzocco.markdown +++ b/source/_integrations/lamarzocco.markdown @@ -112,6 +112,7 @@ Use Bluetooth: | **Current steam temperature**| Current temperature of the steam boiler | `Linea Micra`, `GS3 AV`, `GS3 MP` | {% icon "material-symbols:cloud-outline" title="La Marzocco Cloud" %} {% icon "material-symbols:wifi" title="Local connection" %} | - | | **Total coffees made** | Counter for total coffees made| `all` | {% icon "material-symbols:cloud-outline" title="La Marzocco Cloud" %} | - | | **Total flushes made** | Counter for total flushes done | `all` | {% icon "material-symbols:cloud-outline" title="La Marzocco Cloud" %}| - | +| **Coffee made Key `key`** | Counter for coffees per Key | `GS3 AV` | {% icon "material-symbols:cloud-outline" title="La Marzocco Cloud" %}| Disabled by default | | **Shot timer** | Time the current brew is running | `all` | {% icon "material-symbols:wifi" title="Local connection" %} | Only available when the `Host` was set during component configuration. | | **Battery** | Battery level of the LM Acaia scale | `Linea Mini` | {% icon "material-symbols:cloud-outline" title="La Marzocco Cloud" %} | Only available if you have the Acaia LM scale and configured it with your machine. | diff --git a/source/_integrations/lametric.markdown b/source/_integrations/lametric.markdown index 0e445a2006d..e7bc227dde9 100644 --- a/source/_integrations/lametric.markdown +++ b/source/_integrations/lametric.markdown @@ -93,7 +93,7 @@ message: required: true type: string icon: - description: "An icon or animation. List of all icons available at [https://developer.lametric.com/icons](https://developer.lametric.com/icons)." + description: "The ID of an icon or animation. List of all icons available at [https://developer.lametric.com/icons](https://developer.lametric.com/icons)." required: false type: string cycles: @@ -132,7 +132,7 @@ following, additional, optional parameters: {% configuration "notification" %} icon: - description: "An icon or animation. List of all icons available at [https://developer.lametric.com/icons](https://developer.lametric.com/icons)." + description: "The ID of an icon or animation. List of all icons available at [https://developer.lametric.com/icons](https://developer.lametric.com/icons)." required: false type: string cycles: @@ -278,4 +278,4 @@ Internal examples: `http://192.168.0.2:8123/auth/external/callback`, `http://hom ### The brightness doesn't go to 100% When the LaMetric is powered by a USB port on a computer, the brightness is limited. -To get the full brightness, use a proper USB charger. \ No newline at end of file +To get the full brightness, use a proper USB charger. diff --git a/source/_integrations/lawn_mower.mqtt.markdown b/source/_integrations/lawn_mower.mqtt.markdown index af41a8f0fb2..e75bb881fcc 100644 --- a/source/_integrations/lawn_mower.mqtt.markdown +++ b/source/_integrations/lawn_mower.mqtt.markdown @@ -28,7 +28,7 @@ activity_state_topic: required: false type: string activity_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value." required: false type: template availability: @@ -51,7 +51,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -64,7 +64,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template device: @@ -121,7 +121,7 @@ device: required: false type: string dock_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `dock_command_topic`. The `value` parameter in the template will be set to `dock`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `dock_command_topic`. The `value` parameter in the template will be set to `dock`. required: false type: template dock_command_topic: @@ -151,7 +151,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -172,7 +172,7 @@ optimistic: type: boolean default: "`true` if no `activity_state_topic` defined, else `false`." pause_command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `pause_command_topic`. The `value` parameter in the template will be set to `pause`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `pause_command_topic`. The `value` parameter in the template will be set to `pause`. required: false type: template pause_command_topic: @@ -189,7 +189,7 @@ qos: type: integer default: 0 start_mowing_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `start_mowing_command_topic`. The `value` parameter in the template will be set to `start_mowing`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `start_mowing_command_topic`. The `value` parameter in the template will be set to `start_mowing`. required: false type: template start_mowing_command_topic: diff --git a/source/_integrations/lcn.markdown b/source/_integrations/lcn.markdown index 8814c6d968c..20befb354e8 100644 --- a/source/_integrations/lcn.markdown +++ b/source/_integrations/lcn.markdown @@ -433,6 +433,20 @@ Refer to the [Performing actions](/docs/scripts/service-calls) page for examples When actions are linked to a particular device, the device is identified by its `device_id`. This `device_id` is a unique identifier supplied by Home Assistant. +{% tip %} +A simple method to obtain the `device_id` for LCN modules in automations and scripts is to use a template with the `device_id()` function as detailed [here](/docs/configuration/templating/#devices). This allows for finding the `device_id` using the module name as shown in the frontend or configured in the LCN-PRO software. + +{% raw %} +```yaml +action: lcn.pck +data: + device_id: "{{ device_id('Module name') }}" + pck: PIN4 +``` +{% endraw %} + +{% endtip %} + ### Action: `output_abs` Set absolute brightness of output port in percent. @@ -798,3 +812,15 @@ The motor values specify which hardware relay or outputs configuration will be u Whenever a key has to be provided, it is defined by a joint string consisting of the table identifier (`a`, `b`, `c`, `d`) and the corresponding key number. Examples: `a1`, `a5`, `d8`. + +## Remove integration + +This integration follows standard integration removal, no extra steps are required. + +{% include integrations/remove_device_service.md %} + +{% warning %} + +Removing the integration will delete all device and entity configuration done via the UI panel. + +{% endwarning %} diff --git a/source/_integrations/legrand.markdown b/source/_integrations/legrand.markdown index 13e13117fdf..db83c0dffda 100644 --- a/source/_integrations/legrand.markdown +++ b/source/_integrations/legrand.markdown @@ -3,6 +3,7 @@ title: Legrand description: Connect and control your Legrand devices using the Netatmo integration ha_category: - Binary sensor + - Button - Camera - Climate - Cover @@ -24,6 +25,7 @@ ha_codeowners: ha_config_flow: true ha_platforms: - binary_sensor + - button - camera - climate - cover diff --git a/source/_integrations/letpot.markdown b/source/_integrations/letpot.markdown index baa14d6f3f7..138886b3ee2 100644 --- a/source/_integrations/letpot.markdown +++ b/source/_integrations/letpot.markdown @@ -2,6 +2,9 @@ title: LetPot description: Instructions on how to integrate LetPot hydroponic gardens into Home Assistant. ha_category: + - Binary sensor + - Sensor + - Switch - Time ha_release: 2025.2 ha_iot_class: Cloud Push @@ -9,9 +12,13 @@ ha_config_flow: true ha_codeowners: - '@jpelgrom' ha_domain: letpot -ha_integration_type: integration +ha_integration_type: hub ha_platforms: + - binary_sensor + - sensor + - switch - time +ha_quality_scale: bronze --- The **LetPot** {% term integration %} allows you to integrate your [LetPot](https://letpot.com/) hydroponic gardens/systems into Home Assistant. @@ -51,6 +58,47 @@ Password: The LetPot integration provides the following entities. +#### Binary sensors + +- **Pump**: Indicates if the water pump is running (on) or idle (off). Updates may be delayed by the device until another entity updates. + - Available for LetPot Air devices, and other device models which report this value. + - Not available for LetPot Pro devices. + +Additionally, binary sensors for possible issues are available: + +- **Low nutrients**: Indicates if the nutrient solution tank used for auto mode is (almost) empty and should be refilled. + - Available for LetPot Max devices. +- **Low water**: Indicates if the water tank is (almost) empty and should be refilled. + - Available for all devices except LetPot Pro. +- **Pump error**: Indicates if the water pump detected a flow issue and should be cleaned. + - Available for some LetPot Mini and LetPot SE devices which report this value. +- **Refill error**: Indicates that the external water tank/input used for refilling in auto mode is not filling up the main water tank. If you see a refill error, check the external water tank/input and the connection to the main water tank. + - Available for LetPot Max devices. + +{% important %} +Binary sensors for issues are disabled by default. If you want to use them, you need to enable them first. See the [enabling or disabling entities](/common-tasks/general/#enabling-or-disabling-entities) documentation for information on how to do this. +{% endimportant %} + +#### Sensors + +For LetPot Max devices, the following sensors are available: + +- **Temperature**: Ambient temperature measured by the device. +- **Water level**: Percentage of the water tank filled with water. The official app will display 0-30% as "Low", 30-90% as "Medium", and 90% or more as "High". + +#### Switches + +- **Power**: Main switch to turn on/off the device. Device features (like the built-in light and pump) will only operate when the power is on. +- **Pump cycling**: Turn on/off cycling of the water pump. When on, the pump will run intermittently (controlled by the device), which can be tracked using the **Pump** binary sensor. + +For devices with an alarm that allows muting the sound, the following switch is also available: + +- **Alarm sound**: Turn on/off the alarm sound. + +For LetPot Max devices, the following switch is also available: + +- **Auto mode**: Turn on/off auto mode, which automatically adds water and nutrients to the garden when needed. + #### Times - **Light on**: Time when the built-in light turns on. diff --git a/source/_integrations/lg_thinq.markdown b/source/_integrations/lg_thinq.markdown index 118c6e89400..4986fbceb64 100644 --- a/source/_integrations/lg_thinq.markdown +++ b/source/_integrations/lg_thinq.markdown @@ -26,12 +26,12 @@ ha_codeowners: The **LG ThinQ** integration allows you to connect LG ThinQ devices to Home Assistant. The features of this integration include: -- Control LG appliances as Home Assistant entities through the [LG ThinQ Connect API](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/overview/). +- Control LG appliances as Home Assistant entities through the LG ThinQ Connect API. ## Prerequisites - This feature works via LG ThinQ cloud. Therefore, an internet connection is required. -- A [personal access token](https://connect-pat.lgthinq.com) to use the [LG ThinQ Connect API](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/overview/). +- A [personal access token](https://connect-pat.lgthinq.com) to use the LG ThinQ Connect API. ### Personal Access Token (PAT) @@ -59,39 +59,39 @@ The **LG ThinQ** integration allows you to connect LG ThinQ devices to Home Assi Support LG Appliances as follows: -- [Air Conditioner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-conditioner/) -- [Air Purifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-purifier/) -- [Air Purifier Fan](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Air-Purifier-Fan/) -- [Ceiling Fan](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/ceiling-fan/) -- [Cooktop](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/cooktop/) -- [Dehumidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dehumidifier/) -- [Dishwasher](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dish-washer/) -- [Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dryer/) -- [Home Brew](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/home-brew/) -- [Hood](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/hood/) -- [Humidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/humidifier/) -- [Kimchi Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/kimchi-refrigerator/) -- [Microwave Oven](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/microwave-oven/) -- [Oven](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/oven/) -- [Plant Cultivator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/plant-cultivator/) -- [Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/refrigerator/) -- [Robot Cleaner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/robot-cleaner/) -- [Stick Cleaner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Stick-Cleaner/) -- [Styler](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/styler/) -- [System Boiler](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/system-boiler/) -- [Washcombo Main](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Main-WashCombo/) -- [Washcombo Mini](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Mini-WashCombo/) -- [Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/washer/) -- [Washtower](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Single-Unit/) -- [Washtower Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Dryer/) -- [Washtower Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Washer/) -- [Water Heater](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/water-heater/) -- [Water Purifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/water-purifier/) -- [Wine Cellar](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/wine-cellar/) +- Air Conditioner +- Air Purifier +- Air Purifier Fan +- Ceiling Fan +- Cooktop +- Dehumidifier +- Dishwasher +- Dryer +- Home Brew +- Hood +- Humidifier +- Kimchi Refrigerator +- Microwave Oven +- Oven +- Plant Cultivator +- Refrigerator +- Robot Cleaner +- Stick Cleaner +- Styler +- System Boiler +- Washcombo Main +- Washcombo Mini +- Washer +- Washtower +- Washtower Dryer +- Washtower Washer +- Water Heater +- Water Purifier +- Wine Cellar ## Platforms -LG ThinQ represents devices as a set of [profiles](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/refrigerator/). And these are mapped to entities in Home Assistant. +LG ThinQ represents devices as a set of properties. And these are mapped to entities in Home Assistant. A list of all Entity Platforms provided by LG ThinQ Integration: @@ -111,18 +111,15 @@ A read-only property which has only two states that can be toggled is represente | Device | Property | | ------ | -------- | -| [Cooktop](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Cooktop/)
    | Remote start | -| [Dish Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dish-washer/) | Chime sound
    Clean indicator light
    Door
    Machine clean reminder
    Remote start
    Rinse refill needed | -| [Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Dryer/)
    | Remote start | -| [Hood](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Hood/) | Power | -| [Oven](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Oven/) | Remote start | -| [Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/refrigerator/) | Door
    Eco friendly
    Power saving mode
    Sabbath | -| [Kimchi Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Kimchi-Refrigerator/) | Fresh air filter | -| [Styler](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/styler/) | Remote start | -| [Washcombo Main](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Main-WashCombo/)
    [Washcombo Mini](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Mini-WashCombo/)
    [Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/washer/) | Remote start | -| [Washtower](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Single-Unit/)
    [Washtower Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Dryer/)
    [Washtower Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Washer/) | Remote start | -| [Water Heater](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Water-Heater/) | Power | -| [Wine Cellar](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Wine-Cellar/) | Sabbath | +| Cooktop | Remote start | +| Dish Washer | Chime sound
    Clean indicator light
    Door
    Machine clean reminder
    Remote start
    Rinse refill needed | +| Hood | Power | +| Oven | Remote start | +| Refrigerator | Door
    Eco friendly
    Power saving mode
    Sabbath | +| Kimchi Refrigerator | Fresh air filter | +| Dryer
    Styler
    Washer
    Washcombo Main
    Washcombo Mini
    Washtower
    Washtower Dryer
    Washtower Washer | Remote start | +| Water Heater | Power | +| Wine Cellar | Sabbath | ### Climate @@ -130,32 +127,30 @@ The properties for controlling both the temperature and wind strength of the app | Device | Property | | ------ | -------- | -| [Air Conditioner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-conditioner/) | Current temperature
    Fan mode
    HVAC mode
    Preset mode
    Temperature
    Temperature cool
    Temperature heat
    Unit | -| [System Boiler](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/System-Boiler/) | Current temperature
    HVAC mode
    Temperature
    Temperature cool
    Temperature heat
    Unit | +| Air Conditioner | Current temperature
    Fan mode
    Swing mode
    Swing horizontal mode
    HVAC mode
    Preset mode
    Temperature
    Temperature cool
    Temperature heat
    Unit | +| System Boiler | Current temperature
    HVAC mode
    Temperature
    Temperature cool
    Temperature heat
    Unit | ### Event -A notification message pushed from the server is represented as an event platform. +A notification message pushed from the server is represented as an event platform. The **Notification codes** shows the full support range, and you can check the range of your device through the developer tools. -| Device | Property | -| ------ | -------- | -| [Air Conditioner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-conditioner/) | Notification | -| [Air Purifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-purifier/) | Notification | -| [Air Purifier Fan](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Air-Purifier-Fan/) | Notification | -| [Dehumidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dehumidifier/) | Notification | -| [Dish Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dish-washer/) | Error
    Notification | -| [Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Dryer/) | Error
    Notification | -| [Humidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/humidifier/) | Notification | -| [Kimchi Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Kimchi-Refrigerator/) | Notification | -| [Microwave Oven](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Microwave-Oven/) | Notification | -| [Oven](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Oven/) | Notification | -| [Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/refrigerator/) | Notification | -| [Robot Cleaner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/robot-cleaner/) | Error
    Notification | -| [Stick Cleaner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Stick-Cleaner/) | Notification | -| [Styler](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/styler/) | Error
    Notification | -| [Washcombo Main](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Main-WashCombo/)
    [Washcombo Mini](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Mini-WashCombo/)
    [Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/washer/) | Error
    Notification | -| [Washtower](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Single-Unit/)
    [Washtower Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Dryer/)
    [Washtower Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Washer/) | Error
    Notification | -| [Wine Cellar](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Wine-Cellar/) | Notification | +| Device | Property | Notification codes | +| ------ | -------- | ---------- | +| Air Conditioner | Notification | water_is_full | +| Air Purifier| Notification | lack_of_water, time_to_clean_filter, pollution_is_high, time_to_change_filter | +| Air Purifier Fan | Notification | time_to_change_filter | +| Dehumidifier | Notification | water_is_full | +| Dish Washer | Error
    Notification | cleaning_is_complete, error_during_cleaning, water_leak_has_occurred, rinse_is_not_enough, salt_refill_is_needed | +| Humidifier | Notification | time_to_change_filter, lack_of_water | +| Kimchi Refrigerator | Notification | door_is_open | +| Microwave Oven | Notification | none | +| Oven | Notification | preheating_is_complete, cooking_is_complete, time_to_clean, error_has_occurred | +| Refrigerator | Notification | time_to_change_filter, time_to_change_water_filter, frozen_is_complete, door_is_open | +| Robot Cleaner | Error
    Notification | - | +| Stick Cleaner | Notification | charging_is_complete, time_to_clean_filter | +| Washer
    Dryer
    Washcombo Main
    Washcombo Mini
    Washtower
    Washtower Dryer
    Washtower Washer | Error
    Notification | washing_is_complete, error_during_washing, drying_is_complete, drying_failed | +| Styler | Error
    Notification | styling_is_complete, error_has_occurred | +| Wine Cellar | Notification | door_is_open | ### Fan @@ -163,27 +158,24 @@ The properties for controlling the wind strength of the appliance are represente | Device | Property | | ------ | -------- | -| [Ceiling Fan](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/ceiling-fan/) | Power
    Speed | +| Ceiling Fan | Power
    Speed | ### Number -A read-write property which has numeric value is represented as a number platform. +A read-write property which has a numeric value is represented as a number platform. | Device | Property | | ------ | -------- | -| [Air Conditioner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-conditioner/) | Schedule turn-off
    Schedule turn-on
    Sleep timer | -| [Air Purifier Fan](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Air-Purifier-Fan/) | Sleep timer
    Wind temperature | -| [Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Dryer/) | Delay ends in
    Delay starts in | -| [Hood](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Hood/) | Fan
    Light | -| [Humidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/humidifier/) | Sleep timer
    Target humidity | -| [Microwave Oven](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Microwave-Oven/) | Fan
    Light | -| [Oven](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Oven/) | Temperature | -| [Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/refrigerator/) | Temperature | -| [Styler](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/styler/) | Delay ends in | -| [Washcombo Main](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Main-WashCombo/)
    [Washcombo Mini](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Mini-WashCombo/)
    [Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/washer/) | Delay ends in
    Delay starts in | -| [Washtower](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Single-Unit/)
    [Washtower Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Dryer/)
    [Washtower Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Washer/) | Delay ends in
    Delay starts in | -| [Water Heater](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Water-Heater/) | Temperature | -| [Wine Cellar](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Wine-Cellar/) | Light
    Temperature | +| Air Conditioner | Schedule turn-off
    Schedule turn-on
    Sleep timer | +| Air Purifier Fan | Sleep timer
    Wind temperature | +| Hood | Fan
    Light | +| Humidifier | Sleep timer
    Target humidity | +| Microwave Oven | Fan
    Light | +| Oven | Temperature | +| Refrigerator | Temperature | +| Dryer
    Styler
    Washer
    Washcombo Main
    Washcombo Mini
    Washtower
    Washtower Dryer
    Washtower Washer | Delayed start/end | +| Water Heater | Temperature | +| Wine Cellar | Light
    Temperature | ### Select @@ -191,48 +183,17 @@ A writable property which has a list of selectable values is represented as a se | Device |Property | | ------ |-------- | -| [Air Conditioner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-conditioner/) | Air purify
    Air quality sensor | -| [Air Purifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-purifier/) | Operating mode
    Speed | -| [Air Purifier Fan](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Air-Purifier-Fan/) | Display brightness
    Operating mode
    Rotation
    Speed | -| [Dehumidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dehumidifier/) | Speed | -| [Dish Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dish-washer/) | Operation | -| [Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Dryer/) | Operation | -| [Humidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/humidifier/) | Display brightness
    Drying mode
    Operating mode
    Speed | -| [Oven](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Oven/) | Cook mode
    Operation
    | -| [Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/refrigerator/) | Fresh air filter | -| [Styler](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/styler/) | Operation | -| [Washcombo Main](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Main-WashCombo/)
    [Washcombo Mini](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Mini-WashCombo/)
    [Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/washer/) | Operation | -| [Washtower](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Single-Unit/)
    [Washtower Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Dryer/)
    [Washtower Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Washer/) | Operation | -| [Water Heater](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Water-Heater/) | Operating mode | -| [Wine Cellar](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Wine-Cellar/) | Light
    Operating mode | - -### Sensor - -A read-only property which has states is represented as a sensor platform. - -| Device | Property | -| ------ | -------- | -| [Air Conditioner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-conditioner/) | Filter remaining
    Humidity
    Odor
    Overall air quality
    PM1
    PM10
    PM2.5
    Schedule turn-off
    Schedule turn-on
    Sleep timer | -| [Air Purifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-purifier/) | Air quality sensor
    Humidity
    Odor
    Operating mode
    Overall air quality
    Personal mode
    PM1
    PM10
    PM2.5 | -| [Air Purifier Fan](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Air-Purifier-Fan/) | Air quality sensor
    Humidity
    Odor
    Overall air quality
    PM1
    PM10
    PM2.5
    Sleep timer
    Temperature | -| [Cooktop](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Cooktop/) | Current status
    Power level
    Remaining time | -| [Dehumidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dehumidifier/) | Humidity
    Operating mode | -| [Dish Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dish-washer/) | Current cycle
    Current status
    Delay starts in
    Remaining time
    Rinse aid dispenser level
    Softening level
    Total time | -| [Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Dryer/) | Current status
    Delay ends in
    Delay starts in
    Remaining time
    Total time | -| [Home Brew](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Home-Brew/)| Brewing duration
    Brewing period
    Current status
    Flavor
    Homebrew recipe
    Hops
    Recipe progress
    Wort
    Yeast | -| [Humidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/humidifier/) | Air quality sensor
    Humidity
    Overall air quality
    PM1
    PM10
    PM2.5
    Schedule turn-off
    Schedule turn-on
    Sleep timer
    Temperature | -| [Kimchi Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Kimchi-Refrigerator/) | Fresh air filter
    Temperature | -| [Microwave Oven](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Microwave-Oven/) | Current status
    Remaining time | -| [Oven](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Oven/) | Cook time
    Current status
    Remaining time
    Temperature | -| [Plant Cultivator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Plant-Cultivator/) | Current status
    Day growth temperature
    Lighting duration
    Lighting intensity
    Lights on time
    Mode
    Night growth temperature
    Temperature
    Wind speed | -| [Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/refrigerator/) | Fresh air filter
    Water filter used | -| [Robot Cleaner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/robot-cleaner/) | Current status
    Operating mode
    Running time | -| [Stick Cleaner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Stick-Cleaner/) | Battery
    Current status
    Operating mode | -| [Styler](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/styler/) | Current status
    Delay ends in
    Delay starts in
    Remaining time
    Total time | -| [Washcombo Main](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Main-WashCombo/)
    [Washcombo Mini](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Mini-WashCombo/)
    [Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/washer/) | Current status
    Delay ends in
    Delay starts in
    Remaining time
    Total time | -| [Washtower](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Single-Unit/)
    [Washtower Dryer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Dryer/)
    [Washtower Washer](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/WashTower-Washer/) | Current status
    Delay ends in
    Delay starts in
    Remaining time
    Total time | -| [Water Heater](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Water-Heater/) | Temperature | -| [Water Purifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/water-purifier/) | High-temp sterilization
    Type
    UVnano| +| Air Conditioner | Air purify
    Air quality sensor | +| Air Purifier| Operating mode
    Speed | +| Air Purifier Fan | Display brightness
    Operating mode
    Rotation
    Speed | +| Dehumidifier | Speed | +| Dish Washer | Operation | +| Humidifier | Display brightness
    Drying mode
    Operating mode
    Speed | +| Oven | Cook mode
    Operation
    | +| Refrigerator | Fresh air filter | +| Dryer
    Styler
    Washer
    Washcombo Main
    Washcombo Mini
    Washtower
    Washtower Dryer
    Washtower Washer | Operation | +| Water Heater | Operating mode | +| Wine Cellar | Light
    Operating mode | ### Switch @@ -240,14 +201,14 @@ A read-write property which has only two states that can be toggled is represent | Device | Property | | ------ | -------- | -| [Air Conditioner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-conditioner/) | Energy saving | -| [Air Purifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/air-purifier/) | Power | -| [Air Purifier Fan](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Air-Purifier-Fan/) | Heating
    Power
    UVnano | -| [Dehumidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/dehumidifier/) | Power | -| [Humidifier](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/humidifier/) | Auto mode
    Heating
    Mood light
    Power
    Sleep mode | -| [Refrigerator](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/refrigerator/) | Ice plus
    Quick freeze | -| [System Boiler](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/System-Boiler/) | Hot water | -| [Wine Cellar](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/Wine-Cellar/) | Ventilation | +| Air Conditioner | Power
    Lighting
    Energy saving | +| Air Purifier | Power | +| Air Purifier Fan | Heating
    Power
    UVnano | +| Dehumidifier | Power | +| Humidifier | Auto mode
    Heating
    Mood light
    Power
    Sleep mode | +| Refrigerator | Express mode
    Express cool
    Quick freeze | +| System Boiler | Power
    Hot water | +| Wine Cellar | Ventilation | ### Vacuum @@ -255,7 +216,196 @@ The properties for controlling the clean operations of the appliance are represe | Device | Property | | ------ | -------- | -| [Robot Cleaner](https://thinq.developer.lge.com/en/cloud/docs/thinq-connect/device-profile/robot-cleaner/) | Battery
    Current status
    Operation | +| Robot Cleaner | Battery
    Current status
    Operation | + +### Water heater + +The properties for controlling the operating mode and temperature are represented as a water_heater platform. + +| Device | Property | +| ------ | -------- | +| Water heater | Mode
    Current temperature
    Temperature | + +### Sensor + +A read-only property which has states is represented as a sensor platform. + +| Device | Property | +| ------ | -------- | +| Air Conditioner | Filter remaining
    Humidity
    Odor
    Overall air quality
    PM1
    PM10
    PM2.5
    Schedule turn-off
    Schedule turn-on
    Sleep timer | +| Air Purifier| Air quality sensor
    Humidity
    Odor
    Operating mode
    Overall air quality
    Personal mode
    PM1
    PM10
    PM2.5
    Filter remaining
    Schedule turn-off
    Schedule turn-on | +| Air Purifier Fan | Air quality sensor
    Humidity
    Odor
    Overall air quality
    PM1
    PM10
    PM2.5
    Sleep timer
    Temperature
    Schedule turn-off
    Schedule turn-on | +| Cooktop | Current status
    Power level | +| Dehumidifier | Humidity
    Operating mode | +| Dish Washer | Current cycle
    Current status
    Rinse aid dispenser level
    Softening level
    Delayed start
    Remaining time
    Total time | +| Home Brew| Brewing duration
    Brewing period
    Current status
    First flavor
    Second flavor
    Homebrew recipe
    First hop
    Second hop
    Recipe progress
    Wort
    Yeast | +| Humidifier | Air quality sensor
    Humidity
    Overall air quality
    PM1
    PM10
    PM2.5
    Schedule turn-off
    Schedule turn-on
    Sleep timer
    Temperature | +| Kimchi Refrigerator | Fresh air filter
    Temperature | +| Microwave Oven | Current status | +| Oven | Current status
    Temperature | +| Plant Cultivator | Current status
    Day growth temperature
    Lighting duration
    Lighting intensity
    Lights on time
    Mode
    Night growth temperature
    Temperature
    Wind speed | +| Refrigerator | Fresh air filter
    Water filter used | +| Robot Cleaner | Current status
    Operating mode
    Running time | +| Stick Cleaner | Battery
    Current status
    Operating mode | +| System Boiler | Indoor temperature
    Inlet temperature
    Outlet temperature | +| Water Purifier | High-temp sterilization
    Type
    UVnano| +| Dryer
    Styler
    Washer
    Washcombo Main
    Washcombo Mini
    Washtower
    Washtower Dryer
    Washtower Washer | Current status
    Delayed start/end
    Remaining time
    Total time
    Cycles | + +## User guide +### 1. Custom card configuration (HACS) + +**- Timer Bar Card** +> - Supported devices: Washer, Dryer, Styler, Dish washer +> - Used entities: sensor.washer_**current_status**, sensor.washer_**remaining_time**, sensor.washer_**total_time** + +```yaml +type: custom:timer-bar-card +entities: + - entity: sensor.washer_current_status + name: Washer + active_state: + - running + - rinsing + - spinning + - drying + - cooling + - reserved + - presteam + - steam + pause_state: pause + icon: mdi:tumble-dryer-off + active_icon: mdi:tumble-dryer + end_time: + entity: sensor.washer_remaining_time + duration: + entity: sensor.washer_total_time + units: minutes + invert: true +``` + +### 2. Automation + +#### 1) Air conditioner, climate + +> - Currently the Climate's set_hvac_mode, set_temperature service is not working properly. Each control must operate sequentially, but conditional wait for this has not yet been implemented in ThinQ integration. +> - We provide a script that can do turn_on, set_hvac_mode, and set_temperature at once, so please use it for automation. +> - Create a new script in 'CREATE SCRIPT' using the code below, then select the script in the 'Action' field. +> - This conditional wait is scheduled to be implemented in core 2025.4. + +{% raw %} + +```yaml +alias: LG ThinQ climate +description: "Action turn_on, set_hvac_mode, set_temperature" +fields: + input_device: + selector: + device: + filter: + - integration: lg_thinq + name: Device + required: true + input_entity: + selector: + entity: + filter: + - integration: lg_thinq + domain: climate + name: Entity + required: true + input_hvac: + selector: + select: + options: + - label: Off + value: off + - label: Auto + value: auto + - label: Cool + value: cool + - label: Dry + value: dry + - label: Fan only + value: fan_only + - label: Heat/cool + value: heat_cool + - label: Heat + value: heat + name: HVAC mode + required: true + default: cool + input_temperature: + selector: + number: + min: 1 + max: 100 + name: Target temperature + required: true + default: 18 +sequence: + - sequence: + - variables: + entity_name: "{{ input_entity.split('.')[1] }}" + - if: + - condition: template + value_template: >- + {{ input_hvac != 'off' and states('climate.'+ entity_name) == 'off' }} + then: + - action: climate.turn_on + target: + device_id: "{{ input_device }}" + data: {} + - wait_template: "{{ states('climate.'+ entity_name) != 'off' }}" + - if: + - condition: template + value_template: "{{ states('climate.'+ entity_name) != input_hvac }}" + then: + - action: climate.set_hvac_mode + data: + hvac_mode: "{{ input_hvac }}" + target: + device_id: "{{ input_device }}" + - wait_template: "{{ states('climate.'+ entity_name) == input_hvac }}" + - if: + - condition: template + value_template: "{{ input_hvac != 'off' }}" + then: + - action: climate.set_temperature + data: + temperature: "{{ input_temperature }}" + target: + device_id: "{{ input_device }}" +``` + +{% endraw %} + +#### 2) Notification, error event + +> - Guide: [Automating on event](https://www.home-assistant.io/integrations/event/#automating-on-a-button-press) +> - Important: guide's step 3, 4 +> - You can select the state change you want to act as trigger in step 4 + +{% raw %} + +```yaml +alias: lack of water example +description: Toggle switch when air purifier's lack_of_water +triggers: + - trigger: state + entity_id: + - event.purifier_notification +actions: + - condition: state + entity_id: event.purifier_notification + attribute: event_type + state: lack_of_water + - type: toggle + device_id: xxxxxxxx + entity_id: xxxxxxxx + domain: switch +``` + +{% endraw %} ## Troubleshooting @@ -274,14 +424,11 @@ Check your PAT's valid country in the **Choose the region / Country** section. This error occurs when there's an abnormal number of API calls made using the PAT. The LG ThinQ integration will work properly after some time. -## Debugging - -The LG ThinQ integration will show additional information by enabling log configuration. Add the line to your {% term "`configuration.yaml`" %}: -Don't forget to remove the line again once you are done debugging. - -```yaml -logger: - default: info - logs: - homeassistant.components.lg_thinq: debug -``` +## Debugging / Issue report +The LG ThinQ integration will show additional information by enabling log configuration. +1. [Enable debug logging](/docs/configuration/troubleshooting/#enabling-debug-logging). + - If you change **Enable** to **Disable**, the log will be saved to the download folder. +2. When reporting an issue: + - Provide screenshots of your device configuration (including device name, type, and entities). + - Include the debug logs. + - Describe the expected behavior and what's not working. diff --git a/source/_integrations/lifx.markdown b/source/_integrations/lifx.markdown index 6b1f8a312e1..f9d4f8fbef4 100644 --- a/source/_integrations/lifx.markdown +++ b/source/_integrations/lifx.markdown @@ -86,7 +86,21 @@ To apply a theme interactively, use the theme selection drop-down box found on t To apply a theme as part of an automation, use the `select.select_option` action call. You can also apply a theme when calling the `lifx.effect_move` action. See the **Light effects** section below for more details, including how to set a custom theme for that effect. -The following themes are available: `autumn`, `blissful`, `cheerful`, `dream`, `energizing`, `epic`, `exciting`, `focusing`, `halloween`, `hanukkah`, `holly`, `independence_day`, `intense`, `mellow`, `peaceful`, `powerful`, `relaxing`, `santa`, `serene`, `soothing`, `sports`, `spring`, `tranquil`, `warming`. +The following themes are available: `autumn`, `blissful`, `bias_lighting`, `calaveras`, `cheerful`, `christmas`, `dream`, `energizing`, `epic`, `evening`, `exciting`, `fantasy`, `focusing`, `gentle`, `halloween`, `hanukkah`, `holly`, `hygge`, `independence`, `intense`, `love`, `kwanzaa`, `mellow`, `party`, `peaceful`, `powerful`, `proud`, `pumpkin`, `relaxing`, `romance`, `santa`, `serene`, `shamrock`, `soothing`, `spacey`, `sports`, `spring`, `stardust`, `thanksgiving`, `tranquil`, `warming`, `zombie`. + +### Action `lifx.paint_theme` + +This action allows you to paint either one of the predefined themes listed above, or you can specify a custom palette and create your own theme. Your palette must be a list of at least two colors each defined as a list of four integer values representing hue, saturation, brightness, and kelvin (in that order). See below for the allowed range for each value. + +If you provide a value for both `palette` and `theme`, then the palette will override the theme. If neither is provided, the `exciting` theme is used by default. + +| Data attribute | Description | +| ---------------------- | ----------- | +| `palette` | (optional, overrides `theme`) a list of 2 to 16 colors defined as a list of values representing hue (0-360), saturation (0-100), brightness (0-100), and kelvin (1500-9000). All four values must be provided for each color. | +| `theme` | (optional, overridden by `palette`) the name of the theme to paint on the target lights. See above for a list of available themes. | +| `transition` | (optional, default: 1 second) duration in seconds to paint the theme across the target lights. | +| `power_on` | (optional, default: True) set this to `False` to prevent lights being turned on before the theme is painted. | + ## Light effects @@ -183,11 +197,11 @@ The device will be powered on by default, but this can be overridden by setting | Data attribute | Description | | ---------------------- | ----------- | -| `entity_id` | String or list of strings that point at `entity_id`s of matrix lights. -| `speed` | Duration in seconds for the effect to travel the length of the device (min: 1s, max: 25s) -| `palette` | A list of at least 2 and at most 16 HSBK values to use for this effect. -| `theme` | The theme to use for the effect. Must be one of: `autumn`, `blissful`, `cheerful`, `dream`, `energizing`, `epic`, `exciting`, `focusing`, `halloween`, `hanukkah`, `holly`, `independence` `day`, `intense`, `mellow`, `peaceful`, `powerful`, `relaxing`, `santa`, `serene`, `soothing`, `sports`, `spring`, `tranquil`, `warming`. -| `power_on` | Whether to turn the light on before starting the effect (optional, default: true) +| `entity_id` | String or list of strings that point at `entity_id`s of matrix lights. | +| `speed` | Duration in seconds for the effect to travel the length of the device (min: 1s, max: 25s) | +| `palette` | A list of at least 2 and at most 16 HSBK values to use for this effect (optional, overrides theme). | +| `theme` | The theme to use for the effect. See above for a list of available themes (optional, overridden by palette). | +| `power_on` | Whether to turn the light on before starting the effect (optional, default: true) | ### Action `lifx.effect_sky` @@ -242,11 +256,11 @@ The effect will not be visible if all LEDs on the device are set to the same col | Data attribute | Description | | ---------------------- | ----------- | -| `entity_id` | String or list of strings that point at `entity_id`s of multizone lights. -| `speed` | Duration in seconds for the effect to travel the length of the device (min: 0.1s, max: 60s) -| `direction` | The direction in which the effect will travel, either "right" or "left" (default: right) -| `theme` | The name of a pre-defined theme to apply to the multizone device before starting the effect. -| `power_on` | Whether to turn the light on before starting the effect (optional, default: true) +| `entity_id` | String or list of strings that point at `entity_id`s of multizone lights. | +| `speed` | Duration in seconds for the effect to travel the length of the device (min: 0.1s, max: 60s) | +| `direction` | The direction in which the effect will travel, either "right" or "left" (default: right) | +| `theme` | The theme to use for the effect. See above for a list of available themes (optional). | +| `power_on` | Whether to turn the light on before starting the effect (optional, default: true) | ### Action `lifx.effect_stop` diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index c1e2a59eaf0..c8276c611eb 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -70,7 +70,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -79,7 +79,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -91,7 +91,7 @@ brightness_command_topic: required: false type: string brightness_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `brightness_command_topic`. Available variables: `value`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `brightness_command_topic`. Available variables: `value`." required: false type: template brightness_scale: @@ -104,7 +104,7 @@ brightness_state_topic: required: false type: string brightness_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the brightness value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the brightness value." required: false type: template color_mode_state_topic: @@ -112,11 +112,11 @@ color_mode_state_topic: required: false type: string color_mode_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the color mode." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the color mode." required: false type: template color_temp_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `color_temp_command_topic`. Available variables: `value`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `color_temp_command_topic`. Available variables: `value`." required: false type: template color_temp_command_topic: @@ -133,7 +133,7 @@ color_temp_state_topic: required: false type: string color_temp_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the color temperature value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the color temperature value." required: false type: template command_topic: @@ -216,7 +216,7 @@ effect_command_topic: required: false type: string effect_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `effect_command_topic`. Available variables: `value`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `effect_command_topic`. Available variables: `value`." required: false type: template effect_list: @@ -228,11 +228,11 @@ effect_state_topic: required: false type: string effect_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the effect value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the effect value." required: false type: template hs_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `hs_command_topic`. Available variables: `hue` and `sat`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `hs_command_topic`. Available variables: `hue` and `sat`." required: false type: template hs_command_topic: @@ -247,7 +247,7 @@ hs_state_topic: required: false type: string hs_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the HS value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the HS value." required: false type: template icon: @@ -255,7 +255,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -309,12 +309,12 @@ payload_not_available: type: string default: offline payload_off: - description: The payload that represents disabled state. + description: The payload that represents the off state. required: false type: string default: "OFF" payload_on: - description: The payload that represents enabled state. + description: The payload that represents the on state. required: false type: string default: "ON" @@ -333,7 +333,7 @@ retain: type: boolean default: false rgb_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `rgb_command_topic`. Available variables: `red`, `green` and `blue`." required: false type: template rgb_command_topic: @@ -345,11 +345,11 @@ rgb_state_topic: required: false type: string rgb_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGB value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the RGB value." required: false type: template rgbw_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgbw_command_topic`. Available variables: `red`, `green`, `blue` and `white`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `rgbw_command_topic`. Available variables: `red`, `green`, `blue` and `white`." required: false type: template rgbw_command_topic: @@ -361,11 +361,11 @@ rgbw_state_topic: required: false type: string rgbw_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGBW value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the RGBW value." required: false type: template rgbww_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `rgbww_command_topic`. Available variables: `red`, `green`, `blue`, `cold_white` and `warm_white`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `rgbww_command_topic`. Available variables: `red`, `green`, `blue`, `cold_white` and `warm_white`." required: false type: template rgbww_command_topic: @@ -377,20 +377,20 @@ rgbww_state_topic: required: false type: string rgbww_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the RGBWW value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the RGBWW value." required: false type: template schema: - description: The schema to use. Must be `default` or omitted to select the default schema. + description: The schema to use. Must be `basic` or omitted to select the default schema. required: false type: string - default: default + default: basic state_topic: description: "The MQTT topic subscribed to receive state updates. A \"None\" payload resets to an `unknown` state. An empty payload is ignored. By default, valid state payloads are `OFF` and `ON`. The accepted payloads can be overridden with the `payload_off` and `payload_on` config options." required: false type: string state_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the state value. The template should return the `payload_on` and `payload_off` values, so if your light uses `power on` to turn on, your `state_value_template` string should return `power on` when the switch is on. For example, if the message is just `on`, your `state_value_template` should be `power {{ value }}`. When your `payload_on = 27` and `payload_off = 'off'`, then this template might be `'off' if value_json.my_custom_brightness_field <= 0 else 27`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the state value. The template should return the values defined by `payload_on` (defaults to \"ON\") and `payload_off` (defaults to \"OFF\") settings, or \"None\"." required: false type: template unique_id: @@ -407,7 +407,7 @@ white_scale: type: integer default: 255 xy_command_template: - description: "Defines a [template](/docs/configuration/templating/) to compose message which will be sent to `xy_command_topic`. Available variables: `x` and `y`." + description: "Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to compose message which will be sent to `xy_command_topic`. Available variables: `x` and `y`." required: false type: template xy_command_topic: @@ -419,7 +419,7 @@ xy_state_topic: required: false type: string xy_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the XY value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the XY value." required: false type: template {% endconfiguration %} @@ -571,7 +571,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -580,7 +580,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -681,7 +681,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -748,7 +748,7 @@ schema: description: The schema to use. Must be `json` to select the JSON schema. required: false type: string - default: default + default: basic state_topic: description: 'The MQTT topic subscribed to receive state updates in a JSON-format. The JSON payload may contain the elements: `"state"`: `"ON"` the light is on, `"OFF"` the light is off, `null` the state is `unknown`; `"color_mode"`: one of the `supported_color_modes`; `"color"`: A dict with the color attributes*; `"brightness"`: The brightness; `"color_temp"`: The color temperature; `"effect"`: The effect of the light.' required: false @@ -969,7 +969,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -978,7 +978,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -986,11 +986,11 @@ availability_topic: required: false type: string blue_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract blue color from the state payload value. Expected result of the template is an integer from 0-255 range." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract blue color from the state payload value. Expected result of the template is an integer from 0-255 range." required: false type: template brightness_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract brightness from the state payload value. Expected result of the template is an integer from 0-255 range." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract brightness from the state payload value. Expected result of the template is an integer from 0-255 range." required: false type: template color_temp_kelvin: @@ -999,15 +999,15 @@ color_temp_kelvin: type: boolean default: false color_temp_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract color temperature from the state payload value. Expected result of the template is an integer. If `color_temp_kelvin` is `true` the expected value is in Kelvin else mireds are expected." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract color temperature from the state payload value. Expected result of the template is an integer. If `color_temp_kelvin` is `true` the expected value is in Kelvin else mireds are expected." required: false type: template command_off_template: - description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) for *off* state changes. Available variables: `state` and `transition`." + description: "The [template](/docs/configuration/templating/#using-command-templates-with-mqtt) for *off* state changes. Available variables: `state` and `transition`." required: true type: template command_on_template: - description: "The [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) for *on* state changes. Available variables: `state`, `brightness`, `color_temp`, `red`, `green`, `blue`, `hue`, `sat`, `flash`, `transition` and `effect`. Values `red`, `green`, `blue`, `brightness` are provided as integers from range 0-255. Value of `hue` is provided as float from range 0-360. Value of `sat` is provided as float from range 0-100. Value of `color_temp` is provided as integer representing mired or Kelvin units if `color_temp_kelvin` is `true`." + description: "The [template](/docs/configuration/templating/#using-command-templates-with-mqtt) for *on* state changes. Available variables: `state`, `brightness`, `color_temp`, `red`, `green`, `blue`, `hue`, `sat`, `flash`, `transition` and `effect`. Values `red`, `green`, `blue`, `brightness` are provided as integers from range 0-255. Value of `hue` is provided as float from range 0-360. Value of `sat` is provided as float from range 0-100. Value of `color_temp` is provided as integer representing mired or Kelvin units if `color_temp_kelvin` is `true`." required: true type: template command_topic: @@ -1070,11 +1070,11 @@ effect_list: required: false type: [string, list] effect_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract effect from the state payload value." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract effect from the state payload value." required: false type: template green_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract green color from the state payload value. Expected result of the template is an integer from 0-255 range." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract green color from the state payload value. Expected result of the template is an integer from 0-255 range." required: false type: template icon: @@ -1082,7 +1082,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -1141,16 +1141,16 @@ qos: type: integer default: 0 red_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract red color from the state payload value. Expected result of the template is an integer from 0-255 range." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract red color from the state payload value. Expected result of the template is an integer from 0-255 range." required: false type: template schema: description: The schema to use. Must be `template` to select the template schema. required: false type: string - default: default + default: basic state_template: - description: "[Template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract state from the state payload value." + description: "[Template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract state from the state payload value." required: false type: template state_topic: @@ -1237,7 +1237,7 @@ mqtt: {% endraw %} -### CCT light (brightnes and temperature) +### CCT light (brightness and temperature) This example comes from a configuration of Shelly RGBW Bulb working in White mode. `max_mireds` and `min_mireds` set color temperature boundaries to 3000K - 6500K. Notice the same limits are applied in `command_on_template`, but in kelvin units this time. It's due to conversion from mired to kelvin which causes exceeding boundary values accepted by the device. diff --git a/source/_integrations/linak.markdown b/source/_integrations/linak.markdown new file mode 100644 index 00000000000..516ca4beb38 --- /dev/null +++ b/source/_integrations/linak.markdown @@ -0,0 +1,22 @@ +--- +title: LINAK +description: Connect and control your LINAK devices using the IKEA Idasen Desk integration +ha_category: + - Cover +ha_domain: linak +ha_integration_type: virtual +ha_supporting_domain: idasen_desk +ha_supporting_integration: IKEA Idåsen Desk +ha_release: '2023.10' +ha_codeowners: + - '@abmantis' +ha_config_flow: true +ha_platforms: + - button + - cover + - sensor +ha_iot_class: Local Push +ha_bluetooth: true +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/linear_garage_door.markdown b/source/_integrations/linear_garage_door.markdown index 5337724b39b..224241c30e3 100644 --- a/source/_integrations/linear_garage_door.markdown +++ b/source/_integrations/linear_garage_door.markdown @@ -17,15 +17,15 @@ ha_platforms: ha_integration_type: integration --- -The Linear integration lets you control Linear garage doors through Home Assistant. Device names in Home Assistant are generated based on the names defined in your Linear mobile app. - {% warning %} -Nice North America has begun informing users of the new Nice G.O. app, and dropping support for the Linear app in the coming weeks. Support for the new app will be added as a new integration. -Migrating now will cut off access to the old app and the integration will cease functioning for you. +This integration is now deprecated and will be removed in 2025.8.0. +Please use the new [Nice G.O.](/integrations/nice_go) integration instead to avoid disruption. For more information, refer to the [Nice G.O. migration documentation](https://na.niceforyou.com/features/nice-go-app/#migration). {% endwarning %} +The Linear integration lets you control Linear garage doors through Home Assistant. Device names in Home Assistant are generated based on the names defined in your Linear mobile app. + ## Prerequisites This integration is for garage doors connected to the cloud by Wi-Fi using the Linear mobile app. diff --git a/source/_integrations/linkedgo.markdown b/source/_integrations/linkedgo.markdown new file mode 100644 index 00000000000..96243799b2c --- /dev/null +++ b/source/_integrations/linkedgo.markdown @@ -0,0 +1,49 @@ +--- +title: LinkedGo +description: Integrate LinkedGo (Powered by Shelly) devices +ha_category: + - Binary sensor + - Climate + - Cover + - Energy + - Event + - Light + - Number + - Select + - Sensor + - Switch + - Text + - Update + - Valve +ha_release: '0.115' +ha_codeowners: + - '@balloob' + - '@bieniu' + - '@thecode' + - '@chemelli74' + - '@bdraco' +ha_iot_class: Local Push +ha_domain: linkedgo +ha_config_flow: true +ha_zeroconf: true +ha_platforms: + - binary_sensor + - button + - climate + - cover + - diagnostics + - event + - light + - number + - select + - sensor + - switch + - text + - update + - valve +ha_integration_type: virtual +ha_supporting_domain: shelly +ha_supporting_integration: Shelly +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/linx.markdown b/source/_integrations/linx.markdown new file mode 100644 index 00000000000..8fa842f9bf3 --- /dev/null +++ b/source/_integrations/linx.markdown @@ -0,0 +1,22 @@ +--- +title: Linx +description: Connect and control your Linx devices using the Motionblinds integration +ha_category: + - Cover +ha_domain: linx +ha_integration_type: virtual +ha_supporting_domain: motion_blinds +ha_supporting_integration: Motionblinds +ha_release: 2020.12 +ha_codeowners: + - '@starkillerOG' +ha_config_flow: true +ha_platforms: + - button + - cover + - sensor +ha_iot_class: Local Push +ha_dhcp: true +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/litterrobot.markdown b/source/_integrations/litterrobot.markdown index ac3077f7395..497941341cf 100644 --- a/source/_integrations/litterrobot.markdown +++ b/source/_integrations/litterrobot.markdown @@ -26,11 +26,14 @@ ha_platforms: - update - vacuum ha_integration_type: hub +ha_quality_scale: bronze --- -The Litter-Robot integration allows you to control and monitor your Wi-Fi-enabled, automatic, self-cleaning litter box and pet feeders. +The Litter-Robot integration allows you to monitor and control your Wi-Fi-enabled, automatic, self-cleaning litter box and pet feeders. If you have pet profiles set up, you can also track your pet's weight. -You will need a Litter-Robot account as well as a Wi-Fi-enabled Litter-Robot or Feeder-Robot unit that has already been associated with your account. +## Prerequisites + +Before using this integration, you’ll need a Whisker account and a Wi-Fi-enabled Litter-Robot or Feeder-Robot linked to it. You can do this via the Whisker app. {% include integrations/config_flow.md %} @@ -38,22 +41,26 @@ You will need a Litter-Robot account as well as a Wi-Fi-enabled Litter-Robot or ### Litter-Robot -| Entity | Domain | Description | -| ----------------------------- | -------- | -------------------------------------------------------------------------------- | -| Litter box | `vacuum` | Main entity that represents a Litter-Robot unit. | -| Night light mode | `switch` | When turned on, automatically turns on the night light in darker settings. | -| Panel lockout | `switch` | When turned on, disables the buttons on the unit to prevent changes to settings. | -| Last seen | `sensor` | Displays the time the unit was last seen / reported an update. | -| Litter level | `sensor` | Displays the litter level, only for Litter-Robot 4. | -| Pet weight | `sensor` | Displays the last measured pet weight, only for Litter-Robot 4. | -| Sleep Mode Start Time | `sensor` | When sleep mode is enabled, displays the current or next sleep mode start time. | -| Sleep Mode End Time | `sensor` | When sleep mode is enabled, displays the current or last sleep mode end time. | -| Status Code | `sensor` | Displays the status code (Clean Cycle in Progress, Ready, Drawer Full, etc). | -| Waste Drawer | `sensor` | Displays the current waste drawer level. | -| Clean Cycle Wait Time Minutes | `select` | View and select the clean cycle wait time. | -| Panel brightness | `select` | View and select the panel brightness, only for Litter-Robot 4. | -| Reset Waste Drawer | `button` | Button to reset the waste drawer level to 0%, only for Litter-Robot 3. | -| Firmware | `update` | View and update to the latest firmware, only for Litter-Robot 4. | +| Entity | Domain | Description | +| ----------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------- | +| Litter box | `vacuum` | Main entity that represents a Litter-Robot unit. | +| Night light mode | `switch` | When turned on, automatically turns on the night light in darker settings. | +| Panel lockout | `switch` | When turned on, disables the buttons on the unit to prevent changes to settings. | +| Last seen | `sensor` | Displays the time the unit was last seen / reported an update. | +| Litter level | `sensor` | Displays the litter level, only for Litter-Robot 4. | +| Pet weight | `sensor` | Displays the last measured pet weight, only for Litter-Robot 4. | +| Sleep mode start time | `sensor` | When sleep mode is enabled, displays the current or next sleep mode start time. | +| Sleep mode end time | `sensor` | When sleep mode is enabled, displays the current or last sleep mode end time. | +| Status code | `sensor` | Displays the status code (Clean Cycle in Progress, Ready, Drawer Full, etc.). | +| Waste drawer | `sensor` | Displays the current waste drawer level. | +| Power status | `binary_sensor` | Indicates whether power is currently connected. | +| Sleep mode | `binary_sensor` | Indicates whether sleep mode is enabled. | +| Sleeping | `binary_sensor` | Indicates whether sleep mode is currently active. | +| Clean cycle wait time minutes | `select` | View and select the clean cycle wait time. | +| Panel brightness | `select` | View and select the panel brightness, only for Litter-Robot 4. | +| Reset | `button` | Button to reset the robot, clearing any errors and potentially triggering a cycle, only for Litter-Robot 4. | +| Reset waste drawer | `button` | Button to reset the waste drawer level to 0%, only for Litter-Robot 3. | +| Firmware | `update` | View and update to the latest firmware, only for Litter-Robot 4. | ### Feeder-Robot @@ -65,17 +72,11 @@ You will need a Litter-Robot account as well as a Wi-Fi-enabled Litter-Robot or | Night light mode | `switch` | When turned on, automatically turns on the night light in darker settings. | | Panel lockout | `switch` | When turned on, disables the buttons on the unit to prevent changes to settings. | -## Additional Attributes +### Pet -Some entities have attributes in addition to the default ones that are available for that platform. They are listed below. - -### Litter Box `vacuum` entity - -| Attribute | Type | Description | -| ------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| is_sleeping | boolean | Whether or not the unit is currently in sleep mode. | -| sleep_mode_enabled | boolean | Whether or not sleep mode is enabled. | -| power_status | string | Current power status of the unit. `AC` indicates normal power, `DC` indicates battery backup and `NC` indicates that the unit is not connected and/or powered off. | +| Entity | Domain | Description | +| ------ | -------- | ------------- | +| Weight | `sensor` | Pet's weight. | ## Actions @@ -101,3 +102,9 @@ data: start_time: "22:30:00" ``` + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/lock.markdown b/source/_integrations/lock.markdown index 7116ff7c587..bbe95579d75 100644 --- a/source/_integrations/lock.markdown +++ b/source/_integrations/lock.markdown @@ -27,6 +27,7 @@ A lock entity can have the following states: - **Opening**: Indication of whether the lock is currently opening. - **Locked**: The lock is currently locked. - **Locking**: The lock is in the process of being locked. +- **Unlocked**: The lock is currently unlocked. - **Unlocking**: The lock is in the process of being unlocked. - **Unavailable**: The entity is currently unavailable. - **Unknown**: The state is not yet known. diff --git a/source/_integrations/lock.mqtt.markdown b/source/_integrations/lock.mqtt.markdown index 69fa475d9f0..1611a73e3fe 100644 --- a/source/_integrations/lock.mqtt.markdown +++ b/source/_integrations/lock.mqtt.markdown @@ -51,7 +51,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -60,7 +60,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -72,7 +72,7 @@ code_format: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. The lock command template accepts the parameters `value` and `code`. The `value` parameter will contain the configured value for either `payload_open`, `payload_lock` or `payload_unlock`. The `code` parameter is set during the action to `open`, `lock` or `unlock` the MQTT lock and will be set `None` if no code was passed. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. The lock command template accepts the parameters `value` and `code`. The `value` parameter will contain the configured value for either `payload_open`, `payload_lock` or `payload_unlock`. The `code` parameter is set during the action to `open`, `lock` or `unlock` the MQTT lock and will be set `None` if no code was passed. required: false type: template command_topic: @@ -155,7 +155,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -253,7 +253,7 @@ unique_id: required: false type: string value_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a state value from the payload. + description: Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a state value from the payload. required: false type: template {% endconfiguration %} diff --git a/source/_integrations/lock.template.markdown b/source/_integrations/lock.template.markdown index 8674d4b52f3..ddfeaf7f367 100644 --- a/source/_integrations/lock.template.markdown +++ b/source/_integrations/lock.template.markdown @@ -74,7 +74,7 @@ lock: required: false type: template default: None - lock: + lock: description: Defines an action to run when the lock is locked. required: true type: action diff --git a/source/_integrations/london_underground.markdown b/source/_integrations/london_underground.markdown index f91ff1123d2..78a5bea5b37 100644 --- a/source/_integrations/london_underground.markdown +++ b/source/_integrations/london_underground.markdown @@ -35,12 +35,17 @@ sensor: - Elizabeth line - Hammersmith & City - Jubilee - - London Overground - Metropolitan - Northern - Piccadilly - Victoria - Waterloo & City + - Liberty + - Lioness + - Mildmay + - Suffragette + - Weaver + - Windrush ``` {% configuration %} diff --git a/source/_integrations/mastodon.markdown b/source/_integrations/mastodon.markdown index 2d69ed5232f..f606ec06e26 100644 --- a/source/_integrations/mastodon.markdown +++ b/source/_integrations/mastodon.markdown @@ -1,8 +1,9 @@ --- title: Mastodon -description: Instructions on how to add Mastodon notifications to Home Assistant. +description: Instructions on how to add Mastodon posts and account statistics to Home Assistant. ha_category: - Notifications + - Sensor ha_release: 0.67 ha_codeowners: - '@fabaff' @@ -17,12 +18,15 @@ ha_integration_type: service ha_config_flow: true --- -The `mastodon` platform uses [Mastodon](https://joinmastodon.org/) to deliver notifications from Home Assistant. +The `mastodon` platform uses [Mastodon](https://joinmastodon.org/) to post status updates and get account statistics. ### Setup Go to **Preferences** in the Mastodon web interface, then to **Development** and create a new application. -If you want to grant only required accesses, uncheck all checkboxes then check only **read:accounts** and **write:statuses**. + +Check the following scopes **read:accounts**, **write:statuses** and **write:media**. + +Select **Submit** to create the application and generate the key, secret, and token required for the integration. {% include integrations/config_flow.md %} @@ -41,74 +45,106 @@ Access token: The integration will create sensors for the Mastodon account showing total followers, following, and posts. Sensors are updated once an hour. -## Notifications +## Actions -The integration will create a `notify` action matching the name of the integration entry. +The Mastodon integration has the following actions: -### Action usage +- `mastodon.post` -Mastodon is a notify platform, and can be used by calling notify action as described in the [notify documentation](/integrations/notify/). It will toot messages using -your account. An optional **target** parameter can be given to specify whether your toot will be public, private, unlisted, or direct. +{% note %} +The previous `notify.mastodon` service has been deprecated in favor of the new `mastodon.post` action. If you're upgrading from a previous version, you'll need to update your automations to use the new action format shown below. +{% endnote %} -| Data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `message` | no | Body of the notification. -| `target` | yes | If not used, will default to account setting. `public`: post will be public, `unlisted`: post will be public but not appear on the public timeline, `private`: post will only be visible to followers, and `direct`: post will only be visible to mentioned users. -| `data` | yes | See below for extended functionality. +### Action `mastodon.post` -### Action data +Post a status to your Mastodon account -The following attributes can be placed inside `data` for extended functionality. +| Data attribute | Optional | Description | +| ------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `config_entry_id` | No | The ID of the Mastodon config entry to post to. | +| `status` | No | The status text to post. | +| `visibility` | Yes | If not used, will default to account setting. `public`: post will be public, `unlisted`: post will be public but not appear on the public timeline, `private`: post will only be visible to followers, and `direct`: post will only be visible to mentioned users. | +| `content_warning` | Yes | Text will be shown as a warning before the text of the status. If not used, no warning will be displayed. | +| `media` | Yes | Attach an image or video to the post. | +| `media_description` | Yes | If an image or video is attached, will add a description for this media for people with visual impairments. | +| `media_warning` | Yes | If an image or video is attached, `True` will mark the media as sensitive. `False` is default. | -| Data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `media` | yes | Attach an image or video to the message. -| `media_warning` | yes | If an image or video is attached, `True`: will marked the media as sensitive. `False` is default. -| `content_warning` | yes | Text will be be shown as a warning before the text of the status. If not used, no warning will be displayed. +{% tip %} +You can get your `config_entry_id` by using actions within [Developer Tools](/docs/tools/dev-tools/), using one of the above actions and viewing the YAML. +{% endtip %} -### Example action +### Examples -This will post a message to Mastodon. Visibility will default to your account's setting. +{% details "Example status post action" %} + +Example post action that will post a status using your account's default visibility: + +{% raw %} ```yaml -- action: notify.mastodon - message: "A toot from Home Assistant" +- action: mastodon.post + config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID + status: "A toot from Home Assistant" ``` -### Example action - private +{% endraw %} -This will post a message to Mastodon, but visibility is marked as `private` so only followers will see it. +{% enddetails %} + +{% details "Example private post action" %} + +This will post a status to Mastodon, but visibility is marked as `private` so only followers will see it. + +{% raw %} ```yaml -- action: notify.mastodon - message: "A private toot from Home Assistant" - target: private +- action: mastodon.post + config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID + status: "A private toot from Home Assistant" + visibility: private ``` -### Example action - with media +{% endraw %} -This will post a message to Mastodon that includes an image. +{% enddetails %} + +{% details "Example media post action" %} + +This will post a status to Mastodon that includes an image. + +{% raw %} ```yaml -- action: notify.mastodon - message: "A media toot from Home Assistant" - data: - media: /config/www/funny_meme.png +- action: mastodon.post + config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID + status: "A media toot from Home Assistant" + media: /config/www/funny_meme.png ``` -### Example action - with media and content warning to hide post behind a warning +{% endraw %} -This will post a message to Mastodon that includes an image and a target of `unlisted`, so it doesn't show in the public timeline. +{% enddetails %} + +{% details "Example post with media and a content warning that will not be visible in the public timeline" %} + +This will post a status to Mastodon that includes an image, with a description, a content warning, and a visibility of `unlisted`, so it doesn't show in the public timeline. + +{% raw %} ```yaml -- action: notify.mastodon - message: "A media toot from Home Assistant" - target: unlisted - data: - media: /config/www/funny_meme.png - content_warning: "This might not be funny enough" +- action: mastodon.post + config_entry_id: YOUR_MASTODON_CONFIG_ENTITY_ID + status: "A media toot from Home Assistant" + visibility: unlisted + media: /config/www/funny_meme.png + media_description: "A funny meme" + content_warning: "This might not be funny enough" ``` +{% endraw %} + +{% enddetails %} + For more on how to use notifications in your automations, please see the [getting started with automation page](/getting-started/automation/). ## Known limitations diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown index 80b2394d3a2..676bc5e097f 100644 --- a/source/_integrations/matter.markdown +++ b/source/_integrations/matter.markdown @@ -1,5 +1,5 @@ --- -title: Matter (BETA) +title: Matter description: Instructions on how to integrate Matter with Home Assistant. ha_category: - Binary sensor @@ -16,6 +16,7 @@ ha_category: - Update - Vacuum - Valve +featured: true ha_release: '2022.12' ha_iot_class: Local Push ha_config_flow: true @@ -54,10 +55,6 @@ The Matter integration allows you to control Matter devices on your local Wi-Fi For communicating with Matter devices, the Home Assistant integration runs its own "Matter controller" as add-on. This Matter Server add-on runs the controller software as a separate process and connects your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a WebSocket connection. -{% warning %} -The integration is marked BETA: Both the Matter standard itself and its implementation within Home Assistant are in an early stage. You may run into compatibility issues and/or other bugs. -{% endwarning %} - # Introduction - What is Matter? Matter is a new smart home connectivity standard for home automation products and IoT (Internet of Things) devices, see its [Wikipedia article](https://en.wikipedia.org/wiki/Matter_(standard)). @@ -125,7 +122,7 @@ Make sure you have all these components ready before trying to add a Matter devi - Make sure you have the latest version of Home Assistant [installed](/installation/). - In Home Assistant, have the Matter integration installed. - Go to {% my integrations title="**Settings** > **Devices & services**" %}. - - Add the **Matter (BETA)** integration. + - Add the **Matter** integration. - When prompted to **Select the connection method**: - If you run Home Assistant OS in a regular setup: select **Submit**. - This will install the official Matter server add-on. @@ -144,12 +141,12 @@ Make sure you have all these components ready before trying to add a Matter devi #### Prepare Android or iPhone - Have either an Android or iPhone ready and Bluetooth enabled. For information why Bluetooth is required, refer to the section on [Bluetooth used during commissioning](#bluetooth-used-during-commissioning): - - Android: - - Have the Android version 8.1 or higher. + - **Android**: + - At a minimum, have Android version 8.1. Recommended is version 12 or higher. - Have the latest version of the Home Assistant Companion app, installed from the Play Store (full version). - If you are using {% term Thread %}: Make sure there is a Thread border router device (Nest Hub (2nd Gen) or Nest Wi-Fi Pro or Home Assistant with the OpenThread Border Router add-on) present in your home network. - If you are using OpenThread (for Connect ZBT-1/SkyConnect) as border router, make sure you followed the steps in the [Thread documentation](/integrations/thread#turning-home-assistant-into-a-thread-border-router). - - iPhone + - **iPhone** - Have the iOS version 16 or higher - Have the latest version of the Home Assistant Companion app installed. - If you are using {% term Thread %}: Make sure there is a Thread border router device (HomePod Mini or V2, Apple TV 4K or Home Assistant with the OpenThread Border Router add-on) present in your home network. @@ -211,16 +208,34 @@ Check these steps if you are experiencing issues when trying to add a Matter dev #### Symptom -While trying to add the Matter device, I get an error stating that *Matter is currently unavailable*. +While trying to add the Matter device, I get an error stating that _Matter is currently unavailable_. #### Remedy This could mean that not all required Matter modules that are needed by the Home Assistant Companion App have been downloaded yet. Try the following steps: -1. Wait up to 24 hours for the Google Play services to download the necessary Matter modules. -2. If this did not work, try reinstalling the Home Assistant Companion app. -3. If this did not work, try installing the Google Home app. Technically this is not required, but it might trigger another installation attempt of the Matter modules. -4. Refer to this [Troubleshooting Guide from Google](https://developers.home.google.com/matter/verify-services). +1. Wait up to 24 hours for the Google Play Services to download the necessary Matter modules. +2. Make sure the requirements listed in the [prerequisites](#prerequisites) are met. This includes meeting the minimum system requirements: + - **Android**: + - Minimum version is 8.1. Recommended is version 12 or higher. + - More issues have been reported by people using older Android versions. + - Use a regular, Google-account Android setup. No alternative Android versions. + - Make sure the Google Play Services are all up to date. + - **iPhone**: + - Have the iOS version 16 or higher +3. Home Assistant Companion app: + - Make sure you installed the (full) version, downloaded from the Play Store. + - Make sure it is the latest version. + - If you only just installed or updated the Home Assistant Companion app: + - Wait. + - It can take a while before the required components are installed in the background. + - Try again after 1 hour to ensure the installation is complete. +4. Verify your device meets all requirements to support Matter: + - On your Android device, go to **Settings** > **Google** > **Devices & Sharing**. + - There should be an entry there for **Matter devices**. +5. Reinstalling the Home Assistant Companion app. +6. Try (re-)installing the Google Home app. Technically, this is not required, but it might trigger another installation attempt of the Matter modules. +7. Refer to this [Troubleshooting Guide from Google](https://developers.home.google.com/matter/verify-services). ## Sharing a device from another platform with Home Assistant @@ -232,7 +247,7 @@ Use one of these methods if your Matter device was added to Apple Home or Google - Have the Matter device integrated to Apple Home or Google Home respectively - In Home Assistant, have the Matter integration installed. - Go to {% my integrations title="**Settings** > **Devices & services**" %}. - - Add the **Matter (BETA)** integration. + - Add the **Matter** integration. - When prompted to **Select the connection method**: - If you run Home Assistant OS in a regular setup: select **Submit**. - This will install the official Matter server add-on. @@ -279,7 +294,7 @@ In some cases, bridging devices into Home Assistant via Matter might not bring y Follow these steps if you have added a Matter device to Home Assistant and you want to make it available in an other platform, such as Google Home or Apple Home. -1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**. +1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter** integration card, select **Devices**. 2. From the list of devices, select the device you want to share. 3. Select **Share device**, then in the dialog, select **Share device** again. - There is no need to press a hardware button on the device to set it to commissioning mode. @@ -294,7 +309,7 @@ Follow these steps if you have added a Matter device to Home Assistant and you w Follow these steps if you want to remove a device from a particular Matter controller. -1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**. +1. Go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter** integration card, select **Devices**. 2. From the list of devices, select the device you want to remove from a controller. 3. In the **Device info** section, next to **Share device**, select the three-dot menu. Then, select **Manage fabrics**. 4. From the list, remove the controller of interest. @@ -306,7 +321,7 @@ Follow these steps if you want to remove a device from a particular Matter contr The device information section provides some diagnostic information of a device. -1. To view the device details, go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter (BETA)** integration card, select **Devices**. +1. To view the device details, go to {% my integrations title="**Settings** > **Devices & services**" %} and on the **Matter** integration card, select **Devices**. 2. From the list of devices, select the device you want to look at.

    @@ -381,22 +396,101 @@ NOTE for Android users: You need to follow the instructions at the bottom of the - For more detailed information on network configuration, refer to the [README of the Matter server repository](https://github.com/home-assistant-libs/python-matter-server/blob/main/README.md). -### I do not see the button "Commission using the Companion app" +### I do not see the button _Commission using the Companion app_ -This button will only be visible within the Home Assistant Companion App (so not in the browser) and your device meets all requirements for Matter support. +The **Commission using the Companion app** button only exists in the Home Assistant Companion App. It is not available in the browser. -- For iOS, minimum version is iOS 16 (minimal 16.3 is preferred) and the most recent version of the HA companion app. -- For Android, minimum version is 8.1 and the most recent version of the (full) HA Companion app, downloaded from the Play Store. +#### Remedy -### When I'm trying to commission using the Android app, I get an error stating "Matter is currently unavailable" +If you don't see the button in the Companion app: -See above, make sure your device meets all requirements to support Matter. Update Android to the latest version and the Home Assistant Companion app. To quickly verify if your device meets all requirements to support Matter, on your Android device, go to **Settings** > **Google** > **Devices & Sharing**. There should be an entry there for **Matter devices**. +1. Make sure the requirements listed in the [prerequisites](#prerequisites) are met. +2. This includes meeting the minimum system requirements: -Some users have reported that uninstalling and reinstalling the Google Home app fixed this issue for them. -Also see this [extended troubleshooting guide](https://developers.home.google.com/matter/verify-services) from Google. + - **Android**: + - Minimum version is 8.1. Recommended is version 12 or higher. + - More issues have been reported by people using older Android versions. + - Use a regular, Google-account Android setup. No alternative Android versions. + - Make sure the Google Play Services are all up to date. + - **iPhone**: + - Have the iOS version 16 or higher + +### When trying to commission using Android, I get an error "Matter is unavailable" + +Refer to the steps under [Troubleshooting the installation](#troubleshooting-the-installation). + +### Android: stuck at "Checking network connectivity" + +#### Symptom + +You are trying to {% term commissioning commission %} a Matter device using an Android phone. During that process, you see the "Checking network connectivity" message and never get past that. + +#### Remedy + +1. Make sure the requirements listed in the [prerequisites](#prerequisites) are met. +2. This includes meeting the minimum system requirements for **Android**: + + - Minimum version is 8.1. Recommended is version 12 or higher. + - More issues have been reported by people using older Android versions. + - Use a regular, Google-account Android setup. No alternative Android versions. + - Make sure the Google Play Services are all up to date. +3. If you are adding a {% term Thread %}-based Matter device, make sure the phone is in close range of the border router and your device. +4. If you are adding a Wi-Fi-based Matter device: + - Matter devices often use the 2.4 GHz frequency for Wi-Fi. + - Make sure your phone is in the same 2.4 GHz network where you want to operate your devices. + +### Error "this device requires a border router" + +#### Symptom + +While trying to add a Matter device with your Home Assistant Companion app, you get the error "this device requires a border router". + +#### Cause + +To add a Matter device which is based on the {% term Thread %} radio protocol, you need a {% term "Thread border router" %} near the device and your phone needs to know the credentials of your (newly created) Thread network. + +#### Remedy + +Set up a {% term "Thread border router" %} and synchronize the credentials from Home Assistant to your Android device: + +1. Follow the steps on [Turning Home Assistant into a Thread border router](https://www.home-assistant.io/integrations/thread#turning-home-assistant-into-a-thread-border-router). +2. Make sure to Sync the Thread credentials as described in step 3. + +### Error "Target node did not process the update file" + +#### Symptom + +You are trying to update a Matter over Thread device via Home Assistant and see the error "Target node did not process the update file". + +#### Cause + +Over-the-air (OTA) updates of Matter devices from Home Assistant are not supported with an Apple {% term "Thread border router" %}. + +#### Remedy + +- If you only have a {% term "Thread border router" %} from Apple, you cannot update the device from Home Assistant. + - If you want to be able to use OTA updates on these devices, you could add another border router, for example by [turning Home Assistant into a Thread border router](/integrations/thread#turning-home-assistant-into-a-thread-border-router). + +- If you have a mixture of Apple and other {% term "Thread border routers" %} such as the Home Assistant [OpenThread border router](/integrations/thread#openthread-border-routers), follow these steps: + 1. Power down all the Apple {% term "Thread border routers" %}. + 2. Wait at least 30 minutes. + 3. Try again to update the devices from Home Assistant. ### Unable to commission devices, it keeps giving errors or stops working randomly -The Matter protocol relies on (local) IPv6 and mDNS (multicast traffic) which should be able to travel freely in your network. Matter devices that use Wi-Fi (including Thread border routers) must be on the same LAN/VLAN as Home Assistant. Matter devices that only use {% term Thread %} must be joined to {% term Thread %} networks for which there is at least one border router connected to the Home Assistant LAN. +#### Symptom -If you experience any issues with discovering devices (for example, if the initial {% term commissioning %} keeps failing or if devices become unavailable randomly), investigate your network topology. For instance, a setting on your router or Wi-Fi access point to "optimize" multicast traffic can harm the (discovery) traffic from Matter devices. Keep this in mind when you experience issues trying to add or control Matter devices. Protocols like Matter are designed for regular residential network setups and may not integrate well with enterprise networking solutions like VLANs, Multicast filtering, and (malfunctioning) IGMP snooping. To avoid issues, try to keep your network topology as simple and flat as possible. +The initial {% term commissioning %} keeps failing, you experience issues with discovering devices, or devices become unavailable randomly. + +#### Cause + +- The Matter protocol relies on (local) IPv6 and mDNS (multicast traffic) traveling freely in your network. +- Matter is designed for regular residential network setups and may not integrate well with enterprise networking solutions like VLANs, Multicast filtering, and (malfunctioning) IGMP snooping. + +#### Remedy + +1. Make sure that Matter devices that use Wi-Fi (including {% term "Thread border router" %}) are on the same VLANs/VLAN as Home Assistant. +2. Make sure that Matter devices that only use {% term Thread %} are joined to Thread networks for which there is at least one {% term "Thread border router" %} connected to the Home Assistant LAN. +3. Investigate your network topology. + - For instance, a setting on your router or Wi-Fi access point to "optimize" multicast traffic can harm the (discovery) traffic from Matter devices. Keep this in mind when you experience issues trying to add or control Matter devices. + - To avoid issues, try to keep your network topology as simple and flat as possible. diff --git a/source/_integrations/mcp.markdown b/source/_integrations/mcp.markdown new file mode 100644 index 00000000000..daf088aca75 --- /dev/null +++ b/source/_integrations/mcp.markdown @@ -0,0 +1,102 @@ +--- +title: Model Context Protocol +description: Instructions on how to use the Model Context Protocol with Home Assistant. +ha_category: + - Voice +ha_release: 2025.2 +ha_iot_class: Local Polling +ha_config_flow: true +ha_codeowners: + - '@allenporter' +ha_domain: mcp +ha_integration_type: integration +related: + - docs: /integrations/conversation/ + title: Conversation +ha_quality_scale: silver +--- + +The [Model Context Protocol](https://modelcontextprotocol.io) is an open protocol that +standardizes how applications provide context to LLMs. The **Model Context Protocol** {% term integration %} +enables using MCP Servers in Home Assistant for providing additional tools to use with a +[conversation agent](/integrations/conversation). For example, you can add an MCP server that +supports memory functionality, or that can search the web using functionality not already +available in Home Assistant. + +Controlling Home Assistant is done by providing MCP clients access to the Assist API of Home +Assistant. You can control what devices and entities it can access from the {% my voice_assistants title="exposed entities page" %}. + +## Prerequisites + +1. You will need an [MCP server](https://modelcontextprotocol.io/examples). +1. If your MCP server only supports the *stdio* protocol, you will also need an additional + MCP proxy (such as [mcp-proxy](https://github.com/sparfenyuk/mcp-proxy)) to expose + the server over *SSE*. + +{% include integrations/config_flow.md %} + +## Configuration options + +The integration provides the following configuration options: + +{% configuration_basic %} +SSE Server URL: + description: The URL for the SSE endpoint of the MCP server. For example, `http://example/sse`. +{% endconfiguration_basic %} + +## Architecture overview + +This {% term integration %} can provide additional functionality for LLM conversation agents +(for example [Anthropic](/integrations/anthropic/), [Google Generative AI](/integrations/google_generative_ai_conversation), [Ollama](/integrations/ollama/), [Open AI](/integrations/openai_conversation/)). + +Home Assistant acts as a client to the MCP server you specify. Home Assistant will +poll the MCP server SSE endpoint and query the list of available tools. The tools are +made available for use by Home Assistant conversation agents, similar to the Assist API. +See the [Model Context Protocol Introduction](https://modelcontextprotocol.io/introduction#general-architecture) +for more details on the protocol. + +The Home Assistant Model Context Protocol integration acts as a client using the +[Server-Sent Events (SSE) transport](https://modelcontextprotocol.io/docs/concepts/transports#server-sent-events-sse) +allowing streaming client-to-server communication. Most MCP clients today only support +[stdio](https://modelcontextprotocol.io/docs/concepts/transports#standard-input-output-stdio) transport, +and directly run an MCP server as a local command line tool. You can +use an MCP proxy server like [mcp-proxy](https://github.com/sparfenyuk/mcp-proxy) +to enable Home Assistant to access an MCP SSE server. + +Once the integration is configured, you also need to configure the conversation +agent to use the tools. + +## Supported functionality + +### Tools + +[MCP Tools](https://modelcontextprotocol.io/docs/concepts/tools) enable LLMs to +perform actions through Home Assistant. The tools used by the configured LLM API +are exposed. + +## Known limitations + +The Home Assistant Model Context Protocol integration currently only supports a +subset of MCP features: + +| Feature | Supported by Home Assistant | +| ------- | --------- | +| Prompts | ❌ | +| Tools | ✅ | +| Resources | ❌ | +| Sampling | ❌ | +| Notifications | ❌ | + +## Troubleshooting + +See [Model Context Protocol: Debugging](https://modelcontextprotocol.io/docs/tools/debugging) for +general tips on debugging MCP. If you are developing your own MCP server and having trouble making it work +with Home Assistant, you can also use the [MCP Inspector](https://github.com/modelcontextprotocol/inspector) +to verify that your MCP server is working correctly. + + +## Remove integration + +This integration can be removed by following these steps: + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/mcp_server.markdown b/source/_integrations/mcp_server.markdown index ea9d5e9ee1e..d5ff3723b2e 100644 --- a/source/_integrations/mcp_server.markdown +++ b/source/_integrations/mcp_server.markdown @@ -7,12 +7,13 @@ ha_release: 2025.2 ha_iot_class: Local Push ha_config_flow: true ha_codeowners: - - 'allenporter' + - '@allenporter' ha_domain: mcp_server -ha_integration_type: integration +ha_integration_type: service related: - docs: /integrations/conversation/ title: Conversation +ha_quality_scale: silver --- The [Model Context Protocol](https://modelcontextprotocol.io) is an open protocol that standardizes how applications provide context to LLMs. The **Model Context Protocol Server** (MCP) integration enables using Home Assistant to provide context for MCP LLM Client Applications. For example, you can expose your Google Tasks To-do list as a tool for Claude Desktop. @@ -34,8 +35,8 @@ The integration provides the following configuration options: {% configuration_basic %} Control Home Assistant: - description: The API to use to expose tools over the Model Context Protocol. Clients - can only control or provide information about entities that are [exposed](/voice_control/voice_remote_expose_devices/) to it. + description: If MCP clients are allowed to control Home Assistant. Clients can only + control or provide information about entities that are [exposed](/voice_control/voice_remote_expose_devices/) to it. {% endconfiguration_basic %} ## Architecture overview @@ -109,7 +110,8 @@ to allow Claude for Desktop to access Home Assistant using the SSE transport. ``` 5. Restart Claude. 6. You will see a connection icon {% icon "mdi:connection" %} if things are set up correctly. Clicking the connection icon will show enabled MCP servers such as *Home Assistant*. -7. You can then use Claude to control Home Assistant similar to how you control Home Assistant through the Voice Assistant. Claude wil ask you for permission before calling any tools. +7. Select the prompt provided by Home Assistant. +8. You can then use Claude to control Home Assistant similar to how you control Home Assistant through the Voice Assistant. Claude wil ask you for permission before calling any tools. ![Screenshot of Claude for Desktop adding an item to a Home Assistant To-do list](/images/integrations/mcp_server/claude-todo-list-control.png) @@ -122,6 +124,12 @@ to allow Claude for Desktop to access Home Assistant using the SSE transport. perform actions through Home Assistant. The tools used by the configured LLM API are exposed. +### Prompts + +The [MCP Prompts](https://modelcontextprotocol.io/docs/concepts/prompts) provided +inform LLMs how to call the tools. The tools used by the configured LLM API +are exposed. + ## Known Limitations The Home Assistant Model Context Protocol integration currently only supports a @@ -129,12 +137,13 @@ subset of MCP features: | Feature | Supported by Home Assistant | | ------- | --------- | -| Prompts | ❌ | +| Prompts | ✅ | | Tools | ✅ | | Resources | ❌ | | Sampling | ❌ | | Notifications | ❌ | +Home Assistant does not yet provide built-in tools that can fetch device state. ## Troubleshooting diff --git a/source/_integrations/media_player.markdown b/source/_integrations/media_player.markdown index a34b3dafb47..6e740a75d75 100644 --- a/source/_integrations/media_player.markdown +++ b/source/_integrations/media_player.markdown @@ -168,8 +168,6 @@ Currently only supported on [Denon AVR](/integrations/denonavr/) and [Songpal]( #### Action `media_player.shuffle_set` -Currently only supported on [Sonos](/integrations/sonos), [Spotify](/integrations/spotify), [MPD](/integrations/mpd), [Kodi](/integrations/kodi), [Roon](/integrations/roon), [OwnTone](/integrations/forked_daapd), [Squeezebox](/integrations/squeezebox) and [Universal](/integrations/universal). - | Data attribute | Optional | Description | | ---------------------- | -------- | ---------------------------------------------------- | | `entity_id` | yes | Target a specific media player. For example `media_player.spotify`| @@ -197,6 +195,91 @@ Allows to group media players together for synchronous playback. Only works on s | ---------------------- | -------- | ---------------------------------------------------- | | `entity_id` | yes | Unjoin this media player from any player groups. | +#### Action `media_player.browse_media` + +Provides access to browsing the media tree provided by the integration. Similar in functionality to browsing media through the media player UI. Common use cases include automations that need to navigate media libraries and find media by specific categories. + +| Data attribute | Optional | Description | +| ---------------------- | -------- | ---------------------------------------------------- | +| `media_content_type` | yes | The type of media to browse such as music, playlist, and video. Integration specific. | +| `media_content_id` | yes | The content ID to browse. Integration specific. An empty content ID returns the top-level of the browse tree. | + +The action returns a media tree object that can be stored in a response variable for use in subsequent automation steps. The response includes: + +| Field | Description | +|-------|-------------| +| `title` | Display name of the current level | +| `media_class` | Type of the current item (for example, directory, music, video) | +| `media_content_type` | Content type identifier | +| `media_content_id` | Integration specific content ID | +| `children_media_class` | Types of items in the children array | +| `children` | Array of child items with similar properties | + +Browse the root of the tree. + +Note: The following example shows a response from a Sonos device. The structure and content types may vary between different media player integrations. Media content IDs are often URL-encoded. + +```yaml + # Get the top of the browse tree + - action: media_player.browse_media + target: + entity_id: media_player.living_room + response_variable: top_level +``` + +```yaml +# abbreviated Example response +media_player.living_room: + title: Sonos + media_class: directory + media_content_type: root + media_content_id: "" + # children_media_class indicates that all items in the children array are directories + children_media_class: directory + children: + - title: Favorites + media_class: directory + media_content_type: favorites + media_content_id: "" + - title: Music Library + media_class: directory + media_content_type: library + media_content_id: "" +``` + +Example of browsing a specific artist with the Sonos Integration: + +Note: This example demonstrates browsing an artist's albums. The format of `media_content_id` (`A:ALBUMARTIST/artist_name`) is specific to Sonos. Notice how special characters in album names are URL-encoded in the response (for example, `%20` for spaces). + +```yaml + - action: media_player.browse_media + target: + entity_id: media_player.living_room + data: + media_content_id: A:ALBUMARTIST/Beatles + media_content_type: album + response_variable: albums +``` + +```yaml +# Abbreviated Example response +media_player.living_room: + title: Beatles + media_class: album + media_content_type: album + media_content_id: A:ALBUMARTIST/Beatles + children_media_class: directory + children: + - title: A Hard Day's Night + media_class: album + media_content_type: album + media_content_id: A:ALBUMARTIST/Beatles/A%20Hard%20Day's%20Night + - title: Abbey Road + media_class: album + media_content_type: album + media_content_id: A:ALBUMARTIST/Beatles/Abbey%20Road +``` + ## Device class {% include integrations/device_class_intro.md %} diff --git a/source/_integrations/microsoft.markdown b/source/_integrations/microsoft.markdown index 97d0d433112..60849da6e5f 100644 --- a/source/_integrations/microsoft.markdown +++ b/source/_integrations/microsoft.markdown @@ -65,7 +65,7 @@ pitch: type: string default: "`default`" contour: - description: "Change the contour of the output in percentages. This overrides the pitch setting. See the [W3 SSML specification](https://www.w3.org/TR/speech-synthesis/#pitch_contour) for what it does. Example value: `(0,0) (100,100)`." + description: "Change the contour of the output in percentages. This overrides the pitch setting. See the [W3 SSML specification](https://www.w3.org/TR/speech-synthesis/#pitch_contour) for what it does. Example value: `(0%, -1st) (100%, +10st)`." required: false type: string region: @@ -100,6 +100,6 @@ tts: rate: 20 volume: -50 pitch: high - contour: (0, 0) (100, 100) + contour: (0%, -1st) (100%, +10st) region: eastus ``` diff --git a/source/_integrations/mill.markdown b/source/_integrations/mill.markdown index 94c33d1edb0..ca85c0eaa2e 100644 --- a/source/_integrations/mill.markdown +++ b/source/_integrations/mill.markdown @@ -11,8 +11,8 @@ ha_domain: mill ha_config_flow: true ha_platforms: - climate - - sensor - number + - sensor ha_integration_type: integration --- diff --git a/source/_integrations/minecraft_server.markdown b/source/_integrations/minecraft_server.markdown index b8ef784a926..292ee3eacb3 100644 --- a/source/_integrations/minecraft_server.markdown +++ b/source/_integrations/minecraft_server.markdown @@ -15,25 +15,19 @@ ha_platforms: - diagnostics - sensor ha_integration_type: integration +ha_quality_scale: silver --- [Minecraft](https://www.minecraft.net/en-us) is a sandbox video game developed by Mojang Studios. Minecraft servers allow players to play the game online or via a local area network with other players. The **Minecraft Server** integration lets you retrieve information from a Minecraft server within Home Assistant. Both **Java Edition** and **Bedrock Edition** servers are supported. -{% important %} -Minecraft Java Edition servers must be version 1.7 or newer, since older versions don't expose any information. -{% endimportant %} +## Prerequisites + +- Minecraft Java Edition servers must be version 1.7 or newer, since older versions don't expose any information. +- The configuration parameter `enable-status` must be set to `true` in the server configuration file (`server.properties`). {% include integrations/config_flow.md %} -During setup you will be prompted to enter the **name** and the **address** of the server. - -### Server name - -The **server name** can be chosen freely. - -{% note %} -Default is `Minecraft Server`. -{% endnote %} +During setup you will be prompted to enter the **address** of the server. ### Server address @@ -76,3 +70,9 @@ For Bedrock Edition servers following sensors are provided additionally: {% note %} Player names are only available on Java Edition servers. Depending on the server, the player names list may not be shown completely. Some servers and plugins limit or completely hide this list or even replace the player names with fake ones to show some custom messages there. {% endnote %} + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown index 97c15c39e65..bcf7bf9c2af 100644 --- a/source/_integrations/modbus.markdown +++ b/source/_integrations/modbus.markdown @@ -350,7 +350,7 @@ All modbus entities have the following parameters: {% configuration %} address: - description: "Address of coil/register." + description: "Address of coil/register. Note that this can also be specified in Hex. For example: `0x789A`" required: true type: integer name: @@ -369,12 +369,12 @@ slave: description: "Identical to `device_address`" required: false type: integer - default: 0 + default: 1 device_address: - description: "Id of the device. Used to address multiple devices on a rs485 bus or devices connected to a modbus repeater." + description: "Id of the device. Used to address multiple devices on a rs485 bus or devices connected to a modbus repeater. 0 is the broadcast id. " required: false type: integer - default: 0 + default: 1 unique_id: description: "ID that uniquely identifies this entity. Slaves will be given a unique_id of <>_<>. @@ -527,7 +527,7 @@ The master configuration like device_class are automatically copied to the slave ## Configuring climate entities -The Modbus climate platform allows you to monitor a thermostat or heaters as well as set a target temperature, HVAC mode, swing mode, and fan state. +The Modbus climate platform allows you to monitor a thermostat or heaters as well as set a target temperature, HVAC action, HVAC mode, swing mode, and fan state. Please refer to [Parameter usage](#parameters-usage-matrix) for conflicting parameters. @@ -652,6 +652,57 @@ climates: description: "Swap word ABCD -> CDAB, **not valid with data types: `int16`, `uint16`**" word_byte: description: "Swap word ABCD -> DCBA, **not valid with data types: `int16`, `uint16`**" + hvac_action_register: + description: "Configuration of register for HVAC action" + required: false + type: map + keys: + address: + description: "Address of HVAC action register." + required: true + type: integer + input_type: + description: "Type of register, either `holding` or `input`" + required: false + default: holding + type: string + values: + description: "Mapping between the register values and HVAC actions" + required: true + type: map + keys: + action_off: + description: "Value corresponding to HVAC Off action." + required: false + type: [integer, list] + action_cooling: + description: "Value corresponding to HVAC Cooling action." + required: false + type: [integer, list] + action_defrosting: + description: "Value corresponding to HVAC Defrosting action." + required: false + type: [integer, list] + action_drying: + description: "Value corresponding to HVAC Drying action." + required: false + type: [integer, list] + action_fan: + description: "Value corresponding to HVAC Fan action." + required: false + type: [integer, list] + action_heating: + description: "Value corresponding to HVAC Heating action." + required: false + type: [integer, list] + action_idle: + description: "Value corresponding to HVAC Idle action." + required: false + type: [integer, list] + action_preheating: + description: "Value corresponding to HVAC Preheating action." + required: false + type: [integer, list] hvac_mode_register: description: "Configuration of register for HVAC mode" required: false @@ -756,13 +807,24 @@ climates: description: "Value corresponding to Fan Diffuse mode." required: false type: integer + hvac_onoff_coil: + description: "Address of On/Off state. + Only use this setting if your On/Off state is not handled as a HVAC mode. + When zero is read from this coil, the HVAC state is set to Off, otherwise the `hvac_mode_register` + dictates the state of the HVAC. If no such coil is defined, it defaults to Auto. + When the HVAC mode is set to Off, the value 0 is written to the coil, otherwise the + value 1 is written. + **Cannot be used with `hvac_onoff_register`.**" + required: false + type: integer hvac_onoff_register: description: "Address of On/Off state. When the value defined by `hvac_off_value` is read from this register, the HVAC state is set to Off. Otherwise, the `hvac_mode_register` dictates the state of the HVAC. If no such register is defined, it defaults to Auto. When the HVAC mode is set to Off, the value defined by `hvac_off_value` is written to - the register, otherwise the value defined by `hvac_on_value` is written." + the register, otherwise the value defined by `hvac_on_value` is written. + **Cannot be used with `hvac_onoff_coil`.**" required: false type: integer hvac_on_value: @@ -838,7 +900,7 @@ modbus: port: 502 climates: - name: "Watlow F4T" - address: 27586 + address: 0x6BC2 input_type: holding count: 1 data_type: custom @@ -1458,7 +1520,7 @@ modbus: sensors: - name: Room_1 slave: 10 - address: 0 + address: 0x9A input_type: holding unit_of_measurement: °C state_class: measurement diff --git a/source/_integrations/monzo.markdown b/source/_integrations/monzo.markdown index afcfa7b1cf6..0690f319f7d 100644 --- a/source/_integrations/monzo.markdown +++ b/source/_integrations/monzo.markdown @@ -2,6 +2,7 @@ title: Monzo description: Instructions on how to integrate Monzo integration into Home Assistant. ha_category: + - Finance - Sensor ha_release: 2024.6 ha_iot_class: Cloud Polling diff --git a/source/_integrations/motion_blinds.markdown b/source/_integrations/motion_blinds.markdown index 86d2d18fb71..2a12bf82436 100644 --- a/source/_integrations/motion_blinds.markdown +++ b/source/_integrations/motion_blinds.markdown @@ -27,6 +27,7 @@ Additionally the following brands have been reported to also work with this inte - [Bloc Blinds](https://www.blocblinds.com/) - [Brel Home](https://www.brel-home.nl/) - [3 Day Blinds](https://www.3dayblinds.com/) +- [Decorquip Dream](https://www.decorquip.com/post.php?dream) - [Diaz](https://www.diaz.be/en/) - [Dooya](http://www.dooya.com/) - [Gaviota](https://www.gaviotagroup.com/en/) @@ -45,6 +46,7 @@ Additionally the following brands have been reported to also work with this inte - [Smart Rollo (SIRO)](https://smart-rollos.de/) - [Smartblinds](https://www.smartblinds.nl/) - [Smart Home](https://www.smart-home.hu) +- [Ublockout](https://www.ublockout.com/) - [Uprise Smart Shades](http://uprisesmartshades.com) This integration allows for both directly controlling blinds that support wifi-connection and controlling Uni- and Bi-direction blinds that connect to a 433MHz WiFi bridge. @@ -65,6 +67,8 @@ The following bridges are reported to work with this integration: - SIRO Connect SI7005 - Heicko Smart Stick 1ST - DD7006A Smart Home bridge +- Dreamhub Pro 191726 +- Dreamhub mini 191717 {% include integrations/config_flow.md %} diff --git a/source/_integrations/motionblinds_matter.markdown b/source/_integrations/motionblinds_matter.markdown new file mode 100644 index 00000000000..5415db4f82d --- /dev/null +++ b/source/_integrations/motionblinds_matter.markdown @@ -0,0 +1,51 @@ +--- +title: Motionblinds Matter +description: Control your Motionblinds Matter devices using the Matter integration. +ha_category: + - Cover +ha_brand: true +ha_domain: motionblinds +ha_release: '2025.4' +ha_codeowners: + - '@home-assistant/matter' +ha_config_flow: true +ha_platforms: + - cover +ha_iot_class: Local Push +ha_integration_type: virtual +works_with: + - matter +ha_iot_standard: + - matter +--- + +[Motionblinds](https://motionblinds.com) is a member of the Works with Home Assistant partner program for their Matter products. Motionblinds is committed to making sure their products are up-to-date and ready to use in Home Assistant. + +Motionblinds 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/) + +## Supported devices + +The following devices are known to be supported by the integration: +- CMD-02 +- CMD-02-P +- CMD-03 +- CM-03 +- CM-04 +- CM-05 +- CM-06 +- CM-07 +- CM-07V2 +- CM-08 +- CM-09 +- CM-10 +- CM-34 +- CM-35 +- CM-36 +- CM-40 +- CM-45 +- CM-52 +- CM-57 diff --git a/source/_integrations/motioneye.markdown b/source/_integrations/motioneye.markdown index f3d00f908b7..f686d006377 100644 --- a/source/_integrations/motioneye.markdown +++ b/source/_integrations/motioneye.markdown @@ -301,32 +301,32 @@ A dashboard card with icons that will call the `action` action to send action co - entity: camera.living_room icon: "mdi:arrow-left" tap_action: - action: call-service - action: motioneye.action + action: perform-action + perform_action: motioneye.action data: action: left entity_id: camera.living_room - entity: camera.living_room icon: "mdi:arrow-right" tap_action: - action: call-service - action: motioneye.action + action: perform-action + perform_action: motioneye.action data: action: right entity_id: camera.living_room - entity: camera.living_room icon: "mdi:arrow-up" tap_action: - action: call-service - action: motioneye.action + action: perform-action + perform_action: motioneye.action data: action: up entity_id: camera.living_room - entity: camera.living_room icon: "mdi:arrow-down" tap_action: - action: call-service - action: motioneye.action + action: perform-action + perform_action: motioneye.action data: action: down entity_id: camera.living_room diff --git a/source/_integrations/motionmount.md b/source/_integrations/motionmount.md index 444ab655316..0ce8902df51 100644 --- a/source/_integrations/motionmount.md +++ b/source/_integrations/motionmount.md @@ -17,12 +17,99 @@ ha_platforms: ha_codeowners: - '@RJPoelstra' ha_domain: motionmount +ha_zeroconf: true --- -The Vogel's MotionMount integration allows you to control the position of your [TVM 7675 Pro](https://www.vogels.com/p/tvm-7675-pro-motorized-tv-wall-mount-black) Signature MotionMount. +The `motionmount` {% term integration %} allows you to control the position of your [TVM 7675 Pro](https://www.vogels.com/p/tvm-7675-pro-motorized-tv-wall-mount-black) SIGNATURE MotionMount from Vogel's. This integration uses the Ethernet (IP) connection of your MotionMount. It's not possible to connect using the RS-232 connection. It provides information about the current position of the mount and allows setting a new position. +A use case would be to position the TV based on whether anyone is actively watching. The MotionMount provides an HDMI connection to monitor whether the TV is turned on and in response move it to a preset position or the last known position. However, if you also use the TV for background music, you probably don't want the MotionMount to extend. By using a presence sensor to check whether anyone is actually in front of the TV, you can ensure the MotionMount only extends when the TV is actively being watched. + {% include integrations/config_flow.md %} + +{% configuration_basic %} +Host: + description: Hostname or IP address of the device, for example:`192.168.1.2`. +Port: + description: The TCP port of the device. Defaults to 23. Only change this when you're absolutely certain that it shouldn't be 23. +PIN: + description: The user level pincode, if configured on the device. +{% endconfiguration_basic %} + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} + +## Data updates + +The MotionMount pushes new data to the integration. +The only exception is the presets. Changes to the presets are {% term polling polled %}, by default every 60 seconds. + +## Known limitations + +The integration does not provide the ability to configure the MotionMount. +All settings, including configuring presets, should be done via the MotionMount app. + +Only IP connections are supported. Connection via RS-232 or Bluetooth Low Energy is not supported. + +## Supported devices + +The following devices are supported: + +- TVM 7675 Pro (SIGNATURE MotionMount with Pro extension) + +## Unsupported devices + +The following devices are *not* supported: + +- TVM 7675 (SIGNATURE MotionMount without Pro extension) +- TVM 7355 (NEXT MotionMount) + +## Supported functionality + +### Entities + +#### Sensors + +- **Moving** + - **Description**: Indicates whether the MotionMount is moving. + +- **Error Status** + - **Description**: The error status of the MotionMount. + - None: There is no error. + - Motor: There is a problem communicating with the motor. + - HDMI CEC: There is a problem communicating with the TV. Check the HDMI cable. + - Obstruction: The MotionMount detected an obstacle and stopped moving. + - TV Width Constraint: The MotionMount detected that the TV moved too close to the wall and stopped moving. + - Internal: There is an internal error. Refer to the MotionMount app for support. + +#### Numbers + +- **Extension** + - **Description**: The current extension of the MotionMount from the wall. + +- **Turn** + - **Description**: The current rotation of the MotionMount. + +#### Selects + +- **Presets** + - **Description**: If the MotionMount is at a preset location, this shows the corresponding preset. + Any preset can be selected to move the MotionMount to this preset position. + +## Troubleshooting + +### Can't connect to device + +1. Make sure the device is powered on. +2. Make sure the device is connected to the same network as Home Assistant. +3. Make sure the IP address of the MotionMount is configured correctly. + - In case of doubt, perform a network reset by holding the reset button for approx. 5 seconds. + - **Result**: The LED will start to blink slowly. This indicates that the network configuration is being reset to use DHCP. + - **Important**: Don't hold the reset button for too long (approx. 10 s). Holding the button for 10 s or longer starts a factory reset. A factory reset is indicated by the LED blinking fast. + diff --git a/source/_integrations/mpd.markdown b/source/_integrations/mpd.markdown index fb6aa21850b..fa556397494 100644 --- a/source/_integrations/mpd.markdown +++ b/source/_integrations/mpd.markdown @@ -40,4 +40,4 @@ relaxdeck: volume_level: 0.60 ``` -This platform works with [Music Player Daemon](https://www.musicpd.org/) and [mopidy](https://www.mopidy.com/) with [Mopidy-MPD](https://mopidy.com/ext/mpd/) as used by [Pi MusicBox](https://www.pimusicbox.com/). While all of these rely on the common MPD protocol, not all implementations support all features, especially with regard to album artwork, embedded artwork and volume control. The platform will fall back gracefully if support isn't detected. +This platform works with [Music Player Daemon](https://www.musicpd.org/) and [mopidy](https://www.mopidy.com/) with [Mopidy-MPD](https://mopidy.com/ext/mpd/) as used by [Pi MusicBox](https://pimusicbox.github.io/). While all of these rely on the common MPD protocol, not all implementations support all features, especially with regard to album artwork, embedded artwork and volume control. The platform will fall back gracefully if support isn't detected. diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index b2e448f427a..389a7776e82 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -44,25 +44,14 @@ ha_platforms: - valve - water_heater ha_integration_type: integration +ha_quality_scale: platinum --- MQTT (aka MQ Telemetry Transport) is a machine-to-machine or "Internet of Things" connectivity protocol on top of TCP/IP. It allows extremely lightweight publish/subscribe messaging transport. {% include integrations/config_flow.md %} -### Removing the MQTT integration - -The MQTT integration and its entities can be removed by following these steps: - -1. Navigate to **Settings** > **Devices & Services** -2. Find the MQTT integration and click on it -3. Click the delete button to remove the MQTT config entry - -Note: This action does not remove the [MQTT broker](#setting-up-a-broker) or its data. If you want to completely remove MQTT: - -1. Check your `configuration.yaml` and other YAML files for MQTT-related configurations and remove them -2. Review your automations and scripts for any MQTT dependencies -3. Consider backing up your configuration before making these changes +MQTT Devices and entities can be set up through [MQTT -discovery](#mqtt-discovery) or [added manually](#manual-configured-mqtt-items) via YAML or subentries. {% details "Configuration of MQTT components via MQTT discovery" %} @@ -130,10 +119,25 @@ Note: This action does not remove the [MQTT broker](#setting-up-a-broker) or its {% enddetails %} + +{% details "Configuration of MQTT components via Subentries" %} + +- [Notify](/integrations/notify.mqtt/) + +To add an MQTT device via a Subentry, follow these steps: + +1. Go to **{% my integrations title="Settings > Devices & services" %}**. +2. Select the MQTT integration. +3. Add a subentry via {% my integrations title="**Settings** > **Devices & services**" %}, click {% icon "mdi:dots-vertical" %} and select **Add MQTT device**. + +A device context and one or more entities can be added to the subentry. + +{% enddetails %} + Your first step to get MQTT and Home Assistant working is to choose a broker. The easiest option is to install the official Mosquitto Broker add-on. You can choose to set up and configure this add-on automatically when you set up the MQTT integration. Home Assistant will automatically generate and assign a safe username and password, and no further attention is required. This also works if you have already set up this add-on yourself in advance. -You can set up additional logins for your MQTT devices and services using the [Mosquitto add-on configuration](https://my.home-assistant.io/create-link/?redirect=supervisor_addon&addon=core_mosquitto). +You can set up additional logins for your MQTT devices and services using the [Mosquitto add-on configuration](https://my.home-assistant.io/redirect/supervisor_addon/?addon=core_mosquitto). {% important %} When MQTT is set up with the official Mosquitto MQTT broker add-on, the broker's credentials are generated and kept secret. If the official Mosquitto MQTT broker needs to be re-installed, make sure you save a copy of the add-on user options, like the additional logins. After re-installing the add-on, the MQTT integration will automatically update the new password for the re-installed broker. It will then reconnect automatically. @@ -162,6 +166,8 @@ Add the MQTT integration, then provide your broker's hostname (or IP address) an 2. Select the MQTT integration. 3. Reconfigure the MQTT broker settings via {% my integrations title="**Settings** > **Devices & services**" %}, click {% icon "mdi:dots-vertical" %} and select **Reconfigure**. +MQTT subentries can also be reconfigured. Additional entities can be added, or an entity can bve removed from the sub entry. Each MQTT subentry holds one MQTT device. The MQTT device must have at least one entity. + {% important %} If you experience an error message like `Failed to connect due to exception: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed`, then turn on `Advanced options` and set [Broker certificate validation](/integrations/mqtt/#broker-certificate-validation) to `Auto`. {% endimportant %} @@ -184,7 +190,7 @@ The time in seconds between sending keep alive messages for this client. The def #### Broker certificate validation -To enable a secure connection to the broker, the broker certificate should be validated. If your broker uses a trusted certificate, then choose `Auto`. This will allow validation against certificate CAs bundled certificates. If a self-signed certificate is used, select `Custom`. A custom PEM-encoded CA certificate can be uploaded. Click `NEXT` to show the control to upload the CA certificate. +To enable a secure connection to the broker, the broker certificate should be validated. If your broker uses a trusted certificate, then choose `Auto`. This will allow validation against certificate CAs bundled certificates. If a self-signed certificate is used, select `Custom`. A custom PEM- or DER-encoded CA certificate can be uploaded. Click `NEXT` to show the control to upload the CA certificate. If the server certificate does not match the hostname then validation will fail. To allow a connection without the verification of the hostname, turn the `Ignore broker certificate validation` switch on. #### MQTT Protocol @@ -193,7 +199,7 @@ The MQTT protocol setting defaults to version `3.1.1`. If your MQTT broker suppo #### Securing the connection -With a secure broker connection it is possible to use a client certificate for authentication. To set the client certificate and private key turn on the option `Use a client certificate` and click "Next" to show the controls to upload the files. Only a PEM encoded client certificates together with a PEM encoded private key can be uploaded. Make sure the private key has no password set. +With a secure broker connection, it is possible to use a client certificate for authentication. To set the client certificate and private key turn on the option `Use a client certificate` and click "Next" to reveal file upload controls. A client certificate and the corresponding private key must be uploaded together. Both client certificate and private key must be either PEM- or DER-encoded. If the private key is encrypted with a password, ensure you supply the correct password when uploading the client certificate and key files. #### Using WebSockets as transport @@ -368,12 +374,12 @@ The component specific options are placed as mappings under the `components` key "mdl": "xya", "sw": "1.0", "sn": "ea334450945afc", - "hw": "1.0rev2", + "hw": "1.0rev2" }, "o": { "name":"bla2mqtt", "sw": "2.1", - "url": "https://bla2mqtt.example.com/support", + "url": "https://bla2mqtt.example.com/support" }, "cmps": { "some_unique_component_id1": { @@ -381,18 +387,18 @@ The component specific options are placed as mappings under the `components` key "device_class":"temperature", "unit_of_measurement":"°C", "value_template":"{% raw %}{{ value_json.temperature}}{% endraw %}", - "unique_id":"temp01ae_t", + "unique_id":"temp01ae_t" }, "some_unique_id2": { "p": "sensor", "device_class":"humidity", "unit_of_measurement":"%", "value_template":"{% raw %}{{ value_json.humidity}}{% endraw %}", - "unique_id":"temp01ae_h", + "unique_id":"temp01ae_h" } }, "state_topic":"sensorBedroom/state", - "qos": 2, + "qos": 2 } ``` @@ -411,12 +417,12 @@ An empty config can be published as an update to remove a single component from "mdl": "xya", "sw": "1.0", "sn": "ea334450945afc", - "hw": "1.0rev2", + "hw": "1.0rev2" }, "o": { "name":"bla2mqtt", "sw": "2.1", - "url": "https://bla2mqtt.example.com/support", + "url": "https://bla2mqtt.example.com/support" }, "cmps": { "some_unique_component_id1": { @@ -424,14 +430,14 @@ An empty config can be published as an update to remove a single component from "device_class":"temperature", "unit_of_measurement":"°C", "value_template":"{% raw %}{{ value_json.temperature}}{% endraw %}", - "unique_id":"temp01ae_t", + "unique_id":"temp01ae_t" }, "some_unique_id2": { - "p": "sensor", + "p": "sensor" } }, "state_topic":"sensorBedroom/state", - "qos": 2, + "qos": 2 } ``` @@ -448,12 +454,12 @@ After removing a component, you should send another update with the removed comp "mdl": "xya", "sw": "1.0", "sn": "ea334450945afc", - "hw": "1.0rev2", + "hw": "1.0rev2" }, "o": { "name":"bla2mqtt", "sw": "2.1", - "url": "https://bla2mqtt.example.com/support", + "url": "https://bla2mqtt.example.com/support" }, "cmps": { "some_unique_component_id1": { @@ -461,11 +467,11 @@ After removing a component, you should send another update with the removed comp "device_class":"temperature", "unit_of_measurement":"°C", "value_template":"{% raw %}{{ value_json.temperature}}{% endraw %}", - "unique_id":"temp01ae_t", + "unique_id":"temp01ae_t" } }, "state_topic":"sensorBedroom/state", - "qos": 2, + "qos": 2 } ``` @@ -583,7 +589,7 @@ Discovery payload device: "state_topic": "foobar/sensor/sensor1", "unique_id": "bla_sensor001" } - }, + } } ``` @@ -626,19 +632,19 @@ Example discovery payload: "mdl": "xya", "sw": "1.0", "sn": "ea334450945afc", - "hw": "1.0rev2", + "hw": "1.0rev2" }, "o": { "name":"bla2mqtt", "sw": "2.1", - "url": "https://bla2mqtt.example.com/support", + "url": "https://bla2mqtt.example.com/support" }, "device_class":"temperature", "unit_of_measurement":"°C", "value_template":"{% raw %}{{ value_json.temperature}}{% endraw %}", "unique_id":"temp01ae_t", "state_topic":"sensorBedroom/state", - "qos": 2, + "qos": 2 } ``` @@ -793,7 +799,7 @@ support_url: 'osc_cmd_tpl': 'oscillation_command_template', 'osc_stat_t': 'oscillation_state_topic', 'osc_val_tpl': 'oscillation_value_template', - 'platform': 'p', + 'p': 'platform', 'pct_cmd_t': 'percentage_command_topic', 'pct_cmd_tpl': 'percentage_command_template', 'pct_stat_t': 'percentage_state_topic', @@ -832,6 +838,7 @@ support_url: 'pl_rst_pct': 'payload_reset_percentage', 'pl_rst_pr_mode': 'payload_reset_preset_mode', 'pl_stop': 'payload_stop', + 'pl_stop_tilt': 'payload_stop_tilt', 'pl_stpa': 'payload_start_pause', 'pl_strt': 'payload_start', 'pl_toff': 'payload_turn_off', @@ -1040,7 +1047,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract a device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract a device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -1053,7 +1060,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template payload_available: @@ -1297,12 +1304,12 @@ Setting up a [light that takes JSON payloads](/integrations/light.mqtt/#json-sch "mdl_id": "ABC123", "sw": "1.0", "sn": "ea334450945afc", - "hw": "1.0rev2", + "hw": "1.0rev2" }, "o": { "name":"bla2mqtt", "sw": "2.1", - "url": "https://bla2mqtt.example.com/support", + "url": "https://bla2mqtt.example.com/support" } } ``` @@ -1370,6 +1377,8 @@ Compatibility and features will vary, and not all devices may work. ## Manual configured MQTT items +Support to add manual items is added for the MQTT Notify entities, other platforms will follow later. + For most integrations, it is also possible to manually set up MQTT items in {% term "`configuration.yaml`" %}. Read more [about configuration in YAML](/docs/configuration/yaml). MQTT supports two styles for configuring items in YAML. All configuration items are placed directly under the `mqtt` integration key. Note that you cannot mix these styles. Use the *YAML configuration listed per item* style when in doubt. @@ -1407,6 +1416,18 @@ If you have a large number of manually configured items, you might want to consi Documentation on the MQTT components that support YAML [can be found here](/integrations/mqtt/#configuration-via-yaml). {% endnote %} +## Entity state updates + +Entities receive state updates via MQTT subscriptions. The payloads received on the state topics are processed to determine whether there is a significant change. If a change is detected, the entity will be updated. + +Note that MQTT device payloads often contain information for updating multiple entities that subscribe to the same topics. For example, a light status update might include information about link quality. This data can update a link quality sensor but is not used to update the light itself. MQTT filters out entity state updates when there are no changes. + +### The last reported state attribute + +Because MQTT state updates are often repeated frequently, even when no actual changes exist, it is up to the MQTT subscriber to determine whether a status update was received. If the latest update is missed, it might take some time before the next one arrives. If a retained payload exists at the broker, that value will be replayed first, but it will be an update of a previous last state. + +MQTT devices often continuously generate numerous state updates. MQTT does not update `last_reported` to avoid impacting system stability unless `force_update` is set. Alternatively, an MQTT sensor can be created to measure the last update. + ## Using Templates The MQTT integration supports templating. Read more [about using templates with the MQTT integration](/docs/configuration/templating/#using-templates-with-the-mqtt-integration). @@ -1465,19 +1486,15 @@ The MQTT integration will register the `mqtt.publish` action, which allows publi | Data attribute | Optional | Description | | ---------------------- | -------- | ------------------------------------------------------------ | | `topic` | no | Topic to publish payload to. | -| `payload` | no | Payload to publish. | +| `payload` | yes | Payload to publish. Will publish an empty payload when `payload` is omitted. | | `evaluate_payload` | yes | If a `bytes` literal in `payload` should be evaluated to publish raw data. (default: false)| | `qos` | yes | Quality of Service to use. (default: 0) | | `retain` | yes | If message should have the retain flag set. (default: false) | {% note %} -When `payload` is rendered from [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) in a YAML script or automation, and the template renders to a `bytes` literal, the outgoing MQTT payload will only be sent as `raw` data, if the `evaluate_payload` option flag is set to `true`. +When `payload` is rendered from [template](/docs/configuration/templating/#using-value-templates-with-mqtt) in a YAML script or automation, and the template renders to a `bytes` literal, the outgoing MQTT payload will only be sent as `raw` data, if the `evaluate_payload` option flag is set to `true`. {% endnote %} -{% important %} -You must include either `topic` or `topic_template`, but not both. If providing a payload, you need to include either `payload` or `payload_template`, but not both. -{% endimportant %} - ```yaml topic: homeassistant/light/1/command payload: on @@ -1581,3 +1598,13 @@ logger: Event `event_mqtt_reloaded` is fired when Manually configured MQTT entities have been reloaded and entities thus might have changed. This event has no additional data. + +## Removing the integration + +{% include integrations/remove_device_service_steps.md %} + +Note: This action does not remove the [MQTT broker](#setting-up-a-broker) or its data. If you want to completely remove MQTT: + +1. Check your {% term "`configuration.yaml`" %} and other YAML files for MQTT-related configurations and remove them +2. Review your automations and scripts for any MQTT dependencies +3. Consider backing up your configuration before making these changes diff --git a/source/_integrations/music_assistant.markdown b/source/_integrations/music_assistant.markdown index 08e8b267f01..ae804021bfd 100644 --- a/source/_integrations/music_assistant.markdown +++ b/source/_integrations/music_assistant.markdown @@ -49,7 +49,7 @@ Play Adele's album 25 ```yaml entity_id: media_player.music_assistant_player -media_content_type: MUSIC +media_content_type: album media_content_id: 'Adele - 25' ``` @@ -57,7 +57,7 @@ Play all tracks from Stevie Wonder in random order ```yaml entity_id: media_player.music_assistant_player -media_content_type: MUSIC +media_content_type: artist media_content_id: 'Stevie Wonder' ``` @@ -65,7 +65,7 @@ Play the playlist The Best of Disco ```yaml entity_id: media_player.music_assistant_player -media_content_type: PLAYLIST +media_content_type: playlist media_content_id: 'The Best of Disco' ``` diff --git a/source/_integrations/myuplink.markdown b/source/_integrations/myuplink.markdown index b3121f46f4b..495f289d0aa 100644 --- a/source/_integrations/myuplink.markdown +++ b/source/_integrations/myuplink.markdown @@ -27,6 +27,7 @@ ha_integration_type: integration related: - url: https://myuplink.com/ title: myUplink web portal +ha_quality_scale: silver --- The **myUplink** {% term integration %} lets you get information about and control heat-pump devices supporting myUplink using the [official cloud API](https://dev.myuplink.com). diff --git a/source/_integrations/nam.markdown b/source/_integrations/nam.markdown index 31ac3af9705..3bbb420f726 100644 --- a/source/_integrations/nam.markdown +++ b/source/_integrations/nam.markdown @@ -21,6 +21,7 @@ The Nettigo Air Monitor integration allows you to read temperature, humidity, pr The integration currently has support for the following sensors: +- BH1750 - BME280 - BMP180 - BMP280 diff --git a/source/_integrations/ness_alarm.markdown b/source/_integrations/ness_alarm.markdown index 999d7a4e498..6dcdadea4c7 100644 --- a/source/_integrations/ness_alarm.markdown +++ b/source/_integrations/ness_alarm.markdown @@ -124,7 +124,7 @@ Trigger an aux output. This requires PCB version 7.8 or higher. | Data attribute | Optional | Description | | ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `output_id` | No | The aux output you wish to change. A number from 1-4. | +| `output_id` | No | The aux output you wish to change. A number from 1-8. | | `state` | Yes | The On/Off State, represented as true/false. Default is true. If P14xE 8E is enabled then a value of true will pulse output x for the time specified in P14(x+4)E. | ### Action `panic` diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown index 43938fcad71..5f5992f5748 100644 --- a/source/_integrations/nest.markdown +++ b/source/_integrations/nest.markdown @@ -38,15 +38,11 @@ Cameras and doorbells use [Automation and device triggers](#automation-and-devic You are in control of the information and capabilities exposed to Home Assistant. You can authorize a single device, multiple devices, or different levels of functionality such as motion events, live streams, for any particular device. The integration is flexible enough to adapt based on what you allow. -{% caution %} -The Nest Smart Device Management (SDM) API **requires a US$5 fee**. Before buying, make sure your device is [supported](https://developers.google.com/nest/device-access/supported-devices). -{% endcaution %} +# Prerequisites -{% note %} -The Google Nest integration uses a Cloud Pub/Sub subscription with a 15-minute retention period by default. The Google Cloud Pub/Sub billing changes, effective June 30, 2024, do not apply. The billing changes only apply to subscriptions with a 24-hour retention period. See the [Pub/Sub console](https://console.cloud.google.com/cloudpubsub/subscription/list) to view your subscriptions if you previously created one manually. -{% endnote %} +- The Nest Device Access Console Pub/Sub setup process has changed as of January 23rd 2025. **Please make sure you are using the latest version of Home Assistant.** - +- The Nest Smart Device Management (SDM) API **requires a US$5 fee**. Before buying, make sure your device is [supported](https://developers.google.com/nest/device-access/supported-devices). ## Configuration @@ -163,24 +159,78 @@ Now that you have authentication configured, you will create a Nest Device Acces Read the warnings on the page before proceeding, including Google Account type limitations. {% endnote %} -1. Click on the button **[Go to the Device Access Console](https://console.nest.google.com/device-access/)**. +2. Select the button **[Go to the Device Access Console](https://console.nest.google.com/device-access/)**. ![Screenshot of Device Access Registration](/images/integrations/nest/device_access.png) -2. Check the box to "Accept the Terms of Service" and click **Continue to Payment** where you need to pay a fee (currently US$5). +3. Check the box to "Accept the Terms of Service" and select **Continue to Payment** where you need to pay a fee (currently US$5). ![Screenshot of accepting terms](/images/integrations/nest/accept_terms.png) -3. Now the [Device Access Console](https://console.nest.google.com/device-access/project-list) should be visible. Click on **Create project**. +4. Now the [Device Access Console](https://console.nest.google.com/device-access/project-list) should be visible. Select **Create project**. -4. Give your Device Access project a name and click **Next**. +5. Give your Device Access project a name and select **Next**. ![Screenshot of naming a project](/images/integrations/nest/project_name.png) -5. Next you will be asked for an *OAuth client ID* which you created in the previous step and click **Next**. +6. Next you will be asked for an **OAuth client ID** which you created in the previous step and select **Next**. ![Screenshot of Device Access Console OAuth client ID](/images/integrations/nest/device_access_oauth_client_id.png) -6. Enable Events by clicking on **Enable** and **Create project**. - ![Screenshot of enabling events](/images/integrations/nest/enable_events.png) +7. Leave **Enable Events** unchecked for now and **Create project**. You need a Pub/Sub topic + (created in the next section) to enable events. This requires additional setup in the + Google Cloud Pub/Sub console so we will skip that step for now then come back to it in + the next section. -7. You now have a *Device Access Project ID* needed by Home Assistant. +8. You now have a *Device Access Project ID* needed by Home Assistant. + +{% enddetails %} + +{% details "Enable events and Pub/Sub topic [Device Access & Cloud Console]" %} + +The Nest Device Access Console Pub/Sub setup process has changed as of January 23rd 2025. **Please make sure you are using the latest version of Home Assistant.**. + +This section describes how to configure your Device Access Project with a Pub/Sub topic +to publish events for devices in your home. Home Assistant and the Device Access Project must be configured to use the *Topic Name* otherwise you will not receive events. + +If you previously set up events, then your Device Access Project may have already created a topic for you and you can use that topic name. For new projects, or if you disable events, you need to create the topic yourself following the instructions below. + +1. Go to the [Pub/Sub Google Cloud Console](https://console.cloud.google.com/cloudpubsub/topic/list). + +2. Select **Create Topic**. + +3. Enter a **Topic ID** such as `home-assistant-nest`. You may leave the default settings. + + ![Screenshot of OAuth confirmation](/images/integrations/nest/cloud_pubsub_create_topic.png) + +4. Select **Create** to create the topic. + +5. You now have a **Topic Name** needed by the Device Access Console and Home Assistant. The full **Topic Name** that contains your Cloud Project ID and the **Topic ID** such as `projects//topics/home-assistant-nest`. + +6. Next, you need to give the Device Access Console permission to publish to your Topic. From the Pub/Sub Topic page select **Add Principal**. + + ![Screenshot of OAuth confirmation](/images/integrations/nest/cloud_pubsub_add_principal.png) + +7. In **New Principals** enter `sdm-publisher@googlegroups.com` + +8. In **Select a Role** under **Pub/Sub** select **Pub/Sub Publisher** and **Create**. + + ![Screenshot of OAuth confirmation](/images/integrations/nest/cloud_pubsub_add_principal_role.png) + +9. Next you can configure the Device Access Console to use this topic. Visit the [Device Access Console](https://console.nest.google.com/device-access/). + +10. Select the Device Access Project you previously created. It should show the Pub/Sub topic + as disabled. If there is an existing topic shown, then you may delete it and use + the one you just created to avoid getting them mixed up. + + ![Screenshot of OAuth confirmation](/images/integrations/nest/device_access_topic_disabled.png) + +11. Select *...* next to **Pub/Sub topic**, then **Enable events with PubSub topic**. + +12. Enter the full Pub/Sub **Topic Name** and select **Add & Validate**. If you see an error, then + review the previous steps again and configure the topic and permissions. + + ![Screenshot of OAuth confirmation](/images/integrations/nest/device_access_validate_pubsub.png) + +13. You have successfully configured events and the Pub/Sub topic used by Home Assistant. + + ![Screenshot of OAuth confirmation](/images/integrations/nest/device_access_complete.png) {% enddetails %} @@ -190,9 +240,6 @@ In this section you will authorize Home Assistant to access your account by gene See [Troubleshooting](#troubleshooting) below for steps to resolve the common misconfigurations that result in errors such as *Can't link...* or *Error 400* from Google. -Note that *OAuth for Apps* has been [deprecated](https://developers.googleblog.com/2022/02/making-oauth-flows-safer.html) by Google and will break by October 2022. - - 1. In Home Assistant, you should already be going through the setup flow. If not, go back and click the *My: Add Integration* button above to start the setup. The integration will ask you for all of the necessary integration configuration. 2. Once all configuration information is entered in Home Assistant, a new tab opens, allowing you to choose a Google account. This should be the same developer account you configured above. @@ -216,7 +263,19 @@ Note that *OAuth for Apps* has been [deprecated](https://developers.googleblog.c 8. You will now see a page hosted by *My Home Assistant* asking if you would like to *Link account to Home Assistant?* Click **Link Account** to continue. -9. If all went well, you are ready to go! +9. If all went well, you will next configure events and Pub/Sub topic. Nest will attempt + to automatically find a Pub/sub topic either created by the Device Access Console + or manually by you. + + ![Screenshot of OAuth confirmation](/images/integrations/nest/config_flow_with_topic.png) + +10. If you instead see the error message *No eligible Pub/Sub topics found, please ensure Device Access Console has a Pub/Sub topic.* then follow the steps in the previous section to enable events and create a Pub/Sub topic in another browser tab. Once you have created and configured the topic, you may press on this screen **Submit** to refresh the list of topics and continue. + +11. Home Assistant uses a *Subscription* to subscribe to device events published on the topic. You can select the subscription you created in the Device Access Console or the integration will automatically create one for you if you don't have one already. + ![Screenshot of OAuth confirmation](/images/integrations/nest/config_flow_subscription.png) + + +12. If all went well, you are ready to go! ![Screenshot of success](/images/integrations/nest/finished.png) @@ -465,56 +524,6 @@ This feature is enabled by the following permissions: {% endnote %} -## Deprecated App Auth Credentials - -To improve security and reduce phishing risk Google has [deprecated](https://developers.googleblog.com/2022/02/making-oauth-flows-safer.html) a previous authentication method used by Home Assistant. **This requires action by you to resolve** if you previously configured *Nest* using *App Auth*. - -{% details "Reconfigure the integration" %} - -1. Make sure to upgrade to the latest version of Home Assistant. -2. Go to **{% my integrations title="Settings > Devices & services" %}**. -3. The **Nest** integration should appear with alert. - - ![Screenshot of success](/images/integrations/nest/attention.png) - -4. Click **Reconfigure**. - - ![Screenshot of success](/images/integrations/nest/deprecation.png) - - -If the *Nest* integration does not have an Alert then you probably used *Web Auth* and have nothing to do. - -{% enddetails %} - -{% details "Create new Web Auth Application Credentials" %} - -1. In the Home Assistant flow confirm your *Google Cloud Project ID* and proceed to the next step. -2. You will be prompted to enter new *Application Credentials*. -3. In another tab visit the [Google Cloud Console](https://console.cloud.google.com/apis/credentials) -4. On the *Credentials* page click **Create Credential**. -5. From the drop-down list select **OAuth client ID**. -6. Enter **Web Application** for the Application type. -7. Pick a new name for your credential. -8. Add **Authorized redirect URIs** end enter `https://my.home-assistant.io/redirect/oauth` -9. Click *Create* to create the credential. -10. You now have *OAuth Client ID* and *OAuth Client Secret* needed by Home Assistant. -11. Back in Home Assistant, you should now be prompted to create [Application Credentials](/integrations/application_credentials) where you will enter the *Client ID* and *Client Secret*. - -{% enddetails %} - -{% details "Update Device Access Project" %} - -1. Visit the [Device Access Console](https://console.nest.google.com/device-access/) -2. Select the *Device Access Project* used by *Home Assistant* -3. You need to then delete the old *OAuth Client ID* by clicking the Trash icon to unlink your Nest project from the deprecated Auth method. -4. Click the overflow menu `...` then *Add Client ID* -5. Enter the new *OAuth Client ID* for *Web App Auth* credentials -6. Back in Home Assistant confirm your *Device Access Project ID* - -{% enddetails %} - -Once you have completed the above steps, you can continue through the flow to re-authorize *Home Assistant* to restore access to your Nest Devices. - ## Troubleshooting - *No access to partner information* "Information could not be retrieved" error message during the setup wizard means that the Google Account used is not able to access the Home. Please ensure that you have successfully migrated your Nest Account to a Google Account using the Google Nest App. Additionally, if your home has multiple members, please note that the individual who initially set up the home must complete the migration of their Nest Account to a Google Account before you can establish a connection with Home Assistant. @@ -625,3 +634,9 @@ logger: ``` - *Not receiving camera motion and person events*: assuming the integration is correctly configured (for example, the oauth and SDM API are set up correctly, you can see camera streams, and permissions are correctly set in [Partner Connections Manager](https://nestservices.google.com/partnerconnections)): If you are then still not seeing events, it's possible you need to adjust the Google Home App settings. Refer to the [Google Home App Notification Settings](#google-home-app-notification-settings) for details. + +- **Configuration error: Failed to create subscriber `subscription/name` was not found** - By default, Google pub/sub subscriptions will be deleted after 31 days of inactivity ([reference](https://cloud.google.com/knowledge/kb/pub-sub-subscriptions-disappeared-without-any-deletion-logs-000004170)). If this happens, then the integration will fail, and you will see the preceding log line in your Home Assistant logs. If that is the case, then: + + 1. Go to the [Device Access Console](https://console.nest.google.com/device-access/project-list) and re-enable the Pub/Sub Topic. + 2. The Nest integration may need to be recreated to pick up the new Pub/Sub topic. + 3. (Optional) To prevent future expirations, go to your [Google Cloud Console Pub/Sub subscription page](https://console.cloud.google.com/cloudpubsub/subscription/list) and edit the Pub/Sub subscription created by Nest to not expire by default. diff --git a/source/_integrations/netatmo.markdown b/source/_integrations/netatmo.markdown index 622a7d62447..98e78336a54 100644 --- a/source/_integrations/netatmo.markdown +++ b/source/_integrations/netatmo.markdown @@ -3,6 +3,7 @@ title: Netatmo description: Instructions on how to integrate Netatmo integration into Home Assistant. ha_category: - Binary sensor + - Button - Camera - Climate - Cover @@ -23,6 +24,7 @@ ha_domain: netatmo ha_homekit: true ha_platforms: - binary_sensor + - button - camera - climate - cover @@ -40,6 +42,7 @@ The Netatmo integration platform is the main integration to integrate all Netatm There is currently support for the following device types within Home Assistant: - [Binary sensor](#binary-sensor) +- [Button](#button) - [Camera](#camera) - [Climate](#climate) - [Cover](#cover) @@ -63,6 +66,11 @@ To edit an existing area, enter its name and follow the dialog. The `netatmo` binary sensor platform is showing the connectivity for the [Netatmo Smart Home Weather Station](https://www.netatmo.com/smart-weather-station). +## Button + +The `netatmo` button sensor platform provides support for moving compatible shutters to a preferred position. +Not all covers support this functionality, and we cannot automatically determine the capability, so these entities are disabled by default. + ## Camera The `netatmo` camera platform is consuming the information provided by a [Netatmo Smart Indoor](https://www.netatmo.com/smart-indoor-camera), [Outdoor](https://www.netatmo.com/smart-outdoor-camera) and [Netatmo Smart Video Doorbell](https://www.netatmo.com/smart-video-doorbell) camera. This integration allows you to view the current live stream created by the camera (exception: video doorbell). diff --git a/source/_integrations/nexia.markdown b/source/_integrations/nexia.markdown index f14d6c190fd..d8bb85672b2 100644 --- a/source/_integrations/nexia.markdown +++ b/source/_integrations/nexia.markdown @@ -82,7 +82,13 @@ The scene platform lets you activate a nexia automation. ### Switch -The switch platform lets you enable or disable hold mode for each thermostat. +The following enable/disable switches are added for each thermostat: + +- Emergency heat (if the device supports it) + +The following enable/disable switches are added for each thermostat zone: + +- Hold mode ### Action `nexia.set_aircleaner_mode` diff --git a/source/_integrations/nexity.markdown b/source/_integrations/nexity.markdown index 58e47fe160d..f507a7bcb73 100644 --- a/source/_integrations/nexity.markdown +++ b/source/_integrations/nexity.markdown @@ -24,11 +24,6 @@ ha_supporting_integration: Overkiz ha_release: 2022.2 ha_codeowners: - '@imicknl' - - '@vlebourl' - - '@tetienne' - - '@nyroDev' - - '@tronix117' - - '@alexfp14' ha_config_flow: true ha_platforms: - alarm_control_panel diff --git a/source/_integrations/nibe_heatpump.markdown b/source/_integrations/nibe_heatpump.markdown index 57bb0023744..79b433b6374 100644 --- a/source/_integrations/nibe_heatpump.markdown +++ b/source/_integrations/nibe_heatpump.markdown @@ -25,25 +25,26 @@ The Nibe Heat Pump integration allows you to control and monitor [Nibe Heat Pump Supported devices: -- F1145/F1155 -- S1145/S1155 -- F1245/F1255 -- F1355/F1355 +- F1145/F1245 +- F1155/F1255 +- S1155/S1255 +- F1345 +- F1355 - S2125 - S320/S325 +- S330/S332 - F370 - F470 - F730 - S735 - F750 +- S1156 - S1255 +- S1256 - SMO40 - SMOS40 -- VVM225 -- VVM310 -- VVM320 -- VVM325 -- VVM500 +- VVM225/VVM320/VVM325 +- VVM310/VVM500 {% include integrations/config_flow.md %} diff --git a/source/_integrations/nice_go.markdown b/source/_integrations/nice_go.markdown index c448b3497e8..69cd5a33c23 100644 --- a/source/_integrations/nice_go.markdown +++ b/source/_integrations/nice_go.markdown @@ -21,7 +21,10 @@ ha_platforms: 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. +The **Nice G.O.** {% term integration %} is used to integrate with [Nice/Linear](https://linear-solutions.com/) and [Mighty Mule](https://mightymule.com/) products. +This integration is used for garage doors and gate openers created by these companies. + +Device names in Home Assistant are generated based on the names defined in your Nice G.O. mobile app. ## Prerequisites @@ -44,3 +47,9 @@ Lights on your garage door will appear as lights. ## Switch A switch for turning vacation mode on and off will be made available for each device. Vacation mode prevents the operation of the door from physical control points such as a wall station, wireless keypad, remote control, or HomeLink. It can still be controlled from Home Assistant. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/niko_home_control.markdown b/source/_integrations/niko_home_control.markdown index 89a2c938e2c..5da250fac47 100644 --- a/source/_integrations/niko_home_control.markdown +++ b/source/_integrations/niko_home_control.markdown @@ -5,19 +5,18 @@ ha_codeowners: - '@VandeurenGlenn' ha_config_flow: true ha_category: - - Light - Cover + - Light ha_iot_class: Local Push ha_release: 0.82 ha_domain: niko_home_control ha_platforms: - - light - cover + - light ha_integration_type: integration related: - docs: /docs/configuration/ title: Configuration file -ha_quality_scale: legacy --- The `niko_home_control` {% term integration %} allows you to integrate your [Niko Home Control](https://www.niko.eu/enus/products/niko-home-control) into Home Assistant. diff --git a/source/_integrations/nmbs.markdown b/source/_integrations/nmbs.markdown index 45e095d32a1..a5c78dea0ee 100644 --- a/source/_integrations/nmbs.markdown +++ b/source/_integrations/nmbs.markdown @@ -6,8 +6,6 @@ ha_category: ha_config_flow: true ha_iot_class: Cloud Polling ha_release: 0.85 -ha_codeowners: - - '@thibmaek' ha_domain: nmbs ha_platforms: - sensor diff --git a/source/_integrations/nordpool.markdown b/source/_integrations/nordpool.markdown index 968ea517cd4..7aa59c8f2a0 100644 --- a/source/_integrations/nordpool.markdown +++ b/source/_integrations/nordpool.markdown @@ -15,6 +15,7 @@ ha_platforms: - diagnostics - sensor ha_integration_type: hub +ha_quality_scale: platinum --- The **Nord Pool** {% term integration %} integrates [Nord Pool Group](https://www.nordpoolgroup.com/) energy prices into Home Assistant. @@ -43,7 +44,8 @@ All prices are displayed as `[Currency]/kWh`. Data is polled from the **Nord Pool** API on an hourly basis, exactly on the hour, to ensure the price sensors are displaying the correct price. -If polling cannot happen because of no connectivity or a malfunctioning API, there is no retry; the next periodic update will try again. +If polling cannot happen because of no connectivity or a malfunctioning API, it will wait a retry a few times before failing. +The user can use the [`homeassistant.update_entity`](homeassistant#action-homeassistantupdate_entity) action to manually try again later, in the case the user has solved the connectivity issue. ## Troubleshooting diff --git a/source/_integrations/notify.markdown b/source/_integrations/notify.markdown index 7856277dd29..7b404c8923e 100644 --- a/source/_integrations/notify.markdown +++ b/source/_integrations/notify.markdown @@ -69,7 +69,7 @@ Notifications can also be sent using [Notify groups](https://www.home-assistant. ### Test if it works -After you setup a [notifier](/integrations/#notifications), a simple way to test if you have set up your notify platform correctly is to open {% my developer_services title="**Developer tools** > **Actions**" %}** tab from the sidebar. Choose your action from the **Action** dropdown menu depending on the integration you want to test, such as **Notifications: Send a persistent notification** or **Notifications: Send a notification via mobile_app_your_phone_name**. Enter your message into the **message** field, and select the **Perform action** button. +After you set up a [notifier](/integrations/#notifications), a simple way to test if you have set up your notify platform correctly is to open {% my developer_services title="**Developer tools** > **Actions**" %} tab from the sidebar. Choose your action from the **Action** dropdown menu depending on the integration you want to test, such as **Notifications: Send a persistent notification** or **Notifications: Send a notification via mobile_app_your_phone_name**. Enter your message into the **message** field, and select the **Perform action** button. To test the entity platform action, select the `notify.send_message` action, and select one or more of `entity`, `device`, `area`, or `label`. Then, supply a `message`. @@ -109,7 +109,7 @@ actions: In the **Developer Tools**, on the **Action** tab, select the **Notifications: Send a persistent notification** action. Enter a message and test sending it. -If you switch to view the YAML data under **Developer Tools**, it will appear as below. The same {% term action %} can be chosen in {% term automation %} actions %, whose YAML will appear the same: +If you switch to view the YAML data under **Developer Tools**, it will appear as below. The same {% term action %} can be chosen in {% term automation %} actions, whose YAML will appear the same: {% raw %} diff --git a/source/_integrations/notify.mqtt.markdown b/source/_integrations/notify.mqtt.markdown index 1f3de5342a0..b13408aa52a 100644 --- a/source/_integrations/notify.mqtt.markdown +++ b/source/_integrations/notify.mqtt.markdown @@ -40,7 +40,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `topic`. To determine the device's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -49,7 +49,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `availability_topic`. To determine the device's availability result, the template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `availability_topic`. To determine the device's availability result, the template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -57,7 +57,7 @@ availability_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -140,7 +140,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: diff --git a/source/_integrations/number.markdown b/source/_integrations/number.markdown index ff81b2e2e64..8d04222722a 100644 --- a/source/_integrations/number.markdown +++ b/source/_integrations/number.markdown @@ -42,37 +42,39 @@ The following device classes are supported for numbers: - **apparent_power**: Apparent power in VA. - **aqi**: Air Quality Index (unitless). - **area**: Area in m², cm², km², mm², in², ft², yd², mi², ac, ha -- **atmospheric_pressure**: Atmospheric pressure in cbar, bar, hPa, inHg, kPa, mbar, Pa, psi -- **battery**: Percentage of battery that is left -- **blood_glocose_concentration**: Blood glucose concentration in mg/dL, mmol/L -- **carbon_dioxide**: Carbon Dioxide in CO2 (Smoke) -- **carbon_monoxide**: Carbon Monoxide in CO (Gas CNG/LPG) +- **atmospheric_pressure**: Atmospheric pressure in cbar, bar, hPa, mmHg, inHg, kPa, mbar, Pa or psi +- **battery**: Percentage of battery that is left in % +- **blood_glucose_concentration**: Blood glucose concentration in mg/dL, mmol/L +- **carbon_dioxide**: Carbon Dioxide in CO2 (Smoke) in ppm +- **carbon_monoxide**: Carbon Monoxide in CO (Gas CNG/LPG) in ppm - **current**: Current in A, mA -- **data_rate**: Data rate in bit/s, kbit/s, Mbit/s, Gbit/s, B/s, kB/s, MB/s, GB/s, KiB/s, MiB/s, or GiB/s -- **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB, or YiB -- **distance**: Generic distance in km, m, cm, mm, mi, yd, or in +- **data_rate**: Data rate in bit/s, kbit/s, Mbit/s, Gbit/s, B/s, kB/s, MB/s, GB/s, KiB/s, MiB/s or GiB/s +- **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB or YiB +- **distance**: Generic distance in km, m, cm, mm, mi, nmi, yd, or in +- **duration**: Duration in d, h, min, s, ms, or µs - **energy**: Energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal +- **energy_distance**: Energy per distance in kWh/100km, mi/kWh or km/kWh. - **energy_storage**: Stored energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal - **frequency**: Frequency in Hz, kHz, MHz, or GHz -- **gas**: Gasvolume in m³, ft³, or CCF -- **humidity**: Percentage of humidity in the air +- **gas**: Gasvolume in m³, ft³ or CCF +- **humidity**: Percentage of humidity in the air in % - **illuminance**: The current light level in lx - **irradiance**: Irradiance in W/m² or BTU/(h⋅ft²) -- **moisture**: Percentage of water in a substance -- **monetary**: The monetary value +- **moisture**: Percentage of water in a substance in % +- **monetary**: The monetary value ([ISO 4217](https://en.wikipedia.org/wiki/ISO_4217#Active_codes)) - **nitrogen_dioxide**: Concentration of Nitrogen Dioxide in µg/m³ - **nitrogen_monoxide**: Concentration of Nitrogen Monoxide in µg/m³ - **nitrous_oxide**: Concentration of Nitrous Oxide in µg/m³ - **ozone**: Concentration of Ozone in µg/m³ - **ph**: Potential hydrogen (pH) value of a water solution - **pm1**: Concentration of particulate matter less than 1 micrometer in µg/m³ -- **pm10**: Concentration of particulate matter less than 10 micrometers in µg/m³ - **pm25**: Concentration of particulate matter less than 2.5 micrometers in µg/m³ -- **power_factor**: Power factor(unitless), unit may be `None` or % +- **pm10**: Concentration of particulate matter less than 10 micrometers in µg/m³ +- **power_factor**: Power factor (unitless), unit may be `None` or % - **power**: Power in mW, W, kW, MW, GW or TW - **precipitation**: Accumulated precipitation in cm, in or mm -- **precipitation_intensity**: Precipitation intensity in in/d, in/h, mm/d, or mm/h -- **pressure**: Pressure in Pa, kPa, hPa, bar, cbar, mbar, mmHg, inHg, or psi +- **precipitation_intensity**: Precipitation intensity in in/d, in/h, mm/d or mm/h +- **pressure**: Pressure in Pa, kPa, hPa, bar, cbar, mbar, mmHg, inHg or psi - **reactive_power**: Reactive power in var - **signal_strength**: Signal strength in dB or dBm - **sound_pressure**: Sound pressure in dB or dBA @@ -80,13 +82,15 @@ The following device classes are supported for numbers: - **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³ +- **volatile_organic_compounds_parts**: Ratio of volatile organic compounds in ppm or ppb - **voltage**: Voltage in V, mV, µV, kV, MV - **volume**: Generic volume in L, mL, gal, fl. oz., m³, ft³, or CCF - **volume_flow_rate**: Volume flow rate in m³/h, ft³/min, L/min, gal/min, or mL/s - **volume_storage**: Generic stored volume in L, mL, gal, fl. oz., m³, ft³, or CCF - **water**: Water consumption in L, gal, m³, ft³, or CCF - **weight**: Generic mass in kg, g, mg, µg, oz, lb, or st -- **wind_speed**: Wind speed in ft/s, km/h, kn, m/s, or mph +- **wind_direction**: Wind direction in ° +- **wind_speed**: Wind speed in Beaufort, ft/s, km/h, kn, m/s, or mph ## Actions diff --git a/source/_integrations/number.mqtt.markdown b/source/_integrations/number.mqtt.markdown index 990fbef9639..8ae647a4b36 100644 --- a/source/_integrations/number.mqtt.markdown +++ b/source/_integrations/number.mqtt.markdown @@ -51,7 +51,7 @@ availability_mode: type: string default: latest command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -138,7 +138,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -210,7 +210,7 @@ unit_of_measurement: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/nut.markdown b/source/_integrations/nut.markdown index 76620d555b6..4ec72d95c7d 100644 --- a/source/_integrations/nut.markdown +++ b/source/_integrations/nut.markdown @@ -2,7 +2,9 @@ title: Network UPS Tools (NUT) description: Instructions on how to set up NUT sensors within Home Assistant. ha_category: + - Button - System monitor + - Switch ha_iot_class: Local Polling ha_release: 0.34 ha_domain: nut @@ -11,17 +13,91 @@ ha_codeowners: - '@bdraco' - '@ollo69' - '@pestevez' + - '@tdfountain' ha_zeroconf: true ha_platforms: + - button - diagnostics - sensor + - switch ha_integration_type: device --- -The Network UPS Tools (NUT) integration allows you to monitor and manage a UPS (battery backup) using a [NUT](https://networkupstools.org/) server. It lets you view their status, receives notifications about important events, and execute commands as device actions. +The **Network UPS Tools (NUT)** {% term integration %} allows you to monitor and manage an Uninterruptible Power Supply (UPS) for battery backup, a Power Distribution Unit (PDU), or other similar power device using a [NUT](https://networkupstools.org/) server. It lets you view the status, receive notifications about important events, and execute commands as device actions for one or more such devices. + +## Supported devices + +This integration supports hardware devices compatible with +NUT. NUT's hardware compatibility list is available from the [Network +UPS Tools](https://networkupstools.org/) website. + +## Prerequisites + +You must have a NUT server configured to monitor one or more supported +power device(s). + +It is not possible to automatically detect a NUT server IP address +change. You should therefore configure the NUT server with a static +IP address, assign a fixed IP address reservation with DHCP, or use +DNS as appropriate for your network. + +In addition, you will need a username and password for +this integration to log into the NUT server if authentication is +required. {% include integrations/config_flow.md %} +Setting up the integration requires the following information: + +{% configuration_basic %} +Host: + description: "The IP address or hostname of your NUT server." +Port: + description: "The network port of your NUT server. The NUT server's default port is '3493'." +Username: + description: "The username to log into the NUT server. This is configured in NUT." +Password: + description: "The password associated with the username to log into the NUT server. This is configured in NUT." +{% endconfiguration_basic %} + +## Supported functionality + +{% important %} +The username and password configured for the device must be granted +`instcmds` permissions on the NUT server to use buttons and +switches. Buttons and switches will not be available if user +credentials are not specified. See the [NUT server +documentation](https://networkupstools.org/documentation.html) for +configuration information. +{% endimportant %} + +### Buttons + +This NUT integration will add buttons for NUT server commands +available for your device. + +The following buttons are available for each switchable outlet: + +| name | Description | +|---------------------------|:------------------------------------------------| +| Power cycle outlet `name` | Power cycle the named outlet | + +### Switches + +This NUT integration will add switches for NUT server commands +available for your device. + +The following switches are available for each switchable outlet: + +| name | Description | +|---------------------------|:------------------------------------------------| +| Power outlet `name` | Turn power on/off for named outlet | + +## Data updates + +The integration uses {% term polling %} to retrieve data from the NUT +server. The default polling interval is once every 60 seconds. + ## Example Resources Given the following example output from NUT (your variables may differ): @@ -106,3 +182,10 @@ Ensure the user you specify has the required permissions to execute the desired In this example, the user `my_user` has permission to execute all commands (`instcmds = ALL`). Please note that Home Assistant cannot determine whether a user can access a specific action without executing it. If you attempt to perform an action for which the user does not have permission, an exception will be thrown at runtime. + +## Remove integration + +This integration follows standard integration removal. No extra steps +are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/ogemray.markdown b/source/_integrations/ogemray.markdown new file mode 100644 index 00000000000..ffbc2e4f5cc --- /dev/null +++ b/source/_integrations/ogemray.markdown @@ -0,0 +1,49 @@ +--- +title: Ogemray +description: Integrate Ogemray (Powered by Shelly) devices +ha_category: + - Binary sensor + - Climate + - Cover + - Energy + - Event + - Light + - Number + - Select + - Sensor + - Switch + - Text + - Update + - Valve +ha_release: '0.115' +ha_codeowners: + - '@balloob' + - '@bieniu' + - '@thecode' + - '@chemelli74' + - '@bdraco' +ha_iot_class: Local Push +ha_domain: ogemray +ha_config_flow: true +ha_zeroconf: true +ha_platforms: + - binary_sensor + - button + - climate + - cover + - diagnostics + - event + - light + - number + - select + - sensor + - switch + - text + - update + - valve +ha_integration_type: virtual +ha_supporting_domain: shelly +ha_supporting_integration: Shelly +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/ohme.markdown b/source/_integrations/ohme.markdown index 867be61bc61..faf7853281f 100644 --- a/source/_integrations/ohme.markdown +++ b/source/_integrations/ohme.markdown @@ -2,8 +2,8 @@ title: Ohme description: Instructions to configure the Ohme integration into Home Assistant. ha_category: - - Sensor - Car + - Sensor ha_release: 2025.1 ha_iot_class: Cloud Polling ha_codeowners: @@ -11,9 +11,14 @@ ha_codeowners: ha_config_flow: true ha_domain: ohme ha_platforms: + - button + - number + - select - sensor - switch - - button + - time +ha_quality_scale: silver +ha_integration_type: device --- The **Ohme** {% term integration %} allows you to connect your [Ohme](https://ohme-ev.com/) EV charger to Home Assistant. @@ -54,10 +59,28 @@ The Ohme integration provides the following entities. - **Description**: If sensor **Status** is `Pending approval`, this will approve the charge. - **Available for devices**: all +#### Numbers + +- **Target percentage** + - **Description**: Sets the charge target for your vehicle. + - **Available for devices**: all +- **Preconditioning duration** + - **Description**: Defines how long to precondition your vehicle before the target time. `0` means preconditioning is disabled. + - **Available for devices**: all + +#### Selects + +- **Charger mode** + - **Description**: Sets the mode of the charger. Possible options: `Smart charge`, `Max charge`, `Paused`. This is only available with a vehicle plugged in. + - **Available for devices**: all +- **Vehicle** + - **Description**: Select the vehicle to charge. This will show vehicles configured in the Ohme app. + - **Available for devices**: all + #### Sensors - **Status** - - **Description**: Current status of the charger. Possible states: `Unplugged`, `Pending approval`, `Plugged in`, `Charging`. + - **Description**: Current status of the charger. Possible states: `Unplugged`, `Pending approval`, `Plugged in`, `Charging`, `Finished charging`. - **Available for devices**: all - **Power** - **Description**: Power draw from the charger in kW. @@ -68,12 +91,21 @@ The Ohme integration provides the following entities. - **Energy** - **Description**: Energy consumption of the charger in kWh. - **Available for devices**: all +- **Voltage** + - **Description**: Voltage supplied to the charger. This is only available when a vehicle is connected. + - **Available for devices**: all - **CT current** - **Description**: If a current transformer (CT) was installed with your charger, this will show the current used by your whole home. - **Available for devices**: Home Pro, ePod +- **Charge slot list** + - **Description**: A list of charge slots for the plan generated by Ohme. This is only available when a charge is in progress. + - **Available for devices**: all #### Switches +- **Price cap** + - **Description**: Prevents charging when the electricity price exceeds a defined threshold. The threshold can be set by the service `ohme.set_price_cap`. ***Not available with some energy providers and tariffs.*** + - **Available for devices**: all - **Lock buttons** - **Description**: Disable the controls on the device. - **Available for devices**: all @@ -84,6 +116,12 @@ The Ohme integration provides the following entities. - **Description**: Turn off the screen of the device after a few minutes of inactivity. - **Available for devices**: Home Pro +#### Times + +- **Target time** + - **Description**: Sets the time you need your vehicle charged by. + - **Available for devices**: all + ## Actions The integration provides the following actions. @@ -96,6 +134,14 @@ The `ohme.list_charge_slots` action is used to fetch a list of charge slots from |------------------------|----------|--------------------------------------------------------------| | `config_entry` | No | The config entry of the account to get the charge list from. | +### Action: Set price cap + +The `ohme.set_price_cap` action is used to set the price cap threshold. This can be toggled by the switch **Price cap**. + +| Data attribute | Optional | Description | +|------------------------|----------|-------------------------------------------------------------| +| `config_entry` | No | The config entry of the account to apply the price cap to. | +| `price_cap` | No | Threshold in 1/100ths of your local currency. | ## Removing the integration diff --git a/source/_integrations/onedrive.markdown b/source/_integrations/onedrive.markdown new file mode 100644 index 00000000000..28e1986e52a --- /dev/null +++ b/source/_integrations/onedrive.markdown @@ -0,0 +1,189 @@ +--- +title: OneDrive +description: Instructions on how to setup OneDrive to be used with backups. +ha_release: 2025.2 +ha_category: + - Backup +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_domain: onedrive +ha_codeowners: + - '@zweckj' +ha_integration_type: service +related: + - docs: /common-tasks/general/#backups + title: Backups +ha_quality_scale: platinum +ha_platforms: + - sensor +--- + +This integration allows you to use [OneDrive](https://www.microsoft.com/en-us/microsoft-365/onedrive/online-cloud-storage) for [Home Assistant Backups](/common-tasks/general/#backups) as well as uploading generic files to your OneDrive. + +Backups will be created in a folder called `Home Assistant\backups_` in the `App Folder` of your OneDrive by default. +`id` is part of your Home Assistant instance's unique id to allow backups from multiple instances to the same OneDrive account. + +The integration only has access to an application specific `Home Assistant` folder in the `App Folder` and cannot access any other parts of your OneDrive. + +{% important %} +Because of an issue in Microsoft's APIs, the application-specific folder is often called `Graph` instead of `Home Assistant`. More on that [below](#backup-folder-is-called-graph). +{% endimportant %} + +{% include integrations/config_flow.md %} +{% configuration_basic %} +Client ID: + description: "Application ID of the app registration to be used with the integration. Uses Home Assistant provided by default." +Client secret: + description: "Application secret for the app registration. Uses Home Assistant provided by default." +Folder name: + description: "The name of the instance specific [backup folder](#backup-folder)." + +{% endconfiguration_basic %} + +{% include integrations/option_flow.md %} + +{% configuration_basic %} +Delete files permanently: + description: By default, files are put into the Recycle Bin when deleted, where they remain available for another 30 days. If you enable this option, files will be deleted immediately when they are cleaned up by the backup system. +{% endconfiguration_basic %} + +## Backup folder + +The backup folder is `root:\Apps\[Home Assistant | Graph]\backups_{id}`. This is not configurable because otherwise the integration would need permissions to write into your entire drive. You can, however, rename the application folder which is called `Home Assistant` or `Graph` in your OneDrive. + +The last folder in the hierarchy (`backups_{id}`) is always a unique folder per Home Assistant instance to ensure that backups from different instances are not mixed. The name of this folder can be set during integration setup and can be changed later through reconfiguring the integration or by renaming the folder in OneDrive. + +### Backup folder is called `Graph` + +This integration uses Microsoft's Graph API to communicate with your OneDrive. Because of an [issue](https://github.com/OneDrive/onedrive-api-docs/issues/1866) in that API, the application folder is often not named with the name of the application (`Home Assistant`), but `Graph` instead. + +There is no risk of different applications mixing in that `Graph` folder, if you already have such a `Graph` folder from a different application, the next folders will just be called `Graph 1`, `Graph 2` and so on. + +You should be able to manually rename the folder to something else, without the integration breaking. + +## Requested permissions by the integration + +The integration will request the following permissions on your OneDrive for the integration to work: + +- `Files.ReadWrite.AppFolder`: Grants the application permission to read and write in its own, app-specific folder inside your OneDrive +- `offline_access`: Grants the application permission to refresh its authentication token without requiring your manual intervention +- `openid`: Grants the application permission to read basic information, e.g. if you have a OneDrive + + +Lists of permissions that the application will request. + +## Sensors + +The integration provides the following sensors, which are updated every 5 minutes: + +- **Total available storage**: The total size of your drive (disabled by default) +- **Used storage**: The amount of storage you have used up +- **Remaining storage**: The amount of storage that is left in your drive +- **Drive state**: Calculated state of your drive, based on the storage left. Possible values: `Normal`, `Nearing limit`, `Critical`, `Exceeded` + +{% note %} +A drive that is in **Drive state** `Exceeded` will be automatically frozen (meaning you can't upload any more backups & files), until you clear up enough storage. +{% endnote %} + +## Actions + +This integration provides the following actions: + +### Action `onedrive.upload` + +You can use the `onedrive.upload` action to upload files from Home Assistant +to OneDrive. For example, to upload `camera` snapshots. + +{% details "Upload action details" %} + +| Data attribute | Optional | Description | Example | +| ---------------------- | -------- | ----------- | --------| +| `filename` | no | Path to the file to upload. | /media/image.jpg | +| `destination_folder` | no | Folder inside your `Apps/Home Assistant` app folder that is the destination for the uploaded content. Will be created if it does not exist. Supports subfolders. | Snapshots/2025 | +| `config_entry_id` | no | The ID of the OneDrive config entry (the OneDrive you want to upload to). | a1bee602deade2b09bc522749bbce48e | + +{% enddetails %} + +## Automations + +Get started with these automation examples. + +### Send alert when drive is near storage limit + +Send an alert when the drive usage is close to the storage limit and needs cleanup. + +{% details "Example YAML configuration" %} + +{% raw %} + +```yaml +alias: Alert when OneDrive is close to storage limit +description: Send notification to phone when drive needs cleanup. +triggers: + - trigger: state + entity_id: + - sensor.my_drive_drive_state + from: "normal" + to: "nearing" + - trigger: state + entity_id: + - sensor.my_drive_drive_state + from: "nearing" + to: "critical" +actions: + - action: notify.mobile_app_iphone + data: + title: OneDrive is almost full! + message: > + OneDrive has used up {{ states('sensor.my_drive_used_storage') }} of {{ + states('sensor.my_drive_total_available') }}GB. Only {{ states('sensor.my_drive_remaining_storage') }}GB remaining. +mode: single +``` + +{% endraw %} +{% enddetails %} + + +## Getting application credentials + +This integration comes with a predefined set of [application credentials](https://www.home-assistant.io/integrations/application_credentials/) through Home Assistant account linking. This means you should not need to provide credentials, but get redirected to Microsoft's sign-in page. + +Even if you use the default credentials, nobody will ever have access to your data except you, as the app does not have permission to do anything on its own. It only works with a signed-in user (it only has `delegated` not `application permissions`). + +However, if you want to use your own credentials, follow [this guide](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app?tabs=certificate) to create your own client ID and secret. + +{% tip %} +You will need an Azure tenant with an active Azure subscription to create your own client credentials. +{% endtip %} + +Make sure to configure the following settings on the app registration: + +- **Supported account types**: Personal Microsoft accounts only +- **Redirect URI**: Type: `Web`, URL: `https://my.home-assistant.io/redirect/oauth` + +Configuring a custom app. + + +{% note %} +If you set the integration up with the default credentials and switch to custom credentials later, your backup folder will change inside your OneDrive, and you will have to manually copy existing backups from the old folder to the new one. +{% endnote %} + +## Known limitations + +- Only personal OneDrives are supported at the moment. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} + +## Troubleshooting + +{% details "Unknown error while adding the integration" %} + +Make sure that your OneDrive is not frozen. This can happen if you haven't used it for a longer period of time, or went over your data quota. {% enddetails %} + +{% details "Default credentials not available" %} + +If the integration asks you for a `client ID` and a `client secret`, that likely means you disabled part of the `default_config` in your Home Assistant configuration. For account linking to work you'll need `my` & `cloud` integrations loaded. {% enddetails %} diff --git a/source/_integrations/onewire.markdown b/source/_integrations/onewire.markdown index cd0a60be21a..be33f9dfd27 100644 --- a/source/_integrations/onewire.markdown +++ b/source/_integrations/onewire.markdown @@ -17,6 +17,7 @@ ha_platforms: - sensor - switch ha_integration_type: hub +ha_zeroconf: true --- The Onewire integration supports sensors that use the 1-wire bus for communication. @@ -51,6 +52,7 @@ Each 1-wire component data sheet describes the different properties the componen | 10 | [DS18S20](https://www.maximintegrated.com/en/products/sensors/DS18S20.html) | Temperature | | 12 | [DS2406](https://datasheets.maximintegrated.com/en/ds/DS2406.pdf) | Temperature and pressure when using TAI-8570 [1](#note_1) | | 1D | [DS2423](https://datasheets.maximintegrated.com/en/ds/DS2423.pdf) | Counter | +| 20 | [DS2450](https://datasheets.maximintegrated.com/en/ds/DS2450.pdf) | 4 x Voltage | | 22 | [DS1822](https://datasheets.maximintegrated.com/en/ds/DS1822.pdf) | | | 26 | [DS2438](https://datasheets.maximintegrated.com/en/ds/DS2438.pdf) | Temperature, Voltage, Current (pressure when using B1-R1-A, illuminance when using S2-R1-A, humidity when using compatible Honeywell or Humirel sensor) [2](#note_2) | | 28 | [DS18B20](https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf) | Temperature | diff --git a/source/_integrations/onkyo.markdown b/source/_integrations/onkyo.markdown index 3d9cffd7e09..600cae4a25a 100644 --- a/source/_integrations/onkyo.markdown +++ b/source/_integrations/onkyo.markdown @@ -5,6 +5,7 @@ ha_category: - Media player ha_codeowners: - '@arturpragacz' + - '@eclair4151' ha_config_flow: true ha_domain: onkyo ha_integration_type: device @@ -12,6 +13,7 @@ ha_iot_class: Local Push ha_platforms: - media_player ha_release: 0.17 +ha_ssdp: true --- The `onkyo` {% term integration %} allows you to control [Onkyo](https://www.onkyo.com) and [Integra](http://www.integrahometheater.com) (from 2011 onward) and also [Pioneer](https://www.pioneerelectronics.com) (from 2016 onward) receivers using Home Assistant. @@ -26,9 +28,11 @@ Volume Resolution: description: Number of steps it takes for the receiver to go from the lowest to the highest possible volume. Possible values are 50, 80, 100, 200. For older Onkyo receivers, this typically is 80; newer Onkyo receivers use 200. Input sources: description: List of input sources supported by the receiver. +Listening modes: + description: List of listening modes supported by the receiver. {% endconfiguration_basic %} -The above settings can also be adjusted later. To do this, click the three-dot menu on the integration entry and select **Reconfigure**. +The above settings can also be adjusted later. To change **Host** or **Volume Resolution**, select the three-dot menu on the integration entry and select **Reconfigure**. {% include integrations/option_flow.md %} @@ -37,6 +41,8 @@ Max Volume: description: Maximum volume limit as a percentage. Often the maximum volume of the receiver is far too loud. Setting this will set Home Assistant's 100% volume to be this setting on the amp, i.e., if you set this to 50%, when you set Home Assistant to be 100%, then your receiver will be set to 50% of its maximum volume. Input sources: description: Mappings of input sources to their names. +Listening modes: + description: Mappings of listening modes to their names. {% endconfiguration_basic %} ## Zones @@ -100,3 +106,9 @@ script: ## Supported devices Network receivers from Onkyo and Integra are supported starting with models from the year 2011. Pioneer network receivers are supported starting with models from 2016. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/onvif.markdown b/source/_integrations/onvif.markdown index e7b73a3013a..88d422f37aa 100644 --- a/source/_integrations/onvif.markdown +++ b/source/_integrations/onvif.markdown @@ -8,6 +8,7 @@ ha_iot_class: Local Push ha_domain: onvif ha_codeowners: - '@hunterjm' + - '@jterrace' ha_config_flow: true ha_platforms: - binary_sensor diff --git a/source/_integrations/openai_conversation.markdown b/source/_integrations/openai_conversation.markdown index 977e8458891..c209db566ff 100644 --- a/source/_integrations/openai_conversation.markdown +++ b/source/_integrations/openai_conversation.markdown @@ -57,7 +57,7 @@ If you choose to not use the recommended settings, you can configure the followi {% configuration_basic %} Model: - description: The GPT language model is used for text generation. You can find more details on the available models in the [OpenAI GPT-3.5 Turbo Documentation](https://platform.openai.com/docs/models/gpt-3-5-turbo), [OpenAI GPT-4 Turbo and GPT-4 Documentation](https://platform.openai.com/docs/models/gpt-4-turbo-and-gpt-4), or [GPT-4o Documentation](https://platform.openai.com/docs/models/gpt-4o). The default is "gpt-4o". + description: The GPT language model is used for text generation. You can find more details on the available models in the [GPT-4o Documentation](https://platform.openai.com/docs/models/gpt-4o). The default is "gpt-4o-mini". Maximum Tokens to Return in Response: description: The maximum number of words or "tokens" that the AI model should generate in its completion of the prompt. For more information, see the [OpenAI Completion Documentation](https://platform.openai.com/docs/guides/completion/introduction). Temperature: @@ -133,7 +133,7 @@ automation: config_entry: abce6b8696a15e107b4bd843de722249 size: "1024x1024" prompt: >- - New York when the weather is {{ states("weather.home") }}" + New York when the weather is {{ states("weather.home") }} - alias: "Send out a manual event to update the image entity" event: new_weather_image @@ -141,13 +141,73 @@ automation: url: '{{ generated_image.url }}' template: - - triggers: + - trigger: - 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 }}" + - name: "AI generated image of New York" + url: "{{ trigger.event.data.url }}" +``` + +{% endraw %} + +### Service `openai_conversation.generate_content` + +Allows you to ask OpenAI to generate a content based on a prompt. This service +populates [Response Data](/docs/scripts/service-calls#use-templates-to-handle-response-data) +with the response from OpenAI. + +- **Service data attribute**: `config_entry` + - **Description**: Integration entry ID to use. + - **Example**: + - **Optional**: no + +- **Service data attribute**: `prompt` + - **Description**: The text to generate content from. + - **Example**: Describe the weather + - **Optional**: no + +- **Service data attribute**: `image_filename` + - **Description**: List of file names for images to include in the prompt. + - **Example**: /tmp/image.jpg + - **Optional**: yes + +{% raw %} + +```yaml +service: openai.generate_content +data: + config_entry: abce6b8696a15e107b4bd843de722249 + prompt: >- + Very briefly describe what you see in this image from my doorbell camera. + Your message needs to be short to fit in a phone notification. Don't + describe stationary objects or buildings. + image_filename: + - /tmp/doorbell_snapshot.jpg +response_variable: generated_content +``` + +{% endraw %} + +The response data field `text` will contain the generated content. + +Another example with multiple images: + +{% raw %} + +```yaml +service: openai.generate_content +data: + prompt: >- + Briefly describe what happened in the following sequence of images + from my driveway camera. + image_filename: + - /tmp/driveway_snapshot1.jpg + - /tmp/driveway_snapshot2.jpg + - /tmp/driveway_snapshot3.jpg + - /tmp/driveway_snapshot4.jpg +response_variable: generated_content ``` {% endraw %} diff --git a/source/_integrations/openweathermap.markdown b/source/_integrations/openweathermap.markdown index fc975c064e7..c0601e360c3 100644 --- a/source/_integrations/openweathermap.markdown +++ b/source/_integrations/openweathermap.markdown @@ -96,3 +96,157 @@ The Weather entity provides data only in English. Home Assistant automatically t | `wind_speed` | Wind speed, meter/sec. | Details about the API are available in the [OpenWeatherMap documentation](https://openweathermap.org/api). + +## Action `openweathermap.get_minute_forecast` + +This action populates [response data](/docs/scripts/perform-actions#use-templates-to-handle-response-data) +with a mapping of minute-by-minute precipitation forecasts (rain or snow) for the next hour. + +**Note:** Minute forecast is available only when the OWM integration mode is set to `v3.0`. The action will fail if the mode is set to `current`, `forecast`, or `v2.5`. + +```yaml +action: openweathermap.get_minute_forecast +target: + entity_id: + - weather.openweathermap +response_variable: weather_forecast +``` + +The response data field is a mapping of `forecast` fields. +`forecast` is a list of 60 forecasted precipitation levels; one for each minute of the next hour: + +| Response data | Description | Example | +| ---------------------- | ----------- | -------- | +| `datetime` | The time of the forecasted conditions. | 2024-10-19T18:59:00+00:00 | +| `precipitation` | The precipitation amount in mm/h. | 1.25 | + +## Examples + +{% details "Example action response" %} + +```yaml +weather.openweathermap: + forecast: + - datetime: "2024-10-19T18:59:00+00:00" + precipitation: 5.46 + - datetime: "2024-10-19T19:00:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:01:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:02:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:03:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:04:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:05:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:06:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:07:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:08:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:09:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:10:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:11:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:12:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:13:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:14:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:15:00+00:00" + precipitation: 5.62 + - datetime: "2024-10-19T19:16:00+00:00" + precipitation: 5.79 + - datetime: "2024-10-19T19:17:00+00:00" + precipitation: 5.96 + - datetime: "2024-10-19T19:18:00+00:00" + precipitation: 6.14 + - datetime: "2024-10-19T19:19:00+00:00" + precipitation: 6.31 + - datetime: "2024-10-19T19:20:00+00:00" + precipitation: 6.48 + - datetime: "2024-10-19T19:21:00+00:00" + precipitation: 6.68 + - datetime: "2024-10-19T19:22:00+00:00" + precipitation: 6.89 + - datetime: "2024-10-19T19:23:00+00:00" + precipitation: 7.09 + - datetime: "2024-10-19T19:24:00+00:00" + precipitation: 7.29 + - datetime: "2024-10-19T19:25:00+00:00" + precipitation: 7.49 + - datetime: "2024-10-19T19:26:00+00:00" + precipitation: 7.72 + - datetime: "2024-10-19T19:27:00+00:00" + precipitation: 7.95 + - datetime: "2024-10-19T19:28:00+00:00" + precipitation: 8.18 + - datetime: "2024-10-19T19:29:00+00:00" + precipitation: 8.42 + - datetime: "2024-10-19T19:30:00+00:00" + precipitation: 8.65 + - datetime: "2024-10-19T19:31:00+00:00" + precipitation: 8.65 + - datetime: "2024-10-19T19:32:00+00:00" + precipitation: 8.65 + - datetime: "2024-10-19T19:33:00+00:00" + precipitation: 8.65 + - datetime: "2024-10-19T19:34:00+00:00" + precipitation: 8.65 + - datetime: "2024-10-19T19:35:00+00:00" + precipitation: 8.65 + - datetime: "2024-10-19T19:36:00+00:00" + precipitation: 8.91 + - datetime: "2024-10-19T19:37:00+00:00" + precipitation: 9.18 + - datetime: "2024-10-19T19:38:00+00:00" + precipitation: 9.45 + - datetime: "2024-10-19T19:39:00+00:00" + precipitation: 9.72 + - datetime: "2024-10-19T19:40:00+00:00" + precipitation: 9.98 + - datetime: "2024-10-19T19:41:00+00:00" + precipitation: 10.29 + - datetime: "2024-10-19T19:42:00+00:00" + precipitation: 10.6 + - datetime: "2024-10-19T19:43:00+00:00" + precipitation: 10.91 + - datetime: "2024-10-19T19:44:00+00:00" + precipitation: 11.22 + - datetime: "2024-10-19T19:45:00+00:00" + precipitation: 11.53 + - datetime: "2024-10-19T19:46:00+00:00" + precipitation: 11.89 + - datetime: "2024-10-19T19:47:00+00:00" + precipitation: 12.24 + - datetime: "2024-10-19T19:48:00+00:00" + precipitation: 12.6 + - datetime: "2024-10-19T19:49:00+00:00" + precipitation: 12.96 + - datetime: "2024-10-19T19:50:00+00:00" + precipitation: 13.31 + - datetime: "2024-10-19T19:51:00+00:00" + precipitation: 13.31 + - datetime: "2024-10-19T19:52:00+00:00" + precipitation: 13.31 + - datetime: "2024-10-19T19:53:00+00:00" + precipitation: 13.31 + - datetime: "2024-10-19T19:54:00+00:00" + precipitation: 13.31 + - datetime: "2024-10-19T19:55:00+00:00" + precipitation: 13.31 + - datetime: "2024-10-19T19:56:00+00:00" + precipitation: 13.73 + - datetime: "2024-10-19T19:57:00+00:00" + precipitation: 14.14 + - datetime: "2024-10-19T19:58:00+00:00" + precipitation: 14.55 +``` + +{% enddetails %} diff --git a/source/_integrations/opower.markdown b/source/_integrations/opower.markdown index 3f451338262..044e1f75d44 100644 --- a/source/_integrations/opower.markdown +++ b/source/_integrations/opower.markdown @@ -28,6 +28,7 @@ More than 175 utilities use Opower. Currently only the following utilities are s - Public Service Company of Oklahoma (PSO) - Southwestern Electric Power Company (SWEPCO) - Arizona Public Service (APS) +- Burbank Water and Power (BWP) - City of Austin Utilities - Consolidated Edison (ConEd) and subsidiaries - Orange & Rockland Utilities (ORU) @@ -79,7 +80,7 @@ Alternatively, you can create a new TOTP secret for your account and use the "no When using Opower with any of the Exelon subsidiaries, such as BGE, ComEd, PECO, Pepco, etc., you need to actively disable two-factor authentication. Before proceeding, make sure you understand the security implications of disabling 2FA. -Log onto the website, select **Don't use 2FA** and **Don't ask me again**. If you have already enabled 2FA, disable it. +Log onto the website, select **Don't use 2FA** and **Don't ask me again**. If you have already enabled 2FA, you most likely cannot disable it, which unfortunately means you cannot use this integration. {% include integrations/config_flow.md %} @@ -141,3 +142,16 @@ Your **Configure gas consumption** should now look like this: With the above changes your (**{% my config_energy title="Settings > Dashboards > Energy" %}**) page should now look like this: ![Screenshot Energy Configuration](/images/integrations/opower/energy_config.png) + +## Known limitations + +- There is a delay, often for up to a few days, for sensors and statistics to have up-to-date data. +- For some utilities, there are no sensors added by this integration. +- For some utilities, the sensors might disappear or become unavailable at the beginning of your bill period. +- Sensors for typical monthly usage and cost are not populated for accounts younger than a year. +- Many utilities provide granular usage (for example, daily or hourly) but not cost. They only provide cost for billing periods (for example, month). This results in showing 0 for cost. + +## Troubleshooting + +- Before opening an issue, ensure you can access the energy usage section/dashboard on your utility website and verify that the data is up-to-date there. +- In your energy dashboard in Home Assistant, make sure you use the statistics and not the sensors. diff --git a/source/_integrations/otbr.markdown b/source/_integrations/otbr.markdown index 1ba8dccb7bf..7297ab0e487 100644 --- a/source/_integrations/otbr.markdown +++ b/source/_integrations/otbr.markdown @@ -18,8 +18,6 @@ This integration is installed automatically when the **Open Thread Border Router - [Enabling Thread on Home Assistant Yellow](https://yellow.home-assistant.io/procedures/enable-thread/) - [Enabling Thread on Home Assistant Connect ZBT-1](https://connectzbt1.home-assistant.io/procedures/enable-thread/) -The integration is also installed automatically when enabling the experimental **Silicon Labs Multiprotocol** support. - Installing this integration manually is an advanced use case, for example if you run your own border router. If you do have such a use case, follow these steps: {% include integrations/config_flow.md %} diff --git a/source/_integrations/overkiz.markdown b/source/_integrations/overkiz.markdown index f3ba6d7c814..6589d6cb1c2 100644 --- a/source/_integrations/overkiz.markdown +++ b/source/_integrations/overkiz.markdown @@ -1,6 +1,6 @@ --- title: Overkiz -description: Instructions on how to integrate hubs whom use the Overkiz platform with Home Assistant. +description: Instructions on how to integrate hubs that use the Overkiz IoT platform with Home Assistant. ha_category: - Alarm - Binary sensor @@ -22,11 +22,6 @@ ha_config_flow: true ha_iot_class: Local Polling ha_codeowners: - '@imicknl' - - '@vlebourl' - - '@tetienne' - - '@nyroDev' - - '@tronix117' - - '@alexfp14' ha_domain: overkiz ha_dhcp: true ha_zeroconf: true @@ -49,39 +44,70 @@ ha_platforms: ha_integration_type: hub --- -The Overkiz (by Somfy) integration platform is used by many different vendors, like Somfy, Hitachi, and Atlantic. This integration will allow users to integrate their devices into Home Assistant using the Overkiz API. +The Overkiz (by Somfy) IoT platform is used by many different vendors, like Somfy, Hitachi, and Atlantic. This integration will allow users to integrate their devices into Home Assistant using the Overkiz API. -## Supported hubs +## Supported hubs & devices - Atlantic Cozytouch +- Bouygues Flexom - Hitachi Hi Kumo - Nexity Eugénie -- Rexel Energeasy +- Sauter Cozytouch +- Simu LiveIn2 - Somfy Connectivity Kit - Somfy Connexoon IO _(local API available)_ - Somfy Connexoon RTS _(local API available)_ -- Somfy TaHoma _(local API available)_ +- Somfy TaHoma v2 _(local API available)_ - Somfy TaHoma Beecon _(local API available)_ - Somfy TaHoma Switch _(local API available)_ - Thermor Cozytouch - -## Supported devices +- Ubiwizz Over 6000 devices from 60 brands are compatible with the Overkiz platform. This integration will retrieve your devices and map them to the relevant Home Assistant platforms. {% include integrations/config_flow.md %} +The Overkiz integration supports both the Overkiz cloud API and the local API (only supported by some Somfy hubs). For compatible Somfy hubs, you can connect locally, allowing device control without an internet connection. Start by selecting the server or app that you use to control your devices. + +### Login to Overkiz (Cloud API) + +{% configuration_basic %} +"Username": + description: "Username for your Overkiz cloud account (account you use in your IoT app)." +Password: + description: "Password for your Overkiz cloud account (account you use in your IoT app)." +{% endconfiguration_basic %} + +### Login to Overkiz (Local API) + +To use the local API, you will need to activate the [Somfy TaHoma Developer Mode](https://github.com/Somfy-Developer/Somfy-TaHoma-Developer-Mode?tab=readme-ov-file#getting-started) via the Somfy website. Activating this mode will enable a local API on your TaHoma box. Your cloud credentials are required to negotiate a token with the cloud API to authenticate your calls to the local API. This is a one-time setup and the token will be stored in your Home Assistant configuration. + +Scenarios and climate entities are **not** supported via the Somfy TaHoma Developer Mode. + +{% configuration_basic %} +"Host": + description: "The hostname or IP address of your Overkiz hub. The hostname is your Gateway PIN + .local:8443 (e.g. 1234-4567-8912.local)." +"Username": + description: "Username for your Overkiz cloud account (account you use in your IoT app)." +Password: + description: "Password for your Overkiz cloud account (account you use in your IoT app)." +Verify SSL: + description: "Verify the SSL certificate of your hub. This option is available only when connecting via the hostname." +{% endconfiguration_basic %} + +## Data updates + +This integration retrieves data from Overkiz every 30 seconds to ensure timely updates. If you only have stateless devices (RTS protocol), the integration will poll for new data every hour to reduce unnecessary load on the Overkiz API. + ## Known limitations ### Zigbee, Z-Wave, Hue, and Sonos devices not supported -Even though most Overkiz hubs support adding Zigbee, Z-Wave, Hue, and Sonos devices, this isn't supported in the Overkiz integration. All these platforms have native integrations in Home Assistant which are more stable and feature-rich. +Even though most Overkiz hubs support adding Zigbee, Z-Wave, Hue, and Sonos devices, this isn't supported in the Overkiz integration. All these platforms have native integrations in Home Assistant, which provide more frequent state updates and are more feature-rich. ### Stateless RTS covers -Covers that use the RTS protocol are stateless and do not report their state back to the hub. This means that Home Assistant will not know the state of the device after it has been controlled. - -If you only control your RTS cover from Home Assistant, you can use the [template cover](/integrations/cover.template/) to create a stateful cover entity. This will allow you to keep track of the current state (open or closed) and use the cover in automations and scenes. +RTS covers do not report their state back to the hub, so Home Assistant cannot track their state after they are controlled. If you only control your RTS cover from Home Assistant, you can use the [template cover](/integrations/cover.template/) to create a stateful cover entity. This will help you track the current state (open or closed) and use the cover in automations and scenes. ```yaml cover: @@ -106,6 +132,12 @@ cover: ### Overkiz API limits +**Device state changes are not broadcasted for all devices** + +Some Overkiz devices do not broadcast status changes. To update their status, the vendor's app (for example, Somfy TaHoma) requests a status update when opened. The app then broadcasts the states via events that the Overkiz integration also listens to. The Overkiz integration cannot replicate this behavior, as it does not know when you access the Home Assistant dashboard or run automations. + +As a result, the state of some Overkiz devices in Home Assistant may not always be up-to-date. + **Server busy, please try again later. (Too many executions)** During peak hours, it could happen that the Overkiz platform is unable to execute your command. The integration will try to retry this command, however, this is not guaranteed to succeed. @@ -114,18 +146,22 @@ During peak hours, it could happen that the Overkiz platform is unable to execut The Overkiz API only supports 10 requests in its execution queue. If you try to command more devices at the same time, for example with a group, this will fail with `EXEC_QUEUE_FULL`. To work around this, you can create a scenario in the corresponding application and call that scenario instead after syncing it in the integration. -### Internet connectivity required +### Device support via the local API -This integration communicates via the cloud-based Overkiz API in most cases. Depending on your hub and devices, there are options which communicate over your local network. +Various sensors, scenarios, and climate entities are **not** supported via the Somfy TaHoma Developer Mode due to limitations of the local API. If your device functions with the Cloud API but not with the Local API, this is an inherent limitation of the Local API and cannot be resolved. -#### Local API via Somfy TaHoma Developer Mode +### Device support via HomeKit -The Somfy TaHoma v2, Somfy Connexoon and Somfy TaHoma Switch support the [Somfy TaHoma Developer Mode (local API)](https://github.com/Somfy-Developer/Somfy-TaHoma-Developer-Mode). During setup, you can choose **Local API**. This allows you to use the local API in Home Assistant. Climate devices are not supported via the Somfy TaHoma Developer Mode. +If your hub (e.g. Somfy Connectivity Kit) supports HomeKit, a sensor named **HomeKit Setup Code** will be added to Home Assistant. To configure the [HomeKit Controller](/integrations/homekit_controller/) integration for local control, follow these steps: -#### Local API via HomeKit Controller +1. Locate the **HomeKit Setup Code** sensor in Home Assistant. +2. Retrieve the setup code value from the sensor. +3. Use this setup code to configure the [HomeKit Controller](/integrations/homekit_controller/) integration in Home Assistant. -If your hub (e.g. Somfy Connectivity Kit) supports HomeKit natively, your setup code will be added as a sensor in Home Assistant. Find your hub in Home Assistant and retrieve the value from the **HomeKit Setup Code** sensor. You can now configure the [HomeKit Controller](/integrations/homekit_controller/) integration in Home Assistant and benefit from local support. Only a [limited set of devices is supported](https://service.somfy.com/downloads/nl_v5/tahoma-homekitcompatibilitylist_eng.pdf). +Please note that only a [limited set of devices is supported via HomeKit](https://service.somfy.com/downloads/nl_v5/tahoma-homekitcompatibilitylist_eng.pdf). -#### Local API via Velux KLF200 hub +## Removing the integration -If you are only using Somfy IO-compatible devices, you could purchase a Velux KLF200 hub and use [the Velux integration](/integrations/velux/) which has a local API. +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/overseerr.markdown b/source/_integrations/overseerr.markdown index dbda22f0f86..f673fb85ba5 100644 --- a/source/_integrations/overseerr.markdown +++ b/source/_integrations/overseerr.markdown @@ -2,19 +2,24 @@ title: Overseerr description: Instructions on how to set up Overseerr with Home Assistant. ha_category: + - Event + - Multimedia - Sensor ha_release: 2025.2 -ha_iot_class: Local Polling +ha_iot_class: Local Push ha_config_flow: true ha_codeowners: - '@joostlek' ha_domain: overseerr ha_integration_type: service ha_platforms: + - diagnostics + - event - sensor +ha_quality_scale: platinum --- -Overseerr is a service that allows you to manage media requests and to integrate those with Plex, Radarr and Sonarr. The **Overseerr** {% term integration %} allows you to see statistics of your [Overseerr](https://overseerr.dev/) instance. +Overseerr is a service that allows you to manage media requests and to integrate these media requests with Plex, Radarr, and Sonarr. The **Overseerr** {% term integration %} allows you to integrate your [Overseerr](https://overseerr.dev/) instance. {% include integrations/config_flow.md %} @@ -29,8 +34,120 @@ API key: type: string {% endconfiguration_basic %} +## Supported versions + +The latest version of Overseerr is supported by this integration. + +## Supported functionality + +The Overseerr intergation provides a couple of entities to Home Assistant. +Below is an overview of these entities. + +### Events + +Overseerr provides an event entity for updates around media. +The possible events that this entity has are: + - `pending` + - `approved` + - `available` + - `failed` + - `declined` + - `auto_approved` + +Relevant data about the request are stored in the attributes. + +### Sensors + +The integration also provides statistics for the requests stored in Overseerr. +There are sensors for: + - Total requests + - Movie requests + - TV requests + - Pending requests + - Declined requests + - Processing requests + - Available requests + +## Actions + +The Overseerr integration has the following actions: + +- Get requests + +### Action get requests + +Get a list of media requests using `overseerr.get_requests`. + +| Data attribute | Optional | Description | +|-------------------|----------|-------------------------------------------------------------| +| `config_entry_id` | No | The ID of the Overseerr config entry to get data from. | +| `status` | Yes | The status to filter the results on. | +| `sort_order` | Yes | The sort order to sort the results in (`added`/`modified`). | +| `requested_by` | Yes | Filter the requests based on the user ID of the requester. | + + +## Use cases + +The integration can be used to build automations to help and notify you of new media requests. +The provided actions can be used to provide extra context to voice assistants. + +## Example automations + +{% details "Send me a push notification on a new request" %} + +{% raw %} + +```yaml +alias: "Overseerr push notification" +description: "Send me a push notification on a new media request" +triggers: + - trigger: state + entity_id: + - event.overseerr_last_media_event + not_from: + - unknown + - unavailable +conditions: + - condition: template + value_template: >- + {{ state_attr('event.overseerr_last_media_event', 'event_type') == + 'pending' }} +actions: + - action: notify.mobile_app + metadata: {} + data: + message: >- + {{ state_attr('event.overseerr_last_media_event', 'subject') }} has been + requested +``` + +{% endraw %} +{% enddetails %} + +## Data updates + +When loading the integration, it will try to configure the webhook in Overseerr to give updates to Home Assistant. +This makes the integration a push-based integration. + +When the integration receives an update about the requests, it updates the statistics to make sure they are up to date. +In addition, the integration checks for updates every 5 minutes. + +## Known limitations + +There are a few known limitations for using the integration: +- Overseerr is only capable of having one webhook set up at a time. +This means you can only have 1 Home Assistant instance connected to your Overseerr instance at a time. +- The integration is not able to function with CSRF protection turned on. In Overseer, go to **Settings** and turn off the **CSRF Protection**. + ## Remove integration This integration follows standard integration removal, no extra steps are required. {% include integrations/remove_device_service.md %} + +## Troubleshooting + +{% details "Failed to register Overseerr webhook" %} + +Make sure your Overseerr instance is able to reach your Home Assistant instance. +{% enddetails %} diff --git a/source/_integrations/p1_monitor.markdown b/source/_integrations/p1_monitor.markdown index 4d97db613b5..3d85e0b4762 100644 --- a/source/_integrations/p1_monitor.markdown +++ b/source/_integrations/p1_monitor.markdown @@ -19,6 +19,10 @@ The **P1 Monitor** {% term integration %} allows you to gather data from your [P P1 Monitor is a piece of software that can be installed on a Raspberry Pi or other Linux-based system. It reads the data from your smart meter via the serial port (P1), such as your energy consumption, but also that of gas or a water meter. +{% note %} +If you’re not using **P1 Monitor** software, you’re likely looking for the [DSMR Smart Meter](/integrations/dsmr/) integration, which connects directly to DSMR-compatible smart meters. +{% endnote %} + {% include integrations/config_flow.md %} {% configuration_basic %} diff --git a/source/_integrations/palazzetti.markdown b/source/_integrations/palazzetti.markdown index 9ce29586d8e..98242083763 100644 --- a/source/_integrations/palazzetti.markdown +++ b/source/_integrations/palazzetti.markdown @@ -10,8 +10,10 @@ ha_codeowners: - '@dotvav' ha_domain: palazzetti ha_platforms: + - button - climate - diagnostics + - number - sensor ha_integration_type: device ha_dhcp: true @@ -19,10 +21,25 @@ ha_dhcp: true The **Palazzetti** {% term integration %} integrates the [Palazzetti](https://palazzettigroup.com/) stoves equipped with a [Connection Box](https://palazzettigroup.com/research-and-development/app/). -It is accessing the device's local API. +It is accessing the device's local API. [WPalaControl](https://github.com/Domochip/WPalaControl) +devices have a compatible API and are supported by this integration too. + +## Prerequisites + +- You need the Connection Box bridge or WPalaControl to be added to a network accessible to Home Assistant. +- You either need to: + - know the IP address or hostname of the Connection Box or WPalaControl on the network. + - or configure the Connection Box or WPalaControl with DHCP on the same network as Home Assistant. {% include integrations/config_flow.md %} +{% configuration_basic %} +Host: + description: "The IP address or hostname of your Connection Box. You can find it in your router or in the Palazzetti app under **Settings** > **Diagnostic information** > **Ethernet** or **Wifi**." + required: true + type: string +{% endconfiguration_basic %} + ## Climate The Palazzetti integration offers a climate entity that allows you to read the @@ -38,11 +55,14 @@ This integration supports the following actions (see [Climate](/integrations/cli - `heat` for heating mode - `off` to turn the stove off - [`set_fan_mode`](/integrations/climate/#action-climateset_fan_mode) - - `Silent` let the stove run in silent mode - - `1` to `5` increasing fan speeds + - `0` to `5` increasing fan speeds - `High` the highest available fan speed - `Auto` let the stove set the optimal fan speed +## Buttons + +For the stoves that support it, this integration provides a Silent button to trigger the silent mode. + ## Numbers When the appliance supports it, the Palazzetti integration offers control over the following elements: @@ -103,4 +123,61 @@ Temperature sensors: Fuel Sensors: - Pellet quantity (kg - cumulative quantity consumed) -- Pellet level (cm - current level) \ No newline at end of file +- Pellet level (cm - current level) + +## Possible use-cases + +- Control the operations, temperature, and fans. +- Get alerts when the pellet level is low or empty, or on stove errors. +- Auto start or stop the stove based on presence. + +## Automations + +Get started quickly with these automation examples. + +### Automatically lower the temperature when the last person leaves home + +{% details "Example YAML configuration" %} + +{% raw %} + +```yaml +alias: "Lower the temperature when last person leaves" +description: "Lower the temperature when last person leaves the home" +mode: single +triggers: + - trigger: state + entity_id: + - zone.home + to: 0 +actions: + - action: climate.set_temperature + data: + temperature: 16 + target: + entity_id: climate.my_stove +``` + +{% endraw %} {% enddetails %} + +## Known limitations + +This integration does **not** yet support the following features and sensors: + +- Light and Door entities on stove models equipped with them. +- Fan control other than the main one. +- Combustion power control. + +## Troubleshooting + +{% details "On and off switch does not always work" %} +During certain operations, it is not possible to turn the stove on or off. This action is available +only when the status of the stove is in one of the following states: `off`, `off_timer`, `burning`, `burning_mod`, `cool_fluid`, +`clean_fire`, `cooling`, `ecomode`, `firewood_finished`. +{% enddetails %} + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/peblar.markdown b/source/_integrations/peblar.markdown index 0ef650f7e64..ee403458268 100644 --- a/source/_integrations/peblar.markdown +++ b/source/_integrations/peblar.markdown @@ -4,6 +4,7 @@ description: Instructions on how to integrate Peblar Rocksolid EV Charger with H ha_category: - Car - Energy + - Update ha_release: 2025.1 ha_iot_class: Local Polling ha_config_flow: true @@ -11,12 +12,17 @@ ha_codeowners: - '@frenck' ha_domain: peblar ha_platforms: + - binary_sensor + - button + - diagnostics + - number - select - sensor + - switch - update ha_integration_type: device ha_zeroconf: true -ha_quality_scale: bronze +ha_quality_scale: platinum --- The Peblar {% term integration %} integrates your [Peblar Rocksolid EV Charger] @@ -90,7 +96,7 @@ web interface for more information about the error or warning. {% important %} These binary sensors are disabled by default. If you want to use them, you need -to enable first. See the [enabling or disabling entities](/common-tasks/general/#enabling-or-disabling-entities) +to enable them first. See the [enabling or disabling entities](/common-tasks/general/#enabling-or-disabling-entities) documentation for information on how to do this. {% endimportant %} @@ -107,13 +113,13 @@ the charger. The following buttons are available: {% important %} These buttons are disabled by default. If you want to use them, you need -to enable first. See the [enabling or disabling entities](/common-tasks/general/#enabling-or-disabling-entities) +to enable them first. See the [enabling or disabling entities](/common-tasks/general/#enabling-or-disabling-entities) documentation for information on how to do this. {% endimportant %} ### Numbers -This integration provides a singles number entity: **Charge limit**. +This integration provides a single number entity: **Charge limit**. Using this entity, you can set the maximum current the charger can provide to your electric vehicle. The value of this entity is in amperes (A). @@ -250,22 +256,28 @@ as a device. {% important %} The sensors marked with \*\* are disabled by default. If you want to use them, -you need to enable first. See the [enabling or disabling entities](/common-tasks/general/#enabling-or-disabling-entities) +you need to enable them first. See the [enabling or disabling entities](/common-tasks/general/#enabling-or-disabling-entities) documentation for information on how to do this. {% endimportant %} ### Switches -This integration provides a single switch entity: **Force single phase**. +This integration provides two switch entities: -This switch can be used to force the charger to use a single phase for charging -your electric vehicle. This can be useful if you want to limit your current -draw from the charger to a single phase, for example, to prevent overloading -your electrical installation. +- **Charge**: This switch allows you to start or stop/pause the charging of + your electric vehicle. This can be helpful if you want to temporarily stop + charging your electric vehicle, for example, to avoid charging during + expensive peak hours. +- **Force single phase**: This switch can be used to force the charger to use a + single phase for charging your electric vehicle. This can be useful if you + want to limit your current draw from the charger to a single phase, for + example, to prevent overloading your electrical installation. -Note that this switch is only available if your charger is connected to multiple -phases. If your charger is connected to a single-phase power source, this switch -will not be created. +{% note %} +The **Force single phase** switch is only available if your charger is +connected to multiple phases. If your charger is connected to a single-phase +power source, this switch will not be created. +{% endnote %} ### Updates @@ -323,7 +335,7 @@ automation: - alias: "Peblar software update available" triggers: - trigger: state - entity_id: sensor.peblar_firmware + entity_id: update.peblar_firmware from: "off" to: "on" @@ -344,7 +356,7 @@ detects an error or raises a warning. ```yaml automation: - - alias: "Peblar software update available" + - alias: "Peblar issue detected" triggers: - trigger: state entity_id: @@ -372,15 +384,15 @@ automation: Not all functionality of the Peblar charger is available through this integration. The following limitations are known: -- The Peblar APIs currently aren't communicating the charger is awaiting +- The Peblar APIs currently aren't communicating that the charger is awaiting authentication (for example, using an RFID card) before it can start - charging. As a result, you will see an suspended charging status in Home + charging. As a result, you will see a suspended charging status in Home Assistant, while the charger is awaiting authentication. - Home Assistant uses and manages the charger's REST API. This means that the use of this integration will enable the REST API on the charger automatically. It is possible to use the REST API directly in parallel with this integration. -- Peblar is also sold as white-label products, like the [CoolBlue BlueBuilt](https://www.coolblue.nl/en/charging-stations/our-charging-stations). +- Peblar is also sold as white-label products, like the [CoolBlue BlueBuilt](https://www.coolblue.nl/en/charging-stations/our-charging-stations), [Eneco Connectric®](https://www.eneco.nl/campagnes/laadpalen/) or [Shell Recharge](https://www.shell.nl/b2b-business/shell-fleet-solutions/electric-charging/at-home-ev-charging.html#thuisladers). This integration is tested with the Peblar branded products, and it is unknown if it works with white-label products. diff --git a/source/_integrations/pglab.markdown b/source/_integrations/pglab.markdown new file mode 100644 index 00000000000..65f50d672e7 --- /dev/null +++ b/source/_integrations/pglab.markdown @@ -0,0 +1,68 @@ +--- +title: PG LAB Electronics +description: Instructions on how to integrate PG LAB Electronics with Home Assistant. +ha_category: + - Cover + - Switch + - Sensor +ha_release: '2025.3' +ha_iot_class: Local Push +ha_config_flow: true +ha_codeowners: + - '@pglab-electronics' +ha_domain: pglab +ha_platforms: + - cover + - switch + - sensor +ha_integration_type: integration +ha_quality_scale: bronze +--- + +The **PG LAB Electronics** {% term integrations %} allows you to control [PG LAB Electronics](https://www.pglab.dev/) devices in Home Assistant. + +## Supported devices + +- [E-BOARD](https://www.pglab.dev/shop/p/e-board): Controller board to interface I2C devices by a local LAN connection. +- [E-RELAY](https://www.pglab.dev/shop/p/e-relay): 8 Channels relay board controlled by I2C connection. +- [E-SWITCH]: Coming soon + +Each E-BOARD device can be connected to a maximum of 8 E-RELAY boards. E-BOARD can control +up to 64 relays or 32 shutters or a mixed configuration. + +## Prerequisites + +- MQTT broker and the [MQTT integration](/integrations/mqtt/) set up in Home Assistant. +- PG LAB Electronics devices MQTT setting configured to communicate with the MQTT broker. + +Once the device is connected to your MQTT broker, it should be discovered by Home Assistant. +Add PG LAB Electronics integration. + +### Device configuration + +Configure each PG LAB Electronics devices following these steps: + +1. Power the device and connect it to your local network. +2. From your router, get the IP address of your device (for example: 192.168.1.7). +3. Connect to the internal device web server with a web browser (**don't** use 'https://...', instead, connect to 'http://192.168.1.7'). +4. Change the default device name. Use a unique, meaningful name such as E_Board_Office, or E_Board_Garden. + - **Note:** Every device **MUST** have a unique name. +5. Set up the MQTT broker address, port number, username, and password. +6. Save the configuration and restart the device. + +{% include integrations/config_flow.md %} + +## Supported features + +PG LAB Electronics relays, sensors, and switches are supported. + +- PG LAB Relays will be added as Home Assistant `switch` entities. +- PG LAB Shutters will be added as Home Assistant `cover` entities. +- PG LAB Sensors will be added as Home Assistant `sensor` entities. +- The integration will also create diagnostic status sensors, with device different information. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/philips_js.markdown b/source/_integrations/philips_js.markdown index 96711f088f1..94bac4dbaf5 100644 --- a/source/_integrations/philips_js.markdown +++ b/source/_integrations/philips_js.markdown @@ -24,10 +24,24 @@ ha_integration_type: integration The `philips_js` platform allows you to control Philips TVs which expose the [jointSPACE](http://jointspace.sourceforge.net/) JSON-API. -If your TV responds to `http://IP_ADDRESS_OF_TV:1925/system` then this integration can be used. In the response, you should also be able to see the version of the API the TV uses (`"api_version":{"Major":6...`). -For older TVs follow instructions on how to activate the API and if your model is supported [here](http://jointspace.sourceforge.net/download.html). Note that not all listed, jointSPACE-enabled devices will have JSON-interface running on port 1925. This is true at least for some models before year 2011. -Also, note that version 6 of the API needs to be authenticated by a PIN code displayed on your TV. +## Prerequisites + +Before adding the integration, it is worth checking if this integration works for you. As there are differences between TVs, you may need to try different addresses: + +- Some TVs use `https://` and port 1926, other TVs use `http://` and port 1925. + +### Check if this integration can be used + +1. Check if your TV responds to one of the following combinations: + - `http://IP_ADDRESS_OF_TV:1925/system` + - `https://IP_ADDRESS_OF_TV:1926/system` +2. If you get a response, then this integration can be used. + - In the response, you should also be able to see the version of the API the TV uses (`"api_version":{"Major":6...`). +3. For older TVs, follow instructions on how to activate the API and if your model is supported [here](http://jointspace.sourceforge.net/download.html). + - Note that not all listed, jointSPACE-enabled devices will have JSON-interface running on port 1925. + - This is true at least for some models before year 2011. + - Also, note that version 6 of the API needs to be authenticated by a PIN code displayed on your TV. {% include integrations/config_flow.md %} diff --git a/source/_integrations/picnic.markdown b/source/_integrations/picnic.markdown index d2d924482b1..2e3db91d159 100644 --- a/source/_integrations/picnic.markdown +++ b/source/_integrations/picnic.markdown @@ -8,6 +8,7 @@ ha_iot_class: Cloud Polling ha_config_flow: true ha_codeowners: - '@corneyl' + - '@codesalatdev' ha_domain: picnic ha_platforms: - sensor diff --git a/source/_integrations/pinecil.markdown b/source/_integrations/pinecil.markdown index abea23d09a1..8a598e0611c 100644 --- a/source/_integrations/pinecil.markdown +++ b/source/_integrations/pinecil.markdown @@ -2,8 +2,12 @@ title: Pinecil description: Connect and control your Pinecil devices using the IronOS integration ha_category: + - Binary sensor + - Button - Number + - Select - Sensor + - Switch - Update ha_release: 2024.8 ha_domain: pinecil @@ -14,8 +18,13 @@ ha_codeowners: - '@tr4nt0r' ha_config_flow: true ha_platforms: + - binary_sensor + - button + - diagnostics - number + - select - sensor + - switch - update ha_iot_class: Local Polling --- diff --git a/source/_integrations/piper.markdown b/source/_integrations/piper.markdown index 42d413a1ca4..cfeec57cc98 100644 --- a/source/_integrations/piper.markdown +++ b/source/_integrations/piper.markdown @@ -13,6 +13,7 @@ ha_codeowners: - '@synesthesiam' ha_config_flow: true ha_platforms: + - assist_satellite - binary_sensor - conversation - number diff --git a/source/_integrations/plugwise.markdown b/source/_integrations/plugwise.markdown index b72b652da89..3f209efb304 100644 --- a/source/_integrations/plugwise.markdown +++ b/source/_integrations/plugwise.markdown @@ -1,6 +1,6 @@ --- title: Plugwise -description: Plugwise Smile platform integration. +description: Plugwise Gateway platform integration. ha_category: - Binary sensor - Button @@ -14,7 +14,6 @@ ha_release: 0.98 ha_codeowners: - '@CoMPaTech' - '@bouwew' - - '@frenck' ha_config_flow: true ha_domain: plugwise ha_zeroconf: true @@ -28,58 +27,138 @@ ha_platforms: - sensor - switch ha_integration_type: hub +ha_quality_scale: platinum --- -This enables [Plugwise](https://www.plugwise.com) integrations with a central Smile gateway to be integrated. This integration talks locally to your **Smile** interface, and you will need its password and IP address. -The platform supports [Anna](https://www.plugwise.com/en_US/products/anna), [Adam (zonecontrol)](https://www.plugwise.com/en_US/zonecontrol), [P1](https://www.plugwise.com/en_US/products/smile-p1) Smile products and the Stretch products (not in sale). See below list for more details. +[Plugwise](https://www.plugwise.com) provides smart home devices that allow you to monitor and control your climate, energy (including gas) consumption, and energy production. The energy information can be used for the [energy dashboard](/home-energy-management). -Platforms available - depending on your Smile and setup include: - - - `climate` (for the stand-alone Anna, for Adam, a climate entity is shown for each zone containing devices like an Anna or another type of wired-thermostat, Jip or Lisa combined with one or more Tom/Floor devices) - - `binary_sensor` (for showing the status of e.g. domestic hot water heating or secondary heater) - - `button` (for the Adam and the non-legacy Anna and P1 gateways) - - `number` (for changing a boiler setpoint, a temperature offset) - - `sensor` (for all relevant products including the Smile P1) - - `select` (for changing a thermostat schedule, a regulation mode (Adam only)) - - `switch` (for Plugs connected to Adam, or Circles and Stealths connected to a Stretch) +This integration supports one or multiple Plugwise Gateways connected to your network. You can connect to these gateways using your browser, the Plugwise App, or Home Assistant. There are 4 [supported](#supported-devices) types of gateways: +- Full zonecontrol using the [Adam](https://www.plugwise.com/en_US/zonecontrol) using [additional devices](#adam) such as zone thermostats, smart valves and smart-plugs. +- A stand-alone smart thermostat called [Anna](https://www.plugwise.com/en_US/products/anna). +- For power and gas-usage monitoring there is a device simply called the [P1](https://www.plugwise.com/en_US/products/smile-p1). +- Although no longer sold, there also is support for Stretch, a gateway to create network connectivity for their older power products. ## Pre-requisites -The Plugwise Smile(s) in your network will be automatically discovered and shown on the integrations dashboard. All you need is the Smile ID as its password, which is an 8-character string printed on the sticker on the bottom of your Smile. Repeat this for each individual Smile. +Plugwise gateways on your network are automatically discovered and displayed on the integrations dashboard. Each gateway requires its unique 8-character ID, found on a sticker at the bottom, as its password. Repeat this process for each gateway. {% include integrations/config_flow.md %} {% configuration_basic %} Host: - description: "The hostname or IP address of your Smile. For example: `192.168.1.25`. You can find it in your router or in the Plugwise app using the **Settings** icon (☰) -> **System** -> **Network**. If you are looking for a different device in the Plugwise App, on the main screen first select **Gateways** -> the Smile of your choice, and then follow the previous instruction. Normally, the Smile(s) are automatically discovered, and you don't have to provide the hostname or IP address." + description: "The hostname or IP address of your gateway. For example: `192.168.1.25`. You can find it in your router or in the Plugwise app using the **Settings** icon (☰) -> **System** -> **Network**. In the Plugwise App, to locate a specific device, select **Gateways** on the main screen, choose your desired gateway, and then follow the previous instructions. Normally, the gateway(s) are automatically discovered, and you don't have to provide the hostname or IP address." Username: - description: "Username to log in to the Smile. This should be just `smile` - or `stretch` for a Stretch." + description: "Username to log in to the gateway. This should be 'smile' for most devices, or 'stretch' for a Stretch." Password: - description: "This is the password (i.e. Smile ID) printed on the sticker on the back of your Smile (i.e. Adam, Smile-T, or P1) and should be 8 characters long." + description: "Each gateway requires its unique 8-character ID, found on a sticker at the bottom, as its password." {% endconfiguration_basic %} -### Further configuration +### Schedule Management -For a thermostat, the active schedule can be deactivated or reactivated via the climate card. Please note, that when no schedule is active, one must first be activated in the Plugwise App. Once that has been done, the Plugwise Integration can manage future operations. +1. **Initial Setup**: First, activate a schedule using the Plugwise App or browser. +2. **Control via Home Assistant**: + - Use the climate card to activate/deactivate schedules. + - 'Auto' mode indicates the schedule is active. + - 'Heat', 'Cool' or 'Heat_cool' modes signify the schedule is inactive. +3. **Changing Schedules**: Use the thermostat [select](#change-climate-schedule) entity. -Auto means the schedule is active, and Heat means it's not active. The active thermostat schedule can be changed via the connected thermostat select entity. Please note that only schedules with two or more schedule points will be shown as select options. +{% note %} +Only schedules with two or more schedule points will appear as options. +{% endnote %} -## Entities +## Supported functionality -This integration will show all Plugwise devices (like hardware devices, multi-thermostat climate-zones, and virtual switchgroups) present in your Plugwise configuration. In addition, you will see a Gateway device representing your central Plugwise gateway (i.e., the Smile Anna, Smile P1, Adam or Stretch). +This integration displays all Plugwise devices in your configuration, including hardware devices, multi-thermostat climate zones, and virtual switch groups. Additionally, a device representing your Plugwise gateway (e.g., Adam, Smile-T, or P1) will be visible. -For example, if you have an Adam setup with a Lisa named 'Living' and a Tom named 'Bathroom', these will show up as individual devices. The heating/cooling device connected to your Smile will be shown as 'OpenTherm' or 'OnOff', depending on how the Smile communicates with the device. If you have Plugs (as in, pluggable switches connecting to an Adam) those will be shown as devices as well. +For example, if you have an Adam setup with a Lisa named 'Living' and a Tom named 'Bathroom', these will show up as individual devices. The heating/cooling device connected to your gateway will be shown as 'OpenTherm' or 'OnOff', depending on how the gateway communicates with the device. If you have Plugs (as in, pluggable switches connecting to an Adam) or Aqara Smart Plugs, those will be shown as devices as well. -Under each device there will be entities shown like binary_sensors, sensors, etc. depending on the capabilities of the device: for instance centralized measurements such as 'power' for a P1, 'outdoor_temperature' on Anna or Adam will be assigned to your gateway device. Heating/cooling device measurements such as 'boiler_temperature' will be assigned to the OpenTherm/OnOff device. +Each device will list entities such as `binary sensors`, `sensors`, etc., depending on its capabilities: for instance, centralized measurements such as `power` for a P1, `outdoor_temperature` on Anna or Adam will be assigned to your gateway device. Heating/cooling device measurements such as `boiler_temperature` will be assigned to the OpenTherm/OnOff device. + +### Climate entities + +#### Binary sensors + +Depending on your setup, one or more binary sensors will provide the state of your connected elements. Examples include: + +- **Cooling** & **Heating** + - **Description**: Indicates if your system is actively cooling or heating. +- **DHW State** + - **Description**: Indicates active heating of domestic hot water. +- **Flame State** + - **Description**: If gas is being consumed by your heater, i.e., firing for space or DHW-heating. + +#### Numbers + +Modifying specific number-based settings allows you to fine-tune your setup. + +- **Maximum boiler temperature setpoint** + - **Description**: Adjust the maximum temperature for secondary heater. +- **Domestic hot water setpoint** + - **Description**: Adjust the temperature for your domestic hot water. +- **Temperature offset** + - **Description**: Fine-tune the perceived temperature. + +#### Sensors + +A generous number of sensors is provided for your climate setup. Examples include: + +- **Setpoint** + - **Description**: The setpoint for the current zone (Adam) or generic (Anna). +- **Indoor temperature** + - **Description**: For Anna, Lisa or Jip this will show the temperature measured at the specific thermostat. +- **Outdoor temperature** + - **Description**: The temperature your climate gateway retrieves online. +- **Outdoor air temperature** + - **Description**: The temperature reported by the sensor present in the outdoor unit of your HVAC system, such as a heat pump. + +#### Selects + +- **Thermostat schedule** + - **Description**: Select between available schedules, generic (Anna) or for the current zone (Adam). + - **Remark**: Please check the [further configuration](#further-configuration) for requirements on configuring schedules. + +#### Switches + +- **Cooling** + - **Description**: Toggle if cooling should be enabled. +- **DHW Comfort Mode** + - **Description**: Toggle comfort mode for domestic hot water. + +### Power and gas entities + +#### Sensors + +A generous number of sensors is provided. Examples include: + +- **Electricity consumed point** + - **Description**: Electricity (in Watt) consumed currently by a phase (P1) or a plug. + - **Gateways**: Adam, P1 or Stretch. +- **Gas Consumed Interval** + - **Description**: The gas consumed since the last interval. + - **Gateways**: P1. +- **P1 Net Electricity Point** + - **Description**: Your netto electricity use at this time, can be negative when producing energy, i.e. though solar panels. + - **Gateways**: P1. +- **P1 Electricity Produced off-peak cumulative** + - **Description**: The total produced electricity during off-peak. + - **Gateways**: P1. + +#### Switches + +- **Relay** + - **Description**: Switch a plug on or off + - **Gateways**: Adam, P1 or Stretch. ## Data updates -The interval which the integration fetches data from the Smile depends on the device: +The interval at which the integration fetches data from the gateway depends on the device-type. -- Power entities, such as the P1, will be refreshed every 10 seconds. -- Climate entities will be refreshed every 60 seconds. -- Stretch entities will be refreshed every 60 seconds. +|Device-type|Interval| +--- | --- +| Climate entities |60 seconds| +| Energy and gas entities |10 seconds| +| Stretch entities |60 seconds| ## Removing the integration @@ -89,180 +168,261 @@ This integration follows standard integration removal. No extra steps are requir This will also remove all connected Adam devices (such as Anna, Tom or Lisa) or connected Adam/Stretch plugs. -### Actions +## Actions -#### Update Smile data +### Climate control actions -Forced update of data from your Smile can be triggered by calling the generic `homeassistant.update_entity` action with your Smile entity as the target. +For information on how to use the available actions, please refer to the [climate](/integrations/climate#climate-control-actions) integration. + +Available actions to all climate gateways: `climate.set_temperature`, `climate.set_hvac_mode`, and `climate.set_preset_mode`. + +Additional actions available for Adam: `climate.turn_on`, `climate.turn_off`, and `climate.toggle`. + +{% note %} +The additional actions will change Adam's **regulation mode** (the HVAC system mode) to either on or off, affecting the operation of **all** connected thermostats. Turning on activates the previously selected heating or cooling mode. +{% endnote %} + +### Schedule select action + +Available action: `select.select_option` + +{% tip %} +The available schedules depend on the [schedules](#schedule-management) you have configured. +{% endtip %} + +### HVAC modes + +The following HVAC modes are available: + +- `auto`: Active schedule – The thermostat changes presets/setpoints according to the schedule. +- `cool or heat`: No active schedule – The system is manually set to cooling or heating mode, activating based on room temperature relative to the thermostat setpoint. + +For Adam: + +- `off`: Regulation is set to off – The HVAC system does not heat or cool, but the domestic hot water heating function (if available) remains active. + +If you have an Anna with Elga: + +- `heat_cool`: No active schedule – The system is in automatic cooling or heating mode, using the active preset or manually set temperature to control the HVAC system. + +{% note %} +The last schedule that was active is determined the same way long-tapping the top of an Anna works. +{% endnote %} + +## Gateway Modes + +The Adam Gateway supports multiple operational modes that provide flexibility in managing your heating and cooling systems, allowing you to tailor your system's behavior to your needs. + +- Normal Mode + - **Description**: This is the default operational mode, operating based on the active schedules and presets configured. Ideal for day-to-day operations, ensuring optimal comfort and energy efficiency. + - **Remarks**: Smart thermostats and zone controls continue their self-regulating behavior, including pre-heating or cooling based on their forecasted requirements. +- Pause Mode + - **Description**: Pause mode temporarily halts the heating or cooling operations, disabling all schedules and temperature control. + - **Remarks**: Useful for scenarios where no climate control is needed, such as extended periods when doors or windows are open for ventilation or maintenance work is ongoing. The system remains idle until switched back to Normal mode or another operational state. +- Vacation Mode + - **Description**: Vacation mode optimizes the system for prolonged absence, reducing energy consumption while maintaining basic functionality. Heating or cooling is set to a minimal level to prevent freezing (in winter) or excessive heat (in summer). + - **Remarks**: Ideal for extended trips or holidays when the house will be unoccupied. Active schedules are overridden until the mode is switched back to Normal. + +{% tip %} +For best results, ensure your schedules and presets are appropriately configured for Normal mode and align Vacation mode settings with your energy-saving goals. +{% endtip %} + +## Examples + +### Energy-Based Automations + +A great example of automating charging your car from the energy data the P1 provides can be found in the [Energy Management System for Car Charging](https://community.home-assistant.io/t/energy-management-system-for-car-charging-surplus-trip-calendar/744069) blueprint. + +### Climate-Based Automations + +When using smart zone controls or thermostats, relying heavily on additional automations may interfere with their ability to accurately predict warm-up or cool-down times. Instead, leverage their preset modes to optimize energy efficiency and reduce environmental impact, as well as your energy bills. Below are some examples to help you get started. + +For advanced customization and full manual control, consider using a blueprint like [Advanced Heating Control](https://community.home-assistant.io/t/advanced-heating-control/469873/1). If you choose this route, we recommend disabling your Plugwise schedules to ensure the blueprint takes full control. + +#### Presence-based preset mode + +The example automation below adjusts the active preset to 'away' when no one is home, reducing unnecessary heating or cooling. For instance, if you unexpectedly head to the office on a work-from-home day, the system will conserve energy. The active schedule will later override the 'away' mode, or you can create a complementary automation to activate another preset when someone returns home. ```yaml -# Example script change the temperature -script: - force_adam_update: - sequence: - - action: homeassistant.update_entity - target: - entity_id: climate.living_room +automation: + alias: "Set climate to away when nobody is home" + triggers: + # When either occupant leaves for more than 15 minutes + - trigger: state + entity_id: + - person.mom + - person.dad + to: not_home + for: + minutes: 15 + conditions: + # If Anna is using the normal "home" preset + - condition: state + entity_id: climate.anna + attribute: preset_mode + state: home + # And nobody is home + - condition: state + entity_id: person.mom + entity_id: person.dad + state: not_home + actions: + # Change Anna to Away + - action: climate.set_preset_mode + data: + preset_mode: away + target: + entity_id: climate.anna ``` -#### Reboot the Plugwise gateway +#### Calendar-based Vacation Mode -action: `button.press` +The example automations below will change the gateway mode of your Adam to Vacation mode (and back) assuming you have a [calendar](/integrations/calendar) integration with a specific calendar set up for events when nobody is at home. ```yaml -# Example script change the thermostat schedule -script: - reboot_gateway: - sequence: - - action: button.press - target: - entity_id: button.adam_reboot -``` - -#### Set HVAC mode - -action: `climate.set_hvac_mode` - -Available options include `off` (Adam only) `auto`, `cool`, `heat`, and `heat_cool` (Anna with Elga only). - -The meaning of `off` is that the Adam regulation is set to off. This means that the connected HVAC-system does not heat or cool, only the domestic hot water heating function, when available, is active. - -The meaning of `cool` or `heat` is that there is no schedule active. For example, if the system is manually set to cooling- or heating-mode, the system will be active if the room temperature is above/below the thermostat setpoint. - -The meaning of `heat/cool` is that there is no schedule active. For example, if the system is in automatic cooling- or heating-mode, the active preset or manually set temperature is used to control the HVAC system. - -The meaning of `auto` is that a schedule is active and the thermostat will change presets/setpoints accordingly. - -The last schedule that was active is determined the same way long-tapping the top of Anna works. - -Example: - -```yaml -# Example script climate.set_hvac_mode to auto = schedule active -script: - lisa_reactivate_last_schedule: - sequence: - - action: climate.set_hvac_mode - target: - entity_id: climate.living_room - data: - hvac_mode: auto -``` - -#### Turn on / turn off - -action: `climate.turn_off`, `climate.turn_on` (Adam only) - -These actions will switch the Adam regulation mode (= HVAC system mode) to off or on, affecting the operation of all connected thermostats. -`climate.turn_on` will activate the previously selected heating or cooling mode. - -Example: - -```yaml -# Example script climate.turn_off -script: - turn_heating_on: - sequence: - - action: climate.turn_off - target: - entity_id: climate.bios -``` - -#### Change climate schedule - -action: `select.select_option` - -```yaml -# Example script change the thermostat schedule -script: - lisa_change_schedule: - sequence: - - action: select.select_option - target: - entity_id: select.bios_thermostat_schedule - data: - option: "Regulier" -``` - -#### Change boiler setpoint - -action: `number.set_value` - -```yaml -# Example script change the boiler setpoint -script: - change_max_boiler_tempeture_setpoint: - sequence: - - action: number.set_value - target: - entity_id: number.opentherm_max_boiler_temperature_setpoint - data: - value: 60 -``` - -#### Set temperature - -action: `climate.set_temperature` - -Example: - -```yaml -# Example script change the temperature -script: - anna_set_predefined_temperature: - sequence: - - action: climate.set_temperature - target: - entity_id: climate.anna - data: - temperature: 19.5 -``` - -#### Set preset mode - -action: `climate.set_preset_mode` - -Available options include: `home`, `vacation` (Anna only), `no_frost`, `asleep` & `away`. - -Example: - -```yaml -# Example script changing the active (or currently set by schedule) preset -script: - anna_activate_preset_asleep: - sequence: - - action: climate.set_preset_mode - data: - preset_mode: asleep +automation: + - triggers: + - trigger: calendar + event: start + # Calendar when your home is vacant + entity_id: calendar.vacancy + actions: + # Change Adam operational mode + - action: select.select_option + data: + option: "vacation" + target: + entity_id: select.adam_gateway_mode + - triggers: + - trigger: calendar + event: end + # Calendar when your home is vacant + entity_id: calendar.vacancy + # Offset by some time to allow to pre-condition + offset: -04:00:00 + actions: + # Change Adam operational mode + - action: select.select_option + data: + option: "full" + target: + entity_id: select.adam_gateway_mode ``` ### Supported devices -The current implementation of the Python module (Plugwise-Smile) includes: +### Adam -Adam (zone_control) with On/Off, OpenTherm, and Loria/Thermastage heating and cooling support: +A complete zone control system also known as [Adam HA](https://www.plugwise.com/en_US/zonecontrol), supporting: - - v3.x - - v2.3 +- On/Off, OpenTherm heating and cooling support. +- Running firmwares v3.x or v2.3. +- Additional devices: + - Zone thermostats such as Lisa or Anna (see warning below on Anna), + - A temperature sensor, Jip, + - Valve controllers called Floor or Tom, + - An under-floor heating controller Koen (note: a Koen always comes with a Plug, which is the active part), + - Smart switches, either Plug or Aqara Smart Plug. - - Devices supported are Anna, Lisa, Jip, Floor, Tom, Plug, Aqara Smart Plug, and Koen (a Koen always comes with a Plug, the active part) +{% note %} +You can also use the Adam SA (Stand-alone, no Zigbee stick present) to make your regular OpenTherm thermostat smart. +{% endnote %} -Anna (thermostat) with OnOff, OpenTherm heating, and Elga and Loria/Thermastage with heating and cooling support: +### Anna - - v4.x - - v3.x - - v1.x +A [smart thermostat](https://www.plugwise.com/en_US/products/anna), supporting: -On the Elga, the cooling-mode can only be turned on, or off, via a switch present on the device, not via a toggle in the Plugwise App. -Please make sure to reload the Plugwise integration after the cooling-mode-switch is turned off after being on, or the other way around. This will ensure that the Plugwise integration is being adapted to the change in function of the Elga. +- On/Off, OpenTherm heating and cooling support. +- Running firmware v4.x, v3.x or v1.x. -Smile P1 (DSMR): +### P1 (DSMR) - - v4.x - - v3.x - - v2.x +A [P1](https://www.plugwise.com/en_US/products/smile-p1) smart meter monitor for the single- or multi-phase grid power connection to your home including gas usage monitoring. Running firmware v4.x, v3.x or v2.x. -Stretch (power switches): +### Stretch (end-of-sale) + +For controlling and monitoring legacy power switches, such as the Circles or Stealths, with v3.x or v2.x Stretch firmware. + +### Unsupported devices + +#### Anna P1 + +A smart thermostat [combined](https://www.plugwise.com/en_US/products/anna-p1) with an energy monitor can transform the way you manage energy. If your solar setup generates surplus energy and you're charged for it, this combination ensures that excess solar power is redirected efficiently. Powering your heat pump for instance to make the most of renewable energy. Do you have a setup like this? We’d love to hear your experience! + +#### Stick + +Plugwise formerly sold power-based products comprised of a USB stick, as the controller, and smart plugs (amongst a few other items). This integration does not support the USB-stick. Reuse of the these products, such as Circles and Stealths using a Stretch or an Adam is supported. Work for USB support is in development by the community, but not ready to become a formal Home Assistant integration just yet. - v3.x - v2.x + +## Troubleshooting + +### Accessing the local device + +If you need to configure the gateway directly, without using the Plugwise App, you can find the link to your device by: + +1. Go to {% my integrations title="**Settings** > **Devices & services**" %}, and select your integration. +2. If you have more than one Plugwise gateway, select the one to configure. +3. Select the gateway device, this should be called 'Adam', 'Stretch' or contain 'Smile' in its name. +4. On the integration entry, choose to open the configuration URL left of the {% icon "mdi:dots-vertical" %} icon. +5. A new window/tab will open, enter 'smile' (or 'stretch') as the username and the ID, from the sticker on the back, as the password. +6. Consult the manual or click the 'search' button on the [Plugwise Support](https://plugwise.com/support/) page for interactive help. + +### Adjusting the update interval + +Please note that the [default intervals](#data-updates) are considered best practice and according to how Plugwise normally updates their data. Updating too frequently may induce considerable load on your gateway(s) resulting in unexpected results or missing data. + +{% include common-tasks/define_custom_polling.md %} + +### Diagnostic data + +If you need to create an issue to report a bug or want to inspect diagnostic data, use the below method to retrieve diagnostics: + +1. Go to {% my integrations title="**Settings** > **Devices & services**" %}, and select your integration. +2. If you have more than one Plugwise gateway, select the gateway that is experiencing issues. +3. Select the gateway device, this should be called 'Adam', 'Stretch' or contain 'Smile' in its name. +4. On the integration entry, select the {% icon "mdi:dots-vertical" %}. + - Then, select **Download diagnostics** and a JSON file will be downloaded. +5. You can inspect the downloaded file or, when requested, upload it to your issue report. + +### Rebooting your gateway + +For each gateway, there will be a reboot button available in your integration. + +1. Go to {% my integrations title="**Settings** > **Devices & services**" %}, and select your integration. +2. If you have more than one Plugwise Smile, select the gateway that is experiencing issues. +3. Select the gateway device, this should be called 'Adam', 'Stretch' or contain 'Smile' in its name. +4. On the integration entry, look for the 'Reboot' button to press in the **Configuration** section. + +## Known limitations + +### Schedule configuration and pre-requisites + +Creation, modification or deleting of climate schedules is not supported through this integration. We recommend using the Plugwise App or visit the local device to configure schedules. See [accessing the local device](#accessing-the-local-device) above on how to access the local device from Home Assistant. + +To display your schedule as a valid `select` option for this integration, ensure that the schedule has a minimal of two schedule points. + +### Anna connected to Adam + +If you are using your Anna as part of your Adam zone control system, it becomes a zone thermostat, and cannot be configured as a smart thermostat. The integration will not discover your Anna or allow manual configuration. + +### Anna with Elga + +The cooling mode can only be toggled via a **physical switch** on the device (not through a toggle in the Plugwise App or using Home Assistant). + +The change in cooling mode should be detected by Home Assistant. If not, please try to **reload** the Plugwise integration as indicated below and report your findings. + +1. Create an issue including your [diagnostic data](#diagnostic-data). +2. Go to {% my integrations title="**Settings** > **Devices & services**" %}, and select your integration. +3. On the "**Hubs**" page, use the {% icon "mdi:dots-vertical" %} icon next to your Anna and choose "**Reload**". + +### Vacation preset + +The `vacation` preset is only available on an Anna. Adam has a vacation-mode (called Action in the Plugwise App) that disables the active schedule and sets the vacation-preset for all zones. + +Also, there's a pause-mode that disables the active schedule and sets the away-preset for all zones. + +### Idling climate actions + +You can only stop climate actions on an Adam, see [turn on / turn off](#turn-on--turn-off). An alternative could be to adjust your [preset mode](#set-preset-mode) to `no_frost` to stop any heating actions. diff --git a/source/_integrations/powerfox.markdown b/source/_integrations/powerfox.markdown index f363d0f62d6..90227136b58 100644 --- a/source/_integrations/powerfox.markdown +++ b/source/_integrations/powerfox.markdown @@ -11,8 +11,11 @@ ha_codeowners: - '@klaasnicolaas' ha_domain: powerfox ha_platforms: + - diagnostics - sensor ha_integration_type: integration +ha_quality_scale: silver +ha_zeroconf: true --- The **Powerfox** {% term integration %} allows you to gather data from your [Poweropti](https://shop.powerfox.energy/collections/frontpage) devices, by using their cloud API and fetch the data in Home Assistant. @@ -37,7 +40,7 @@ Not all Poweropti devices are supported currently. Check the list below to see i | Device | Type | Supported | | --------------------- | ----------- | ---------- | | PA 201901 / PA 201902 | Power meter | Yes | -| PB 202001 | Power meter | Not tested | +| PB 202001 | Power meter | Yes | | WA 201902 | Water meter | Yes | | Powerfox FLOW | Gas meter | No | | HA 201902 | Heat meter | Yes | diff --git a/source/_integrations/private_ble_device.markdown b/source/_integrations/private_ble_device.markdown index 2bd002e0bfc..c51f394a8f4 100644 --- a/source/_integrations/private_ble_device.markdown +++ b/source/_integrations/private_ble_device.markdown @@ -40,6 +40,34 @@ If you are trying to get the IRK for your iPhone or Apple Watch, you must be log 7. You will have to enter your password, then enter your username and password. 8. macOS will show some XML. You are looking for the "Remote IRK" field. After there is a data field that contains a base64 encoded version of your Identity Resolving Key. +### On Windows / For Android + +If you have a rooted Android phone, the IRK (and LTKs) can be viewed in the file `/data/misc/bluedroid/bt_config.conf`. The LE_LOCAL_KEY_IRK specifies the Android device's own IRK, and the first 16 bytes of LE_KEY_PID for every bonded device in the file indicate the bonded device's IRK. Be aware that keys stored in this file are a little-endian, so the byte order of keys in this file will need to be reversed. For example, the little-endian IRK 22BC0E3F2EACF08EE36B865553EA0B4E needs to be changed to 4E0BEA5355866BE38EF0AC2E3F0EBC22. + +Alternatively, the IRK of an Android phone and/or secondary device can be obtained using Wireshark: + +1. In developer settings on the Android phone, enable the "USB Debugging" and "Enable Bluetooth HCI snoop log" options. +2. Ensure a second Bluetooth device (e.g., smartwatch or earbuds) is unpaired. +3. Disable and re-enable Bluetooth on the phone ,then re-pair the secondary device. +4. Connect the Android phone to a computer with [adb](https://developer.android.com/tools/adb) installed. +5. Establish an adb connection (`adb connect...`), then run the command: `adb bugreport scanwatch`. +6. In the generated `scanwatch.zip` file, locate and extract `FS\data\misc\bluetooth\logs\btsnoop_hci.log`. +7. Open `btsnoop_hci.log` in [Wireshark](https://www.wireshark.org/download.html) and search for `btsmp.id_resolving_key`. +8. Select one of the frames and expand the "Bluetooth Security Manager Protocol." The hex dump will show either the sending or receiving device IRK. +9. Reverse the value displayed. For example, if it is `763af6c7f7d94ad6c262158e2320544e`, the IRK to use would be: `4e5420238e1562c2d64ad9f7c7f63a76`. + +### On Windows - for any devices that will connect to a computer + +1. Get the PsExec tool from Microsoft. It's available in the [Sysinternals Suite](https://learn.microsoft.com/en-us/sysinternals/downloads/psexec). Download and extract the `PsExec.exe` or `PsExec64.exe`. +2. Open Command Prompt as Administrator: Press the Windows key, type `cmd`, right-click on **Command Prompt**, and select **Run as administrator**. +3. Run PsExec: Navigate to the folder where PsExec is located and run `psexec -i -s cmd` or `psexec64 -i -s cmd`. This command will open a new command prompt window with SYSTEM rights. +4. Verify SYSTEM Rights: In the new command prompt window, type `whoami` to confirm that you have SYSTEM rights. +5. Open Registry Editor with SYSTEM Rights: In the new command prompt window, type `regedit` to open the Registry Editor with SYSTEM rights. +6. Locate the IRK: Navigate to `HKLM\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys`. There is one subfolder that probably holds the computer's Bluetooth radio's MAC address, look inside it for the folder corresponding to the MAC address of your Bluetooth device. +7. Right-click the key(folder) and select export. Save the `.reg` file somewhere. +8. Open the `.reg` file in Notepad. To open the **Replace** window, press Ctrl+H. **Find what:** "," and **Replace with** "". Select **Replace All**. This removes all commas from the hex value. +9. Copy the IRK value (only the part after `hex:`) and it can be used as-is. No reversing of byte order needs to be done. + ## ESPresense If you already use Identity Resolving Key tracking with ESPresence then you already have a hex-encoded version of your Identity Resolving Key. Home Assistant can use the key in this format directly. diff --git a/source/_integrations/proximity.markdown b/source/_integrations/proximity.markdown index 54a774f4b44..8547dd896ef 100644 --- a/source/_integrations/proximity.markdown +++ b/source/_integrations/proximity.markdown @@ -38,7 +38,7 @@ The following sensor entities will be created. ### Distance -For each tracked [device](/integrations/device_tracker/) or [person](/integrations/person/), a sensor is created showing the distance from the monitored zone in a unit depending on your [Home Assistant Unit System](/docs/configuration/basic) selection. When a tracked person or device enters the monitored zone, the distance is set to 0. +For each tracked [device](/integrations/device_tracker/) or [person](/integrations/person/), a sensor is created showing the distance from the edge of monitored zone in a unit depending on your [Home Assistant Unit System](/docs/configuration/basic) selection. When a tracked person or device enters the monitored zone, the distance is set to 0. ### Direction of travel diff --git a/source/_integrations/pyload.markdown b/source/_integrations/pyload.markdown index 0d8532ddda5..16f022aae31 100644 --- a/source/_integrations/pyload.markdown +++ b/source/_integrations/pyload.markdown @@ -1,6 +1,6 @@ --- title: pyLoad -description: Instructions on how to integrate pyLoad download sensor within Home Assistant. +description: Instructions on how to integrate pyLoad download manager with Home Assistant. ha_category: - Downloading ha_release: 0.58 @@ -19,24 +19,151 @@ ha_config_flow: true The [**pyLoad**](https://pyload.net/) {% term integration %} enables monitoring your downloads directly in Home Assistant. This integration provides various sensors to keep track of your download activities and allows creating automations based on the sensor information, alongside button and switch controls for performing specific tasks such as aborting downloads and managing file restarts. +## About pyLoad + +**pyLoad** is an open-source download manager designed for always-on devices like home servers, NAS systems, and routers. It supports various file hosts, container formats, and web standards, enabling fully automated, unattended downloads. With its web interface, pyLoad allows for easy remote management from any device. + +## How you can use this integration + +The **pyLoad** integration allows you to monitor and control your downloads directly from Home Assistant. Here are some ways you can use it: + +- **Track active downloads** – Send a notification when all downloads are complete or if the queue is empty. +- **Free space alerts** – Set up an automation to alert you when disk space is low, ensuring downloads don’t fail due to storage issues. +- **Pause downloads** – Automatically pause downloads when streaming or gaming to avoid bandwidth congestion, then resume them later. + +## Prerequisites + +To set up the pyLoad integration, you must have a running pyLoad instance on your home server, NAS, or any other device. An always-on device is recommended. Ensure that pyLoad's web interface is accessible for Home Assistant. + +If you haven't set up pyLoad yet, an easy way to get it up and running is by installing the [pyLoad-ng add-on for Home Assistant](https://github.com/tr4nt0r/pyload-ng). + +- During the setup process in Home Assistant, you will need: + - pyLoad account credentials – A valid *username* and *password* to authenticate with pyLoad. + - The full URL of your pyLoad web interface, including the protocol (HTTP or HTTPS), hostname or IP address, port (pyLoad uses 8000 by default), and any path prefix if applicable. + +{% note %} + +The account used for integration must either be an admin account or one with at least the following permissions: `DELETE`, `STATUS`, `LIST`, and `MODIFY`. You can set up and manage users and permissions under **Settings -> Users** in the pyLoad web interface. + +{% endnote %} + {% include integrations/config_flow.md %} +### Configuration parameters + +{% configuration_basic %} +URL: + description: "The full URL of the pyLoad web interface, including the protocol (HTTP or HTTPS), hostname or IP address, port, and any path prefix if applicable. Example: `https://example.com:8000/path`" +Verify SSL certificate: + description: "If checked, the SSL certificate will be validated to ensure a secure connection." +Username: + description: "The username used to access the pyLoad instance." +Password: + description: "The password associated with the pyLoad account." +{% endconfiguration_basic %} + ## Sensors -- **Speed:** Monitors the current download speed. -- **Active downloads:** Indicates the number of files pyLoad is actively downloading -- **Downloads in queue:** Shows the number of downloads currently in the queue. -- **Finished downloads:** Indicates the number of completed downloads. -- **Free space:** Shows the available disk space in the download directory. +- **Speed**: Monitors the current download speed. +- **Active downloads**: Indicates the number of files pyLoad is actively downloading +- **Downloads in queue**: Shows the number of downloads currently in the queue. +- **Finished downloads**: Indicates the number of completed downloads. +- **Free space**: Shows the available disk space in the download directory. ## Buttons -- **Abort all running downloads:** Aborts all currently running downloads. -- **Delete finished files/packages:** Deletes all finished files and packages. -- **Restart all failed files/packages:** Restarts all failed downloads. +- **Abort all running downloads**: Aborts all currently running downloads. +- **Delete finished files/packages**: Deletes all finished files and packages. +- **Restart all failed files/packages**: Restarts all failed downloads. - **Restart pyLoad core**: Restarts the pyLoad core. ## Switches -- **Pause/Resume Queue:** Pauses or resumes the download queue. When paused, active downloads will continue, but new downloads in the queue will not start. -- **Auto-reconnect:** If configured, enables pyLoad to automatically reconnect the internet connection. +- **Pause/Resume Queue**: Pauses or resumes the download queue. When paused, active downloads will continue, but new downloads in the queue will not start. +- **Auto-reconnect**: If configured, enables pyLoad to automatically reconnect the internet connection. + +## Automations + +Get started with these example {% term automations %}. + +### Pause downloads when disk space is low + +This automation will pause new downloads when your available disk space falls below 5 GB. + +{% details "Example YAML configuration" %} + +{% raw %} + +```yaml +alias: "Monitor pyLoad download queue" +description: "Pause new downloads when the disk space is low." +triggers: + - trigger: numeric_state + entity_id: sensor.pyload_free_space + below: 5000000000 # Trigger when free space drops below 5 GB (in bytes) +actions: + - action: switch.turn_off + target: + entity_id: switch.pyload_pause_resume_queue + - service: notify.persistent_notification + data: + message: "Free space is low, pausing pyLoad queue." +mode: single +``` + +{% endraw %} + +{% enddetails %} + +### Halt pyLoad downloads when watching Netflix + +This automation halts all active pyLoad downloads when watching Netflix on your media player. + +{% details "Example YAML configuration" %} + +{% raw %} + +```yaml +alias: "Halt pyLoad downloads when watching Netflix" +description: "Halt all pyLoad downloads when Netflix streaming starts on the media player." +triggers: +- trigger: state + entity_id: media_player.android_tv + to: playing +conditions: +- condition: state + entity_id: media_player.android_tv + attribute: app_id + state: com.netflix.ninja +actions: +- action: button.press + target: + entity_id: button.pyload_abort_all_running_downloads +- action: notify.persistent_notification + data: + message: "pyLoad downloads have been halted because Netflix streaming started." +mode: single +``` + +{% endraw %} + +{% enddetails %} + +## Data updates + +This integration {% term polling polls %} your **pyLoad** instance every 20 seconds. If you prefer a different update frequency, you can define a **custom polling interval** — see [Defining a custom polling interval](/common-tasks/general/#defining-a-custom-polling-interval) for details. + +## Known limitations + +- **Paused downloads**: When the download queue is paused, active downloads will continue, but new downloads in the queue will not start until the queue is resumed. +- **Halt all downloads**: To completely halt downloading, use the `Abort all running downloads` action. The `Restart failed files/packages` action will also resume any aborted downloads. + +## Troubleshooting + +In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue reoccurs, stop the debug logging again (*download of debug log file will start automatically*). Further, if still possible, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report. + +## Remove integration + +This integration can be removed by following these steps: + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/python_script.markdown b/source/_integrations/python_script.markdown index d9894845953..7ebf71101a0 100644 --- a/source/_integrations/python_script.markdown +++ b/source/_integrations/python_script.markdown @@ -28,7 +28,8 @@ Other imports like `min`, `max` are available as builtins. See the [python_scrip [logger-api]: https://docs.python.org/3.7/library/logging.html#logger-objects {% note %} -It is not possible to use Python imports with this integration. If you want to do more advanced scripts, you can take a look at [AppDaemon](https://appdaemon.readthedocs.io/en/latest/) or [pyscript](https://github.com/custom-components/pyscript) + - It is not possible to use Python imports with this integration. If you want to do more advanced scripts, you can take a look at [AppDaemon](https://appdaemon.readthedocs.io/en/latest/) or [pyscript](https://github.com/custom-components/pyscript) + - It is not possible to include your script as a button on the dashboard. A workaround is to create a [helper button](/integrations/input_button/) and create automation to run your script when the button state changes. {% endnote %} ## Writing your first script, reading input and logging the activity diff --git a/source/_integrations/qbittorrent.markdown b/source/_integrations/qbittorrent.markdown index edaedea530d..2809778b683 100644 --- a/source/_integrations/qbittorrent.markdown +++ b/source/_integrations/qbittorrent.markdown @@ -29,9 +29,15 @@ This sensor requires the qBittorrent Web UI enabled. The [official reference](ht The qBittorrent integration will add the following sensors: -- `sensor.qbittorrent_status`: The status of qBittorrent - `up_down`, `seeding`, `downloading` or `idle`. +- `sensor.qbittorrent_status`: The status of qBittorrent - `up_down`, `seeding`, `downloading`, or `idle`. +- `sensor.qbittorrent_connection_status`: The connection status of qBittorrent - `connected`, `firewalled`, or `disconnected`. - `sensor.qbittorrent_upload_speed`: The current total upload speed in kB/s. - `sensor.qbittorrent_download_speed`: The current total download speed in kB/s. +- `sensor.qbittorrent_upload_speed_limit`: The active qBittorrent upload speed limit (disabled by default). +- `sensor.qbittorrent_download_speed_limit`: The active qBittorrent download speed limit (disabled by default). +- `sensor.qbittorrent_alltime_upload`: The total amount of uploaded data. +- `sensor.qbittorrent_alltime_download`: The total amount of downloaded data. +- `sensor.qbittorrent_global_ratio`: The global share ratio (disabled by default). - `sensor.qbittorrent_all_torrents`: The current total torrents in qBittorrent. - `sensor.qbittorrent_active_torrents`: The current active torrents in qBittorrent. - `sensor.qbittorrent_inactive_torrents`: The current inactive torrents in qBittorrent. diff --git a/source/_integrations/qbus.markdown b/source/_integrations/qbus.markdown new file mode 100644 index 00000000000..baa87f9aea5 --- /dev/null +++ b/source/_integrations/qbus.markdown @@ -0,0 +1,80 @@ +--- +title: Qbus +description: Instructions on how to integrate your Qbus installation with Home Assistant. +ha_category: + - Switch +ha_platforms: + - light + - switch +ha_iot_class: Local Push +ha_codeowners: + - '@Qbus-iot' + - '@thomasddn' +ha_release: 2025.2 +ha_domain: qbus +ha_integration_type: hub +ha_config_flow: true +ha_quality_scale: bronze +--- + +The **Qbus** {% term integration %} allows you to integrate your [Qbus Control](https://www.qbus.be) into Home Assistant. **Qbus** is a Belgian manufacturer of Home Automation systems. + +## Prerequisites + +This integration communicates with a **Qbus** controller over an MQTT server. + +The controllers cannot communicate directly with MQTT. Therefore, you need to install the Qbus gateway before enabling this integration. The Qbus gateway is a software tool that runs on all Linux platforms. It can be installed by running a script or a Docker container. For detailed instructions, please refer to the [Qbus MQTT Gateway documentation](https://github.com/Qbus-iot/qbus-mqttgw). + +For information on setting up Home Assistant with a **Qbus** controller, refer to the [Qbus documentation](https://iot.qbus.be/). The documentation is currently only available in Dutch, but translations are planned for the future. + +Once the Qbus controller is connected to the MQTT server, you need to set up an MQTT client in Home Assistant to enable communication between Home Assistant and your **Qbus** system. This client should connect to the same MQTT Server as your Qbus controller. For detailed instructions, refer to the [MQTT integration documentation](https://www.home-assistant.io/integrations/mqtt/). + +{% include integrations/config_flow.md %} + +## Supported devices + +There is currently support for the following **Qbus** products within Home Assistant: + +- **CTD01E to CTD03E (CTD 3.0)**: main controllers (yellow). +- **CTD10 to CTDMax (CTD 3.5)**: main controllers (black). +- **Toggle**: toggle outputs on controllers. + +## Available entities + +- **Switch**: toggles on/off outputs. +- **Light**: controls dimmer lights, allowing both on/off functionality and brightness adjustment. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} + +## Data updates + +All data from **Qbus** entities are pushed to Home Assistant over MQTT. + +## Known limitations + +The integration does not provide a way to update the firmware on the devices. This can only be done with the configuration software System Manager. + +## Troubleshooting + +### Can’t set up the device + +#### Symptom: "No devices are discovered" + +When trying to set up the integration, no devices are discovered. + +##### Description + +This means that the integration did not receive a valid configuration from the gateway. + +##### Resolution + +To resolve this issue, try the following steps: + +1. Make sure your controller is online and not connected to System Manager. +2. Make sure you have an MQTT broker running. +3. Make sure that the gateway software is up and running (see [Prerequisites](#prerequisites)) and connected to the broker. +4. Make sure you have an MQTT client integration (see [Prerequisites](#prerequisites)) connected to the broker. diff --git a/source/_integrations/refoss.markdown b/source/_integrations/refoss.markdown index 822401849ff..53d42619720 100644 --- a/source/_integrations/refoss.markdown +++ b/source/_integrations/refoss.markdown @@ -20,11 +20,8 @@ Integrate Refoss devices into Home Assistant. ## Prerequisites -- The device needs to be connected to the local network first. There are two ways to connect devices to the local network: - - Using the Refoss app (download and install the Refoss app on Google Play) to connect devices to the local network. - - Using the Web page to connect devices to the local network. - - The computer/mobile phone is connected to the device factory Wi-Fi. - - In the browser, access the address 10.10.10.1, then select the local Wi-Fi needed for device configuration. +- Devices need to be connected to the local network first. +- Devices and Home Assistant must be connected to the same network. - The integration will occupy port: 9989. {% include integrations/config_flow.md %} @@ -39,7 +36,7 @@ Integrate Refoss devices into Home Assistant. ### Discover device - - After integrating Refoss, it will start socket broadcast and Home Assistant will automatically discover Refoss devices under the current LAN. +After integrating Refoss, it will start socket broadcast and Home Assistant will automatically discover Refoss devices under the current LAN. ## Entity naming @@ -67,3 +64,21 @@ Examples: ## Reset device Long-press the button on the device to reset it. + +## Troubleshooting + +### No devices found on the network + +If the Refoss device isn't discovered by Home Assistant automatically, follow these steps: +1. Verify that your Refoss device and Home Assistant are on the same network +2. Enable debug logging for the integration: + ```yaml + logger: + logs: + homeassistant.components.refoss: debug + ``` +3. Restart Home Assistant and attempt to add the integration again +4. Check the logs for messages containing "Discovered devices" +5. If no devices are found, verify: + - Network connectivity + - Device firmware version matches the supported versions listed above diff --git a/source/_integrations/remote_calendar.markdown b/source/_integrations/remote_calendar.markdown new file mode 100644 index 00000000000..c051bbafdf7 --- /dev/null +++ b/source/_integrations/remote_calendar.markdown @@ -0,0 +1,60 @@ +--- +title: Remote calendar +description: Instructions on how to use remote calendars in Home Assistant. +ha_category: + - Calendar +ha_iot_class: Cloud Polling +ha_release: 2025.04 +ha_config_flow: true +ha_domain: remote_calendar +ha_platforms: + - calendar +ha_codeowners: + - '@Thomas55555' +ha_integration_type: service +--- + +The **Remote calendar** {% term integration %} allows you to read a calendar in Home Assistant for powering automations. + +## Known limitations + +The integration does not provide the ability to connect to an resource that requires authentication or special headers. + +## Installation instructions + +{% include integrations/config_flow.md %} + +Please provide the following information to the config flow. + +{% configuration_basic %} +Calendar Name: + description: "A name for your calendar, you can choose a name you want. + Example: `Home Assistant Events`" +Calendar URL: + description: "The URL of the remote calendar. Example: `https://calendar.google.com/calendar/ical/p07n98go11onamd08d0kmq6jhs%40group.calendar.google.com/public/basic.ics`" +{% endconfiguration_basic %} + +## Data updates + +At the start of the integration, we fetch data from the remote. If the update fails, the integration tries again to fetch the data. After that, the update interval of the calendar is set to every 24 hours. + +### Defining a custom polling interval + +{% include common-tasks/define_custom_polling.md %} +## Supported functionality + +The integration only supports reading a calendar. A calendar entity has a state and attributes that represent the next upcoming event (only). All the events of the calendar can be displayed in the Calendar dashboard. + +## Calendar Event Automations + +Individual Calendar *Events* are what powers automations such as: + +- Notify me *12 hours before* the *start* of the event named *Garbage collection*. + +See [Calendar Automations](/integrations/calendar#automation) for an overview, and read more about [Calendar Trigger Variables](/docs/automation/templating/#calendar) for the available information you can use in a condition or action such as the event `summary`, `description`, `location` and more. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/renault.markdown b/source/_integrations/renault.markdown index 8767de587f8..fc6ca17872d 100644 --- a/source/_integrations/renault.markdown +++ b/source/_integrations/renault.markdown @@ -21,6 +21,7 @@ ha_platforms: - select - sensor ha_integration_type: hub +ha_quality_scale: silver --- The Renault integration offers integration with the **MyRenault** cloud service and provides sensors such as charger state and temperature. diff --git a/source/_integrations/reolink.markdown b/source/_integrations/reolink.markdown index 14cfed9a001..614ad9faa26 100644 --- a/source/_integrations/reolink.markdown +++ b/source/_integrations/reolink.markdown @@ -100,6 +100,17 @@ Depending on the supported features of the camera, binary sensors are added for: - AI face detection++ - AI package detection++ - AI baby crying detection+ (sound detection) +- AI crossline person+ (up to 3 lines) +- AI crossline vehicle+ (up to 3 lines) +- AI crossline animal+ (up to 3 lines) +- AI intrusion person+ (up to 3 zones) +- AI intrusion vehicle+ (up to 3 zones) +- AI intrusion animal+ (up to 3 zones) +- AI linger person+ (up to 3 zones) +- AI linger vehicle+ (up to 3 zones) +- AI linger animal+ (up to 3 zones) +- AI item forgotten+ (up to 3 zones) +- AI item taken+ (up to 3 zones) - Sleep status+ \++ These sensors receive events using the following 4 methods (in order): TCP push, ONVIF push, ONVIF long polling or fast polling (every 5 seconds). @@ -107,6 +118,8 @@ The latency for receiving the events is the best for TCP push and the worst for For redundancy, these sensors are polled every 60 seconds together with the update of all other entities. To ensure you have the best latency possible, refer to the [Reducing latency of motion events](#reducing-latency-of-motion-events) section. +For the **crossline**, **intrusion**, **linger**, **item forgotten**, and **item taken** entities, you first need to configure the lines/zones in the Reolink app (**Settings** > **Detection alarm** > **Smart event detection**). In the Reolink app, you can add up to 3 zones/lines, and for each zone/line, you can enable/disable the person/vehicle/animal detection. Within 60 seconds after making a change in the Reolink app, the corresponding entities will automatically show up in Home Assistant. + ### Number entities Depending on the supported features of the camera, number entities are added for: @@ -127,23 +140,32 @@ Depending on the supported features of the camera, number entities are added for - AI package sensitivity - AI pet sensitivity - AI animal sensitivity +- AI crossline sensitivity+ (up to 3 lines) +- AI intrusion sensitivity+ (up to 3 zones) +- AI linger sensitivity+ (up to 3 zones) +- AI item forgotten sensitivity+ (up to 3 zones) +- AI item taken sensitivity+ (up to 3 zones) - AI face delay* - AI person delay* - AI vehicle delay* - AI package delay* - AI pet delay* - AI animal delay* +- AI intrusion delay+ (up to 3 zones) +- AI linger delay+ (up to 3 zones) +- AI item forgotten delay+ (up to 3 zones) +- AI item taken delay+ (up to 3 zones) - Auto quick reply time - Auto track limit left - Auto track limit right - Auto track disappear time - Auto track stop time - Day night switch threshold* -- Image brightness* (default 128) -- Image contrast* (default 128) -- Image saturation* (default 128) -- Image sharpness* (default 128) -- Image hue* (default 128) +- Image brightness*+ (default 128) +- Image contrast*+ (default 128) +- Image saturation*+ (default 128) +- Image sharpness*+ (default 128) +- Image hue*+ (default 128) **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. @@ -189,7 +211,7 @@ Some Reolink PTZ cameras can move at di Depending on the supported features of the camera, select entities are added for: - Floodlight mode (Off, Auto, Schedule) -- Day night mode (Auto, Color, Black&White) +- Day night mode+ (Auto, Color, Black&White) - PTZ preset - Play quick reply message - Auto quick reply message @@ -207,11 +229,14 @@ Depending on the supported features of the camera, select entities are added for - Chime visitor ringtone - Hub alarm ringtone - Hub visitor ringtone +- Hub scene mode (Off, Disarmed, Home, Away) **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. **Play quick reply messages**/**Auto quick reply messages** can be recorded in the Reolink phone app where a name is also supplied. New or updated quick reply messages will be loaded into Home Assistant at the start of the integration. When adding new quick reply messages, please restart the Reolink integration. +**Hub scene modes** can be set in the Reolink app/client. The scene names are loaded into Home Assistant at the start of the integration. After adding new custom scenes, restart the Reolink integration. + #### Action reolink.play_chime To play a ringtone on a Reolink chime, the `reolink.play_chime` action can be used. @@ -242,6 +267,7 @@ Depending on the supported features of the camera, switch entities are added for - Doorbell button sound - Record - Manual record +- Privacy mode+ - Push notifications - Hub ringtone on event - Email on event @@ -250,6 +276,8 @@ Depending on the supported features of the camera, switch entities are added for - PIR reduce false alarm* - Chime LED +When the **Privacy mode** is ON, almost all other entities will be unavailable because the camera shuts down the API and camera streams. When turning OFF the **Privacy mode**, all entities will become available again. Take this into consideration when making automations; ensure the **Privacy mode** is OFF before changing camera settings using other entities. + 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**, **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). @@ -278,6 +306,7 @@ Depending on the supported features of the camera, the following sensor entities - PTZ pan position - PTZ tilt position +- Day night state+ - Wi-Fi signal* - CPU usage* - HDD/SD storage* @@ -307,6 +336,7 @@ The following models have been tested and confirmed to work with a direct link t - C2 Pro* - [CX410](https://reolink.com/product/cx410/) - [CX810](https://reolink.com/product/cx810/) +- [E1 Pro](https://reolink.com/product/e1-pro/) (only hardware version IPC_NT1NA45MP) - [E1 Zoom](https://reolink.com/product/e1-zoom/) - [E1 Outdoor](https://reolink.com/product/e1-outdoor/) - [E1 Outdoor PoE](https://reolink.com/product/e1-outdoor-poe/) @@ -362,8 +392,8 @@ The following hubs/NVRs have been tested and confirmed to work with battery-powe - [Reolink Home Hub](https://reolink.com/product/reolink-home-hub/) - [Reolink Home Hub Pro](https://reolink.com/product/reolink-home-hub-pro/) -- [RLN8-410 NVR](https://reolink.com/product/rln8-410/) (only the latest hardware version N7MB01, older versions might receive the required firmware update later) -- [RLN16-410 NVR](https://reolink.com/product/rln16-410/) (only the latest hardware version N6MB01, older versions might receive the required firmware update later) +- [RLN8-410 NVR](https://reolink.com/product/rln8-410/) (only hardware versions N7MB01, N3MB01, N2MB02, or H3MB18. Hardware versions H3MB02 and H3MB16 did not get firmware updates since 2022) +- [RLN16-410 NVR](https://reolink.com/product/rln16-410/) (only hardware versions N6MB01 or H3MB18. Hardware version H3MB02 did not get firmware updates since 2022) - [RLN36 NVR](https://reolink.com/product/rln36/) - [NVS8 NVR](https://reolink.com/product/nvs8/) (Retail version of RLN8) - [NVS16 NVR](https://reolink.com/product/nvs16/) (Retail version of RLN16) @@ -372,7 +402,9 @@ The following battery-powered models have been tested and confirmed to work thro - [Argus 3 Pro](https://reolink.com/product/argus-3-pro/) - [Argus 4 Pro](https://reolink.com/product/argus-4-pro/) +- [Argus Eco](https://reolink.com/product/argus-eco/) - [Argus Eco Ultra](https://reolink.com/product/argus-eco-ultra/) +- [Argus PT](https://reolink.com/product/argus-pt/) - [Argus Track](https://reolink.com/product/argus-track/) - [Reolink Doorbell Battery](https://reolink.com/roadmap/) @@ -383,7 +415,7 @@ Reolink provides [this larger list of battery camera models](https://support.reo The following models are lacking the HTTP web server API and can, therefore, not work directly with this integration. However, these cameras can work with this integration through an NVR or Home Hub in which the NVR/Home Hub is connected to Home Assistant. -- E1 Pro +- E1 Pro (The IPC_NT1NA45MP hardware version also works with a direct connection) - E1 - Reolink Lumus - B400* @@ -457,7 +489,7 @@ Set up the Reolink integration in Home Assistant using the credentials you set i Removing a directly connected camera/NVR/Home Hub can be done by removing the integration following these steps: -{% include integrations/remove_device_service.md %} +{% include integrations/remove_device_service_steps.md %} This will also remove all cameras/chimes connected to the NVR/Home Hub from Home Assistant. @@ -494,11 +526,210 @@ For example, you can place arrow buttons on the card to [control the camera](/da You can receive rich notifications on your phone when someone rings a Reolink doorbell or a Reolink camera detects an event like motion or a person. +

    + Screenshot: Small phone notification + Screenshot: Expanded phone notification +

    + +{% details "Rich notification tutorial" icon="mdi:cursor-hand" %} + +Prerequisites: + +- This [Reolink integration](#configuration) +- [Android or iOS companion app](https://companion.home-assistant.io/docs/getting_started#setting-up) +- [Remote access to Home Assistant](https://www.home-assistant.io/docs/configuration/remote/). Although you can receive text notifications without remote access, to see the camera image in the notification (rich notification), the phone needs to be able to reach Home Assistant. The rich notification will always work, even without remote access, when the phone is on the same network as Home Assistant. + +1. In order to receive such a rich notification, we are going to make an automation in Home Assistant. In Home Assistant go to {% my automations title="**Settings** > **Automations & scenes**" %} and select **Create automation** > **Create new automation**. + +![Settings button](/images/integrations/reolink/rich_notification__settings.png) +![Automations & scenes button](/images/integrations/reolink/rich_notification__automations_and_scenes.png) +![Create automation button](/images/integrations/reolink/rich_notification__create_automation.png) + +

    + Screenshot: new automation +

    + +2. Under **When**, select: **Add trigger** > **Entity** > **State**. + +![Add trigger](/images/integrations/reolink/rich_notification__add_trigger.png) +![Entity](/images/integrations/reolink/rich_notification__entity.png) +![State](/images/integrations/reolink/rich_notification__state.png) + +

    + Screenshot: new trigger +

    + + Then under **Entity**, select the binary sensor from the drop-down list corresponding to the camera event for which you want to receive a rich notification. For the Reolink integration the options are: + + - binary_sensor.*camera name*_motion + - binary_sensor.*camera name*_person + - binary_sensor.*camera name*_vehicle + - binary_sensor.*camera name*_pet + - binary_sensor.*camera name*_animal + - binary_sensor.*camera name*_visitor (doorbell press) + - binary_sensor.*camera name*_package + +

    + Screenshot: Entity select +

    + + Note that these entity names will be translated into the language you configured Home Assistant in. You can type to search through all your entities. You can add multiple triggers if you want to send the same message for multiple camera events like person and vehicle detection. You can also create multiple automations with different messages for each event. In this case, we chose the visitor detection for doorbell presses: + +3. Under **To** select the state in which the event is detected: for visitor **On** for the other sensors **Detected**: + +

    + Screenshot: State select +

    + +4. Under **And if** you can **optionally** limit when the notifications need to be sent. + +- For instance only when you are not home. The companion app will provide a device_tracker entity based on the GPS of your phone if you allow location tracking during the setup of the app. We will use this as an example but you can add as many conditions as you like: + + Select **+ Add Condition** > **Entity** > **State**. Then under **Entity** select the device_tracker entity of your phone and under **State** select **Home**. + +

    + Screenshot: Device tracker condition +

    + +- If you want to limit the amount of notifications being sent using a cooldown time you can use the following template condition: + + Select **Add Condition** again > **Other conditions** > **Template**. Then, under **Value template**, type the following: + +{% raw %} + +```yaml +{{as_timestamp(now()) - as_timestamp(state_attr('automation.reolink_push', 'last_triggered'), 0) > 30}} +``` + +{% endraw %} + + The `automation.reolink_push` is the name of this automation, which will be set under step 7, and the `30` is the cooldown time in seconds. + +

    + Screenshot: cooldown time condition +

    + +5. Under **Then do**, select **Add Action** > **Camera** > **Take snapshot**. + +![Add action button](/images/integrations/reolink/rich_notification__add_action.png) +![Camera button](/images/integrations/reolink/rich_notification__camera.png) +![Take snapshot button](/images/integrations/reolink/rich_notification__take_snapshot.png) + + Under **Targets**, select **Choose entity** and select the camera for which you want to add the image to the notification. + +![Choose entity button](/images/integrations/reolink/rich_notification__chose_entity.png) +![Select Fluent camera](/images/integrations/reolink/rich_notification__select_fluent_camera.png) + + Under **Filename**, fill in `/media/reolink_snapshot/last_snapshot_doorbell.jpg`. The first part `/media/` is absolutely necessary to allow your phone to access the saved image when it receives the notification. The reset of the folder and filename can be changed at will as long as you fill in the same filename under step 6. + +

    + Screenshot: take snapshot +

    + +6. Add another action underneath by selecting **Add Action** > **Notifications** > **Send a notification via mobile_app_**. + +![Add action button](/images/integrations/reolink/rich_notification__add_action.png) +![Notifications button](/images/integrations/reolink/rich_notification__notifications.png) +![Send a notification via mobile app](/images/integrations/reolink/rich_notification__send_to_mobile_button.png) + + Under **message**, type the text you want to receive in the notification. For instance, “Someone rang the doorbell”. + If you want to give the notification a title, select the **title** option. For instance, if you have multiple cameras that send you notifications, select the camera name: `Doorbell`. + Select the **data** option and fill in `image: /media/local/reolink_snapshot/last_snapshot_doorbell.jpg`. Note that `/media/` of the filename of step 5 now needs to be changed to `/media/local/`. The rest of the filename needs to be the same as in step 5. + +

    + Screenshot: send notification +

    + + You can personalize the notification further and even control what happens if you tap the notification on your phone, [read more about this here](https://companion.home-assistant.io/docs/notifications/notifications-basic/). + +7. Select **Save**, give your automation a name like `doorbell notification`, and select **save** again. + +![Save](/images/integrations/reolink/rich_notification__save.png) + + You are all set, ring your doorbell and see the notification on your phone. Remember the conditions under **And if** need to be met, otherwise you will not receive the notification. + +{% enddetails %} + ### Automation ideas - Turn on (outdoor) lights near the camera to improve image clarity at night once the camera detects a person, vehicle, or animal. - Turn off notifications and recording when you get home (based on, e.g., geofencing) and turn it back on when you leave home. -When someone presses the doorbell, Play ringtones on speakers (Echo Dot/Google Home/smart hubs) throughout the house. +- Auto-pause rich notifications for x time + +{% details "Auto-pause rich notifications tutorial" icon="mdi:cursor-hand" %} + +**Goal**: At the end of this tutorial, you will have a drop-down on your dashboard with different time choices to pause your notifications. When the time is up, the notifications will become active again. It will look like this: + +![Overview of end result](/images/integrations/reolink/auto_pause__overview.png) + +1. First, create the dropdown from **Settings** > **Devices & services** > **Helpers** > **+ Create Helper** > **Dropdown**. + - Decide how many time delay choices you want. + - Add them all to the dropdown like below. + - Your first entry needs to be "Notifications active" (or simular phrasing) for when the notifications are turned on. + - You can define as many time options as you want. And you can define any time interval you like, for example, 22 minutes, 2 hours. + + ![Dropdown](/images/integrations/reolink/auto_pause__dropdown.png) + +2. Next, also from the **Helpers** menu create a **Timer**. + - Leave the time duration all zeros. Select the **Restore state and time** box. + + ![Timer](/images/integrations/reolink/auto_pause__timer.png) + +3. Now you will create a new automation script. + - For the **When** select **+ Add Trigger** > **Entity** > **State** and choose your dropdown box for the entity and in the **From** choose your "Notifications active" or whatever you chose for the top item. + + ![Automation When dropdown](/images/integrations/reolink/auto_pause__automation_when.png) + +4. Add another trigger using **+ Add Trigger** > **Entity** > **State** and choose your timer for the entity and in the **To** choose "Idle". + - Now select the three dots {% icon "mdi:dots-vertical" %} menu of this trigger and press **Edit ID**. In the **Trigger ID** type "TIMER DONE". + + ![Automation When timer](/images/integrations/reolink/auto_pause__automation_when_timer.png) + +5. There is nothing in the **And if** section. For the **Then do** section choose **add building block** and use **Choose**. + - You will have as many options as you have times in your dropdown box plus one to reset the dropdown box. + - First, we make the option to reset the dropdown box. This needs to be the first option. + - Under **Option 1**, select **+ Add Condition** > **Other conditions** > **Triggered by**. + - Now check the box in front of "TIMER DONE". + + ![Automation Triggered by](/images/integrations/reolink/auto_pause__automation_triggered_by.png) + +6. Add an action under this **Option 1**, choose **Select** as your action and then choose **First**. + - Then enter your dropdown box as the entity. + - This will change your dropdown box back to the first item when the timer is done. + - This will allow your notification automation to run again. + + ![Automation Select first](/images/integrations/reolink/auto_pause__automation_select_first.png) + +7. Let’s code the first option to pause the notifications now. + - Under **Option 2**, select **+ Add Condition** > **Entity** > **State**. + - Your dropdown box goes in the **Entity** and for **State** choose your first time delay. + + ![Automation Choose](/images/integrations/reolink/auto_pause__automation_choose.png) + +8. For **+ Add Action**, choose **Helpers** > **Timer** > **Start** and enter your timer entity. + - Check the duration box and enter the time delay you used for your first time delay. Format is HH:MM:SS + + ![Automation Start timer](/images/integrations/reolink/auto_pause__automation_start_timer.png) + +9. The only thing left here is to duplicate Option 2 as many items as you have in your dropdown box. + - The only changes you will need to make for each new option is to choose the correct state (time amount) for the dropdown box and then change the amount of time in the timer. + - You can easliy duplicate by clicking the three dots {% icon "mdi:dots-vertical" %} menu at the far right of the option. + +10. Lastly, you need to apply this new feature. + - Go into your rich notifications automation, or for that matter any automation that you would like to have pause control over, and add a condition. + - Below is an example. In the **And if** press **+ Add condition** > **Entity** > **State** add select the dropdown box as the entity and "Notifications Active", the first item, as the state. + + ![Condition](/images/integrations/reolink/auto_pause__condition.png) + +11. Add the dropdown box and the timer onto your dashboard and you are all set. + - Here is what it looks like when it is running (holding notifications). + - You can end it early by just selecting the timer, then selecting finish. That ends the timer, it goes to idle, and the automation resets the dropdown box to active. + + ![Result when running](/images/integrations/reolink/auto_pause__result_when_running.png) + +{% enddetails %} + +- When someone presses the doorbell, play ringtones on speakers (Echo Dot/Google Home/smart hubs) throughout the house. - Pause a TV and show a notification badge on the TV when the doorbell is pressed (only when the TV is already on). - Play the quick replay messages of a Reolink doorbell only when not home (geofencing) - Wake up and start recording on other battery cameras nearby if one camera/motion sensor detects an event. @@ -525,14 +756,20 @@ When someone presses the doorbell, Play ringtones on speakers (Echo Dot/Google H - Test if you can access the camera by its IP address in your browser `https://`. If you cannot, in the [Reolink mobile app, Windows, or Mac client](https://reolink.com/software-and-manual/) ensure at least one of the HTTP/HTTPS ports are enabled under **Settings** > **top camera model box** > **Network Information** > **Advanced** (mobile) or **Settings** > **Network** > **Advanced** > **Port Settings** (PC). See [additional instructions](https://support.reolink.com/hc/en-us/articles/900000621783-How-to-Set-up-Reolink-Ports-Settings/) on the Reolink site. - On some camera models, the RTMP port needs to be enabled in order for the HTTP(S) port to function properly. Make sure this port is also enabled if you get a `Cannot connect to host` error while one of the HTTP/HTTPS ports is already enabled. - If the integration and the browser can't connect to the camera even after you enable the HTTP/HTTPS ports, try to create a new user on the camera; that fixes the problem in some cases. +- Using a VLAN or other network restrictions between the Home Assistant device and the Reolink device is possible, but is also known to cause issues when not properly configured. Ensure HTTP (port 80), HTTPS (port 443), RTMP (port 1935), RTSP (port 554), ONVIF (port 8000) and TCP (port 9000) communication is not being blocked. When experiencing issues, please first test if moving the Reolink device to the same VLAN as the Home Assistant device and lifting all restrictions between them solves the issue. ### Entities intermittently become unavailable +- Note that almost all entities, including motion/ai detection and the camera streams, will be unavailable when privacy mode is turned ON. Check the history of the **Privacy mode** entity to see if this is causing the issues. - Setting a static IP address for Reolink cameras/NVRs in your router is advisable to prevent (temporal) connectivity issues when the IP address changes. - Do not set a static IP in the Reolink device itself, but leave the **Connection Type** on **DHCP** under **Settings** > **Network** > **Network Information** > **Set Up**. If you set it to **static** on the Reolink device itself, this is known to cause incorrect DHCP requests on the network. The incorrect DHCP request causes Home Assistant to use the wrong IP address for the camera, resulting in connection issues. The issue originates from the Reolink firmware, which keeps sending DCHP requests even when you set a static IP address in the Reolink device. - Reolink cameras can support a limited amount of simultaneous connections. Therefore using third-party software like Frigate, Blue Iris, or Scrypted, or using the ONVIF integration at the same time can cause the camera to drop connections. This results in short unavailabilities of the Reolink entities in Home Assistant. Especially when the connections are coming from the same device (IP) where Home Assistant is running, the Reolink cameras can get confused, dropping one connection in favor of the other originating from the same host IP. If you experience disconnections/unavailabilities of the entities, please first temporarily shut down the other connections (like Frigate) to diagnose if that is the problem. If that is indeed the problem, you could try moving the third-party software to a different host (IP address) since that is known to solve the problem most of the time. You could also try switching the protocol to FLV on Home Assistant and/or the third-party software, as that is known to be less resource-intensive on the camera. - If the Reolink entities go to unavailable for short periods, the camera may be overloaded with requests resulting in short connection drops. To resolve this, first, check if the integration is using `ONVIF push` instead of `ONVIF long polling` (resource intensive) or `Fast polling` (very resource intensive), see the [Reducing latency of motion events](#reducing-latency-of-motion-events) section. Moreover, try switching to the FLV streaming protocol which is the least resource-intensive for the camera, see the [options](#options) section. +### Streams or recordings not playing + +- Most Reolink cameras use h265 encoding for the high resolution recording and clear stream to save storage space and bandwidth. Playback of this h265 encoding is not supported by all browsers or apps. Therefore, the high-resolution recording and/or clear stream may not function on all your devices from which you acces Home Assistant. To see if a Reolink camera is using h264 or h265 encoding, [download the diagnostics text file](/docs/configuration/troubleshooting/#download-diagnostics) and find the `"encoding main": "h265"\"h264"` in the txt file. The low-resolution recording and fluent stream always use h264 encoding and, therefore, do not suffer from this issue. + ### Reducing latency of motion events TCP push and ONVIF push will result in slightly faster state changes of the binary motion/AI event sensors than ONVIF long polling. diff --git a/source/_integrations/rest_command.markdown b/source/_integrations/rest_command.markdown index 6824535e384..7b9ba7bec03 100644 --- a/source/_integrations/rest_command.markdown +++ b/source/_integrations/rest_command.markdown @@ -71,6 +71,11 @@ service_name: required: false type: boolean default: true + insecure_cipher: + description: Allow insecure ciphers for the request. This is useful for older servers/devices that do not support modern ciphers. + required: false + type: boolean + default: false {% endconfiguration %} ## Examples diff --git a/source/_integrations/rexel.markdown b/source/_integrations/rexel.markdown index 019c9c40a17..071d5ce28be 100644 --- a/source/_integrations/rexel.markdown +++ b/source/_integrations/rexel.markdown @@ -24,11 +24,6 @@ ha_supporting_integration: Overkiz ha_release: 2022.2 ha_codeowners: - '@imicknl' - - '@vlebourl' - - '@tetienne' - - '@nyroDev' - - '@tronix117' - - '@alexfp14' ha_config_flow: true ha_platforms: - alarm_control_panel diff --git a/source/_integrations/ring.markdown b/source/_integrations/ring.markdown index 84a978fdc41..8b4dd8bba3e 100644 --- a/source/_integrations/ring.markdown +++ b/source/_integrations/ring.markdown @@ -1,6 +1,6 @@ --- title: Ring -description: Instructions on how to integrate your Ring.com devices within Home Assistant. +description: Instructions on integrating Ring.com devices with Home Assistant. ha_category: - Binary sensor - Button @@ -32,36 +32,56 @@ ha_codeowners: - '@sdb9696' --- -The Ring integration allows you to integrate your [Ring.com](https://ring.com/) devices in Home Assistant. Due to recent authentication changes of Ring, you will need to run at least Home Assistant 0.104. +The Ring integration allows you to control your [Ring.com](https://ring.com/) doorbell, stick up cam, chime, and intercom devices in Home Assistant. -There is currently support for the following device types within Home Assistant: +## How you can use this integration -- [Binary sensor](#binary-sensor) -- [Button](#button) -- [Camera](#camera) - - [Saving the videos captured by your Ring Door Bell](#saving-the-videos-captured-by-your-ring-door-bell) -- [Event](#event) - - [Realtime event stability](#realtime-event-stability) -- [Sensor](#sensor) -- [Siren](#siren) -- [Switch](#switch) -- [Light](#light) -- [Number](#number) +The Ring integration lets you do many things, such as switching devices on and off based on schedules or events, viewing live camera feeds, and controlling device configurations manually or via automations. +## Prerequisites + +You need to provision your newly purchased devices via the Ring application, which will require creating a Ring account at [Ring.com](https://ring.com/) or via the official application. +After that, you will use your Ring account credentials to log on to the Ring cloud in Home Assistant. {% include integrations/config_flow.md %} -## Binary sensor +{% configuration_basic %} + +Username: + description: | + Your Ring account username. +Password: + description: | + Your Ring account password. +2fa: + description: | + Account verification code via the method selected in your Ring account settings. + +{% endconfiguration_basic %} + +## Supported devices + +There is currently support for the following device types within Home Assistant: + +- **Doorbells**: Doorbell, Doorbell 2, Doorbell 3, Doorbell 3 Plus, Doorbell 4, Doorbell Pro, Doorbell Pro 2, Doorbell Elite, Doorbell Wired, Battery Doorbell, Doorbell (2nd Gen), Peephole Cam +- **Stickup cams**: Floodlight Cam, Floodlight Cam Pro, Floodlight Cam Plus, Indoor Cam, Indoor Cam (2nd Gen), Spotlight Cam Battery, Spotlight Cam Wired, Spotlight Cam Plus, Spotlight Cam Pro, Stick Up Cam, Stick Up Battery, Stick Up Wired, Stick Up Cam (3rd Gen) +- **Chimes**: Chime, Chime Pro +- **Intercoms**: Intercom + + +## Supported functionality + +### Binary sensor 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 +### Button Once you have enabled the [Ring integration](/integrations/ring), you can start using the button platform. Currently, it supports intercom to open the door. -## Camera +### Camera Once you have enabled the [Ring integration](/integrations/ring), you can start using the camera platform. Currently, it supports doorbells and stickup cameras. @@ -72,6 +92,134 @@ Two camera entities are provided: `live_view` and `last_recording`. Please note that downloading and playing Ring video from the `last_recording` camera will require a Ring Protect plan. {% endimportant %} +### Event + +The event entity captures events like doorbell rings, motion alerts, and intercom unlocking. + +### Sensor + +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. + +### Siren + +- Adds a siren entity for every camera that supports a siren. Note the siren will only turn on for 30 seconds before automatically turning off. +- Adds a siren entity for chimes to play the test sound. + +### Switch + +Once you have enabled the [Ring integration](/integrations/ring), you can start using the switch platform. + +- Motion detection - Switches motion detection on and off for cameras. +- In-home chime - Switches on and off a mechanical or digital chime connected to a ring doorbell. + +### 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. + +## Data updates + +The Ring cloud API is {% term polling polled %} for data updates every 60 seconds. When you make changes through Home Assistant (for example by switching motion detection on), the device's state is updated immediately rather than waiting for the next {% term polling poll %}. +The Ring integration does not connect locally to devices, all communication goes via the cloud. + +## Known limitations + +### Two-way audio + +Two-way audio in camera live view is not currently supported. + +### Last recording + +To view the last recording entity you will need a Ring subscription. + +### Multiple alerts + +Some device models send two alerts for a single doorbell ring event. +The integration will provide a workaround for this in a future release. + +## Troubleshooting + +### Realtime event stability + +Home Assistant requires outbound TCP access to port 5228 to connect to Ring's real-time event service. +Ensure your firewall and network configuration allow this connection. + +Below are steps to follow if realtime events are not working. + +#### Step 1 + +Issues with Ring alerts may be caused by having too many authenticated devices on your Ring account. Before version 2023.12.0, the Home Assistant Ring integration would register a new entry in `Authorized Client Devices` in the `Control Center` at [ring.com](https://account.ring.com/account/control-center/authorized-devices) on every restart. + +{% important %} +When cleaning up devices: + +1. Only delete entries that start with `ring-doorbell:HomeAssistant` or `Python`. +2. Do NOT delete entries for your phones or other Ring apps. +3. If there are too many devices to delete individually, you can use the **Remove all devices** option, but you'll need to re-authorize all your devices afterward. + +{% endimportant %} + +#### Step 2 + +If you're still experiencing issues after Step 1, try generating a new unique ID for the Home Assistant Ring integration instance. +To do this, select the three dots {% icon "mdi:dots-vertical" %} menu on the integration entry and select the **Reconfigure** option. +Do not try this step before clearing down all the excess `Authorized Client Devices` as per Step 1, or it will simply invalidate the reconfigured entry. + +#### Step 3 + +If alerts are still not working after Steps 1 and 2, try toggling the Motion Warning setting: + +1. Go to [ring.com](https://ring.com) and sign in. +2. Select your device. +3. Navigate to **Device Settings**. +4. Find the **Motion Warning** toggle. +5. Turn it off and wait for 30 seconds. +6. Turn it back on. + +This has successfully restored alerts for many users. + +## Examples + +### Automation ideas + +- Turn on motion detection for internal cameras when you leave home (with geofencing) and turn off when you get home. +- Start a live feed on a device when the doorbell rings. +- Turn up the volume on a digital chime when you are in the garden. + +### Setting up doorbell alerts + +You can set an automation up in the Home Assistant UI. + +1. Find the correct **event** entity under **Entity triggers**. +2. For **From** choose the setting **Any state (ignoring attribute changes)**. +3. Then add a **Send notification** action under **Notifications**. + +This will result in yaml similar to the following: + +```yaml +alias: Doorbell alerts +description: "" +triggers: + - trigger: state + entity_id: + - event.front_door_ding + from: null +conditions: [] +actions: + - device_id: internalhadeviceid + domain: mobile_app + type: notify + message: Front door ding + title: Front door ding +mode: single +``` + ### Saving the videos captured by your Ring Door Bell You can save locally the latest video captured by your Ring Door Bell using the [downloader](/integrations/downloader) along with either an [automation](/integrations/automation) or [python_script](/integrations/python_script). @@ -148,69 +296,8 @@ data = { hass.services.call("downloader", "download_file", data) ``` -## Event +## Removing the integration -The event entity captures events like doorbell rings, motion alerts, and intercom unlocking. +This integration follows standard integration removal. No extra steps are required. -### Realtime event stability - -Home Assistant requires outbound TCP access to port 5228 to connect to Ring's real-time event service. -Ensure your firewall and network configuration allow this connection. - -Below are steps to follow if realtime events are not working. - -#### Step 1 - -Issues with Ring alerts may be caused by having too many authenticated devices on your Ring account. Before version 2023.12.0, the Home Assistant Ring integration would register a new entry in `Authorized Client Devices` in the `Control Center` at [ring.com](https://account.ring.com/account/control-center/authorized-devices) on every restart. -{% warning %} -When cleaning up devices: -1. Only delete entries that start with `ring-doorbell:HomeAssistant` or `Python` -2. Do NOT delete entries for your phones or other Ring apps -3. If there are too many devices to delete individually, you can use the `Remove all devices` option, but you'll need to re-authorize all your devices afterward -{% endwarning %} - -#### Step 2 - -If you're still experiencing issues after Step 1, try generating a new unique ID for the Home Assistant Ring integration instance. -To do this, click the three-dot menu on the integration entry and select the `Reconfigure` option. -Do not try this step before clearing down all the excess `Authorized Client Devices` as per Step 1, or it will simply invalidate the reconfigured entry. - -#### Step 3 - -If alerts are still not working after Steps 1 and 2, try toggling the Motion Warning setting: - -1. Go to [ring.com](https://ring.com) and sign in -2. Select your device -3. Navigate to Device Settings -4. Find the Motion Warning toggle -5. Turn it off, wait 30 seconds -6. Turn it back on - -This has successfully restored alerts for many users. - -## Sensor - -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. - -## Siren - -- Adds a siren entity for every camera that supports a siren. Note the siren will only turn on for 30 seconds before automatically turning off. -- Adds a siren entity for chimes to play the test sound. - -## Switch - -Once you have enabled the [Ring integration](/integrations/ring), you can start using the switch platform. - -- Motion detection - Switches motion detection on and off for cameras. -- In-home chime - Switches on and off a mechanical or digital chime connected to a ring doorbell. - -## 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. +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/roborock.markdown b/source/_integrations/roborock.markdown index adabc6b7455..4078e2ec8c5 100644 --- a/source/_integrations/roborock.markdown +++ b/source/_integrations/roborock.markdown @@ -16,6 +16,7 @@ ha_release: 2023.5 ha_config_flow: true ha_codeowners: - '@Lash-L' + - '@allenporter' ha_domain: roborock ha_platforms: - binary_sensor @@ -23,6 +24,7 @@ ha_platforms: - diagnostics - image - number + - scene - select - sensor - switch @@ -31,141 +33,327 @@ ha_platforms: ha_integration_type: integration --- -The Roborock integration allows you to control your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) vacuum while using the Roborock app. -This integration requires a continuous cloud connection while using the device. However, excluding map data, communication between the integration and the device is conducted locally. +The Roborock {% term integration %} allows you to connect your [Roborock](https://us.roborock.com/pages/robot-vacuum-cleaner) robotic vacuums to your Home Assistant. Roborock vacuums are +intelligent home cleaning robots and, depending on the specific device, may have features +like mopping capabilities, laser navigation, and options for changing cleaning +performance or location in the home. This integration enables you to control and +monitor your Roborock vacuum directly from Home Assistant. -Once you log in with your Roborock account, the integration will automatically discover your Roborock devices and get the needed information to communicate locally with them. Please ensure your Home Assistant instance can communicate with the local IP of your device. We recommend setting a static IP for your Roborock Vacuum to help prevent future issues. The device communicates on port 58867. Depending on your firewall, you may need to allow communication from Home Assistant to your vacuum on that port. +The integration also allows for automation and integration with other smart home +devices. For example, you could send a notification when the vacuum is stuck, or +pause the vacuum when a media player starts playing music. + +## Prerequisites + +1. Download the Roborock App for iOS or Android. +2. Create an account and log in. +3. Add your Roborock device to the Roborock App (for example, by scanning a QR code). {% include integrations/config_flow.md %} +{% configuration_basic %} +Email address: + description: "The email address used to sign in to the Roborock app. A verification code will be sent to this email address when adding the Roborock integration." +Verification code: + description: "The verification code that is sent to your email address when adding the Roborock integration." +{% endconfiguration_basic %} -## Robovac entities +{% include integrations/option_flow.md %} + +The integration can be configured to specify which Roborock App features are drawn +on the map. + +{% configuration_basic %} +Charger: + description: Show the charger on the map. +Cleaned area: + description: Show the area cleaned on the map. +Go-to path: + description: Show the go-to path on the map. +Ignored obstacles: + description: Show ignored obstacles on the map. +Ignored obstacles with photo: + description: Show ignored obstacles with photos on the map. +Mop path: + description: Show the mop path on the map. +No carpet zones: + description: Show the no carpet zones on the map. +No-go zones: + description: Show the no-go zones on the map +No mopping zones: + description: Show the no-mop zones on the map. +Obstacles: + description: Show obstacles on the map. +Obstacles with photo: + description: Show obstacles with photos on the map. +Path: + description: Show the path on the map. +Predicted path: + description: Show the predicted path on the map. +Vacuum position: + description: Show the vacuum position on the map. +Virtual walls: + description: Show virtual walls on the map. +Zones: + description: Show zones on the map. +{% endconfiguration_basic %} + +## Data Updates + +This integration uses both local and cloud {% term polling %} and also receives +cloud push events using MQTT. Local communication is preferred when possible. +Map data is always fetched through the cloud, and Dyad and Zeo devices are cloud only. + +The integration will automatically discover your Roborock devices using the cloud APIs and get +the needed information to communicate locally with them, if supported. Please ensure your Home Assistant +instance can communicate with the local IP of your device. We recommend setting a static IP +for your Roborock Vacuum to help prevent future issues. The device communicates on port 58867. +Depending on your firewall, you may need to allow communication from Home Assistant to your vacuum on that port. + + +## Supported functionality Roborock devices have a variety of features that are supported on some devices but not on others. Only entities that your device supports will be added to your integration. -### Vacuum +### Robovac devices + +#### Vacuum The vacuum entity holds the ability to control most things the vacuum can do, such as start a clean, return to the dock, or set the fan speed. -### Select +#### Image -Mop mode - Describes how to mop the floor. On some firmware, it is called 'mop route'. +- **Map** + - **Description**: Displays a live map of your Roborock vacuum's cleaning area. -Mop intensity - How hard you would like your vacuum to mop. +#### Select -### Binary sensor +- **Mop mode** + - **Description**: Describes how to mop the floor. On some firmware, it is called 'mop route'. -Cleaning - States if the vacuum has a clean currently active. This is on when the robot is actively moving around or when the robot returns to the dock when the battery is low but a clean is still active and will resume later. +- **Mop intensity** + - **Description**: How hard you would like your vacuum to mop. -Mop attached - States if the mop is currently attached. +- **Selected map** + - **Description**: Choose the map that is loaded on the vacuum. -Mop drying status - Only available on docks with drying capabilites - States if the mop is currently being driven. +- **Empty mode** + - **Description**: You can set the "empty mode" setting including Max, Light, Balanced, and Smart. + - **Availability**: For vacuum equipped with an auto-empty dock -Water box attached - States if the water box is currently attached. +#### Binary sensor -Water shortage - States if the water box is low on water - 'Ok' if it has not detected a water shortage. +- **Charging** + - **Description**: States if the vacuum is currently charging or not. + +- **Cleaning** + - **Description**: States if the vacuum is currently cleaning or not. This is on when the robot is actively moving around or when the robot returns to the dock when the battery is low but a clean is still active and will resume later. + +- **Mop attached** + - **Description**: States if the mop is currently attached. + +- **Mop drying status** + - **Description**: Only available on docks with drying capabilites - States if the mop is currently being driven. + +- **Water box attached** + - **Description**: States if the water box is currently attached. + +- **Water shortage** + - **Description**: States if the water box is low on water - 'Ok' if it has not detected a water shortage. -### Sensor +#### Sensor -Cleaning area - How much area the vacuum has cleaned in its current run. If the vacuum is not currently cleaning, how much area it has cleaned during its last run. +- **Cleaning area** + - **Description**: How much area the vacuum has cleaned in its current run. If the vacuum is not currently cleaning, how much area it has cleaned during its last run. -Cleaning time - How long the vacuum has been cleaning for. If the vacuum is not currently cleaning, how long it cleaned for in its last run. +- **Cleaning time** + - **Description**: How long the vacuum has been cleaning for. If the vacuum is not currently cleaning, how long it cleaned for in its last run. -Cleaning progress - Only available on some newer devices - what percent of the current cleaning is completed. +- **Cleaning progress** + - **Description**: Only available on some newer devices - what percent of the current cleaning is completed. -Dock error - Only available on the non-basic docks - The current error of the vacuum or 'Ok' if none exist +- **Dock error** + - **Description**: Only available on the non-basic docks - The current error of the vacuum or 'Ok' if none exists. -Main brush time left - How much time is left before Roborock recommends you replace your main brush. +- **Main brush time left** + - **Description**: How much time is left before Roborock recommends you replace your main brush. -Mop drying remaining time - Only available on the non-basic docks - How much time is left until the mop is dry and ready to continue cleaning. +- **Mop drying remaining time** + - **Description**: Only available on the non-basic docks - How much time is left until the mop is dry and ready to continue cleaning. -Side brush time left - How much time is left before Roborock recommends you replace your side brush. +- **Side brush time left** + - **Description**: How much time is left before Roborock recommends you replace your side brush. -Filter time left - How much time is left before Roborock recommends you replace your vacuum's air filter. +- **Filter time left** + - **Description**: How much time is left before Roborock recommends you replace your vacuum's air filter. -Status - The current status of your vacuum. This typically describes the action that is currently being run. For example, 'spot_cleaning' or 'docking'. +- **Status** + - **Description**: The current status of your vacuum. This typically describes the action that is currently being run. For example, 'spot_cleaning' or 'docking'. -Last clean begin - the last time that your vacuum started cleaning. +- **Last clean begin** + - **Description**: the last time that your vacuum started cleaning. -Last clean end - The last time that your vacuum finished cleaning. +- **Last clean end** + - **Description**: The last time that your vacuum finished cleaning. -Total cleaning time - The lifetime cleaning duration of your vacuum. +- **Total cleaning time** + - **Description**: The lifetime cleaning duration of your vacuum. -Total cleaning area - The lifetime cleaning area of your vacuum. +- **Total cleaning area** + - **Description**: The lifetime cleaning area of your vacuum. -Total cleaning count - The lifetime cleaning count of your vacuum. +- **Total cleaning count** + - **Description**: The lifetime cleaning count of your vacuum. -Vacuum error - The current error with your vacuum, if there is one. +- **Vacuum error** + - **Description**: The current error with your vacuum, if there is one. -### Time +#### Time -Do not disturb begin - When _Do not disturb_ is enabled, the vacuum does not run or speak after this point. +- **Do not disturb begin** + - **Description**: When _Do not disturb_ is enabled, the vacuum does not run or speak after this point. -Do not disturb end - When _Do not disturb_ is enabled, the vacuum does not run or speak before this point. +- **Do not disturb end** + - **Description**: When _Do not disturb_ is enabled, the vacuum does not run or speak before this point. -### Switch +#### Switch -Child lock - This disables the buttons on the vacuum. Nothing happens when the buttons are pushed. +- **Child lock** + - **Description**: This disables the buttons on the vacuum. Nothing happens when the buttons are pushed. -Status indicator light - This is the LED on the top of your vacuum. The color changes depending on the status of your vacuum. +- **Status indicator light** + - **Description**: This is the LED on the top of your vacuum. The color changes depending on the status of your vacuum. -Do not disturb - This enables _Do not disturb_ during the time frame you have set in the app or on the time entity. When _Do not disturb_ is enabled, the vacuum does not run or speak. +- **Do not disturb** + - **Description**: This enables _Do not disturb_ during the time frame you have set in the app or on the time entity. When _Do not disturb_ is enabled, the vacuum does not run or speak. -### Number +#### Number -Volume - This allows you to control the volume of the robot's voice. For example, when it states "Starting cleaning". This allows you to set the volume to 0%, while the app limits it to 20%. +- **Volume** + - **Description**: This allows you to control the volume of the robot's voice. For example, when it states "Starting cleaning". This allows you to set the volume to 0%, while the app limits it to 20%. -### Button +#### Button There are currently four buttons that allow you to reset the various maintenance items on your vacuum. Pressing the button cannot be undone. For this reason, the buttons are disabled by default to make sure they are not pressed unintentionally. -Reset sensor consumable - The sensors on your vacuum are expected to be cleaned after 30 hours of use. +- **Reset sensor consumable** + - **Description**: The sensors on your vacuum are expected to be cleaned after 30 hours of use. -Reset side brush consumable - The side brush is expected to be replaced every 200 hours. +- **Reset side brush consumable** + - **Description**: The side brush is expected to be replaced every 200 hours. -Reset main brush consumable - The main brush/ roller is expected to be replaced every 300 hours. +- **Reset main brush consumable** + - **Description**: The main brush/ roller is expected to be replaced every 300 hours. -Reset air filter - The air filter is expected to be replaced every 150 hours. +- **Reset air filter** + - **Description**: The air filter is expected to be replaced every 150 hours. -### Image +#### Actions -You can see all the maps within your Roborock account. Keep in mind that they are device-specific. The maps require the cloud API to communicate as the maps are seemingly stored on the cloud. If someone can figure out a way around this - contributions are always welcome. +##### Action Set Vacuum Goto Position +The `roborock.set_vacuum_goto_position` action will set the vacuum to go to +the specified coordinates. -## Dyad entities +- **Data attribute**: `entity_id` + - **Description**: Only act on a specific robot. + - **Optional**: No. +- **Data attribute**: `x_coord` + - **Description**: X-coordinate, integer value. The dock is located at x-coordinate 25500. + - **Optional**: No. +- **Data attribute**: `y_coord` + - **Description**: Y-coordinate, integer value. The dock is located at y-coordinate 25500. + - **Optional**: No. + +##### Action Get Vacuum Current Position + +The `roborock.get_vacuum_current_position` action will get the current position of the vacuum. This +is a cloud call and should only be used for diagnostics. This is not meant to be used for +automations. Frequent requests can lead to rate limiting. + +- **Data attribute**: `entity_id` + - **Description**: Only act on a specific robot. + - **Optional**: No. + +Example: + +```yaml +action: roborock.get_vacuum_current_position +target: + entity_id: vacuum.roborock_s7 +data: {} +``` + +- **Result**: You will get a response like this: + + ```yaml + vacuum.roborock_s7: + x: 28081 + y: 25168 + ``` + +##### Action Get Maps + +The `roborock.get_maps` action will return the maps available on the device and +details about any named rooms on each map. + +- **Data attribute**: `entity_id` + - **Description**: Get maps for a specific device + - **Optional**: No. + +This will return the name of the map, and the room names and id numbers. See [How can I clean a specific room? ](#how-can-i-clean-a-specific-room) for more details on how to use the maps response. + +### Dyad devices Roborock wet/dry vacuums currently expose some entities through an MQTT connection - it is currently cloud dependent. -### Sensor +#### Sensor -Status - The current status of your vacuum. This typically describes the action that is currently being run. For example, 'drying' or 'charging'. +- **Status** + - **Description**: The current status of your vacuum. This typically describes the action that is currently being run. For example, 'drying' or 'charging'. -Battery - The current charge of your device. +- **Battery** + - **Description**: The current charge of your device. -Filter time left - how long until Roborock recommends cleaning/replacing your filter. +- **Filter time left** + - **Description**: how long until Roborock recommends cleaning/replacing your filter. -Brush time left - how long until Roborock recommends cleaning/replacing your brush. +- **Brush time left** + - **Description**: how long until Roborock recommends cleaning/replacing your brush. -Error - the current error of the device - if one exists - "None" otherwise. +- **Error** + - **Description**: the current error of the device - if one exists - "None" otherwise. -Total cleaning time - how long you have cleaned with your wet/dry vacuum. +- **Total cleaning time** + - **Description**: how long you have cleaned with your wet/dry vacuum. -## Zeo Entities +### Zeo Entities Roborock Zeo One currently exposes some entities through an MQTT connection - it is currently cloud dependent. -### Sensor +#### Sensor -State - The current state of your washing machine. For example, 'washing' or 'rinsing'. +- **State** + - **Description**: The current state of your washing machine. For example, 'washing' or 'rinsing'. -Countdown - Countdown for how long until the machine starts. +- **Countdown** + - **Description**: Countdown for how long until the machine starts. -Washing left - The amount of time until your machine is done washing. +- **Washing left** + - **Description**: The amount of time until your machine is done washing. + +- **Error** + - **Description**: The current error of the Zeo, if one exists. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} -Error - The current error of the Zeo, if one exists. ## FAQ @@ -173,7 +361,7 @@ Error - The current error of the Zeo, if one exists. No. This integration requires information from your Roborock app to set up and uses Roborock's protocols to communicate with your device. You must have your vacuum synced to the Roborock app. ### Can I block internet access for this device? -As of right now - no. When the vacuum is disconnected from the internet, it will attempt to disconnect itself from Wi-Fi and reconnect itself until it can reach the Roborock servers. We are looking for the best way to handle this and see what can be blocked while still allowing the vacuum to function. +As of right now - no. When the vacuum is disconnected from the internet, it will attempt to disconnect itself from Wi-Fi and reconnect itself until it can reach the Roborock servers. ### What devices are supported? If you can add your device to the Roborock app - it is supported. However, some older vacuums like the Roborock S5 must be connected using the Mi Home app and can be set up in Home Assistant through the [Xiaomi Miio](/integrations/xiaomi_miio/) integration. @@ -229,3 +417,20 @@ target: entity_id: vacuum.s7_roborock ``` + +## Troubleshooting + +### I get a invalid or no user agreement error - but nothing shows up in my app + +Roborock servers require accepting a user agreement before using the API, which may block Home Assistant during setup. Additionally, the Roborock may ask you to re-enter the user agreement, even if you have entered it before. To allow Home Assistant to use the Roborock API, you need to take the following steps: +1. Open your Roborock app. +2. Open **Profile** > **About Us** > **User Agreement & Privacy Policy**. +3. Hit **Revoke authorization**. +4. Log back in and accept the policy. +5. Reload the Roborock integration! + +### The integration tells me it cannot reach my vacuum and is using the cloud API and that this is not supported + +This integration has the capability to control your devices through the cloud API and the local API. If the local API is not reachable, it will just use the cloud API. We recommend only using the local API as it helps prevent any kind of rate-limiting. + +The steps needed to fix this issue are specific to your networking setup. Make sure your Home Assistant instance can communicate on port 58867 with the IP address of your vacuum. This may require changing firewall settings, VLAN configuration, etc. diff --git a/source/_integrations/rocketchat.markdown b/source/_integrations/rocketchat.markdown index e85833b821e..bb5ed290de7 100644 --- a/source/_integrations/rocketchat.markdown +++ b/source/_integrations/rocketchat.markdown @@ -54,6 +54,6 @@ rocketchat_notification: #### Message variables - **message** (*Required*): Message to be displayed. -- **data** (*Optional*): Dictionary containing any of the variables defined in the [Rocket.Chat documentation](https://developer.rocket.chat/reference/api/rest-api/endpoints/core-endpoints/chat-endpoints/postmessage) +- **data** (*Optional*): Dictionary containing any of the variables defined in the [Rocket.Chat documentation](https://developer.rocket.chat/apidocs/post-message) To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_integrations/roomba.markdown b/source/_integrations/roomba.markdown index 6c5f4db1601..444b20d1cb3 100644 --- a/source/_integrations/roomba.markdown +++ b/source/_integrations/roomba.markdown @@ -5,7 +5,6 @@ ha_category: - Vacuum ha_iot_class: Local Push ha_release: 0.51 -ha_conflig_flow: true ha_codeowners: - '@pschmitt' - '@cyr-ius' @@ -88,3 +87,9 @@ Use this credentials in dorita980 lib :) ``` Copy the password (everything between `=>` and `<=`, not including leading and trailing whitespace) into the Home Assistant password dialog. + +## Troubleshooting + +- **Integration wizard shows "Failed to connect" after submitting the password**: Before attempting a factory reset (which can be a cumbersome process), attempt submitting the password in the integration wizard while the Roomba is actively running (i.e. cleaning). Avoid opening the app to start a manual job to help with this. Instead, push the physical clean button on the device directly to start the manual job. This appears to resolve the issue on some models because they answer queries only while actively running. + + If this still does not resolve the issue, factory reset the model. diff --git a/source/_integrations/russound_rio.markdown b/source/_integrations/russound_rio.markdown index 508206c3950..dfe280966f8 100644 --- a/source/_integrations/russound_rio.markdown +++ b/source/_integrations/russound_rio.markdown @@ -7,11 +7,14 @@ ha_release: 0.49 ha_iot_class: Local Push ha_domain: russound_rio ha_platforms: + - diagnostics - media_player ha_codeowners: - '@noahhusby' ha_config_flow: true ha_integration_type: integration +ha_quality_scale: silver +ha_zeroconf: true --- The Russound RIO {% term integration %} allows you to control Russound devices that make use of the RIO protocol. diff --git a/source/_integrations/russound_rnet.markdown b/source/_integrations/russound_rnet.markdown index 4693881c948..1030d639a95 100644 --- a/source/_integrations/russound_rnet.markdown +++ b/source/_integrations/russound_rnet.markdown @@ -13,6 +13,8 @@ related: - docs: /docs/configuration/ title: Configuration file ha_quality_scale: legacy +ha_codeowners: + - '@noahhusby' --- The `russound_rnet` {% term integration %} allows you to control Russound devices that make use of the RNET protocol. diff --git a/source/_integrations/sabnzbd.markdown b/source/_integrations/sabnzbd.markdown index 13e3f1273a8..108720d5301 100644 --- a/source/_integrations/sabnzbd.markdown +++ b/source/_integrations/sabnzbd.markdown @@ -17,6 +17,7 @@ ha_platforms: - number - sensor ha_integration_type: integration +ha_quality_scale: bronze --- The SABnzbd integration will allow you to monitor and control your downloads with [SABnzbd](https://sabnzbd.org) from within Home Assistant and setup automations based on the information. @@ -72,4 +73,4 @@ This integration will create a number entity to set the download queue speed lim This integration follows standard integration removal. No extra steps are required. -{% include integrations/remove_device_service.md %} \ No newline at end of file +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/scene.mqtt.markdown b/source/_integrations/scene.mqtt.markdown index c581f777c31..ea0b9f5560f 100644 --- a/source/_integrations/scene.mqtt.markdown +++ b/source/_integrations/scene.mqtt.markdown @@ -42,7 +42,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -51,7 +51,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -138,7 +138,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: diff --git a/source/_integrations/schedule.markdown b/source/_integrations/schedule.markdown index 28751234c08..9c28f90ec32 100644 --- a/source/_integrations/schedule.markdown +++ b/source/_integrations/schedule.markdown @@ -12,64 +12,58 @@ ha_domain: schedule ha_integration_type: helper --- -The schedule integration provides a way to create a weekly schedule in -Home Assistant that can be used to trigger or make decisions in your -automations and scripts. - -The preferred way to configure a schedule is via the user interface at -**{% my helpers title="Settings > Devices & services > Helpers." %}** Click the add button -and then choose the **{% my config_flow_start domain=schedule title="Schedule" %}** option, or click the My button below. +The **Schedule** {% term integration %} provides a way to create a weekly schedule {% term entity %} in Home Assistant, consisting of time blocks with defined start and end times. The schedule is active when a time block starts and becomes inactive when it ends, allowing it to be used for triggering or making decisions in automations and scripts. {% include integrations/config_flow.md %} -To be able to add **{% my helpers title="Helpers" %}** via the user interface you should -have `default_config:` in your {% term "`configuration.yaml`" %}, it should already -be there by default unless you removed it. +{% configuration_basic %} +Name: + description: Friendly name of the schedule. +Icon: + description: Icon to display in the frontend for this schedule. +Schedule blocks: + description: > + Press and drag to select time blocks for each day of the week. + It is not possible to create overlapping time blocks on the same day. +{% endconfiguration_basic %} -If you removed `default_config:` from your configuration, -you must add it back or, alternatively, `schedule:` to your -`configuration.yaml` first, before you can create them via the UI. +After creating schedule blocks, you can press a block to edit the details. -Alternatively, a schedule can also be created and configured via YAML -configuration. For example: +{% configuration_basic %} +Start: + required: true + type: time + description: The start time to mark the schedule as active/on. +End: + required: true + type: time + description: The end time to mark as inactive/off again. +Additional data: + required: false + type: map + description: A mapping of attribute names to values, which will be added to the entity's attributes when the block is active. +{% endconfiguration_basic %} + +### Adding additional data + +Adding the following as `Additional data` will show `brightness` and `color_temp` as {% term entity %} attributes when the block is active: ```yaml -# Example configuration.yaml entry -schedule: - thermostat_schedule: - name: "Thermostat schedule" - monday: - - from: "17:00:00" - to: "21:00:00" - tuesday: - - from: "17:00:00" - to: "21:00:00" - wednesday: - - from: "17:00:00" - to: "21:00:00" - thursday: - - from: "17:00:00" - to: "21:00:00" - friday: - - from: "17:00:00" - to: "23:00:00" - saturday: - - from: "07:00:00" - to: "10:00:00" - - from: "16:00:00" - to: "23:00:00" - sunday: - - from: "07:00:00" - to: "21:00:00" +brightness: 100 +color_temp: 4000 ``` -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. +## YAML configuration + +Alternatively, this {% term integration %} can be configured and set up manually via YAML instead. +To enable the Integration sensor in your installation, add the following to your {% term "`configuration.yaml`" %} file. + +{% note %} + +The `data` field follows the same logic as described above in *Adding additional data*. + +{% endnote %} -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: @@ -116,7 +110,6 @@ schedule: type: icon "monday|tuesday|wednesday|thursday|friday|saturday|sunday": description: A schedule for each day of the week. - required: false required: true type: list keys: @@ -129,62 +122,160 @@ schedule: required: true type: time data: - description: Additional data to add to the entity's attributes when this block is active. + description: A mapping of attribute names to values, which will be added to the entity's attributes when the block is active. required: false type: map default: {} {% endconfiguration %} -### Attributes +## Attributes -A schedule entity's state exports attributes that can be useful in -automations and templates. +A schedule entity exports state attributes that can be useful in automations and templates. | Attribute | Description | | ----- | ----- | | `next_event` | A datetime object containing the next time the schedule is going to change state. | +| `key_1`, `key_2`, ... | The mapping values from **Additional data** / `data` settings of a time block when the respective block is active. | -### Automation example +## Automation example -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 -triggers: - - trigger: state - entity_id: - - schedule.thermostat_schedule - to: "on" - actions: - - action: climate.turn_on - target: - entity_id: climate.thermostat -``` - -Using the `light_schedule` example from above in an automation might look like this: +A schedule creates an on/off (schedule) sensor within the times set. +By incorporating the `light_schedule` example from above in an automation, we can turn on a light when the schedule is active. {% raw %} ```yaml triggers: - - trigger: state - entity_id: - - schedule.light_schedule - to: "on" - actions: - - action: light.turn_on - target: - entity_id: light.kitchen - data: - brightness_pct: "{{ state_attr('schedule.light_schedule', 'brightness') }}" - kelvin: "{{ state_attr('schedule.light_schedule, 'temperature') }}" + - trigger: state + entity_id: + - schedule.light_schedule + to: "on" +actions: + - action: light.turn_on + target: + entity_id: light.kitchen + data: + brightness_pct: "{{ state_attr('schedule.light_schedule', 'brightness') }}" + kelvin: "{{ state_attr('schedule.light_schedule', 'color_temp') }}" ``` {% endraw %} -### Actions +Another automation can be added to turn the lights off once the schedule is inactive: -Available action: `schedule.reload`. +{% raw %} -#### schedule.reload +```yaml +triggers: + - trigger: state + entity_id: + - schedule.light_schedule + to: "off" +actions: + - action: light.turn_off + target: + entity_id: light.kitchen +``` -`schedule.reload` action allows one to reload the schedule's configuration without restarting Home Assistant itself. +{% endraw %} + +## Actions + +To interact with schedules from {% term scripts %} and {% term automations %}, the schedule integration provides the following {% term actions %}. + +### Action `schedule.reload` + +`schedule.reload` reloads the schedule's configuration from YAML without the need of restarting Home Assistant itself. + +### Action `schedule.get_schedule` + +`schedule.get_schedule` populates [response data](/docs/scripts/perform-actions#use-templates-to-handle-response-data) with the configured time ranges of a schedule. +It can return multiple schedules. + +```yaml +action: schedule.get_schedule +target: + entity_id: + - schedule.vacuum_robot + - schedule.air_purifier +response_variable: schedules +``` + +The response data contains a field for every schedule entity (e.g. `schedule.vacuum_robot` and `schedule.air_purifier` in this case). + +Every schedule entity response has 7 fields (one for each day of the week in lowercase), containing a list of the selected time ranges. +Days without any ranges will be returned as an empty list. + +```yaml +schedule.vacuum_robot: + monday: + - from: "09:00:00" + to: "15:00:00" + tuesday: [] + wednesday: [] + thursday: + - from: "09:00:00" + to: "15:00:00" + friday: [] + saturday: [] + sunday: [] +schedule.air_purifier: + monday: + - from: "09:00:00" + to: "18:00:00" + tuesday: [] + wednesday: [] + thursday: + - from: "09:00:00" + to: "18:00:00" + friday: [] + saturday: + - from: "10:30:00" + to: "12:00:00" + - from: "14:00:00" + to: "19:00:00" + sunday: [] +``` + +The example below uses the response data from above in a template for another action. + +{% raw %} + +```yaml +action: notify.nina +data: + title: Today's schedules + message: >- + Your vacuum robot will run today: + {% for event in schedules["schedule.vacuum_robot"][now().strftime('%A').lower()] %} + - from {{ event.from }} until {{ event.to }}
    + {% endfor %} + Your air purifier will run today: + {% for event in schedules["schedule.air_purifier"][now().strftime('%A').lower()] %} + - from {{ event.from }} until {{ event.to }}
    + {% endfor %} +``` + +{% endraw %} + +If you want to run the above action both once per day and whenever one of the schedules changes, you can create an {% term automation %} that combines a time-based {% term trigger %} with an {% term event %} trigger per entity. + +{% raw %} + +```yaml +triggers: + - trigger: time + at: "07:30:00" + - trigger: event + event_type: entity_registry_updated + event_data: + action: update + entity_id: schedule.vacuum_robot + - trigger: event + event_type: entity_registry_updated + event_data: + action: update + entity_id: schedule.air_purifier +``` + +{% endraw %} diff --git a/source/_integrations/scrape.markdown b/source/_integrations/scrape.markdown index d8a38008830..bf9a9e8ae55 100644 --- a/source/_integrations/scrape.markdown +++ b/source/_integrations/scrape.markdown @@ -39,7 +39,7 @@ scrape: - resource: https://www.home-assistant.io sensor: - name: "Current version" - select: ".current-version h1" + select: ".release-date" ``` {% configuration %} @@ -178,8 +178,7 @@ scrape: - resource: https://www.home-assistant.io sensor: - name: Release - select: ".current-version h1" - value_template: '{{ value.split(":")[1] }}' + select: ".release-date" ``` {% endraw %} diff --git a/source/_integrations/season.markdown b/source/_integrations/season.markdown index 2e7907697d5..4e62f32fc17 100644 --- a/source/_integrations/season.markdown +++ b/source/_integrations/season.markdown @@ -31,4 +31,4 @@ All information about how the seasons work was taken from Wikipedia: - [https://en.wikipedia.org/wiki/Equinox](https://en.wikipedia.org/wiki/Equinox) - [https://en.wikipedia.org/wiki/Solstice](https://en.wikipedia.org/wiki/Solstice) -To cut a long read short, Astronomical gives seasons based on the shortest/longest day and equinoxes. So in the Northern Hemisphere spring starts on 20 March). Meteorological gives seasons based on months (so in the Northern Hemisphere spring starts on 1 March). +To cut a long read short, Astronomical gives seasons based on the shortest/longest day and equinoxes. So in the Northern Hemisphere spring starts on 20 March. Meteorological gives seasons based on months so in the Northern Hemisphere spring starts on 1 March. diff --git a/source/_integrations/select.mqtt.markdown b/source/_integrations/select.mqtt.markdown index f37de8c0236..68af312e19c 100644 --- a/source/_integrations/select.mqtt.markdown +++ b/source/_integrations/select.mqtt.markdown @@ -46,7 +46,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -59,11 +59,11 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -146,7 +146,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -193,7 +193,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/sensibo.markdown b/source/_integrations/sensibo.markdown index 3eb3796896e..0a74fa8525f 100644 --- a/source/_integrations/sensibo.markdown +++ b/source/_integrations/sensibo.markdown @@ -33,7 +33,7 @@ ha_dhcp: true ha_integration_type: integration --- -Integrates [Sensibo](https://sensibo.com) devices into Home Assistant. +The **Sensibo** {% term integration %} integrates [Sensibo](https://sensibo.com) devices into Home Assistant. ## Prerequisites @@ -45,127 +45,180 @@ then in the Sensibo app log you will be able to distinguish between actions done in the app and actions done by Home Assistant. {% endtip %} +## Supported devices + +The **Sensibo** {% term integration %} supports the following devices and accessories. + +- **Sensibo Sky**: Smart AC control device. +- **Sensibo Air**: Smart AC control device. +- **Sensibo Air Pro**: Smart AC control device with air quality monitoring. +- **Sensibo Pure**: Smart air purifier. +- **Sensibo Elements**: Smart air quality monitoring. +- **Sensibo Room Sensor**: Motion sensor and temperature readings (needs to be connected with an Air device). + {% include integrations/config_flow.md %} -## Binary sensors +{% configuration_basic %} +API key: + description: The previously created API key. +{% endconfiguration_basic %} -For motion sensors (supported by Sensibo Air devices), this integration provides the following sensors: +## Supported functionality -- Motion -- Alive -- Main sensor +{% note %} -For climate devices, these sensors are available: +Some entities are disabled by default, so you need to [enable them](/common-tasks/general/#to-enable-or-disable-a-single-entity) to use them. -- Room presence (for Air devices with an attached motion sensor) +Depending on device support, some entities might not be available as the device does not support them. -For Pure devices, these sensors are available: +{% endnote %} -- Pure Boost Enabled -- Pure Boost linked with AC -- Pure Boost linked with Presence -- Pure Boost linked with Outdoor Air Quality +### Sensibo Sky, Air, Air Pro, Pure, Elements and Room sensor -For all devices, these sensors are available: +#### Numbers -- Filter Clean Required +- **Temperature calibration**: Calibrate the temperature reading of the device. +- **Humidity calibration**: Calibrate the humidity reading of the device. -## Button +#### Updates -You can reset your filter check by using the button available on climate devices. +- **Firmware**: Firmware update available. -By pressing the button, you tell your device that you have cleaned or replaced the filter. +### Sensibo Sky, Air, Air Pro, Pure, and Elements -## Number entities +#### Binary sensors -By using the number entities you can calibrate the temperature and hunmidity of your device. +- **Filter clean required**: Does the A/C's filter need cleaning. -These entities are disabled by default. +#### Buttons -## Select entities +- **Reset filter**: Reset the filter timer after cleaning. -For supported devices, this integration provides support to set the following modes by the select entity: +#### Climates -- Light +- **[Name of device]**: The main climate entity for the device to control HVAC mode. -## Sensor entities +#### Selects -For all devices, these sensors are available: +- **Light**: Turn the light on/off or dim for the device. -- Filter last reset -- Feels Like -- Timer end time +#### Sensors -For motion sensors (supported by Sensibo Air devices), this integration provides the following sensors: +- **Filter last reset**: Last reset of the filter cleaning. -- Temperature -- Humidity +### Sensibo Sky, Air, and Air Pro -For diagnostics, not automatically displayed on dashboards, these sensors are available for motion sensors: +#### Sensors -- Voltage -- Rssi +- **Feels like**: Feels like temperature. +- **Timer end time**: End time of timer. +- **Climate React type**: Climate React type: Temperature, Feels like, or Humidity. +- **Climate React low temperature threshold**: Low temperature threshold setting for Climate react. +- **Climate React high temperature threshold**: High temperature threshold setting for Climate react. -For Pure devices, these sensors are available: +#### Switches -- PM2.5 -- Pure Boost Sensitivity +- **Timer**: Timer on/off. Enabling the timer, sets it to 10 minutes. +- **Climate React**: Enable/Disable Climate React. -For AirQ device, these sensors are available: +### Sensibo Air, Air Pro, and Elements -- TVOC -- CO2 +#### Sensors -For Element device, these sensors are available: +- **TVOC**: TVOC reading from device. +- **Co2**: Co2 reading from device. -- PM 2.5 -- TVOC -- CO2 -- Ethanol -- Air quality +### Sensibo Elements -For climate devices, these sensors are available: +#### Sensors -- Climate React low temperature threshold -- Climate React high temperature threshold +- **PM2.5**: PM2.5 reading from device. +- **Ethanol**: Ethanol reading from device. +- **Air quality**: Air quality based on readings from device. -## Switch entities +### Sensibo Pure -For climate devices, these switches are available: +#### Binary sensors -Support to enable/disable a timer to delay a start or stop (depending on the current state) of your device. +- **Pure Boost linked with AC**: Is Pure Boost linked with an A/C device. +- **Pure Boost linked with presence**: Is Pure Boost linked to presence. +- **Pure Boost linked with indoor air quality**: Is Pure Boost linked with indoor air quality. +- **Pure Boost linked with outdoor air quality**: Is Pure Boost linked with outdoor air quality. -The switch uses a timer of 60 minutes delay. You can choose a custom delay using the custom `sensibo.enable_timer` action. See [Timer](#timer). +#### Sensors -Support to enable/disable Climate React +- **Pure AQI**: PM2.5 level indicated as 'Good', 'Moderate', and 'Bad'. +- **Pure Boost Sensitivity**: Sensitivity for Pure Boost. -Usage of the Climate React switch requires that the action has been configured previously in the app or by using the custom `sensibo.enable_climate_react` action. See [Climate React](#climate-react) +#### Switches -For Pure devices, this integration provides support to enable/disable Pure Boost. +- **Pure Boost**: Enable/Disable Pure Boost. -To customize the settings of Pure Boost, you can use the custom `sensibo.enable_pure_boost` action. See [Pure Boost](#pure-boost) +### Sensibo Room sensor -## Custom actions +#### Binary sensors + +- **Motion**: Is there motion +- **Connectivity**: Is the motion sensor alive and connected +- **Main sensor**: Is the connected motion sensor the main sensor for the connected Air device. +- **Room occupied**: Is there presence in the room of the connected Air device. + +## Actions ### Get device mode capabilities -As the below custom actions [Full state](#full-state) and [Climate react](#climate-react) both require their inputs to be exactly what the API requires, this custom action will provide the capabilities for the device for a certain HVAC mode to help the users on using those actions properly. +As the below custom actions [Full state](#set-full-state) and [Climate react](#enable-climate-react) both require their inputs to match the API requirements precisely, this custom action will provide the capabilities for the device for a certain HVAC mode to help the users on using those actions properly. + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +HVAC mode: + description: Select the HVAC mode for which you want to get the capabilities. +{% endconfiguration_basic %} + +**Proposed action use:** 1. Go to [Developer Tools](https://my.home-assistant.io/redirect/server_controls/). 2. Switch to the **Actions** page. 3. Use the `sensibo.get_device_capabilities` action. 4. Select the `climate` entity as the target. 5. Select the `hvac_mode` from the available list. -6. Select **Perform action** to retrieve the available options per capability for that particular `climate` entity. +6. Select **Perform action** to retrieve the available options. +7. Copy the case-sensitive options as needed to other action calls, automations or scripts. -From the provided dictionary, copy the case-sensitive options as needed into other action calls used in automations or scripts. +### Set full state -### Full state +You can send a full state command to **Sensibo** instead of single commands using the `sensibo.full_state` action. -You can send a full state command to Sensibo instead of single commands using the `sensibo.full_state` action. +{% note %} All fields are required to be according to Sensibo API specifications and are case-sensitive. +Only provide the fields which are supported by the device. + +{% endnote %} + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +HVAC mode: + description: Select the HVAC mode for which you want to get the capabilities. +Target temperature: + description: Provide a target temperature if applicable. +Fan mode: + description: Provide a fan mode if applicable. +Swing mode: + description: Provide a swing mode if applicable. +Horizontal swing mode: + description: Provide a horizontal swing mode if applicable. +Light: + description: Provide a setting for the light if applicable. +{% endconfiguration_basic %} + {% tip %} Use the [Get device mode capabilities](#get-device-mode-capabilities) action to provide a list of capabilities. @@ -174,29 +227,88 @@ Use the [Get device mode capabilities](#get-device-mode-capabilities) action to ### Assume state -For devices which are also controlled in other ways or often goes out of sync with Sensibo there is a `sensibo.assume_state` action. +An HVAC device often has a manual remote or other means of control which can put **Sensibo** out of sync with the HVAC device. -With this action you can tell Sensibo if your device is currently running or not without sending a new command to you device. +Use the `sensibo.assume_state` action to tell **Sensibo** if the HVAC device is currently on or off without sending a control to the actual device. -### Pure Boost +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +State: + description: Select if the HVAC device is on or off. +{% endconfiguration_basic %} + +### Enable Pure Boost You can configure your Pure Boost settings using the `sensibo.enable_pure_boost` action. -- Enable Pure Boost will enable the action with configured settings +{% note %} -Using Geo integration for Pure Boost is only possible by pre-configuration of Presence within the app. +AC integration and Geo integration needs to be pre-configured via the app before first use. -### Timer +{% endnote %} -You can enable a timer with a custom delay using the `sensibo.enable_timer` action that is provided. +**Action configuration:** -### Climate React +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +AC integration: + description: Integrate with a HVAC device. +Geo integration: + description: Integrate with presence. +Indoor air quality: + description: Integrate with indoor air quality. +Outdoor air quality: + description: Integrate with outdoor air quality. +Sensitivity: + description: Set the sensitivity to `Normal` or `Sensitive`. +{% endconfiguration_basic %} + +### Enable timer + +You can enable a timer to turn the HVAC device on or off for a certain time, using the `sensibo.enable_timer` action that is provided. + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +Minutes: + description: Number of minutes to turn the device on or off. + mandatory: true +{% endconfiguration_basic %} + +### Enable Climate React You can configure your Climate React settings using the `sensibo.enable_climate_react` action. -- Configuring this action also turns Climate React on +{% note %} -When using the action, the state needs to be set to precisely what Sensibo API expects. The first time it's recommended to use the app to configure it. +Configuring this action also turns Climate React on. + +When using the action, the state needs to be set to precisely what Sensibo API expects. The first time, it's recommended to use the app to configure it. + +{% endnote %} + +**Action configuration:** + +{% configuration_basic %} +Target: + description: Select the Sensibo climate entity. +Threshold high: + description: When the trigger goes above this value. +State high threshold: + description: The full state to configure above the high threshold. +Threshold low: + description: When the trigger goes below this value. +State low threshold: + description: The full state to configure below the low threshold. +Trigger type: + description: The trigger type (`temperature`, `feelsLike`, or `humidity`). +{% endconfiguration_basic %} {% tip %} @@ -204,7 +316,7 @@ Use the [Get device mode capabilities](#get-device-mode-capabilities) action to {% endtip %} -Example for low threshold state: +**Example full state:** {% raw %} @@ -221,9 +333,11 @@ light: "on" {% endraw %} -## Adding a quick switch example +## Examples -If you want a "Quick Switch" to turn your AC On / Off, you can do that using the following `Switch Template`: +### Template switch to turn HVAC device on or off + +A simple switch which has `heat` or `off` as mode. {% raw %} @@ -233,13 +347,13 @@ switch: switches: ac: friendly_name: "AC" - value_template: "{{ is_state('climate.ac', 'cool') or is_state('climate.ac', 'heat') or is_state('climate.ac', 'dry') or is_state('climate.ac', 'fan_only') }}" + value_template: "{{ is_state('climate.ac', 'heat') }}" turn_on: action: climate.set_hvac_mode target: entity_id: climate.ac data: - hvac_mode: "cool" + hvac_mode: "heat" turn_off: action: climate.set_hvac_mode target: @@ -249,3 +363,76 @@ switch: ``` {% endraw %} + +### Start the timer for 30 minutes when I get home + +{% raw %} + +```yaml +automation: + alias: "Example timer" + triggers: + - trigger: zone + entity_id: person.me + zone: zone.home + event: enter + actions: + - action: sensibo.enable_timer + data: + minutes: 30 + target: + entity_id: climate.hvac_device +``` + +{% endraw %} + +### Set a full state of the HVAC device at 6pm + +{% raw %} + +```yaml +automation: + alias: "Example full state" + triggers: + - trigger: time + at: "18:00:00" + actions: + - action: sensibo.full_state + data: + mode: "heat" + target_temperature: 23 + fan_mode: "medium" + swing_mode: "fixedMiddleTop" + horizontal_swing_mode: "fixedCenter" + light: "off" + target: + entity_id: climate.hvac_device +``` + +{% endraw %} + +## Data fetching and limitations + +Data is {% term polling polled %} from the **Sensibo** API once every minute for all devices. + +If {% term polling %} cannot happen because of no connectivity or a malfunctioning API, it will retry a few times before failing. +The user can use the [`homeassistant.update_entity`](homeassistant#action-homeassistantupdate_entity) action to manually try again later, in the case the user has solved the connectivity issue. + +## Troubleshooting + +This service is reliant on an internet connection and that the **Sensibo** API is available. Here are the things you can try before raising an issue: + +- Check that internet is available in your Home Assistant instance. +- Check that the **Sensibo** API is available by accessing the [Sensibo API page](https://home.sensibo.com/api/v1/users/me). If you have previously logged in to Sensibo web, you will get a JSON back with the provided information about your account. If not logged in, the API will respond with `login_required`. +- Use `curl` in a terminal on your Home Assistant instance using the same URL as previously opened in the browser. `curl https://home.sensibo.com/api/v1/users/me` + +### Specific log entries + +**Log entry:** `Device [name of device] not correctly registered with remote on Sensibo cloud.` + +When setting up a device the first time, a `remote` needs to be defined for the device in the **Sensibo** app, either automatically or manually. +The device will appear in Home Assistant, but won't be usable as no HVAC modes can be selected. + +## Remove the integration + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/sensor.markdown b/source/_integrations/sensor.markdown index f10fe165a4b..d535faa6d62 100644 --- a/source/_integrations/sensor.markdown +++ b/source/_integrations/sensor.markdown @@ -61,8 +61,9 @@ The following device classes are supported for sensors: - **data_size**: Data size in bit, kbit, Mbit, Gbit, B, kB, MB, GB, TB, PB, EB, ZB, YB, KiB, MiB, GiB, TiB, PiB, EiB, ZiB or YiB - **date**: Date string (ISO 8601) - **distance**: Generic distance in km, m, cm, mm, mi, nmi, yd, or in -- **duration**: Duration in d, h, min, s, or ms +- **duration**: Duration in d, h, min, s, ms, or µs - **energy**: Energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal +- **energy_distance**: Energy per distance in kWh/100km, mi/kWh or km/kWh. - **energy_storage**: Stored energy in J, kJ, MJ, GJ, mWh, Wh, kWh, MWh, GWh, TWh, cal, kcal, Mcal, or Gcal - **enum**: Has a limited set of (non-numeric) states - **frequency**: Frequency in Hz, kHz, MHz, or GHz @@ -100,4 +101,5 @@ The following device classes are supported for sensors: - **volume_storage**: Generic stored volume in L, mL, gal, fl. oz., m³, ft³, or CCF - **water**: Water consumption in L, gal, m³, ft³, or CCF - **weight**: Generic mass in kg, g, mg, µg, oz, lb, or st +- **wind_direction**: Wind direction in ° - **wind_speed**: Wind speed in Beaufort, ft/s, km/h, kn, m/s, or mph diff --git a/source/_integrations/sensor.mqtt.markdown b/source/_integrations/sensor.mqtt.markdown index 06fc7dee130..1cf23ea7a42 100644 --- a/source/_integrations/sensor.mqtt.markdown +++ b/source/_integrations/sensor.mqtt.markdown @@ -43,7 +43,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -52,7 +52,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -149,7 +149,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -157,7 +157,7 @@ json_attributes_topic: required: false type: string last_reset_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the last_reset. When `last_reset_value_template` is set, the `state_class` option must be `total`. Available variables: `entity_id`. The `entity_id` can be used to reference the entity's attributes." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the last_reset. When `last_reset_value_template` is set, the `state_class` option must be `total`. Available variables: `entity_id`. The `entity_id` can be used to reference the entity's attributes." required: false type: template name: @@ -213,7 +213,7 @@ unit_of_measurement: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the value. If the template throws an error, the current state will be used instead." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the value. If the template throws an error, the current state will be used instead." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/sensor.rest.markdown b/source/_integrations/sensor.rest.markdown index 346285725ff..51b8b4fb04f 100644 --- a/source/_integrations/sensor.rest.markdown +++ b/source/_integrations/sensor.rest.markdown @@ -172,7 +172,7 @@ In this section you find some real-life examples of how to use this sensor. ### External IP address -You can find your external IP address using the service [JSON Test](https://www.jsontest.com/) at their [http://ip.jsontest.com/](http://ip.jsontest.com/) URL. +You can find your external IP address using the [ipify](https://www.ipify.org) service for both IPv4 and IPv6. {% raw %} @@ -182,6 +182,11 @@ sensor: name: "External IP" resource: "https://api.ipify.org/?format=json" value_template: "{{ value_json.ip }}" + + - platform: rest + name: "External IPv6" + resource: "https://api6.ipify.org/?format=json" + value_template: "{{ value_json.ip }}" ``` {% endraw %} diff --git a/source/_integrations/sensorpush_cloud.markdown b/source/_integrations/sensorpush_cloud.markdown new file mode 100644 index 00000000000..8fa471d9fde --- /dev/null +++ b/source/_integrations/sensorpush_cloud.markdown @@ -0,0 +1,57 @@ +--- +title: SensorPush Cloud +description: Instructions on how to integrate SensorPush Cloud devices into Home Assistant. +ha_category: + - Sensor +ha_release: 2025.3 +ha_iot_class: Cloud Polling +ha_codeowners: + - '@sstallion' +ha_domain: sensorpush_cloud +ha_config_flow: true +ha_platforms: + - sensor +ha_integration_type: integration +ha_quality_scale: bronze +--- + +Integrates [SensorPush Cloud](https://www.sensorpush.com/) devices into Home Assistant. + +## Prerequisites + +A [G1 WiFi Gateway](https://www.sensorpush.com/products/p/g1-gateway) is required to make use of the Cloud API. To activate API access, log in to the [Gateway Cloud Dashboard](https://dashboard.sensorpush.com/) and agree to the terms of service. + +Sensor entities (temperature, humidity, barometric pressure) will not be available to Home Assistant until you have activated the device with the SensorPush app on iOS or Android. + +## Supported devices + +- [HT1 Temperature and Humidity Smart Sensor](https://www.sensorpush.com/products/p/ht1) +- [HT.w Water-Resistant Temperature / Humidity Smart Sensor](https://www.sensorpush.com/products/p/ht-w) +- [HTP.xw Extreme Accuracy Water-Resistant Temperature / Humidity / Barometric Pressure Smart Sensor](https://www.sensorpush.com/products/p/htp-xw) + +{% include integrations/config_flow.md %} + +## Sensors + +For each device, the following *sensors* are created: + +| Sensor | Description | +| :--------------------- | :------------------------------------------------------------ | +| `altitude` | Measures the altitude. (disabled by default) | +| `atmospheric_pressure` | Measures the barometric pressure. (disabled by default) | +| `battery_voltage` | Measures the battery voltage. (disabled by default) | +| `dewpoint` | Measures the dew point. (disabled by default) | +| `humidity` | Measures the relative humidity. | +| `signal_strength` | Measures the Bluetooth signal strength. (disabled by default) | +| `temperature` | Measures the temperature. | +| `vapor_pressure` | Measures the vapor-pressure deficit. (disabled by default) | + +## Known limitations + +- `atmospheric_pressure` is not available on HT1 and HT.w series devices. + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/seventeentrack.markdown b/source/_integrations/seventeentrack.markdown index c171cd45bb4..975156772ec 100644 --- a/source/_integrations/seventeentrack.markdown +++ b/source/_integrations/seventeentrack.markdown @@ -62,7 +62,7 @@ type: markdown title: Packages in transit content: > {% for package in - states.sensor['seventeentrack_in_transit'].attributes.packages %} + states.sensor['17track_in_transit'].attributes.packages %} >- **{{ package.friendly_name }} ({{ package.tracking_number }}):** {{ package.info_text }} diff --git a/source/_integrations/shell_command.markdown b/source/_integrations/shell_command.markdown index bc720ca3e7c..c19c8da114c 100644 --- a/source/_integrations/shell_command.markdown +++ b/source/_integrations/shell_command.markdown @@ -109,7 +109,7 @@ The following example shows how the shell command response may be used in automa ```yaml # Create a ToDo notification based on file contents automation: - - alias: "run_set_ac" + - alias: "run_get_file_contents" triggers: - ... actions: diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown index 6ada2d20a97..cbe1b3a8db2 100644 --- a/source/_integrations/shelly.markdown +++ b/source/_integrations/shelly.markdown @@ -51,7 +51,9 @@ Integrate [Shelly devices](https://shelly.com) into Home Assistant. ## Shelly device generations -There are three generations of devices and all generations are supported by this integration. There are some differences in how devices should be configured and in the naming of entities and devices between generations. +There are four generations of devices and all generations are supported by this integration. There are some differences in how devices should be configured and in the naming of entities and devices between generations. + +Shelly BLU series devices (e.g. Shelly BLU H&T) are not supported; please use BTHome integration to configure such devices with Home Assistant. The exception to this is Shelly BLU TRV, which is supported by this integration via Shelly BLU Gateway Gen3. ## Shelly device configuration (generation 1) @@ -70,9 +72,9 @@ The list below will help you diagnose and fix the problem: - The missing push updates may be related to the WiFi network range. If using a WiFi network with several access points, enable **Internet & Security** >> **WiFi Client AP Roaming** option. Consider moving Shelly device closer to the WiFi access point. Consider adding another WiFi access point, which will improve the connection quality with the device. - If you think your Shelly devices are working correctly and don't want to change your network/configuration, you can ignore the repair issue. Still, you must know you are giving up the best experience of using first-generation Shelly devices with Home Assistant. -## Shelly device configuration (generation 2 and 3) +## Shelly device configuration (generation 2+) -Generation 2 and 3 devices use the `RPC` protocol to communicate with the integration. **Battery-operated devices** (even if USB connected) may need manual outbound WebSocket configuration if Home Assistant cannot correctly determine your instance's internal URL or the outbound WebSocket was previously configured for a different Home Assistant instance. In this case, navigate to the local IP address of your Shelly device, **Settings** >> **Connectivity** >> **Outbound WebSocket** and check the box **Enable Outbound WebSocket**, under server enter the following address: +Generation 2+ devices use the `RPC` protocol to communicate with the integration. **Battery-operated devices** (even if USB connected) may need manual outbound WebSocket configuration if Home Assistant cannot correctly determine your instance's internal URL or the outbound WebSocket was previously configured for a different Home Assistant instance. In this case, navigate to the local IP address of your Shelly device, **Settings** >> **Connectivity** >> **Outbound WebSocket** and check the box **Enable Outbound WebSocket**, under server enter the following address: `ws://` + `Home_Assistant_local_ip_address:Port` + `/api/shelly/ws` (for example: `ws://192.168.1.100:8123/api/shelly/ws`), click **Apply** to save the settings. In case your installation is set up to use SSL encryption (HTTP**S** with certificate), an additional `s` needs to be added to the WebSocket protocol, too, so that it reads `wss://` (for example: `wss://192.168.1.100:8123/api/shelly/ws`). @@ -83,13 +85,13 @@ Integration is communicating directly with the device; cloud connection is not n ## Bluetooth Support -Shelly generation 2 and 3 devices not battery-powered can act as a Bluetooth proxy for advertisements. Active or passive listening can be enabled in the options flow. +Shelly generation 2+ devices that are not battery-powered can act as a Bluetooth proxy for advertisements. Active or passive listening can be enabled in the options flow. {% include integrations/option_flow.md %} ## Range Extender Support -Shelly generation 2 and 3 devices that are not battery-powered can act as a Range Extender. +Shelly generation 2+ devices that are not battery-powered can act as a Range Extender. Devices of the same generations can be configured via those Range Extenders specifying a custom TCP port during the configuration flow. Currently, only static IP or DHCP reserved IP are supported for the main device. @@ -119,7 +121,7 @@ Names are set from the device web page: - Channel name for single-channel devices can be set in **Settings** >> **CHANNEL NAME** - Channel name for multi-channel devices can be set in **Settings** >> **CHANNEL NAME** after selecting the channel, by clicking on the channel name. -## Entity naming (generation 2 and 3) +## Entity naming (generation 2+) The integration uses the following strategy to name its entities: @@ -140,18 +142,36 @@ Shelly 2PM Gen3 supports `tilt` for `cover` entities. To enable this feature, yo Depending on how a device's button type is configured, the integration will create binary sensors corresponding to those inputs. binary sensors are not created when the button type is `momentary` or `momentary_on_release`, for these types you need to use events for your automations. -### Binary input sensors (generation 2 and 3) +### Binary input sensors (generation 2+) -For generation 2 and 3 hardware it's possible to select if a device's input is connected to a button or a switch. Binary sensors are created only if the input mode is set to `switch`. When the input is of type `button` you need to use events for your automations. +For generation 2+ hardware, it's possible to select if a device's input is connected to a button or a switch. Binary sensors are created only if the input mode is set to `switch`. When the input is of type `button` you need to use events for your automations. ## Event entities (generation 1) If the **BUTTON TYPE** of the switch connected to the device is set to `momentary` or `detached switch`, the integration creates an event entity for this switch. You can use this entity in your automations. -## Event entities (generation 2 and 3) +## Event entities (generation 2+) If the **Input Mode** of the switch connected to the device is set to `Button`, the integration creates an event entity for this switch. You can use this entity in your automations. +Each script which generates events using [Shelly.emitEvent()](https://shelly-api-docs.shelly.cloud/gen2/Scripts/ShellyScriptLanguageFeatures#shellyemitevent) also gets an corresponding event entity. This entity is disabled by default. After changing a script, it's required to manually reload the device before new event types show up. + +For example, the following script will emit an event every time an input (button or switch) on the device is changed. + +```javascript +// Example shelly script +function eventHandler(event, userdata) { + if ( + typeof event.component === "string" && + event.component.substring(0, 5) === "input" + ) { + let id = Number(event.component.substring(6)); + Shelly.emitEvent("input_event", { id: id }); + } +} +Shelly.addEventHandler(eventHandler); +``` + ## Events If the **BUTTON TYPE** of the switch connected to the device is set to `momentary` or `detached switch`, integration fires events under the type `shelly.click` when the switch is used. You can use these events in your automations. @@ -243,11 +263,11 @@ Not all devices support all input events. You can check on [Shelly API Reference ## Appliance type (generation 1) -Shelly device relays are added to Home Assistant by default as `switch` entities. A relay can be added as a `light` entity if **Settings** >> **APPLIANCE TYPE** value is set to `light`. +Shelly device relays are added to Home Assistant by default as `switch` entities. A relay can be added as a `light` entity if **Settings** >> **APPLIANCE TYPE** value in the WebUI of the device is set to `light`. -## Consumption type (generation 2 and 3) +## Consumption type (generation 2+) -Shelly device relays are added to Home Assistant by default as `switch` entities. A relay can be added as a `light` entity if **EXTERNAL CONSUMPTION TYPE** value is set to `light`. +Shelly device relays are added to Home Assistant by default as `switch` entities. A relay can be added as a `light` entity if **EXTERNAL CONSUMPTION TYPE** value in the WebUI of the device is set to `light`. ## Light transition @@ -329,7 +349,7 @@ The integration supports the following virtual components: - `text` in `field` mode, for which a `text` platform entity is created - `text` in `label` mode, for which a `sensor` platform entity is created -## Scripts (generation 2 and 3) +## Scripts (generation 2+) For each device script, the integration creates a `switch` entity that allows you to control the script. These entities are disabled by default. diff --git a/source/_integrations/shopping_list.markdown b/source/_integrations/shopping_list.markdown index c1a29b36a8d..204c4848387 100644 --- a/source/_integrations/shopping_list.markdown +++ b/source/_integrations/shopping_list.markdown @@ -80,13 +80,13 @@ Sort all items by name in the shopping list. A `shopping_list_updated` event is triggered when items in the list are modified, with the following data payload attached to it. This can be used to trigger automations such as sending a push notification when someone adds an item to the shopping list, which when clicked, will open the list. -| Data payload attribute | Description | -| ---------------------- | ------------------------------------------------------------------------------------------------------------------ | -| `action` | What action was taken on the item. Either `add` for a new item being added, or `update` for an item being updated. | -| `item` | A dictionary containing details of the item that was updated. | -| `item.id` | A unique ID for this item | -| `item.name` | The text attached to the item, for example `Milk` | -| `item.complete` | A boolean indicated whether the item has been marked as complete. | +| Data payload attribute | Description | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `action` | What action was taken on the item. Either `add` for a new item being added, `update` for an item being updated, or `remove` for an item being removed. | +| `item` | A dictionary containing details of the item that was updated. | +| `item.id` | A unique ID for this item | +| `item.name` | The text attached to the item, for example `Milk` | +| `item.complete` | A boolean indicated whether the item has been marked as complete. | {% raw %} @@ -107,3 +107,12 @@ actions: ``` {% endraw %} + +You can also trigger an automation when a `shopping_list_updated` event was triggered by any of the following actions: + +- `clear`: A completed item was cleared from the list. +- `sorted`: The items in the list were sorted by name. +- `reorder`: An item has been reordered in the list. +- `update_list`: All items have been updated. + +In these cases, the event does not return a list item. \ No newline at end of file diff --git a/source/_integrations/simu.markdown b/source/_integrations/simu.markdown index d5467df41ba..34b089ad4d9 100644 --- a/source/_integrations/simu.markdown +++ b/source/_integrations/simu.markdown @@ -24,11 +24,6 @@ ha_supporting_integration: Overkiz ha_release: 2022.2 ha_codeowners: - '@imicknl' - - '@vlebourl' - - '@tetienne' - - '@nyroDev' - - '@tronix117' - - '@alexfp14' ha_config_flow: true ha_platforms: - alarm_control_panel diff --git a/source/_integrations/siren.mqtt.markdown b/source/_integrations/siren.mqtt.markdown index 342ee7782f5..730e2b5dead 100644 --- a/source/_integrations/siren.mqtt.markdown +++ b/source/_integrations/siren.mqtt.markdown @@ -48,7 +48,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -57,7 +57,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -69,11 +69,11 @@ available_tones: required: false type: list command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate a custom payload to send to `command_topic`. The variable `value` will be assigned with the configured `payload_on` or `payload_off` setting. The siren turn on action parameters `tone`, `volume_level` or `duration` can be used as variables in the template. When operation in optimistic mode the corresponding state attributes will be set. Turn on parameters will be filtered if a device misses the support. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate a custom payload to send to `command_topic`. The variable `value` will be assigned with the configured `payload_on` or `payload_off` setting. The siren turn on action parameters `tone`, `volume_level` or `duration` can be used as variables in the template. When operation in optimistic mode the corresponding state attributes will be set. Turn on parameters will be filtered if a device misses the support. required: false type: template command_off_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate a custom payload to send to `command_topic` when the siren turn off action is called. By default `command_template` will be used as template for action turn off. The variable `value` will be assigned with the configured `payload_off` setting. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate a custom payload to send to `command_topic` when the siren turn off action is called. By default `command_template` will be used as template for action turn off. The variable `value` will be assigned with the configured `payload_off` setting. required: false type: template command_topic: @@ -157,7 +157,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -227,7 +227,7 @@ state_topic: required: false type: string state_value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's state from the `state_topic`. To determine the siren's state result of this template will be compared to `state_on` and `state_off`. Alternatively `value_template` can be used to render to a valid JSON payload." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's state from the `state_topic`. To determine the siren's state result of this template will be compared to `state_on` and `state_off`. Alternatively `value_template` can be used to render to a valid JSON payload." required: false type: template support_duration: diff --git a/source/_integrations/sky_remote.markdown b/source/_integrations/sky_remote.markdown index 322e9a7ec90..18b9ba28269 100644 --- a/source/_integrations/sky_remote.markdown +++ b/source/_integrations/sky_remote.markdown @@ -22,7 +22,7 @@ The **Sky Remote** {% term integration %} lets you control a [Sky](https://www.s ## Supported models -This integration is intended to control all Sky satellite receiver boxes with a LAN port. It will not control Sky stream pucks. +This integration is intended to control Sky+ HD and Sky Q satellite receiver boxes with a LAN port. It will not control Sky stream pucks. {% include integrations/config_flow.md %} diff --git a/source/_integrations/slack.markdown b/source/_integrations/slack.markdown index 046de9275af..a2867e109c8 100644 --- a/source/_integrations/slack.markdown +++ b/source/_integrations/slack.markdown @@ -106,7 +106,7 @@ sequence: - action: notify.YOUR_SLACK_TEAM data: message: "Fallback Text" - target: "#test-channel" + target: "#test-channel" # Single channel target title: "Reminder" data: blocks: @@ -122,6 +122,38 @@ Update the blocks array with valid Slack blocks. The easiest way to create this Create a duplicate of this script to use for different messages, and different channels (the door was opened in #security, the light was left on on #lights, etc). +You can also send messages to multiple targets (channels and/or users) at once: + +```yaml +alias: "Notify: Multiple Targets Message" +sequence: + - action: notify.YOUR_SLACK_TEAM + data: + message: "Alert: Motion detected!" + target: + - "#security" # Channel by name + - "C01234ABCD" # Channel by ID + - "U5678EFGH" # Direct message to user by ID + title: "Security Alert" + data: + blocks: + - type: section + text: + type: mrkdwn + text: "Motion detected in the backyard camera" +``` + +### Target Types + +The `target` field accepts either a single value or a list of values. Each target can be: + +- A channel name with a `#` prefix (e.g., `#general`) +- A channel name without the `#` prefix (e.g., `general`) +- A channel ID (e.g., `C01234ABCD`) +- A user ID for direct messages (e.g., `U5678EFGH`) + +When sending files, make sure you have the proper permissions set up as described in the Setup section. + ### Icons Slack uses the standard emoji sets used [here](https://slack.com/intl/en-gb/help/articles/202931348-Use-emoji-and-reactions#add-emoji-to-your-messages). Alternatively a publicly accessible URL may be used. diff --git a/source/_integrations/slide_local.markdown b/source/_integrations/slide_local.markdown index 4991004a751..77aadac796b 100644 --- a/source/_integrations/slide_local.markdown +++ b/source/_integrations/slide_local.markdown @@ -10,9 +10,13 @@ ha_codeowners: - '@dontinelli' ha_domain: slide_local ha_platforms: + - button - cover -ha_integration_type: integration + - diagnostics + - switch +ha_integration_type: device ha_zeroconf: true +ha_quality_scale: gold --- The Slide Local {% term integration %} allows you to integrate your [Slide](https://slide.store/) devices in Home Assistant using the local API. @@ -70,7 +74,7 @@ The integration fetches data from the device every 15 seconds. ## Known limitations -The integration only provides connection with Slide devices via the local API. For connecting via the cloud API, please use the [Slide](./slide) integration. +The integration only provides connection with Slide devices via the local API. The cloud API is no longer available. ## Remove integration diff --git a/source/_integrations/sma.markdown b/source/_integrations/sma.markdown index e648b37b953..98d48fadf94 100644 --- a/source/_integrations/sma.markdown +++ b/source/_integrations/sma.markdown @@ -9,8 +9,10 @@ ha_release: 0.36 ha_codeowners: - '@kellerza' - '@rklomp' + - '@erwindouna' ha_domain: sma ha_platforms: + - diagnostics - sensor ha_integration_type: integration --- diff --git a/source/_integrations/smart_rollos.markdown b/source/_integrations/smart_rollos.markdown new file mode 100644 index 00000000000..bb7eef3076e --- /dev/null +++ b/source/_integrations/smart_rollos.markdown @@ -0,0 +1,22 @@ +--- +title: Smart Rollos +description: Connect and control your Smart Rollos devices using the Motionblinds integration +ha_category: + - Cover +ha_domain: smart_rollos +ha_integration_type: virtual +ha_supporting_domain: motion_blinds +ha_supporting_integration: Motionblinds +ha_release: 2020.12 +ha_codeowners: + - '@starkillerOG' +ha_config_flow: true +ha_platforms: + - button + - cover + - sensor +ha_iot_class: Local Push +ha_dhcp: true +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/smarther.markdown b/source/_integrations/smarther.markdown index 36899b8a7e4..ce30e9f6b84 100644 --- a/source/_integrations/smarther.markdown +++ b/source/_integrations/smarther.markdown @@ -3,6 +3,7 @@ title: Smarther description: Connect and control your Smarther devices using the Netatmo integration ha_category: - Binary sensor + - Button - Camera - Climate - Cover @@ -24,6 +25,7 @@ ha_codeowners: ha_config_flow: true ha_platforms: - binary_sensor + - button - camera - climate - cover diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 2d2b7ad3691..4935069d6b0 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -4,148 +4,96 @@ description: Instructions on setting up SmartThings within Home Assistant. featured: true ha_category: - Binary sensor + - Button - Climate - Cover + - Event - Fan - Hub - Light - Lock + - Media player + - Number - Scene + - Select - Sensor - Switch + - Update + - Valve ha_release: 0.87 ha_iot_class: Cloud Push ha_config_flow: true ha_domain: smartthings ha_platforms: - binary_sensor + - button - climate - cover + - event - fan - light - lock + - media_player + - number - scene + - select - sensor - switch + - update + - valve ha_dhcp: true ha_integration_type: integration --- -SmartThings is integrated into Home Assistant through the SmartThings Cloud API. The features of this integration include: - -1. Controlling SmartThings devices as Home Assistant entities ([see platforms for supported devices and capabilities](#platforms)). -2. Entities automatically synchronized upon restart of Home Assistant when changed in SmartThings. -3. Support for multiple SmartThings accounts and locations with each represented as an integration instance in Home Assistant. -4. No brokers, bridges, or additional dependencies. +[SmartThings](https://www.samsung.com/smartthings/) is a home automation platform for connecting with Samsung or third-party devices. ## Prerequisites -1. A SmartThings [personal access token](https://account.smartthings.com/tokens). -2. An internet accessible incoming webhook or active Home Assistant Cloud subscription. - -### Personal Access Token (PAT) - -The PAT is used to create a Home Assistant SmartApp in your SmartThings account during setup of the integration. - -1. Log into the [personal access tokens page](https://account.smartthings.com/tokens) and select **[Generate new token](https://account.smartthings.com/tokens/new)**. -2. Enter a token name (can be whatever you want), for example, 'Home Assistant' and select the following authorized scopes: - - Devices (all) - - Installed Applications (all) - - Apps (all) - - Locations (all) - - Scenes (all) - - Schedules (all) -3. Select **Generate token**. When the token is displayed copy and save it somewhere safe (such as your keystore) as you will not be able to retrieve it again. - -### Webhook - -This integration requires an internet accessible incoming webhook to receive push updates from SmartThings. The preferred approach is to subscribe to [Home Assistant Cloud (Nabu Casa)](https://www.nabucasa.com/) and the integration will configure and use a cloudhook automatically. Alternatively, you will have to configure and setup an internet accessible webhook in Home Assistant as described below: - -1. Setup [remote access](/docs/configuration/remote/) via a domain name secured with SSL. *Self-signed SSL certificates are not supported by the SmartThings Cloud API.* -2. Set the external URL in the Home Assistant [configuration](/integrations/homeassistant/#external_url) to the URL that Home Assistant is available on the internet (this must start with `https://`). If you do not use Nabu Casa you must configure your network to allow TCP traffic from the internet to reach the IP address and port of the device running Home Assistant. - -## Setup instructions - -After completing the prerequisite steps above, you are ready to setup the integration! See [troubleshooting](#troubleshooting) if you are having issues setting up the integration. +- You need a Samsung account and account credentials. +- To connect devices, you need the SmartThings app installed on your phone. {% include integrations/config_flow.md %} -1. Confirm the callback URL is correct. If using Home Assistant Cloud, it will start with `https://hooks.nabu.casa`. If the URL is not correct, update your Home Assistant configuration, restart, and try again. -2. Enter your Personal Access Token. -3. Select the SmartThings Location to add to Home Assistant. -4. On the window that opens: - 1. Login with your SmartThings account (if not already logged in). - 2. Optionally change the display name and select **Done** at the bottom of the screen. - 3. Authorize the integration by selecting **Allow** on the bottom right of the screen. - 4. Select **Close Window** or close it manually. -5. Back in Home Assistant select **Finish**. +## Supported functionality -{% note %} -If you want to integrate additional SmartThings accounts or locations, repeat the steps above. -{% endnote %} - -## Removal instructions - -To remove the integration from Home Assistant, select the instance from the Home Assistant Integrations page and select the trash icon on the upper right corner. Alternatively, you can remove the SmartApp from the location within the SmartThings application. If the Home Assistant instance that setup the integration is no longer running or functioning, you will need to use this [utility to remove the orphaned SmartApps in your SmartThings account](https://pypi.org/project/hass-smartthings-remove/). - -## Events - -The SmartThings integration triggers events for select device capabilities. - -### smartthings.button - -The integration will trigger an event when a device with the [button](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability is actuated and can be used to trigger automations within Home Assistant. Below is an example of the data payload: - -```json -{ - "component_id": "main", - "device_id": "42a16cf2-fef7-4ee8-b4a6-d32cb65474b7", - "location_id": "2a54b9fa-f66c-42d9-8488-d8f036b980c8", - "value": "pushed", - "name": "Scene Button" -} -``` - -| Attribute | Description | -| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `component_id` | Describes which integration of the device triggered the event. `main` represents the parent device. For devices with child-devices, this attribute identifies the child that raised the event. For multi-button devices, the current SmartThings API will no longer pass the ButtonNumber but use a child component_id for each button. The device handler installed on SmartThings must be able to create those child components. | -| `device_id` | The unique id of the device in SmartThings. This can be located in the Home Assistant device registry or in the [SmartThings Developer Workspace](https://smartthings.developer.samsung.com/workspace/). | -| `location_id` | The unique id of the location the device is part of. This can be found in the configuration entry registry or in the [SmartThings Developer Workspace](https://smartthings.developer.samsung.com/workspace/). | -| `value` | Describes the action taken on the button. See the [button](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#button) capability reference for a list of possible values (not all are supported by every device). | -| `name` | The name given to the device in SmartThings. | - -Event data payloads are logged at the debug level, see [debugging](#debugging) for more information. - -## Platforms - -SmartThings represents devices as a set of [capabilities](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference) and the SmartThings integration maps those to entity platforms in Home Assistant. A single device may be represented by one or more platforms. +SmartThings represents devices as a set of [capabilities](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference). The SmartThings integration maps those capabilities to entities in Home Assistant. A single device may be represented by one or more entities. - [Binary sensor](#binary-sensor) +- [Button](#button) - [Climate](#climate) - [Cover](#cover) - [Fan](#fan) - [Light](#light) - [Lock](#lock) +- [Media player](#media-player) +- [Number](#number) +- [Select](#select) - [Sensor](#sensor) - [Scene](#scene) - [Switch](#switch) - -Support for additional platforms will be added in the future. +- [Valve](#valve) ### Binary sensor -The SmartThings binary sensor platform lets you view devices that have binary sensor-related capabilities. A binary sensor entity will be created for each attribute (below) supported by the device. +In Home Assistant, a binary sensor entity will be created for each of the following SmartThings capabilities: -| Capability | Attribute | On-Value | -| ----------------------------------------------------------------------------------------------------------------------------- | -------------- | ---------- | -| [`accelerationSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#accelerationSensor) | `acceleration` | `active` | -| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | `contact` | `open` | -| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | `filterStatus` | `replace` | -| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | `motion` | `active` | -| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | `presence` | `present` | -| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | `tamper` | `detected` | -| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | `valve` | `open` | -| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | `water` | `wet` | +| SmartThings capability | +|---------------------------------------------------------------------------------------------------------------------------------| +| `accelerationSensor` | +| [`contactSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#contactSensor) | +| [`filterStatus`](https://developer.smartthings.com/docs/devices/capabilities/proposed#filterStatus) | +| [`motionSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#motionSensor) | +| [`presenceSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#presenceSensor) | +| `samsungce.kidsLock` | +| `switch` (only for dryers and washers) | +| [`remoteControlStatus`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#remoteControlStatus) | +| [`tamperAlert`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tamperAlert) | +| [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) | +| [`waterSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#waterSensor) | + +### Button + +The SmartThings Button platform provides stop buttons for devices with the `ovenOperatingState` capability. ### Climate @@ -153,9 +101,9 @@ The SmartThings Climate platform lets you control devices that have air conditio #### Air Conditioners -For a SmartThings Air Conditioner to be represented by the climate platform, it must have all of the following required capabilities: +For a SmartThings Air Conditioner to be represented by the climate entity, it must have all of the following required capabilities. If it does not have all the capabilities, the features will be represented in Home Assistant as individual sensors instead of a climate entity. -| Capability | Climate Features | +| SmartThings capability | Related climate features in Home Assistant | | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) (required) | `hvac mode`, `hvac action` | | [`airConditionerFanMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerFanMode) (required) | `fan mode` | @@ -165,9 +113,9 @@ For a SmartThings Air Conditioner to be represented by the climate platform, it #### Thermostats -For a SmartThings thermostat to be represented by the climate platform, it must have all the capabilities from either "set a" _or_ "set b": +For a SmartThings thermostat to be represented by the climate entity, it must have all the capabilities from either "set a" _or_ "set b". If it does not have all the capabilities, the features will be represented in Home Assistant as individual sensors instead of a climate entity. -| Capability | Climate Features | +| SmartThings capability | Related climate features in Home Assistant | | --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | | [`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` | @@ -179,188 +127,159 @@ For a SmartThings thermostat to be represented by the climate platform, it must ### Cover -The SmartThings Cover platform lets you control devices that have open/close related capabilities. For a device to be represented by the cover platform, it must have one of the capabilities from "set a" below. +The SmartThings Cover platform lets you control devices that have open/close related capabilities. For a device to be represented by the cover entity, it must either have the `doorControl` or `windowShade` capability. Otherwise the features will be represented as individual sensors in Home Assistant. -| Capability | Cover Features | -| -------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | -| [`doorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) (set a) | `open` and `close` | -| [`garageDoorControl`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#garageDoorControl) (seb a) | `open` and `close` | -| [`windowShade`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) (set a) | `open` and `close` | -| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `position` | -| [`windowShadeLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference/#windowShadeLevel) | `position` | -| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery_level` (state attribute) | +| SmartThings capability | Related cover features in Home Assistant | +| -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | +| [`doorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#doorControl) | `open` and `close` | +| [`windowShade`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#windowShade) | `open` and `close` | +| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `position` | +| [`windowShadeLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference/#windowShadeLevel) | `position` | +| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery_level` (state attribute) | + +### Event + +The SmartThings Event platform will create entities for every button. It will show any button presses and allows you to automate on these events. ### Fan -The SmartThings Fan platform lets you control devices that have fan-related capabilities. For a SmartThings device to be represented by the fan platform, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. +The SmartThings Fan lets you control devices that have fan-related capabilities. For a SmartThings device to be represented by the fan entity, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. -| Capability | Fan Features | +| SmartThings capability | Related fan features in Home Assistant | | --------------------------------------------------------------------------------------------------------- | -------------------------------------------- | | [`fanSpeed`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#fanSpeed) | `speed` (`off`, `low`, `medium`, and `high`) | ### Light -The SmartThings Light platform lets you control devices that have light-related capabilities. For a SmartThings device to be represented by the light platform, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. +The SmartThings Light lets you control devices that have light-related capabilities. For a SmartThings device to be represented by the light entity, it must have one or more of the capabilities below in addition to the [`switch`](https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Switch) capability. -| Capability | Light Features | -| ------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | -| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `brightness` and `transition` | -| [`colorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorControl) | `color` | -| [`colorTemperature`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorTemperature) | `color_temp` | +| SmartThings capability | Related light features in Home Assistant | +| ------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | +| [`switchLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switchLevel) | `brightness` and `transition` | +| [`colorControl`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorControl) | `color` | +| [`colorTemperature`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#colorTemperature) | `color_temp` | ### Lock The SmartThings Lock platform lets you control devices that have the [`lock`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) capability, showing current lock status and supporting lock and unlock commands. +### Media player + +The SmartThings Media player lets you control devices that have media player-related capabilities. For a SmartThings device to be represented by the media player entity, it must have all required capabilities. + +| SmartThings capability | Related media player features in Home Assistant | +| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| [`audioMute`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioMute) (required) | `volume_mute` | +| [`audioTrackData`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioTrackData) (required) | `media_title` and `media_artist` | +| [`audioVolume`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) (required) | `volume_up`, `volume_down`, `volume_set` | +| [`mediaPlayback`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaPlayback) (required) | `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track` | +| [`mediaInputSource`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaInputSource) | `select_source` | +| [`mediaPlaybackRepeat`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaPlaybackRepeat) | `repeat_set` | +| [`mediaPlaybackShuffle`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#mediaPlaybackShuffle) | `shuffle_set` | +| [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) | `turn_on`, `turn_off` | + +### Number + +The SmartThings number platform lets you control the amount of washer rinse cycles. + +### Select + +The SmartThings Select platform can be used to remotely turn on a dryer and washer. Be aware that for them to work, the Remote control has to be turned on. + ### Sensor The SmartThings Sensor platform lets your view devices that have sensor-related capabilities. A Sensor entity is created for each attribute (below) supported by the device. -| Capability | Attributes | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | -| [`activityLightingMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#activityLightingMode) | `lightingMode` | -| [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) | `airConditionerMode` | -| [`airQualitySensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#airQualitySensor) | `airQuality` | -| [`alarm`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#alarm) | `alarm` | -| [`audioVolume`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) | `volume` | -| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | `battery` | -| [`bodyMassIndexMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyMassIndexMeasurement) | `bmiMeasurement` | -| [`bodyWeightMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyWeightMeasurement) | `bodyWeightMeasurement` | -| [`carbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonDioxideMeasurement) | `carbonDioxide` | -| [`carbonMonoxideDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonMonoxideDetector) | `carbonMonoxide` | -| [`carbonMonoxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#carbonMonoxideMeasurement) | `carbonMonoxideLevel` | -| [`dishwasherOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dishwasherOperatingState) | `machineState`, `dishwasherJobState` and `completionTime` | -| [`dryerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerMode) | `dryerMode` | -| [`dryerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerOperatingState) | `machineState`, `dryerJobState` and `completionTime` | -| [`dustSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#dustSensor) | `fineDustLevel` and `dustLevel` | -| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | `energy` | -| [`equivalentCarbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#equivalentCarbonDioxideMeasurement) | `equivalentCarbonDioxideMeasurement` | -| [`formaldehydeMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#formaldehydeMeasurement) | `formaldehydeLevel` | -| [`gasMeter`](https://developer.smartthings.com/docs/devices/capabilities/proposed#gasMeter) | `gasMeter`, `meterCalorific`, `meterTime`, and `meterVolume` | -| [`illuminanceMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#illuminanceMeasurement) | `illuminance` | -| [`infraredLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#infraredLevel) | `infraredLevel` | -| [`lock`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#lock) | `lock` | -| [`mediaInputSource`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaInputSource) | `inputSource` | -| [`mediaPlaybackRepeat`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackRepeat) | `playbackRepeatMode` | -| [`mediaPlaybackShuffle`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackShuffle) | `playbackShuffle` | -| [`mediaPlayback`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlayback) | `playbackStatus` | -| [`odorSensor`](https://developer.smartthings.com/docs/devices/capabilities/proposed#odorSensor) | `odorLevel` | -| [`ovenMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenMode) | `ovenMode` | -| [`ovenOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenOperatingState) | `machineState`, `ovenJobState` and `completionTime` | -| [`ovenSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenSetpoint) | `ovenSetpoint` | -| [`powerConsumptionReport`](https://developer.smartthings.com/docs/devices/capabilities/proposed#powerConsumptionReport) | `deltaEnergy`, `energy`, `energySaved`, `power`, `powerEnergy` | -| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | `power` | -| [`powerSource`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerSource) | `powerSource` | -| [`refrigerationSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#refrigerationSetpoint) | `refrigerationSetpoint` | -| [`relativeHumidityMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | `humidity` | -| [`robotCleanerCleaningMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerCleaningMode) | `robotCleanerCleaningMode` | -| [`robotCleanerMovement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerMovement) | `robotCleanerMovement` | -| [`robotCleanerTurboMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerTurboMode) | `robotCleanerTurboMode` | -| [`signalStrength`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#signalStrength) | `lqi` and `rssi` | -| [`smokeDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#smokeDetector) | `smoke` | -| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) | `temperature` | -| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) | `coolingSetpoint` | -| [`thermostatFanMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | `thermostatFanMode` | -| [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) | `heatingSetpoint` | -| [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) | `thermostatMode` | -| [`thermostatOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | `thermostatOperatingState` | -| [`thermostatSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostatSetpoint) | `thermostatSetpoint` | -| [`threeAxis`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#threeAxis) | `threeAxis` (as discrete sensors `X`, `Y` and `Z`) | -| [`tvChannel`](https://developer.smartthings.com/docs/devices/capabilities/proposed#tvChannel) | `tvChannel` and `tvChannelName` | -| [`tvocMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tvocMeasurement) | `tvocLevel` | -| [`ultravioletIndex`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#ultravioletIndex) | `ultravioletIndex` | -| [`voltageMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#voltageMeasurement) | `voltage` | -| [`washerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerMode) | `washerMode` | -| [`washerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerOperatingState) | `machineState`, `washerJobState` and `completionTime` | +| SmartThings capability | Related entities in Home Assistant | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | +| [`activityLightingMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#activityLightingMode) | Activity lighting mode | +| [`airConditionerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#airConditionerMode) | Air conditioner mode | +| [`airQualitySensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#airQualitySensor) | Air quality | +| [`alarm`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#alarm) | Alarm | +| [`audioVolume`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#audioVolume) | Volume | +| [`battery`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#battery) | Battery | +| [`bodyMassIndexMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyMassIndexMeasurement) | Body mass index | +| [`bodyWeightMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#bodyWeightMeasurement) | Body weight | +| [`carbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonDioxideMeasurement) | Carbon dioxide | +| [`carbonMonoxideDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#carbonMonoxideDetector) | Carbon monoxide detector | +| [`carbonMonoxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#carbonMonoxideMeasurement) | Carbon monoxide | +| [`dishwasherOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dishwasherOperatingState) | Machine state
    Job state
    Completion time | +| [`dryerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerMode) | Dryer mode | +| [`dryerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#dryerOperatingState) | Machine state
    Job state
    Completion time | +| [`dustSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#dustSensor) | PM10
    PM2.5 | +| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | Energy | +| [`equivalentCarbonDioxideMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#equivalentCarbonDioxideMeasurement) | Equivalent carbon dioxide | +| [`formaldehydeMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#formaldehydeMeasurement) | Formaldehyde | +| [`gasMeter`](https://developer.smartthings.com/docs/devices/capabilities/proposed#gasMeter) | Gas meter
    Gas meter calorific
    Gas meter time
    Gas | +| [`illuminanceMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#illuminanceMeasurement) | Illuminance | +| [`infraredLevel`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#infraredLevel) | Infrared level | +| [`mediaInputSource`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaInputSource) | Media input source | +| [`mediaPlaybackRepeat`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackRepeat) | Media playback repeat | +| [`mediaPlaybackShuffle`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlaybackShuffle) | Media playback shuffle | +| [`mediaPlayback`](https://developer.smartthings.com/docs/devices/capabilities/proposed#mediaPlayback) | Media playback status | +| [`odorSensor`](https://developer.smartthings.com/docs/devices/capabilities/proposed#odorSensor) | Odor sensor | +| [`ovenMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenMode) | Oven mode | +| [`ovenOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenOperatingState) | Machine state
    Job state
    Completion time | +| [`ovenSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#ovenSetpoint) | Set point | +| [`powerConsumptionReport`](https://developer.smartthings.com/docs/devices/capabilities/proposed#powerConsumptionReport) | Energy difference
    Power energy
    Energy saved
    Power
    Energy | +| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | Power | +| [`powerSource`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerSource) | Power source | +| [`refrigerationSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/proposed#refrigerationSetpoint) | Set point | +| [`relativeHumidityMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#relativeHumidityMeasurement) | Humidity | +| [`robotCleanerCleaningMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerCleaningMode) | Cleaning mode | +| [`robotCleanerMovement`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerMovement) | Movement | +| [`robotCleanerTurboMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#robotCleanerTurboMode) | Turbo mode | +| [`signalStrength`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#signalStrength) | Link quality
    Signal strength | +| [`smokeDetector`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#smokeDetector) | Smoke detector | +| [`temperatureMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#temperatureMeasurement) | Temperature | +| [`thermostatCoolingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatCoolingSetpoint) | Cooling set point | +| [`thermostatFanMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatFanMode) | Fan mode | +| [`thermostatHeatingSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatHeatingSetpoint) | Heating set point | +| [`thermostatMode`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatMode) | Mode | +| [`thermostatOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#thermostatOperatingState) | Operating state | +| [`thermostatSetpoint`](https://developer.smartthings.com/docs/devices/capabilities/deprecated#thermostatSetpoint) | Set point | +| [`threeAxis`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#threeAxis) | X coordinate
    Y coordinate
    Z coordinate | +| [`tvChannel`](https://developer.smartthings.com/docs/devices/capabilities/proposed#tvChannel) | TV channel
    TV channel name | +| [`tvocMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#tvocMeasurement) | Volatile organic compounds | +| [`ultravioletIndex`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#ultravioletIndex) | UV index | +| [`veryFineDustSensor`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#veryFineDustSensor) | PM1.0 | +| [`voltageMeasurement`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#voltageMeasurement) | Voltage | +| [`washerMode`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerMode) | Washer mode | +| [`washerOperatingState`](https://developer.smartthings.com/docs/devices/capabilities/proposed#washerOperatingState) | Machine state
    Job state
    Completion time | ### Scene -The SmartThings Scene platform lets you activate scenes defined in SmartThings with a scene entity representing each SmartThings scenes within the location. +The SmartThings Scene lets you activate scenes defined in SmartThings. A scene entity is created for each SmartThings scene. ### Switch -The SmartThings Switch platform lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. The following optional capabilities will provide energy and power utilization information: +The SmartThings Switch lets you control devices that have the [`switch`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#switch) capability that are not already represented by a more specific platform. -| Capability | Switch Features | -| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | -| [`energyMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#energyMeter) | energy consumption (`today_energy_kwh` state attribute) | -| [`powerMeter`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#powerMeter) | power consumption (`current_power_w` state attribute) | +It will also create switches for the following capabilities: + +| SmartThings capability | +|------------------------------| +| `custom.dryerWrinklePrevent` | + + +### Update + +The SmartThings update platform lets you update the firmware of devices that have the [`firmwareUpdate`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#firmwareUpdate) capability. + +### Valve + +The SmartThings Valve platform lets you control devices that have the [`valve`](https://developer.smartthings.com/docs/devices/capabilities/capabilities-reference#valve) capability, showing the valve status and opening and closing. ## Troubleshooting -### Setup +### Enabling debug logs and diagnostics -#### Aborted: Home Assistant is not configured correctly to receive updates from SmartThings +If debug logging is enabled, the integration shows all the received events in the logs. The log captures events for that device for 5 seconds, and return a JSON file with the state of the device and the events. +Debug logs can be helpful for diagnosing state updates, for example by selecting the button and then turning on the device physically. -This error message occurs when you do not have an active Home Assistant Cloud (Nabu Casa) subscription and the external URL is not configured correctly (it must start with `https`). Update your Home Assistant configuration per the prerequisites above, and try again. +- To enable debug logs, follow the [steps to enable debug logs](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics). -#### Error: The token must be in the UID/GUID format +## Removing the integration -The personal access token does not match the expected format. Make sure you are copying the entire token and that there are no extraneous characters (such as trailing whitespace) and try again. - -#### Error: `pysmartthings.errors.APIInvalidGrant: Invalid refresh token:` (after a restore) - -You can fix this by using the SmartThings App to re-grant authorization to the API token you created before. -1. Open SmartThings app on your mobile device (not HA). -2. Select **Routines** from bottom. -3. Select your Home Assistant automation from the list. -4. Select **Done**, then select **Allow**. -5. Reload your SmartThings integration from Home Assistant Devices panel. - -#### Error: The token is invalid or no longer authorized (not solved by above) - -The personal access token entered is not valid or has been deleted. Create a new token per the instructions in the prerequisites and try again. - -#### Error: The token does not have the required OAuth scopes - -The personal access token entered is valid but does not have the required scopes as outlined in the prerequisites. Create a new token per the instructions in the prerequisites and try again. - -#### Error: SmartThings could not validate the webhook URL - -SmartThings was unable to reach your Home Assistant instance using the webhook URL. Enable debug logging to see the specific issue and follow the webhook troubleshooting checklist below. - -#### Aborted: There are no available SmartThings Locations - -This error message occurs when all of the SmartThings locations under the account linked to the personal access token are already setup in Home Assistant. Ensure you are using the correct personal access token or create an additional location in SmartThings to integrate and try again. - -#### Webhook Troubleshooting Checklist - -1. Ensure external URL is properly set to the _external address_ that Home Assistant is available to the internet. SmartThings must be able to reach this address. -2. Validate there are no problems with your certificate or SSL configuration by using an online checker, such as [https://www.digicert.com/help/](https://www.digicert.com/help/). -3. Some reverse proxy configuration settings can interfere with communication from SmartThings. For example, TLSv1.3 is not supported. Setting the supported cipher suite too restrictly will prevent handshaking. The following NGINX SSL configuration is known to work: - ```nginx - # cert.crt also contains intermediate certificates - ssl_certificate /path/to/cert.crt; - ssl_certificate_key /path/to/cert.key; - ssl_dhparam /path/to/dhparam.pem; - ssl_protocols TLSv1.2; - ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; - ssl_prefer_server_ciphers on; - ssl_ecdh_curve secp384r1; - ssl_session_timeout 10m; - ssl_session_cache shared:SSL:10m; - ssl_session_tickets off; - ``` -4. While the error message (above) is being displayed, run the following command from outside your local network to confirm it is responding to the ping lifecycle event: - ```bash - curl -X POST https://{EXTERNAL_URL}/api/webhook/{WEBHOOK_ID} -H "Content-Type: application/json; charset=utf-8" -d $'{"lifecycle": "PING", "executionId": "00000000-0000-0000-0000-000000000000", "locale": "en", "version": "1.0.0", "pingData": { "challenge": "00000000-0000-0000-0000-000000000000"}}' - ``` - Where `{EXTERNAL_URL}` is your external address and `{WEBHOOK_ID}` is the value of `webhook_id` from `.storage/smartthings` in your Home Assistant configuration directory. - - The expected response is: - ```bash - {"pingData": {"challenge": "00000000-0000-0000-0000-000000000000"}} - ``` - -If you have completed the checklist above and are still unable to setup the platform, [activate debug logging](#debugging) for the SmartThings integration and include the log messages up until the point of failure in [a new issue](https://github.com/home-assistant/home-assistant/issues). - -### Debugging - -The SmartThings integration will log additional information about push updates received, events fired, and other messages when the log level is set to `debug`. Add the relevant line below to the {% term "`configuration.yaml`" %}: - -```yaml -logger: - default: info - logs: - homeassistant.components.smartthings: debug -``` +{% include integrations/remove_device_service.md %} +4. Open the SmartThings app and delete the Home Assistant application from SmartThings. diff --git a/source/_integrations/smlight.markdown b/source/_integrations/smlight.markdown index 8d6673c5f8c..b1e47c660de 100644 --- a/source/_integrations/smlight.markdown +++ b/source/_integrations/smlight.markdown @@ -22,6 +22,7 @@ ha_platforms: ha_codeowners: - '@tl-sl' ha_integration_type: device +ha_dhcp: true --- The [SMLIGHT](https://smlight.tech) SLZB-06x Ethernet Zigbee coordinators diff --git a/source/_integrations/snoo.markdown b/source/_integrations/snoo.markdown new file mode 100644 index 00000000000..be3326f2e86 --- /dev/null +++ b/source/_integrations/snoo.markdown @@ -0,0 +1,100 @@ +--- +title: Happiest Baby Snoo +description: Instructions on how to integrate Snoo into Home Assistant +ha_category: + - Binary Sensor + - Event + - Sensor + - Select + - Switch +ha_iot_class: Cloud Push +ha_release: 2025.3 +ha_config_flow: true +ha_codeowners: + - '@Lash-L' +ha_domain: snoo +ha_platforms: + - binary_sensor + - event + - sensor + - select + - switch +ha_integration_type: integration +ha_quality_scale: bronze +--- + +The [Snoo](https://www.happiestbaby.com/products/snoo-smart-bassinet) is a smart bassinet made by [Happiest Baby](https://www.happiestbaby.com/) that helps get your baby to sleep and helps keep them asleep. + + +## Installing the integration +This integration follows standard integration installation. No extra steps are required. + +{% include integrations/config_flow.md %} + +## Binary Sensors + +### Left and right safety clips + +States if the left or right safety clip is connected to the baby's swaddle. + +## Events + +### Snoo events + +These are the events broadcasted by your device. The most notable event is your baby crying. + +They can be: + +- Timer - A timer has started or updated for the current Snoo level. +- Cry - The Snoo has detected your baby crying. +- Command sent - A command has been received by the Snoo. +- Safety clip changed - The left or right safety clip has been disconnected or connected. +- Long activity press - The activity button has been held down. +- Activity press - The activity button has been pressed. +- Power button pressed - The power button has been pressed. +- Status requested - Either the integration or your mobile app has requested a status update. +- Sleepytime sounds updated - The Sleepytime sounds were turned on or off. + +## Sensors + +### State + +The Snoo can have one of 8 states +1. Baseline - This is the basic state the snoo starts with. It has not detected the need to do any further soothing. +2. Level 1 - This is the lowest level of soothing +3. Level 2 +4. Level 3 +5. Level 4 +6. Stop - The snoo is no longer running +7. Pre-timeout - the snoo is preparing to go back to stop rotating +8. Timeout - the snoo is stopping rotating. + +## Time left +This describes how long until the Snoo will change levels or it is Unknown if it is not currently planning to change levels. + +## Select + +### Intensity + +This allows you to set the soothing level of your Snoo. + +1. Baseline - This is the basic state the snoo starts with. It has not detected the need to do any further soothing. +2. Level 1 - This is the lowest level of soothing. +3. Level 2 +4. Level 3 +5. Level 4 +6. Stop - The snoo is no longer running. + +## Switch + +### Level lock + +Keep SNOO’s rhythms locked on your baby’s favorite level (Baseline, Level 1, or Level 2). + +### Sleepytime sounds + +Allows you to turn on SNOO’s soothing sounds before you put your baby in SNOO or after you took your baby out of SNOO for a diaper change or feeding. + +## Removing the integration + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/solarlog.markdown b/source/_integrations/solarlog.markdown index 4d8ba4bea89..2557b1a6e9e 100644 --- a/source/_integrations/solarlog.markdown +++ b/source/_integrations/solarlog.markdown @@ -22,7 +22,7 @@ The **Solarlog** {% term integration %} uses the open JSON interface on [Solar-L ## Supported devices -The integration should work with all Solar-Log devices. +The integration should work with all Solar-Log devices with [firmware 3.x](#known-limitations). ## Prerequisites @@ -142,3 +142,4 @@ The integration provides no additional actions. ## Known limitations The integration only provides the (limited) data exposed by means of the JSON interface. This also entails that the values for the self-consumption are rounded to full kWh. +Firmware versions below 3.x are not supported, as they do not expose the JSON interface. Please contact the Solar-Log support if you need assistance with updating the firmware of your Solar-Log device. diff --git a/source/_integrations/solax.markdown b/source/_integrations/solax.markdown index c148a7d2a2d..f2f95abb628 100644 --- a/source/_integrations/solax.markdown +++ b/source/_integrations/solax.markdown @@ -8,6 +8,7 @@ ha_release: 0.94 ha_iot_class: Local Polling ha_codeowners: - '@squishykid' + - '@Darsstar' ha_domain: solax ha_platforms: - sensor @@ -46,16 +47,3 @@ There are generally at least 3 sensors from your inverter that you need to confi - The consumption sensor (in kWh) for the **Grid Consumption**. - The feed-in sensor (in kWh) for the **Return to grid**, for example, the solar panel energy you do not consume and return to the grid instead. - The on-grid yield sensor (in kWh) for the **Solar production**. - -### Note - -Inverter models with newer firmware (and also those using devices like PocketWifi) no longer expose an API when connected to your wireless network, they do however continue to expose it on their own broadcasted SSID. To use this sensor in this case it is necessary to set up a reverse proxy with something like NGINX and use a Raspberry Pi (or similar) with two network connections (one being Wi-Fi that connects to the inverters SSID). - - -Example NGINX configuration - -```text -location / { - proxy_pass http://5.8.8.8; -} -``` diff --git a/source/_integrations/somfy.markdown b/source/_integrations/somfy.markdown index 9fdb2a342d4..e73709d063a 100644 --- a/source/_integrations/somfy.markdown +++ b/source/_integrations/somfy.markdown @@ -24,11 +24,6 @@ ha_supporting_integration: Overkiz ha_release: 2022.2 ha_codeowners: - '@imicknl' - - '@vlebourl' - - '@tetienne' - - '@nyroDev' - - '@tronix117' - - '@alexfp14' ha_config_flow: true ha_platforms: - alarm_control_panel diff --git a/source/_integrations/spotify.markdown b/source/_integrations/spotify.markdown index 3c928749ef0..8ec0fdb380a 100644 --- a/source/_integrations/spotify.markdown +++ b/source/_integrations/spotify.markdown @@ -101,6 +101,11 @@ Internal examples: `http://192.168.0.2:8123/auth/external/callback`, `http://hom {% include integrations/config_flow.md %} +## Data updates + +The integration polls at least every 30 seconds. +If the track that is playing ends in less than 30 seconds, the integration will poll again after the track has ended to update the state again. + ## Using multiple Spotify accounts This integration supports multiple Spotify accounts at once. You don't need to @@ -151,4 +156,4 @@ The `media_content_id` value can be obtained from the Spotify desktop app by cli ## Unsupported devices -- **Sonos**: Although Sonos is a Spotify Connect device, it is not supported by the official Spotify API. +- **Sonos**: Although Sonos is a Spotify Connect device, it is not supported by the official Spotify API. One workaround to use Sonos players with Spotify is through [Music Assistant](https://www.music-assistant.io/) using the action `music_assistant.play_media`. Music Assistant creates another media_player entity named after the original media_player, which you can use to play from Spotify. diff --git a/source/_integrations/squeezebox.markdown b/source/_integrations/squeezebox.markdown index d9cc0b10305..69dbe2d9d98 100644 --- a/source/_integrations/squeezebox.markdown +++ b/source/_integrations/squeezebox.markdown @@ -19,9 +19,9 @@ ha_platforms: 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 formerly 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. +This integration connects to an existing LMS server and provides both media players and sensors for monitoring 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/). @@ -48,16 +48,111 @@ transporter_toslink: target: entity_id: media_player.transporter data: - media_content_id: "source:toslink" - media_content_type: "music" + media_content_id: 'source:toslink' + media_content_type: 'music' +``` + +{% include integrations/option_flow.md %} + +{% configuration_basic %} +Browse limit: + description: Maximum number of items to include when browsing media or in a playlist. +Volume step: + description: Amount to adjust the volume when turning volume up or down. +{% endconfiguration_basic %} + +## Announce + +The Squeezebox media player entity supports the "announce" parameter in the `media_player.play_media` action. When media is played with announce:true, the current state of the media player is saved, the media is then played, and when playing is finished, the original state is restored. For example, if the media player is on and playing a track, once the announcement is finished, the track will resume playing at the same point it was paused by the announcement. If the media player was off, it will be turned off again after playing the announcement. + +### Extra Keys + +The following extra keys are available to modify the announcement + +| Data attribute | Optional | Description | +| ------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `announce_volume` | yes | Specifies the volume at which the announcement should play. The value must be between 0 and 1, where 0.1 represents 10% of the player's volume, 0.2 represents 20%, etc. | +| `announce_timeout` | yes | Specify the maximum length of the announcement in seconds after which the original media will be resumed. | + +These extra keys are optional. If announce_volume is unspecified, the announcement will play at the current volume of the player. If announce_timeout is unspecified, the announcement will play until completion. + +### Examples + +Playing a local file as an announcement: + +```yaml +action: media_player.play_media +target: + entity_id: media_player.squeezebox +data: + media_content_type: music + media_content_id: media-source://media_source/local/doorbell.mp3 + announce: true +``` + +Playing a local file as an announcement with volume of 20 and timeout of 60 seconds: + +```yaml +action: media_player.play_media +target: + entity_id: media_player.squeezebox +data: + media_content_type: music + media_content_id: media-source://media_source/local/doorbell.mp3 + announce: true + extra: + announce_volume: 0.2 + announce_timeout: 60 +``` + +### Announcements and Text to Speech (TTS) + +When using the "Text-to-speech (TTS): Speak" action, Home Assistant automatically sets the announce parameter as true, and the announcement features, such as pausing current playback, will be used. + +However, the "Text-to-speech (TTS): Speak" action doesn't support the extra keys described above. If you wish to use announce_volume and/or announce_timeout with TTS, you need to use media-source://tts/(tts_provider) to construct media_content_id as shown below. + +#### Example + +Play announcement using Text-to-speech (TTS) action + +```yaml +action: tts.speak +data: + media_player_entity_id: media_player.squeezebox + message: There's someone at the door + cache: false +target: + entity_id: tts.google_translate_en_co_uk +``` + +Play announcement using TTS media-source with announce_volume and announce_timeout + +```yaml +action: media_player.play_media +target: + entity_id: media_player.squeezebox +data: + media_content_type: music + media_content_id: media-source://tts/tts.google_translate_en_co_uk?message="There's someone at the door" + announce: true + extra: + announce_volume: 0.2 + announce_timeout: 60 ``` ## 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). +- **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). + +### Buttons + +- **Preset 1 ... Preset 6**: Play media stored in Preset 1 to Preset 6 on Squeezebox. +- **Brightness Up, Brightness Down**: Adjust the brightness on Logitech Squeezebox players with built-in screen, such as Radio and Boom. +- **Bass Up, Bass Down**: Adjust the bass on Logitech Squeezebox players, such as Radio and Boom. +- **Treble Up, Treble Down**: Adjust the treble on Logitech Squeezebox players, such as Radio and Boom. ### Sensors @@ -78,11 +173,11 @@ Call a custom Squeezebox JSON-RPC API. See documentation for this interface on `http://HOST:PORT/html/docs/cli-api.html?player=` where HOST and PORT are the host name and port for your Lyrion Music Server. -| Data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of the Squeezebox entities where to run the API method. -| `command` | no | Command to pass to Lyrion Music Server (p0 in the CLI documentation). -| `parameters` | yes | Array of additional parameters to pass to Lyrion Music Server (p1, ..., pN in the CLI documentation). +| Data attribute | Optional | Description | +| -------------- | -------- | ----------------------------------------------------------------------------------------------------- | +| `entity_id` | no | Name(s) of the Squeezebox entities where to run the API method. | +| `command` | no | Command to pass to Lyrion Music Server (p0 in the CLI documentation). | +| `parameters` | yes | Array of additional parameters to pass to Lyrion Music Server (p1, ..., pN in the CLI documentation). | This action can be used to integrate any Squeezebox action to an automation. @@ -92,21 +187,63 @@ For example, to play an album from your collection, create an IFTTT applet like - Trigger: Google Assistant, with sentence: `I want to listen to album $` - Action: JSON post query with such JSON body: -`{ "entity_id": "media_player.squeezebox_radio", "command": "playlist", "parameters": ["loadtracks", "album.titlesearch={{TextField}}"] }` + `{ "entity_id": "media_player.squeezebox_radio", "command": "playlist", "parameters": ["loadtracks", "album.titlesearch={{TextField}}"] }` This can work with title search and basically any thing. The same wouldn't have worked by calling directly Squeezebox server as IFTTT cannot escape the text field. +When specifying additional parameters in the Visual Editor, each parameter must be preceded by a hyphen and a space to correctly populate the array: + +For example, to create an automation to mute playback, use the command `mixer` and the parameter `muting`: + +| Row | Parameter | Description | +| --- | --------- | ---------------------- | +| 1 | - muting | Toggle muting on / off | + +resulting in the YAML: + +```yaml +# Toggle the muting state of the specified player +action: squeezebox.call_method +metadata: {} +data: + command: mixer + parameters: + - muting +``` + +Where a parameter is an increment or decrement, it is necessary to place the value in double quotes. + +For example, to increase the playback volume, use the command `mixer` and the parameters `volume` and the amount to increment: + +| Row | Parameter | Description | +| --- | --------- | ----------------------------- | +| 1 | - volume | Parameter to change | +| 2 | - "+5" | Increment volume by 5 percent | + +resulting in the YAML: + +```yaml +# Increment the playback volume of the specified player by five percent +action: squeezebox.call_method +metadata: {} +data: + command: mixer + parameters: + - volume + - "+5" +``` + ### Action `call_query` Call a custom Squeezebox JSON-RPC API. The result of the query will be stored in the 'query_result' attribute of the player. See documentation for this interface on `http://HOST:PORT/html/docs/cli-api.html?player=` where HOST and PORT are the host name and port for your Lyrion Music Server. -| Data attribute | Optional | Description | -| ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of the Squeezebox entities where to run the API method. -| `command` | no | Command to pass to Lyrion Music Server (p0 in the CLI documentation). -| `parameters` | yes | Array of additional parameters to pass to Lyrion Music Server (p1, ..., pN in the CLI documentation). +| Data attribute | Optional | Description | +| -------------- | -------- | ----------------------------------------------------------------------------------------------------- | +| `entity_id` | no | Name(s) of the Squeezebox entities where to run the API method. | +| `command` | no | Command to pass to Lyrion Music Server (p0 in the CLI documentation). | +| `parameters` | yes | Array of additional parameters to pass to Lyrion Music Server (p1, ..., pN in the CLI documentation). | This action can be used to integrate a Squeezebox query into an automation. For example, in a Python script, you can get a list of albums available by an artist like this: `hass.services.call("squeezebox", "call_query", { "entity_id": "media_player.kitchen", "command": "albums", "parameters": ["0", "20", "search:beatles", "tags:al"] })` diff --git a/source/_integrations/ssdp.markdown b/source/_integrations/ssdp.markdown index 1384463fb9f..7ffa6516953 100644 --- a/source/_integrations/ssdp.markdown +++ b/source/_integrations/ssdp.markdown @@ -38,8 +38,11 @@ The following integrations are automatically discovered by the SSDP integration: - [Hyperion](/integrations/hyperion/) - [Keenetic NDMS2 Router](/integrations/keenetic_ndms2/) - [Konnected.io](/integrations/konnected/) + - [LG webOS TV](/integrations/webostv/) - [Logitech Harmony](/integrations/harmony/) + - [Lutron Caséta](/integrations/lutron_caseta/) - [OctoPrint](/integrations/octoprint/) + - [Onkyo](/integrations/onkyo/) - [Philips Hue](/integrations/hue/) - [Roku](/integrations/roku/) - [Samsung SyncThru Printer](/integrations/syncthru/) diff --git a/source/_integrations/starlink.markdown b/source/_integrations/starlink.markdown index 3600e07a206..d99e8d20364 100644 --- a/source/_integrations/starlink.markdown +++ b/source/_integrations/starlink.markdown @@ -32,7 +32,7 @@ The Starlink integration allows you to integrate your [Starlink](https://www.sta {% include integrations/config_flow.md %} -### Sensor +### Sensors - Ping - The ping that Starlink has measured, in ms - Ping drop rate - The percentage of failed ping requests (aka "dropped"). This is the inverse of "Uptime" in the Starlink app. @@ -43,36 +43,40 @@ The Starlink integration allows you to integrate your [Starlink](https://www.sta - Last boot time - The time Starlink was last turned on - Upload - Total number of bytes uploaded from the user terminal since reboot - Download - Total number of bytes downloaded to the user terminal since reboot -- Power - Last measured power [W] -- Energy - Measured energy consumption since reboot [kWh] +- Power - Last measured power, in W +- Energy - Measured energy consumption since reboot, in kWh -### Binary sensor +### Binary sensors +- Connected - Whether Starlink is connected to the Internet - Update available - Whether there is an update pending install +- Roaming mode - Whether Starlink is "roaming". Roaming is an optional upgrade that allows you to use your Starlink outside of your home address (also known as "portability mode") + +#### Diagnostic sensors + - Obstructed - Whether Dishy is currently obstructed -- Roaming mode - Whether Starlink is "roaming". Roaming is an optional upgrade that allows you to use your Starlink outside of your home address. It is also known as "portability mode" - Heating - Whether Dishy is currently heating. This may be due to cold temperatures, or an attempt to thaw snow and ice -- Idle - Whether Starlink is "sleeping", as per the schedule defined in the Starlink app +- Sleep - Whether Starlink is "sleeping", as per the schedule defined in the Starlink app - Mast near vertical - Whether Dishy is mounted straight - Motors stuck - Whether Dishy is unable to move - Slow ethernet - Whether the Ethernet link is at max (gigabit) speed - Thermal throttle - Whether Starlink has reduced performance to avoid overheating - Unexpected location - Whether Starlink has detected operation outside of its designated area -### Button +### Buttons - Reboot - Reboots your Starlink system -### Switch +### Switches - Stowed - Controls whether Dishy is stowed - Sleep schedule - Controls whether Starlink will enter a power-saving sleep mode at a predefined schedule -### Device tracker +### Device trackers - Device location - Tracks the latitude, longitude, and altitude of Dishy. You need to allow location access on the local network via the Starlink app for this to work. This is disabled by default in the Starlink app and is thus disabled by default in Home Assistant. -### Time +### Times - Sleep start - The time at which Starlink will enter sleep mode, if "Sleep Schedule" is enabled - Sleep end - The time at which Starlink will exit sleep mode, if "Sleep Schedule" is enabled diff --git a/source/_integrations/statistics.markdown b/source/_integrations/statistics.markdown index 421b506172c..cfe89d538ae 100644 --- a/source/_integrations/statistics.markdown +++ b/source/_integrations/statistics.markdown @@ -10,6 +10,7 @@ ha_release: '0.30' ha_quality_scale: internal ha_codeowners: - '@ThomDietrich' + - '@gjohansson-ST' ha_domain: statistics ha_config_flow: true ha_platforms: diff --git a/source/_integrations/steam_online.markdown b/source/_integrations/steam_online.markdown index 32ba8c8dce7..1d6837cd1c0 100644 --- a/source/_integrations/steam_online.markdown +++ b/source/_integrations/steam_online.markdown @@ -32,7 +32,12 @@ Go to your profile, select "Edit Profile", "Privacy Settings". You need a [free API key](https://steamcommunity.com/dev/apikey) to use the platform. -To find an account's 64-bit SteamID on profiles without a custom URL you can check the URL of the profile page, the long string of numbers at the end is the 64-bit SteamID. If the profile has a custom URL you will have to copy the URL into [STEAMID I/O](https://steamid.io/) to find the 64-bit SteamID. +To find an account's 64-bit SteamID: + +1. Open Steam. +2. Open the dropdown menu labeled with your username. +3. Select **Account details**. + - Your **Steam ID** is displayed just below the label **Your-Account-Name Account**. ## Examples diff --git a/source/_integrations/stiebel_eltron.markdown b/source/_integrations/stiebel_eltron.markdown index 95b6078c2e6..0454a8fce0a 100644 --- a/source/_integrations/stiebel_eltron.markdown +++ b/source/_integrations/stiebel_eltron.markdown @@ -30,6 +30,7 @@ It requires the following components: By now, the following units are tested: - LWZ 504e +- LWZ 404eco - LWZ 304 - LWZ 304 Trend diff --git a/source/_integrations/suez_water.markdown b/source/_integrations/suez_water.markdown index 8dd751463fe..6b54ef11f49 100644 --- a/source/_integrations/suez_water.markdown +++ b/source/_integrations/suez_water.markdown @@ -13,6 +13,7 @@ ha_domain: suez_water ha_platforms: - sensor ha_integration_type: integration +ha_quality_scale: bronze --- The **Suez Water** {% term integration %} fetches your water consumption data from the French water provider [Tout Sur Mon Eau](https://www.toutsurmoneau.fr) website. @@ -26,7 +27,27 @@ The **Suez Water** {% term integration %} fetches your water consumption data fr {% configuration_basic %} Counter ID: - description: "The water counter ID. It should be found automatically during setup. If it was not found, the ID can be found on your _Tout Sur Mon Eau_ [user account](https://www.toutsurmoneau.fr/mon-compte-en-ligne/historique-de-consommation-tr). Look in the source code of the page for something similar to `url: '/mon-compte-en-ligne/statMData' + '/123456789'`. The `counter_id` in this case is `123456789`." + description: "The water counter ID. It should be found automatically during setup. If it was not found, the ID can be found on your _Tout Sur Mon Eau_ [user account](https://www.toutsurmoneau.fr/mon-compte-en-ligne/historique-de-consommation-tr). + You need to be **authenticated** to access the page above. + + Follow these steps to find your counter ID: + + 1. Open the browser's developer tools (usually F12 or right-click > **Inspect**). + + 2. Open the **Network** tab in the developer tools. + + 3. Navigate to the page or reload it if already open. + + 4. In the **Network** tab, search for `https://www.toutsurmoneau.fr/public-api/cel-consumption/meters-list`. + + 5. Select the request and open the **Preview** tab. + + 6. Expand the `content > clientCompteursPro > list > compteursPro > list` path. + + 7. Look for the `id_PDS` field - this value is your counter ID. + + " + {% endconfiguration_basic %} ## Extra attributes diff --git a/source/_integrations/supla.markdown b/source/_integrations/supla.markdown index 9fe9e22f1bf..ab6a2620848 100644 --- a/source/_integrations/supla.markdown +++ b/source/_integrations/supla.markdown @@ -26,6 +26,12 @@ Right now, it's impossible to add a device -- all of them are discovered from SU For more complete Home Assistant support based on MQTT autodiscovery, consider switching your Supla devices to MQTT (through the setup interface). Or use the MQTT broker provided by [Supla Cloud](https://cloud.supla.org/integrations/mqtt-broker). +{% important %} + +The Supla Cloud MQTT broker requires [changing the default MQTT protocol setting](https://www.home-assistant.io/integrations/mqtt/#broker-configuration) at version 3.1. + +{% endimportant %} + ## Configuration To use SUPLA devices in your installation, add the following to your {% term "`configuration.yaml`" %}: diff --git a/source/_integrations/switch.mqtt.markdown b/source/_integrations/switch.mqtt.markdown index dd71faec44c..c8b9b39fa22 100644 --- a/source/_integrations/switch.mqtt.markdown +++ b/source/_integrations/switch.mqtt.markdown @@ -48,7 +48,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -57,7 +57,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -65,7 +65,7 @@ availability_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. The switch command template accepts the parameters `value`. The `value` parameter will contain the configured value for either `payload_on` or `payload_off`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. The switch command template accepts the parameters `value`. The `value` parameter will contain the configured value for either `payload_on` or `payload_off`. required: false type: template command_topic: @@ -152,7 +152,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -226,7 +226,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's state from the `state_topic`. To determine the switches's state result of this template will be compared to `state_on` and `state_off`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's state from the `state_topic`. To determine the switches's state result of this template will be compared to `state_on` and `state_off`." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/switch.template.markdown b/source/_integrations/switch.template.markdown index e007966275a..a986dbde679 100644 --- a/source/_integrations/switch.template.markdown +++ b/source/_integrations/switch.template.markdown @@ -116,9 +116,9 @@ If you are using the state of a platform that takes extra time to load, the Temp In this section you find some real-life examples of how to use this switch. -### Copy Switch +### Invert a Switch -This example shows a switch that copies another switch. +This example shows a switch that is the inverse of another switch. {% raw %} @@ -126,14 +126,15 @@ This example shows a switch that copies another switch. switch: - platform: template switches: - copy: - value_template: "{{ is_state('switch.source', 'on') }}" + invert: + value_template: "{{ not is_state('switch.target', 'on') }}" + availability_template: "{{ has_value('switch.target') }}" turn_on: - action: switch.turn_on + action: switch.turn_off target: entity_id: switch.target turn_off: - action: switch.turn_off + action: switch.turn_on target: entity_id: switch.target ``` diff --git a/source/_integrations/switchbot.markdown b/source/_integrations/switchbot.markdown index 45c5e6c729f..a288c091728 100644 --- a/source/_integrations/switchbot.markdown +++ b/source/_integrations/switchbot.markdown @@ -69,6 +69,7 @@ Some SwitchBot devices need to be configured within the app before being control - [Relay Switch 1](https://www.switch-bot.com/products/switchbot-relay-switch-1) - [Relay Switch 1PM](https://www.switch-bot.com/products/switchbot-relay-switch-1pm) - [Water Leak Detector](https://www.switch-bot.com/products/switchbot-water-leak-detector) +- [Remote (WoRemote)](https://www.switch-bot.com/products/switchbot-remote) (currently only supports battery level monitoring) ## SwitchBot Entity diff --git a/source/_integrations/switchbot_cloud.markdown b/source/_integrations/switchbot_cloud.markdown index 2a5375aa95d..93d92244ba4 100644 --- a/source/_integrations/switchbot_cloud.markdown +++ b/source/_integrations/switchbot_cloud.markdown @@ -2,6 +2,7 @@ title: SwitchBot Cloud description: Instructions on how to set up SwitchBot Devices. ha_category: + - Button - Hub - Lock - Plug @@ -17,6 +18,7 @@ ha_codeowners: - '@Gigatrappeur' ha_domain: switchbot_cloud ha_platforms: + - button - climate - lock - sensor @@ -54,6 +56,7 @@ Please note, device names configured in the SwitchBot app are transferred into H - Hub 2 - Relay Switch 1 - Relay Switch 1PM +- Bot (as a Switch in `switchMode` and `customizeMode`, as a Button in `pressMode`) ## Important considerations diff --git a/source/_integrations/switcher_kis.markdown b/source/_integrations/switcher_kis.markdown index 87898759bd5..62319472814 100644 --- a/source/_integrations/switcher_kis.markdown +++ b/source/_integrations/switcher_kis.markdown @@ -58,6 +58,8 @@ If you completed the integration setup but are still unable to control the devic ## Prerequisites +Before the integration can find a device, you need to connect it to your network using the Switcher app. + 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. diff --git a/source/_integrations/synology_dsm.markdown b/source/_integrations/synology_dsm.markdown index 14fffc05fb4..ec73dcca1f4 100644 --- a/source/_integrations/synology_dsm.markdown +++ b/source/_integrations/synology_dsm.markdown @@ -2,6 +2,7 @@ title: Synology DSM description: Instructions on how to integrate the Synology DSM sensor within Home Assistant. ha_category: + - Backup - Camera - Media source - System monitor @@ -16,6 +17,7 @@ ha_codeowners: ha_config_flow: true ha_ssdp: true ha_platforms: + - backup - binary_sensor - button - camera @@ -27,14 +29,14 @@ ha_integration_type: integration ha_zeroconf: true --- -The Synology DSM integration provides access to various statistics from your [Synology NAS](https://www.synology.com) (_DSM 5.x and higher_) as well as cameras from the [Surveillance Station](https://www.synology.com/surveillance). +The Synology DSM integration provides access to various statistics from your [Synology NAS](https://www.synology.com) (_DSM 5.x and higher_), as well as cameras from the [Surveillance Station](https://www.synology.com/surveillance) and will allow to use the [File Station](https://www.synology.com/en-us/dsm/feature/file_sharing) as a {% term backup %} location. {% include integrations/config_flow.md %} {% warning %} This sensor will wake up your Synology NAS if it's in hibernation mode. -You can change the scan interval within the configuration options (default is 15 min). +The default polling interval is 15 minutes. You can also [define a custom polling interval](/common-tasks/general/#defining-a-custom-polling-interval) if needed. Having cameras or the Home mode toggle from [Surveillance Station](https://www.synology.com/en-us/surveillance) will fetch every 30 seconds. Disable those entities if you don't want your NAS to be fetched as frequently. {% endwarning %} @@ -51,6 +53,8 @@ When creating the user, it is possible to deny access to all locations and appli If you want to add cameras from [Surveillance Station](https://www.synology.com/surveillance), the user needs application permission for [Surveillance Station](https://www.synology.com/surveillance). +If you want to use a shared folder from the [File Station](https://www.synology.com/en-us/dsm/feature/file_sharing) as {% term backup %} location, the user needs application permission for [File Station](https://www.synology.com/en-us/dsm/feature/file_sharing) and read/write permissions on the specific [shared folder](https://kb.synology.com/en-us/DSM/help/DSM/AdminCenter/file_share_desc). + ### If you utilize 2-Step Verification or Two Factor Authentication (2FA) with your Synology NAS If you have the "Enforce 2-step verification for the following users" option checked under **Control Panel > Security > Account > 2-Factor Authentication**, you'll need to configure the 2-step verification/one-time password (OTP) for the user you just created before the credentials for this user will work with Home Assistant. @@ -61,6 +65,40 @@ Make sure to log out of your "normal" user's account and then login with the sep If you denied access to all locations and applications it is normal to receive a message indicating you do not have access to DSM when trying to login with this separate user. As noted above, you do not need access to the DSM and Home Assistant will still be able to read statistics from your NAS. {% endnote %} +## Backup location + +The NAS can also be used as a {% term backup %} location, without the need to add the NAS as a network drive to Home Assistant (_this requires DSM 6.0 and higher_). For this you need to setup the correct permissions for the user (_see [Separate User Configuration](#separate-user-configuration) above_), afterwards, you will be able to select the shared folder and define a relative path to be used as a backup location in the integration options ({% my integrations title="**Settings** > **Devices & services**" %} > **Synology DSM** > _select the instance_ > **Configure**) + +{% important %} + +Don't manually delete or rename the files in the backup path on the NAS. This could result in the backups no longer being able to be read or restored. + +{% endimportant %} + +### Example + +Assume there is a shared folder called `HA Backup`, with two directories in it `productive_instance` and `test_instance`. + + + +#### Use an existing path + +1. Select `HA Backup` as shared folder. +2. Define `productive_instance` as backup path (_without trailing slash_). + - **Result**: The existing `productive_instance` will be used as backup location. + +#### Use a non-existing path + +1. Select `HA Backup` as a shared folder. +2. Define `cottage_instance` as backup path (_without trailing slash_). + - **Result**: A new directory `cottage_instance` will be created on the shared folder `HA Backup` during the first backup. + +{% important %} + +Sub-directories in the backup path need to be separated by the regular slash `/`. For example: `home-assistant/prod_instance`. + +{% endimportant %} + ## Sensors ### CPU utilization sensors @@ -132,3 +170,13 @@ This media browser supports multiple Synology Photos instances. `` is To find the `` you need to go to the album in your photos instance, and the id will be in the URL ex: `https://192.168.0.100:5001/#/album/19`, where 19 is the album id. An `` of 0 will contain all images. For performance reasons, a maximum of 1000 images will be shown in the Media Browser. + +## Troubleshooting + +In any case, when reporting an issue, please enable [debug logging](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics), restart the integration, and as soon as the issue re-occurs stop the debug logging again (_download of debug log file will start automatically_). Further _if still possible_, please also download the [diagnostics](/integrations/diagnostics) data. If you have collected the debug log and the diagnostics data, provide them with the issue report. + +## Remove the integration + +{% include integrations/remove_device_service.md %} + +If you don't use the separate created user anymore (_see [Separate User Configuration](#separate-user-configuration) above_), then remove it from the NAS under to **Control Panel** > **User & Group** > **User**. Don't forget to backup any data from the users home directory, if you want to keep them (_eq. Home Assistant backups_) diff --git a/source/_integrations/systemmonitor.markdown b/source/_integrations/systemmonitor.markdown index b1ed8db4076..bf379f507ed 100644 --- a/source/_integrations/systemmonitor.markdown +++ b/source/_integrations/systemmonitor.markdown @@ -16,8 +16,7 @@ ha_codeowners: - '@gjohansson-ST' --- -The System monitor integration allows you to monitor disk usage, -memory usage, CPU usage, and running processes. +The **System monitor** {% term integration %} allows you to monitor disk usage, memory usage, network usage, CPU usage, and running processes. {% include integrations/config_flow.md %} @@ -25,7 +24,7 @@ memory usage, CPU usage, and running processes. {% note %} -All entities are disabled by default, you need to enable the entities that you wish to use. +All entities are disabled by default, you need to [enable the entities](/common-tasks/general/#enabling-or-disabling-entities) that you wish to use. All sensors are also marked as diagnostic and won't be automatically added to automatic dashboards. @@ -33,20 +32,24 @@ All sensors are also marked as diagnostic and won't be automatically added to au ### Disks -- Disk free - (One per disk/mount point) -- Disk use - (One per disk/mount point) -- Disk usage (percent) - (One per disk/mount point) +One sensor per found disk/mount point will be created + +- Disk free +- Disk use +- Disk usage (percent) ### Network -- IPv4 address - (One per network interface) -- IPv6 address - (One per network interface) -- Network in - (One per network interface) -- Network out - (One per network interface) -- Packets in - (One per network interface) -- Packets out - (One per network interface) -- Network throughput in - (One per network interface) -- Network throughput out - (One per network interface) +One sensor per found network interface will be created + +- IPv4 address +- IPv6 address +- Network in +- Network out +- Packets in +- Packets out +- Network throughput in +- Network throughput out ### Other @@ -65,23 +68,29 @@ All sensors are also marked as diagnostic and won't be automatically added to au ## Add `process` binary sensor -The `process` binary sensor needs to be configured by the config entry options. Go to **{% my integrations title="Settings > Devices & services" %}**, select the **System Monitor** integration and click **Configure** to select which `process` binary sensors should be created. +The `process` binary sensor needs to be configured by the config entry options. Go to **{% my integrations title="Settings > Devices & services" %}**, select the **System Monitor** integration and select **Configure**. + +You can select from the pre-populated list (current running processes) or manually enter the process name, to which a binary sensor will be created per selected `process`. ## Disk usage {% note %} -The disk usage sensors do not support monitoring folder/directory sizes. Instead, it is only concerned with "disks" (more specifically mount points on Linux). +The disk usage sensors do not support monitoring folder/directory sizes. Instead, it is only targeting "disks" (more specifically mount points on Linux). {% endnote %} +**Example output from the Linux `df -H` command** + ```bash + $ df -H Filesystem Size Used Avail Use% Mounted on /dev/root 29G 12G 16G 42% / devtmpfs 805M 0 805M 0% /dev tmpfs 934M 0 934M 0% /dev/shm /dev/mmcblk0p1 253M 54M 199M 22% /boot + ``` ## Processor temperature diff --git a/source/_integrations/tado.markdown b/source/_integrations/tado.markdown index bf39c7b5f5e..8d4bad5cc9a 100644 --- a/source/_integrations/tado.markdown +++ b/source/_integrations/tado.markdown @@ -7,12 +7,12 @@ ha_category: - Hub - Presence detection - Sensor + - Switch - Water heater - Weather ha_release: 0.41 ha_iot_class: Cloud Polling ha_codeowners: - - '@chiefdragon' - '@erwindouna' ha_domain: tado ha_config_flow: true @@ -22,6 +22,7 @@ ha_platforms: - climate - device_tracker - sensor + - switch - water_heater ha_dhcp: true ha_integration_type: integration @@ -37,6 +38,7 @@ There is currently support for the following device types within Home Assistant: - [Presence detection](#presence-detection) - Sensor - for some additional information of the zones. - Weather - for information about the current weather at the location of your Tado home. +- Switch - for controlling child lock on supported devices ## Unsupported device types diff --git a/source/_integrations/tag.mqtt.markdown b/source/_integrations/tag.mqtt.markdown index 352ad0d3fed..5d736f26e67 100644 --- a/source/_integrations/tag.mqtt.markdown +++ b/source/_integrations/tag.mqtt.markdown @@ -21,7 +21,7 @@ topic: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that returns a tag ID." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that returns a tag ID." required: false type: template device: diff --git a/source/_integrations/technove.markdown b/source/_integrations/technove.markdown index ff82a975bec..ed99a6e29af 100644 --- a/source/_integrations/technove.markdown +++ b/source/_integrations/technove.markdown @@ -54,7 +54,12 @@ The {% term integration %} adds the following sensors: - Last session energy usage - Wi-Fi signal strength - Wi-Fi network name -- Status +- Status, one of the following values: + - Unplugged + - Plugged, waiting + - Plugged, charging + - Out of activation period + - High tariff period ## Switch diff --git a/source/_integrations/telegram.markdown b/source/_integrations/telegram.markdown index 715d39c560b..63e92cba62e 100644 --- a/source/_integrations/telegram.markdown +++ b/source/_integrations/telegram.markdown @@ -454,6 +454,7 @@ actions: message_tag: "example_tag" disable_notification: True disable_web_page_preview: True + message_thread_id: 123 ``` {% configuration %} @@ -468,10 +469,15 @@ disable_notification: type: boolean disable_web_page_preview: description: True/false to display a webpage preview. + required: false default: false type: boolean message_tag: description: Tag for sent message. required: false type: string +message_thread_id: + description: Send the message to a specific topic or thread. + required: false + type: integer {% endconfiguration %} diff --git a/source/_integrations/telegram_bot.markdown b/source/_integrations/telegram_bot.markdown index 3c66303649f..62c35c8a72f 100644 --- a/source/_integrations/telegram_bot.markdown +++ b/source/_integrations/telegram_bot.markdown @@ -20,6 +20,8 @@ If you don't need to receive messages, you can use the [broadcast](/integrations Available actions: `send_message`, `send_photo`, `send_video`, `send_animation`, `send_voice`, `send_sticker`, `send_document`, `send_location`, `edit_message`, `edit_caption`, `edit_replymarkup`, `answer_callback_query`, `delete_message` and `leave_chat`. +Actions that send contents (`send_*`) will return a list of `message_id`/`chat_id` for messages delivered (in a property called `chats`). This will populate [Response Data](/docs/scripts/perform-actions#use-templates-to-handle-response-data) that you can further utilize in your automations to edit/delete the message later based on the `message_id`. See the example later on this page for usage instructions. + ### Action `telegram_bot.send_message` Send a notification. @@ -288,7 +290,7 @@ Remove the bot from the chat group where it was added. ## Telegram notification platform -The [`telegram` notification platform](/integrations/telegram) requires the `telegram_bot` integration to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. The data attributes `parse_mode`, `disable_notification`, `message_tag` and `disable_web_page_preview` are also supported. +The [`telegram` notification platform](/integrations/telegram) requires the `telegram_bot` integration to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents, and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. The data attributes `parse_mode`, `disable_notification`, `message_tag`, `disable_web_page_preview`, and `message_thread_id` are also supported. The required YAML configuration now reduces to: @@ -314,6 +316,7 @@ user_id: "" chat_id: "" chat: "" date: "" +message_thread_id: "" ``` Any other message not starting with `/` will be processed as simple text, firing a `telegram_text` event on the event bus with the following `event_data`: @@ -326,6 +329,7 @@ user_id: "" chat_id: "" chat: "" date: "" +message_thread_id: "" ``` If the message is sent from a [press from an inline button](https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating), for example, a callback query is received, and Home Assistant will fire a `telegram_callback` event with: @@ -594,7 +598,7 @@ actions: message_tag: "example_tag" ``` -## Example: send_message with disabled webpage preview: +## Example: send_message with disabled webpage preview ```yaml actions: @@ -606,3 +610,38 @@ actions: parse_mode: html disable_web_page_preview: true ``` + +## Example: send_message to a topic within a group + +```yaml +actions: +- action: notify.telegram + data: + message: "Message to a topic" + data: + message_thread_id: 123 +``` + +## Example: automation to send a message and delete after a delay + +{% raw %} + +```yaml +alias: telegram send message and delete +sequence: + - action: telegram_bot.send_message + data: + message: testing + response_variable: response + - delay: + seconds: 5 + - repeat: + sequence: + - action: telegram_bot.delete_message + data: + message_id: "{{ repeat.item.message_id }}" + chat_id: "{{ repeat.item.chat_id }}" + for_each: "{{ response.chats }}" +``` + +{% endraw %} diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown index a4fed8e1ece..0ac7df67233 100644 --- a/source/_integrations/template.markdown +++ b/source/_integrations/template.markdown @@ -73,7 +73,7 @@ Entities (sensors, binary sensors, buttons, images, numbers, and selections) are _For old sensor/binary sensor configuration format, [see below](#legacy-binary-sensor-configuration-format)._ -### State-based template binary sensors, buttons, images, numbers, selects and sensors +### State-based template binary sensors, buttons, images, numbers, selects, sensors, and weathers Template entities will by default update as soon as any of the referenced data in the template updates. @@ -95,8 +95,7 @@ template: {% endraw %} - -### Trigger-based template binary sensors, buttons, images, numbers, selects and sensors +### Trigger-based template binary sensors, images, numbers, selects, sensors, and weathers If you want more control over when an entity updates, you can define a trigger. Triggers follow the same format and work exactly the same as [triggers in automations][trigger-doc]. This feature is a great way to create entities based on webhook data ([example](#trigger-based-sensor-and-binary-sensor-storing-webhook-information)), or update entities based on a schedule. @@ -106,6 +105,10 @@ Trigger-based entities do not automatically update when states referenced in the The state, including attributes, of trigger-based sensors and binary sensors is restored when Home Assistant is restarted. The state of other trigger-based template entities is not restored. +{% note %} +Buttons do not support using `trigger` or `action` options. +{% endnote %} + {% raw %} ```yaml @@ -137,15 +140,15 @@ unique_id: 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). + description: Define conditions that have to be met after a trigger fires and before any actions are executed or sensor updates are performed (for trigger-based entities only). 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). + description: Define actions to be executed when the trigger fires (for trigger-based entities only). 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 type: list variables: - description: Key-value pairs of variable definitions which can be referenced and used in the templates below. Mostly used by blueprints. + description: Key-value pairs of variable definitions which can be referenced and used in the templates below (for trigger-based entities only). Mostly used by blueprints. required: false type: map keys: @@ -156,7 +159,7 @@ variables: sensor: description: List of sensors required: true - type: map + type: list keys: state: description: "Defines a template to get the state of the sensor. If the sensor is numeric, i.e. it has a `state_class` or a `unit_of_measurement`, the state template must render to a number or to `none`. The state template must not render to a string, including `unknown` or `unavailable`. An `availability` template may be defined to suppress rendering of the state template." @@ -180,7 +183,7 @@ sensor: binary_sensor: description: List of binary sensors required: true - type: map + type: list keys: state: description: The sensor is `on` if the template evaluates as `True`, `yes`, `on`, `enable` or a positive number. Any other value will render it as `off`. The actual appearance in the frontend (`Open`/`Closed`, `Detected`/`Clear` etc) depends on the sensor’s device_class value @@ -939,7 +942,7 @@ binary_sensor: sensors: sun_up: friendly_name: "Sun is up" - value_template: {{ state_attr('sun.sun', 'elevation') > 0 }} + value_template: "{{ state_attr('sun.sun', 'elevation') > 0 }}" ``` {% endraw %} diff --git a/source/_integrations/tesla_fleet.markdown b/source/_integrations/tesla_fleet.markdown index d766b8fb811..8a03721ab07 100644 --- a/source/_integrations/tesla_fleet.markdown +++ b/source/_integrations/tesla_fleet.markdown @@ -18,7 +18,7 @@ ha_release: 2024.8 ha_iot_class: Cloud Polling ha_config_flow: true ha_codeowners: - - "@Bre77" + - '@Bre77' ha_domain: tesla_fleet ha_platforms: - binary_sensor @@ -40,53 +40,151 @@ The Tesla Fleet API {% term integration %} exposes various sensors from Tesla ve ## Prerequisites -You must have a [Tesla](https://tesla.com) account, and a [Developer Application](https://developer.tesla.com/en_AU/dashboard). +You must have: -### Developer Application - -You must [create your own application](https://developer.tesla.com/docs/fleet-api/getting-started/what-is-fleet-api#step-2-create-an-application) for the Tesla Fleet API and configure it as an [application credential](https://my.home-assistant.io/redirect/application_credentials). -When creating the application, you must set the redirect URL to `https://my.home-assistant.io/redirect/oauth`, but the other URLs can be set as desired. You must also complete both [step 3](https://developer.tesla.com/docs/fleet-api/getting-started/what-is-fleet-api#step-3-generate-a-public-private-key-pair) and [step 4](https://developer.tesla.com/docs/fleet-api/getting-started/what-is-fleet-api#step-4-call-the-register-endpoint) before the application will be able to make API calls. +- A [Tesla](https://tesla.com) account +- A [Developer Application](https://developer.tesla.com/en_US/dashboard) +- A web domain and host that you can serve your public key file from. Some free options include: + - [FleetKey.cc](https://fleetkey.cc) + - [MyTeslamate.com](https://app.myteslamate.com/fleet) + - [AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html) + - [Cloudflare Pages](https://pages.cloudflare.com/) + - [Firebase Hosting](https://firebase.google.com/docs/hosting) + {% include integrations/config_flow.md %} +{% details "Hosting a Public/Private Key Pair" %} + +While the [Tesla Fleet API documentation Step 3](https://developer.tesla.com/docs/fleet-api/getting-started/what-is-fleet-api#step-3-generate-a-public-private-key-pair) mentions this as a later step, it is recommended that you do this first to ensure key reachability before the rest of the integration. + +1. Open a new terminal on your computer. +2. Run this command to create a private key: `openssl ecparam -name prime256v1 -genkey -noout -out private-key.pem` +3. Run this command to create and associate a public key with it: `openssl ec -in private-key.pem -pubout -out public-key.pem` +4. Rename the public key file to `com.tesla.3p.public-key.pem`. This needs to be exactly this for Tesla's API to partner with your account correctly. +5. Backup both these files somewhere safe and private for access later. +6. Upload the public key file to your domain at the path `/.well-known/appspecific/com.tesla.3p.public-key.pem`. For example, if your domain is `https://my.domain.com`, the public key file must be accessible at `https://my.domain.com/.well-known/appspecific/com.tesla.3p.public-key.pem`. Do not use redirection logic to handle this, or the Tesla API will not recognize your app later in the process. + +{% enddetails %} + +{% details "Setting up the Developer Application" %} + +These steps are also summarized in the [Tesla Fleet API documentation Step 2](https://developer.tesla.com/docs/fleet-api/getting-started/what-is-fleet-api#step-2-create-an-application), but it is recommended to follow the steps below to cover specific details. + +1. If you have not already set up your [Tesla Developer account](https://developer.tesla.com/teslaaccount): Confirm that you have a verified email and multi-factor authentication set up. +2. Navigate to the [Developer dashboard](https://developer.tesla.com/en_US/dashboard). Change your locale if needed to wherever your account is based, using the globe icon at the top-right corner. +3. Select **Create New Application**. This should launch a new page with the header **Create Fleet API Application**. +4. For simple integrations, under **Registration Type**, select **Just for me**. If you're confident about your situation being a business setup instead, select **For my business**. Select **Next**. +5. At the **Application Details** step, use a name that is easy to refer to later, such as `ha-integration`. This will be needed later while configuring the integration. Select **Next**. +6. At the **Client Details** step, under **Oauth Grant Type**, select **Authorization Code and Machine-to-Machine**. + - Under **Allowed Origin URL(s)**, enter your domain where you hosted your public key earlier. Using the example above, this would be `https://my.domain.com/`. + - Under **Allowed Redirect URI(s)**, enter `https://my.home-assistant.io/redirect/oauth`. + - Select **Next**. +7. At the **API & Scopes** step, select the configurations you'd like to access. + - At least one of `Vehicle Information` or `Energy Product Information` **must** be selected for the integration to function. It is recommended you select all scopes for full functionality. + - If you're unsure, you can select only one of these two required scopes for now and update the scopes later from the Developer Dashboard. However, note that if the scopes are updated, you will need to reconfigure the integration fully (refer to the **Integration is broken and needs to be reconfigured** troubleshooting steps below). + - Select **Next**. +8. At the **Billing Details (Optional)** step, enter your billing details if needed, then select **Submit**. Tesla does not support billing in all countries yet. **Developers in countries that do not yet support payments will not see this step**. + - Tesla provides a $10 monthly credit for personal API usage, so your level of usage may be covered for free. Detailed pricing info for commands, data polling, and wake signals can be found at [developer.tesla.com](https://developer.tesla.com). Use these details to calculate your usage estimate if you rely heavily on this integration. + - If unsure, you can select **Skip & Submit** for now and add the billing details later when your usage is close to the free threshold. +9. Your developer application is ready for use! + +{% enddetails %} + +{% details "Register your application as a Fleet API partner" %} + +These steps are also summarized in the [Tesla Fleet API documentation Step 4](https://developer.tesla.com/docs/fleet-api/getting-started/what-is-fleet-api#step-4-call-the-register-endpoint), but the steps below provide easier copy-pasteable code and additional checks. + +{% warning %} +The following steps involve sensitive credentials. Never share your `Client Secret` or access token with anyone directly, and ensure you're working in a secure environment. +{% endwarning %} + +1. Get your OAuth details by going to your [Developer dashboard](https://developer.tesla.com/en_US/dashboard). Under the app you set up for Home Assistant integration select **View Details**. Then, select the **Credentials & APIs** tab. Note the `Client ID` and `Client Secret` strings. + +2. Run this CURL request, replacing the variable values as specified in the notes below: + + ```shell + CLIENT_ID=REPLACE_THIS_WITH_YOUR_CLIENT_ID + CLIENT_SECRET=REPLACE_THIS_WITH_YOUR_CLIENT_SECRET + AUDIENCE="https://fleet-api.prd.na.vn.cloud.tesla.com" + curl --request POST \ + --header 'Content-Type: application/x-www-form-urlencoded' \ + --data-urlencode 'grant_type=client_credentials' \ + --data-urlencode "client_id=$CLIENT_ID" \ + --data-urlencode "client_secret=$CLIENT_SECRET" \ + --data-urlencode 'scope=openid vehicle_device_data vehicle_cmds vehicle_charging_cmds' \ + --data-urlencode "audience=$AUDIENCE" \ + 'https://fleet-auth.prd.vn.cloud.tesla.com/oauth2/v3/token' + ``` + + Notes about the variable values: + - For the `CLIENT_SECRET` value, depending on your terminal environment, you may need to escape any `!` and `$` characters in the string, or the curl request will fail. + - Replace the `AUDIENCE` value with your region-specific URL. The URL in the example is for users in North America and Asia-Pacific (excluding China). Refer to the [Base URLs documentation](https://developer.tesla.com/docs/fleet-api/getting-started/base-urls) for the URLs for other regions. + - For the `scope=...` line, replace the values with a space-delimited list of [the official scope keywords](https://developer.tesla.com/docs/fleet-api/authentication/overview#scopes), as you defined them earlier in your app. +3. The CURL request should return a response that looks something like: + + ```json + {"access_token":"ACCESS_TOKEN","expires_in":28800,"token_type":"Bearer"} + ``` + + This is your access token. Copy everything between the double-quotes to be used next. +4. Run this CURL request, replacing the variable values as specified in the notes below: + + ```shell + curl --location 'https://fleet-api.prd.na.vn.cloud.tesla.com/api/1/partner_accounts' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ACCESS_TOKEN' \ + --data '{ + "domain": "my.domain.com" + }' + ``` + + - If you had to change the `AUDIENCE` URL for your region in step 2, update the main domain of the `--location` arg. + - Replace `ACCESS_TOKEN` with the access token that you copied in the previous step. + - In the `domain:` line, enter your domain without the leading `https://` and the trailing `/`. +5. You should see a response that contains information about your Tesla Fleet developer app, pricing info, and such. This confirms that the Tesla Fleet API has successfully registered your developer application as a partner. The hard part is over. + +{% enddetails %} + +{% details "Linking the Developer Application with Home Assistant" %} + +1. Get your OAuth details by going to your [Developer dashboard](https://developer.tesla.com/en_US/dashboard). Select **View Details** under the app you set up for Home Assistant integration. Then, select the **Credentials & APIs** tab. Note the `Client ID` and `Client Secret` strings, these will be needed later. +2. In Home Assistant, the integration wizard should walk you through the default steps. If not already started, scroll above and select the **ADD INTEGRATION TO MY** button to start the integration wizard. The integration will ask you for all of the necessary integration configurations. +3. In the **Add credentials** step in the wizard, enter your Tesla Fleet developer application name (from step 5 in the **Setting up the Developer Application** section above), and the Oauth Client ID and Client Secret (from step 1 above). Select **Submit**. +4. At this step, you should be taken to the Tesla authentication page. You will need to re-enter your Tesla account login credentials. +5. At the confirmation page with the header **Allow ha-integration access to your Tesla Account** (the specific application name will be whatever you set earlier), select the **Select All** button. This list of scopes is already limited to the specific scopes you chose for the application information earlier, so it is not necessary to review them again. Select **Allow**. +6. You should now see a Home Assistant page asking if you would like to **Link account to Home Assistant?**. Select **Link account**. +7. You're all set! The integration should fetch your device details into Home Assistant. + +{% enddetails %} + ## Scopes -When connecting your Tesla account to Home Assistant, you **must** select the `Vehicle Information` or `Energy Product Information` scope. It is recommended you select all scopes for full functionality. The `Vehicle Location` scope was added in Home Assistant 2024.1, so any authorizations performed on previous releases that want this scope will need to be [modified](https://accounts.tesla.com/en_au/account-settings/security?tab=tpty-apps). +When connecting your Tesla account to Home Assistant, you **must** select at least one of the `Vehicle Information` or `Energy Product Information` scopes. It is recommended you select all scopes for full functionality. The `Vehicle Location` scope was added in Home Assistant 2024.1, so any authorizations performed on previous releases that want this scope will need to be [modified](https://accounts.tesla.com/en_au/account-settings/security?tab=tpty-apps). ## Pay per use - + Previously, Tesla restricted this integration to a very modest rate limit. However, from January 2025, accounts in eligible countries will be charged for every API call. Here's what you need to know: -- Tesla provides a $10 credit per developer account per calandar month +- Tesla provides a USD$10 credit per developer account per calendar month - Every vehicle coordinator refresh, vehicle command, and wake up has a cost - This credit only allows for a maximum of 5000 coordinator refreshes - Energy product APIs are free to use at this time - To go beyond the free credit, you must provide payment details to Tesla -For more details please see [developer.tesla.com](https://developer.tesla.com). +For more details, please see [developer.tesla.com](https://developer.tesla.com). + +Note that Tesla does not support billing in all countries yet. **Developers in countries that do not yet support payments will not be able to review their billing or usage**. For countries that do support billing, the current billing usage can be viewed at any time by going to your [Developer Dashboard](https://developer.tesla.com/en_US/dashboard), select **View Details** under the app you set up for Home Assistant integration. Then, select the **Application Usage** tab. ## Command signing -Certain vehicles, including all vehicles manufactured since late 2023, require vehicle commands to be signed with a private key. All actions on vehicle entities will fail with an error if this is required and the key has not been added to the vehicle. +Certain vehicles, including all vehicles manufactured since late 2023, require vehicle commands to be signed with a private key. All actions on vehicle entities will fail with an error if this is required and the key has not been setup correctly. -You will need to use Tesla's [command line tools](https://github.com/teslamotors/vehicle-command/blob/main/README.md#installation-and-configuration) to generate a key pair and install the public key on your vehicle using Bluetooth. +The integration expects your private key to be located at `config/tesla_fleet.key`. -```shell -tesla-keygen -key-file tesla_fleet.key create > tesla_fleet.pem -tesla-control -ble -key-file tesla_fleet.key -vin VINVINVINVIN -debug add-key-request tesla_fleet.pem owner cloud_key -``` +Your public key must be added to each of your vehicles by visiting https://tesla.com/_ak/YOUR.DOMAIN and following the instructions in the Tesla app. -Finally, copy `tesla_fleet.key` to your Home Assistant config directory and then reload the Tesla Fleet {% term integration %}. - -{% note %} -If you receive a "BLE connection attempt failed" error, follow these steps: - -1. Disable Bluetooth on your phone -2. Execute the `tesla-control` command -3. Re-enable Bluetooth after the command completes - -This is necessary because the tool cannot establish a connection while another Bluetooth device is connected to the car. -{% endnote %} +For more details see [Tesla Fleet API vehicle commands documentation](https://developer.tesla.com/docs/fleet-api/endpoints/vehicle-commands#key-pairing). ## Entities @@ -120,7 +218,7 @@ These are the entities available in the Tesla Fleet integration. Not all entitie | Binary sensor | Trip charging | No | | Binary sensor | User present | Yes | | Button | Flash lights | Yes | -| Button | Homelink | Yes | +| Button | HomeLink | Yes | | Button | Honk horn | Yes | | Button | Keyless driving | Yes | | Button | Play fart | Yes | @@ -186,31 +284,45 @@ These are the entities available in the Tesla Fleet integration. Not all entitie ### Energy sites -| Domain | Name | Enabled | -| ------------- | ------------------------ | ------- | -| 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 | -| Sensor | Grid power | Yes | -| Sensor | Grid services power | Yes | -| Sensor | Grid status | Yes | -| Sensor | Island status | Yes | -| Sensor | Load power | Yes | -| Sensor | Percentage charged | Yes | -| Sensor | Solar power | Yes | -| Sensor | Total pack energy | No | -| Sensor | VPP backup reserve | Yes | -| Sensor | Version | Yes | -| Switch | Allow charging from grid | Yes | -| Switch | Storm watch | Yes | +| Domain | Name | Enabled | +|--------------|--------------------------------|---------| +| 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 | +| Sensor | VPP backup reserve | Yes | +| Switch | Allow charging from grid | Yes | +| Switch | Storm watch | Yes | ### Wall connector @@ -232,3 +344,21 @@ The Tesla Fleet API only provides power data for Powerwall and Solar products. T Energy flows can be calculated from `Battery power` and `Grid power` sensors using a [Template Sensor](/integrations/template/) to separate the positive and negative values into positive import and export values. The `Load power`, `Solar power`, and the templated sensors can then use a [Riemann Sum](/integrations/integration/) to convert their instant power (kW) values into cumulative energy values (kWh), which then can be used within the energy dashboard. + +## Troubleshooting + +- **General troubleshooting steps** + 1. Confirm that your vehicle or energy product can be accessed and updates within the official Tesla app. This rules out any issues that are outside the control of Home Assistant or this integration. + 2. For some errors in the integration, waking the vehicle or energy product through the official app, then restarting Home Assistant will sometimes help re-authenticate the connection with Tesla's API. You may be asked to re-authenticate through the Tesla website. + +- **Integration is broken or needs to be reconfigured** + 1. Ensure that you have a Tesla developer application ready for usage (refer to the instructions in the **Setting up the Developer Application** section above). + 2. Go to your Tesla Fleet integration page in Home Assistant, then select the **Reconfigure** button to bring the integration wizard up. + - If the **Reconfigure** button is not visible, clear any Application Credentials related to Tesla Fleet from your Application Credentials page (can be found at `http://homeassistant.local:PORT/config/application_credentials`), then restart Home Assistant. After the restart, navigate to the Tesla Fleet integration page, and the **Reconfigure ** button should be visible. + 3. Follow the steps in the **Linking the Developer Application with Home Assistant** section above. + +- **Integration no longer works after the January 2025 API pricing updates** + 1. Refer to the **Integration is broken** troubleshooting steps above. + +- **Integration shows `a condition has not been met to process the request`** + 1. Confirm that you've run all the steps from both the **Hosting a Public/Private Key Pair** and **Register your application as a Fleet API partner** sections above. diff --git a/source/_integrations/tesla_wall_connector.markdown b/source/_integrations/tesla_wall_connector.markdown index a4c7aa17cf0..5e028d9c125 100644 --- a/source/_integrations/tesla_wall_connector.markdown +++ b/source/_integrations/tesla_wall_connector.markdown @@ -21,3 +21,36 @@ ha_integration_type: integration The Tesla Wall Connector integration allows you to integrate your Gen 3 [Tesla Wall Connector](https://www.tesla.com/support/home-charging-installation/wall-connector) with Wi-Fi into Home Assistant. {% include integrations/config_flow.md %} + +## Supported functionality + +### Entities + +The Tesla Wall Connector integration provides the following entities. + +#### Sensors +- **Energy** - Running total of energy used by the Wall Connector. +- **Session energy** - Energy used during the current charging session. +- **Status** - Present status of the Wall Connector. + - **Possible states** - booting, not_connected, connected, ready, negotiating, error, charging_finished, waiting_car, charging_reduced, charging +- **Contactor closed** - Binary sensor indicating if the Wall Connector is currently charging. +- **Grid frequency** - Sensor for grid frequency of the incoming AC power. +- **Grid voltage** - Sensor for grid voltage of the incoming AC power. +- **Handle temperature** - Sensor for temperature of the Wall Connector handle. +- **MCU temperature** - Sensor for temperature of the Wall Connector Main Computing Unit (MCU). +- **PCB temperature** - Sensor for temperature of the Wall Connector Power Control Board (PCB). +- **Phase current** - Sensor for the power current of each incoming AC electricity phase. +- **Phase voltage** - Sensor for the voltage of each incoming AC electricity phase. +- **Vehicle connected** - Binary sensor indicating if a vehicle is connected. +- **Status code** - Sensor for error codes generated by the Wall Connector. + +## Energy dashboard + +Energy usage can be easily added to the built-in [Energy dashboard](/docs/energy/) using the energy sensor. + +To add the Tesla Wall Connector to your Energy dashboard: + +1. Navigate to **Settings** > **Dashboards** > **Energy**. +2. In the **Electricity grid** section, select **Add consumption**. +3. Select the Tesla Wall Connector's "Energy" sensor. +4. Select **Save**. diff --git a/source/_integrations/teslemetry.markdown b/source/_integrations/teslemetry.markdown index df9f7852be5..b6b0c7ec4f5 100644 --- a/source/_integrations/teslemetry.markdown +++ b/source/_integrations/teslemetry.markdown @@ -107,7 +107,7 @@ These are the entities available in the Teslemetry integration. Not all entities |Binary sensor|User present|Yes| |Binary sensor|Wiper heat|No| |Button|Flash lights|Yes| -|Button|Homelink|Yes| +|Button|HomeLink|Yes| |Button|Honk horn|Yes| |Button|Keyless driving|Yes| |Button|Play fart|Yes| @@ -120,6 +120,7 @@ These are the entities available in the Teslemetry integration. Not all entities |Cover|Trunk|Yes| |Cover|Vent windows|Yes| |Device tracker|Location|Yes| +|Device tracker|Origin|No| |Device tracker|Route|Yes| |Lock|Charge cable lock|Yes| |Lock|Lock|Yes| @@ -237,10 +238,6 @@ These are the entities available in the Teslemetry integration. Not all entities |Sensor|State|Yes| |Sensor|Vehicle|Yes| -## Vehicle sleep - -Constant API polling will prevent most Model S and Model X vehicles manufactured before 2021 from sleeping, so the Teslemetry integration will stop polling these vehicles for 15 minutes, after 15 minutes of inactivity. You can call the `homeassistant.update_entity` action to force polling the API, which will reset the timer. - ## Actions Teslemetry provides various custom actions to interact with the Tesla Fleet API directly. diff --git a/source/_integrations/tessie.markdown b/source/_integrations/tessie.markdown index 2400b087c46..8b758a2c4e3 100644 --- a/source/_integrations/tessie.markdown +++ b/source/_integrations/tessie.markdown @@ -91,7 +91,7 @@ The integration will create binary sensor entities for a variety of metrics rela The integration will create button entities to control various aspects of the vehicle: - Flash lights -- Homelink +- HomeLink - Honk horn - Keyless driving - Play fart diff --git a/source/_integrations/text.mqtt.markdown b/source/_integrations/text.mqtt.markdown index c4506cbcffa..496f067c8e6 100644 --- a/source/_integrations/text.mqtt.markdown +++ b/source/_integrations/text.mqtt.markdown @@ -42,7 +42,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -55,11 +55,11 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -138,7 +138,7 @@ entity_picture: required: false type: string json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -196,7 +196,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the text state value from the payload received on `state_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the text state value from the payload received on `state_topic`." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/thermopro.markdown b/source/_integrations/thermopro.markdown index 4a1131ed9cc..26e0599a50e 100644 --- a/source/_integrations/thermopro.markdown +++ b/source/_integrations/thermopro.markdown @@ -12,6 +12,7 @@ ha_codeowners: ha_domain: thermopro ha_config_flow: true ha_platforms: + - button - sensor ha_integration_type: integration --- @@ -31,3 +32,31 @@ Integrates [ThermoPro](https://buythermopro.com/) devices into Home Assistant. The ThermoPro integration will automatically discover devices once the [Bluetooth](/integrations/bluetooth) integration is enabled and functional. {% include integrations/config_flow.md %} + +## Buttons + +These {% term actions %} allow one to set the time on supported devices (TP358, TP393) via Home Assistant. + +### Button `Set Date&Time` + +Sets the date & time on target devices to the system time in 24-hour notation. +The device is capable of showing 12-hour notation (AM/PM) but setting this is currently not implemented. + +For example, the following automation sets the datetime of the thermometer each day. + +{% raw %} + +```yaml +mode: single +triggers: + - trigger: time + at: "03:03:03" +conditions: [] +actions: + - action: button.press + target: + entity_id: button.tp_358_xxxx_your_device_set_date_time + data: {} +``` + +{% endraw %} diff --git a/source/_integrations/third_reality.markdown b/source/_integrations/third_reality.markdown index 29d4db226a1..46039115399 100644 --- a/source/_integrations/third_reality.markdown +++ b/source/_integrations/third_reality.markdown @@ -7,28 +7,39 @@ ha_category: - Cover - Switch - Binary sensor + - Light - Sensor - Button ha_domain: third_reality ha_integration_type: integration works_with: - zigbee + - matter ha_platforms: - binary_sensor - button + - light - sensor - switch - cover -ha_iot_standard: zigbee +ha_iot_standard: + - zigbee + - matter ha_brand: true --- -[Third Reality](https://3reality.com) is a member of the Works with Home Assistant partner program for their Zigbee products. Third Reality is committed to making sure their products are up-to-date and ready to use in Home Assistant. +[Third Reality](https://3reality.com) is a member of the Works with Home Assistant partner program for their Zigbee and Matter products. Third Reality is committed to making sure their products are up-to-date and ready to use in Home Assistant. Third Reality Zigbee devices work locally and integrate seamlessly with the Zigbee integration in Home Assistant (Zigbee stick required). -To add Third Reality products, pair them as Zigbee devices: +To add Third Reality products, pair them as Zigbee or Matter devices, depending on which you have purchased: {% my add_zigbee_device badge brand=page.ha_domain %} [Learn more about Zigbee in Home Assistant.](/integrations/zha/) + +Third Reality 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/) diff --git a/source/_integrations/thread.markdown b/source/_integrations/thread.markdown index 5c8250b2da5..55d29437b8b 100644 --- a/source/_integrations/thread.markdown +++ b/source/_integrations/thread.markdown @@ -83,7 +83,7 @@ Unlike other protocols, Thread can use multiple border routers in a single netwo OpenThread is an open source implementation of Thread, originally released by Google. Almost all commercially available Thread border routers are based on the open source implementation. However, the configuration of TBRs is not part of the Thread standard. This means that Google and Apple TBRs implementation setup and configured by their respective ecosystems. -While Home Assistant can *use* any border router, it can *configure* and *control* only OpenThread border routers built with the REST API available in the open source implementation. The OpenThread Border Router add-on (as well as the OpenThread Border Router bundled in the experimental Silicon Labs Multiprotocol add-on) are built from this open source OpenThread code and have the REST API enabled. +While Home Assistant can *use* any border router, it can *configure* and *control* only OpenThread border routers built with the REST API available in the open source implementation. The OpenThread Border Router add-on is built from this open source OpenThread code and has the REST API enabled. ### List of Thread border router devices diff --git a/source/_integrations/timer.markdown b/source/_integrations/timer.markdown index 5be8c0e94c2..508de31fa23 100644 --- a/source/_integrations/timer.markdown +++ b/source/_integrations/timer.markdown @@ -96,7 +96,7 @@ You can also use `entity_id: all` and all active timers will be started. ### Action `timer.change` -Change an active timer. This changes the duration of the timer with the duration given. You can also use `entity_id: all` and all active timers will be changed. +Change an active timer. This changes the duration of the timer with the duration given. You can also use `entity_id: all` and all active timers will be changed. You cannot extend the duration beyond that set by `timer.start`. | Data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -113,7 +113,7 @@ Pause a running timer. This will retain the remaining duration for later continu ### Action `timer.cancel` -Cancel an active timer. This resets the duration to the last known initial value without firing the `timer.finished` event. You can also use `entity_id: all` and all active timers will be canceled. +Cancel a running or paused timer. This resets the duration to the last known initial value without firing the `timer.finished` event. You can also use `entity_id: all` and all active and paused timers will be canceled. | Data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -121,7 +121,7 @@ Cancel an active timer. This resets the duration to the last known initial value ### Action `timer.finish` -Manually finish a running timer earlier than scheduled. You can also use `entity_id: all` and all active timers will be finished. +Manually finish a running or paused timer earlier than scheduled. You can also use `entity_id: all` and all active and paused timers will be finished. | Data attribute | Optional | Description | | ---------------------- | -------- | ----------- | diff --git a/source/_integrations/todo.markdown b/source/_integrations/todo.markdown index 8ae22ec8a29..445dbc8c54e 100644 --- a/source/_integrations/todo.markdown +++ b/source/_integrations/todo.markdown @@ -80,12 +80,12 @@ data: Add a new to-do item. A to-do list `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector) and the `data` payload supports the following fields: -| Data attribute | Optional | Description | Example | -| -------------- | -------- | ---------------------------------------------------------------- | ------------------------------------------------------------ | -| `item` | no | the name of the to-do Item. | Submit income tax return | -| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10 | -| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00 | -| `description` | yes | A more complete description than the one provided by the summary | Collect all necessary documents and submit the final return. | +| Data attribute | Optional | Description | Example | +| -------------- | -------- | ----------------------------------------------------------------- | ------------------------------------------------------------ | +| `item` | no | The name/summary of the to-do item. | Submit income tax return | +| `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10 | +| `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00 | +| `description` | yes | A more complete description than the one provided by the summary. | Collect all necessary documents and submit the final return. | Only one of `due_date` or `due_datetime` may be specified. @@ -107,9 +107,9 @@ Update a to-do item. A to-do list `target` is selected with a [Target Selector]( | Data attribute | Optional | Description | Example | | -------------- | -------- | ----------------------------------------------------------------- | ------------------------------------------------------------ | -| `item` | no | The name of the to-do Item to update. | Submit income tax return | -| `rename` | yes | The new name of the to-do Item. | Something else | -| `status` | yes | The overall status of the To-do Item. | `needs_action` or `completed` | +| `item` | no | The name/summary of the to-do item to update. | Submit income tax return | +| `rename` | yes | The new name of the to-do item. | Something else | +| `status` | yes | The overall status of the to-do item. | `needs_action` or `completed` | | `due_date` | yes | The date the to-do item is expected to be completed. | 2024-04-10 | | `due_datetime` | yes | The date and time the to-do item is expected to be completed. | 2024-04-10 23:00:00 | | `description` | yes | A more complete description than the one provided by the summary. | Collect all necessary documents and submit the final return. | diff --git a/source/_integrations/totalconnect.markdown b/source/_integrations/totalconnect.markdown index 275910d0942..0ee19234a80 100644 --- a/source/_integrations/totalconnect.markdown +++ b/source/_integrations/totalconnect.markdown @@ -21,19 +21,100 @@ ha_integration_type: integration The `totalconnect` integration provides connectivity with Resideo Total Connect 2.0-enabled alarm systems. +The integration allows automations based on the state of the alarm system. For example: when the alarm is armed, turn on the outside light. + +The integration can also arm or disarm the alarm panel. For example: when I arrive home, disarm the alarm panel + +## Supported devices + +This integration supports alarm panels with "communicator modules" that are compatible with the Total Connect 2.0 service. An active account is required via a third party alarm monitoring company. Panels may be branded as Resideo, Honeywell, Ademco or other third party alarm companies. + +Device models known to work include: + +- ProSeries (ProA7, ProA7Plus) +- Lyric (AIO, Gateway) +- Lynx Touch (L5100, L5200, L5210, L7000) +- Lynx Plus (L3000) +- VISTA (15P, 20P, 21iP) + +## Unsupported devices + +The following devices are not supported: + +- Older Lynx models (not Touch or Plus) +- Other panels without a Total Connect compatible communicator module + ## Prerequisites Log in to the [Total Connect website](https://totalconnect2.com) and create a "standard" Total Connect user account specifically for use with Home Assistant. It should not have full administrative privileges. Give the user access to your Location, along with a user code, usually a 4 digit number. +{% details "Notes for Home Assistant Core Installations" %} + +If you have issues running this integration, you may require `libxml2-dev` and `libxmlsec1-dev` packages. To install these on Raspbian, run the command: + +```bash +sudo apt install libxml2-dev libxmlsec1-dev +``` + +{% enddetails %} + {% include integrations/config_flow.md %} ## Configuration Options **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. +**Require Code:** if enabled, you must enter the user code to arm or disarm the alarm. + +## Alarm control panel + +The integration provides an alarm control panel for each Total Connect location. It uses the name of your location from Total Connect. For example, if your location name in Total Connect is "Home", Home Assistant will use `alarm_control_panel.home`. + +The `triggered` state also provides a state attribute called `triggered_source` giving more detail on what triggered the alarm: + +- `Police/Medical` is when sensors detected a burglar and/or the Police or Medical button was pressed +- `Fire/Smoke` is when fire or smoke is detected, and/or the Fire button was pressed +- `Carbon Monoxide` is when carbon monoxide is detected + +## Binary sensor + +The integration provides a binary sensor for each Total Connect zone. To see faulted zones in Home Assistant, your Total Connect account must have "Sensor Activities" enabled. Your alarm monitoring company may charge an extra fee to enable this. If available, these can be found in the Total Connect 2 web portal at **Notifications** -> **Sensor Activities**. Alternately, they can be found in the Total Connect mobile app at **More** -> **Settings** -> **Notifications** -> **Sensor Activities**. Enable each zone you want to monitor. Unmonitored zones will display as `Closed` in Home Assistant. + +Home Assistant device class `door` is assigned to Total Connect entry/exit, perimeter, and motion zones; along with most alarm panel buttons. The sensor will appear as `True` if the zone is opened (either fault or triggered in Total Connect) and `False` if closed. Device class `smoke` is assigned to Total Connect smoke detectors and alarm panel buttons set to a "Fire No Verification" response type. The sensor will appear as `True` if smoke is detected or the respective button is pressed. Device class `gas` is assigned to Total Connect carbon monoxide detectors. The sensor will appear as `True` if carbon monoxide is detected. + +## Buttons + +The integration provides a bypass button for each zone that can be bypassed. The **Bypass All** button for the alarm panel will bypass all faulted or troubled zones. The **Clear Bypass** button for the alarm panel will clear all bypassed zones. + +## Actions + +The alarm control panel supports the following basic actions: `alarm_arm_away`, `alarm_arm_home`, `alarm_arm_night`, and `alarm_disarm`. + +### Action: Arm home instant + +The `totalconnect.arm_home_instant` action puts the alarm panel in "arm home" with zero entry delay, triggering the alarm instantly if an entry/exit zone is faulted. This is equivalent to "arm stay instant" in most alarm panels. + +| Data attribute | Optional | Description | +|------------------------|----------|------------------------------------------------------| +| `entity_id` | No | The ID of the alarm panel to arm. | + +### Action: Arm away instant + +The `totalconnect.arm_away_instant` action puts the alarm panel in "arm away" with zero entry delay, triggering the alarm instantly if an entry/exit zone is faulted. This is equivalent to "arm away instant" in most alarm panels. + +| Data attribute | Optional | Description | +|------------------------|----------|------------------------------------------------------| +| `entity_id` | No | The ID of the alarm panel to arm. | + +## Diagnostic Sensors + +The following diagnostic sensors are available: + +- Low Battery for Zones and Alarm Panels will be `On` if the battery is low. +- Tamper for Zones and Alarm Panels will be `On` if in a tampered state. +- Power for Alarm Panels will be `On` if main power is connected or `Off` if running on the backup battery. ## Automation example @@ -42,7 +123,7 @@ automation: - alias: "Alarm: Disarmed Daytime" triggers: - trigger: state - entity_id: alarm_control_panel.total_connect + entity_id: alarm_control_panel.home to: "disarmed" conditions: - condition: sun @@ -55,7 +136,7 @@ automation: - alias: "Alarm: Armed Away" triggers: - trigger: state - entity_id: alarm_control_panel.total_connect + entity_id: alarm_control_panel.home to: "armed_away" actions: - action: scene.turn_on @@ -70,45 +151,37 @@ automation: actions: - action: totalconnect.arm_home_instant target: - entity_id: alarm_control_panel.total_connect + entity_id: alarm_control_panel.home ``` -{% details "Notes for Home Assistant Core Installations" %} +## Removing the integration -If you have issues running this integration, you may require `libxml2-dev` and `libxmlsec1-dev` packages. To install these on Raspbian, run the command: +This integration follows standard integration removal. No extra steps are required. -```bash -sudo apt install libxml2-dev libxmlsec1-dev -``` +{% include integrations/remove_device_service.md %} -{% enddetails %} +After deleting the integration, go to Total Connect and remove the user account you created for Home Assistant. -## Alarm control panel +## Data Updates -The integration provides an alarm control panel for each Total Connect location. It uses the name of your location from Total Connect. For example, if your location name in Total Connect is "Home", Home Assistant will use `alarm_control_panel.home`. +Your alarm panel contacts the Total Connect 2.0 server to provide status updates. This is a "polling integration" that contacts the Total Connect 2.0 server every 30 seconds to retrieve the status of your alarm panel and sensors. Home Assistant cannot communicate locally with the alarm panel. -The alarm control panel supports the following actions: `alarm_arm_away`, `alarm_arm_home`, `alarm_arm_night`, and `alarm_disarm`. The integration also provides unique actions for `totalconnect.arm_home_instant` and `totalconnect.arm_away_instant` which arms the system with zero entry delay, triggering the alarm instantly if an entry/exit zone is faulted. +## Limitations -The `triggered` state also provides a state attribute called `triggered_source` giving more detail on what triggered the alarm: +The polling window is 30 seconds. If your door opens and then closes again within 30 seconds, it may not be visible in Home Assistant. Automations based on the short term status of doors and windows are not recommended. -- `Police/Medical` is when sensors detected a burglar and/or the Police or Medical button was pressed -- `Fire/Smoke` is when fire or smoke is detected, and/or the Fire button was pressed -- `Carbon Monoxide` is when carbon monoxide is detected +The Total Connect API has limited zone type information. Many zones are simply described as "perimeter" and thus appear as a `door` in Home Assistant. You may have to manually adjust some entities. -## Binary sensor +Some alarm panels integrate Z-Wave, cameras, smart locks or garage door openers, and those add-on devices can be controlled by the Total Connect app. This integration does not yet support awareness of or control of these add-on devices. -The integration provides a binary sensor for each Total Connect zone. To see faulted zones in Home Assistant, your Total Connect account must have "Sensor Activities" enabled. Your alarm monitoring company may charge an extra fee to enable this. If available, these can be found in the Total Connect 2 web portal at **Notifications** -> **Sensor Activities**. Alternately, they can be found in the Total Connect mobile app at **More** -> **Settings** -> **Notifications** -> **Sensor Activities**. Enable each zone you want to monitor. Unmonitored zones will display as `Closed` in Home Assistant. +This integration cannot "trigger" the alarm panel or cause the alarm to sound. -The Total Connect API has limited zone type information. Home Assistant device class `door` is assigned to Total Connect entry/exit, perimeter, and motion zones; along with most alarm panel buttons. The sensor will appear as `True` if the zone is opened (either fault or triggered in Total Connect) and `False` if closed. Device class `smoke` is assigned to Total Connect smoke detectors and alarm panel buttons set to a "Fire No Verification" response type. The sensor will appear as `True` if smoke is detected or the respective button is pressed. Device class `gas` is assigned to Total Connect carbon monoxide detectors. The sensor will appear as `True` if carbon monoxide is detected. +## Troubleshooting -## Buttons +### Error Connecting or Service Unavailable -The integration provides a bypass button for each zone that can be bypassed. The **Bypass All** button for the alarm panel will bypass all faulted or troubled zones. The **Clear Bypass** button for the alarm panel will clear all bypassed zones. +The integration depends on the Total Connect 2.0 servers and your internet connection. Verify your internet is working and check https://status.resideo.com/ for server outages. -## Diagnostic Sensors +### Unknown ResultCode, ArmingState, ZoneType or ZoneStatus -The following diagnostic sensors are available: - -- Low Battery for Zones and Alarm Panels will be `On` if the battery is low. -- Tamper for Zones and Alarm Panels will be `On` if in a tampered state. -- Power for Alarm Panels will be `On` if main power is connected or `Off` if running on the backup battery. +The Total Connect API does not fully document all modes of every alarm panel so the integration was developed based on testing with the developers' own hardware. New or different hardware may result in unknown ResultCode, ArmingState, ZoneType, ZoneStatus or similar messages in the Home Assistant logs. If encountered, please [submit an issue](https://github.com/craigjmidwinter/total-connect-client/issues) for `total-connect-client` which enables this integration. diff --git a/source/_integrations/tplink.markdown b/source/_integrations/tplink.markdown index 84756d2190e..bddd5efe8f8 100644 --- a/source/_integrations/tplink.markdown +++ b/source/_integrations/tplink.markdown @@ -14,6 +14,7 @@ ha_category: - Sensor - Siren - Switch + - Vacuum ha_release: 0.89 ha_iot_class: Local Polling ha_config_flow: true @@ -35,11 +36,19 @@ ha_platforms: - sensor - siren - switch + - vacuum ha_dhcp: true ha_integration_type: integration +ha_quality_scale: platinum --- -The `tplink` integration allows you to control your [TP-Link Kasa Smart Home Devices](https://www.tp-link.com/kasa-smart/) and [TP-Link Tapo Devices](https://www.tapo.com/) such as plugs, power strips, wall switches and bulbs. +The `tplink` integration allows you to control your [TP-Link Kasa Smart Home Devices](https://www.tp-link.com/kasa-smart/) and [TP-Link Tapo Devices](https://www.tapo.com/) such as cameras, doorbells, chimes, lights, plugs, wall switches, robot vacuums, hubs, and hub-attached devices. + +## How you can use this integration + +The TP-Link integration lets you do many things, such as switching devices on and off based on schedules or events, monitoring energy usage in the Home Assistant dashboards, viewing live camera feeds, and controlling device configurations manually or via automations. + +## Prerequisites You need to provision your newly purchased device to connect to your network before it can be added via the integration. This can be done either by using [kasa command-line tool](https://python-kasa.readthedocs.io/en/latest/cli.html#provisioning) or by adding it to the official Kasa or Tapo app before trying to add them to Home Assistant. Some apps for TP-Link's other products, such as the Deco app, also allow you to add Kasa and Tapo devices. Since these devices use the same TP-Link Cloud Account for authorization, they work with this integration as well. @@ -48,6 +57,29 @@ If you have an older device that does not currently require authentication, you {% include integrations/config_flow.md %} +{% configuration_basic %} + +Host: + description: | + Hostname or IP address of your TP-Link device. +Username: + description: | + Your TP-Link cloud username which is your *case-sensitive* email address. Required for Tapo and newer Kasa devices. +Password: + description: | + Your TP-Link cloud password. Required for Tapo and newer Kasa devices. +Live view: + description: | + Checkbox to enable live view will create the live view camera entity for Tapo cameras. Requires your camera account credentials which you set up from the Tapo app under **Device Settings** > **Advanced Settings** > **Camera Account**. +Camera account username: + description: | + Your camera account username as configured in the Tapo app. +Camera account password: + description: | + Your camera account password configured for the device in the Tapo app. + +{% endconfiguration_basic %} + ## Supported Devices See [Supported Devices in python-kasa](https://python-kasa.readthedocs.io/en/stable/SUPPORTED.html) for an up to date list that includes hardware and firmware versions. @@ -77,10 +109,12 @@ Alternatively, you can factory reset and then prevent the device from accessing - **Plugs**: P100, P110, P110M, P115, P125M, P135, TP15 - **Power Strips**: P210M, P300, P304M, P306, TP25 -- **Wall Switches**: S500D, S505, S505D +- **Wall Switches**: S210, S220, S500D, S505, S505D - **Bulbs**: L510B, L510E, L530E, L630 - **Light Strips**: L900-10, L900-5, L920-5, L930-5 -- **Cameras**: C100, C210, C225, C325WB, C520WS, TC65, TC70 +- **Cameras**: C100, C210, C220, C225, C325WB, C520WS, C720, TC65, TC70 +- **Doorbells and chimes**: D100C, D130, D230 +- **Vacuums**: RV20 Max Plus, RV30 Max - **Hubs**: H100, H200 - **Hub-Connected Devices[^3]**: S200B, S200D, T100, T110, T300, T310, T315 @@ -88,31 +122,158 @@ Alternatively, you can factory reset and then prevent the device from accessing [^2]: Newer versions require authentication [^3]: Devices may work across TAPO/KASA branded hubs -## Unavailable entities + +## Supported functionality + +### Cameras, doorbells and chimes + +Only Tapo cameras, doorbells, and chimes are currently supported. +In order for live view to work on devices that support it, you will need to enable your camera account in the Tapo App under **Device Settings** > **Advanced Settings** > **Camera Account**. +If you do not want to do this, keep **Live view** unchecked when adding the device. This can be changed at a later date using the `reconfigure` option on the integration entry. + +Depending on the supported features of the camera, you can control various settings such as privacy mode, pan/tilt, and motion detection alerts. + +### Lights + +Light entities are added for bulbs, light strips, and dimmer switches. +Depending on the supported features of the device, the integration will allow changing brightness, color, color temperature, and light effects. + +If light effects are supported by a device, they can be selected from the bottom of the light card. +Light presets are also supported and can be set via the config preset drop down on the device page. + +Depending on the supported features of the device you can control various other configuration settings such as on/off transitions and auto-on/off. + +### Plugs and switches + +Switch entities are added for plugs, simple wall switches and power strips. In addition to turning devices on and off, you can control the various configuration options that the device supports, such as auto-on/off and automatic firmware updates. + +### Robot vacuums + +Vacuum entities are added for robot vacuums. In addition to starting and pausing devices, you can call them home, locate them, and control the various configuration options such as fan speed. + +### Energy monitoring + +If a device supports energy monitoring sensors will be created for consumption metrics which can be fed into the Home Assistant energy dashboard. + +### Hub-attached devices + +Various hub attached devices are supported such as those providing climate control, motion detection, humidity monitoring and water leak detection. + + +## Data updates + +Devices are polled for data updates every 5 seconds. When you make changes through Home Assistant (e.g., switching a device on), the device's state is updated immediately rather than waiting for the next poll. +The integration connects locally to the devices without going via the TP-Link cloud. This is different from the native Tapo and Kasa apps which will connect to the devices via the TP-Link cloud if the device has access to the internet. + +## Known limitations + +### Camera connections + +Some firmware versions of Tapo Cameras will not authenticate unless you enable **Tapo Lab** > **Third-Party Compatibility** in the native Tapo app. +Alternatively, you can factory reset and then prevent the device from accessing the internet. + +### Subnets and discovery + +If devices are on a different subnet to Home Assistant, automatic discovery will not work. +In this instance it is recommended to add devices by IP address and configure them with static IP addresses to prevent issues when IP addresses change. + +### Buttons + +The hub-attached Tapo buttons S200B and S200D, do not currently support alerting when the button is pressed. + +### Hub-attached cameras + +Hub attached cameras will be supported in the future. Due to battery considerations they do not support live view. + +### No light effects on kasa bulbs + +Light effects are currently not supported on Kasa bulbs. + +### Kasa power strips + +Due to limitations of the devices, the energy monitoring state of Kasa power strip child plugs is only updated every 60 seconds. + +If required, you can manually trigger an update via **Developer tools** > **Actions** > **Home Assistant Core Integration: Update entity** passing a list of the child entities. + +## Troubleshooting + +### Device connections + +- Take note of the known limitation for subnets above. +- Ensure that your username is your TP-Link cloud username, which is your *case-sensitive* email address. +- Ensure you have enabled **Tapo Lab** > **Third-Party Compatibility** in the Tapo app. You may need to factory reset and re-add to the Tapo app after this step. +- Disable or remove any custom integrations that interact with TPLink devices supported by this integration. +- Ensure stable network connectivity between Home Assistant and the device. +- Unplug existing TP-Link/Tapo devices on your network before onboarding a new device. The TP-Link Simple Setup (TSS) protocol, which shares credentials from existing devices, can break authentication. If issues persist, factory reset the new device and re-add it without other TP-Link devices active. +- Check the [reported connection solutions](#reported-connection-solutions) section below. +- Check the [supported device list](#supported-devices) to see if the device is tested to work with the integration. +- Try running the [kasa tool](https://github.com/python-kasa/python-kasa) to connect to the device. An easy way to do this is to [install uv](https://docs.astral.sh/uv/getting-started/installation/) and run `uvx --from python-kasa kasa --username --password ` +- Raise a support issue. See the [section below](#raising-support-issues) for guidelines. + +#### Reported connection solutions + +These are some of the solutions that Home Assistant users have reported as solving their device connection issues: + +- Make the first letter of your TP-Link cloud username email upper-case. This could be because it was automatically capitalized when first entered into the Tapo app. +- Remove the device from the Tapo app and re-add by searching for the correct model (i.e. do not use auto-discovery) +- Log out of the Tapo and Kasa apps, factory reset the device, log back in to the Tapo app, then re-add the device to the Tapo app. +- Specifically for cameras, disable and re-enable the **Settings** > **Advanced Settings** > **Camera account** options in the Tapo app. +- Specifically for cameras, reset the **Settings** > **Advanced Settings** > **Camera account** credentials in the Tapo app. + +### Unavailable entities Some entities might be showing as Unavailable if they have been removed from the integration. -## Cameras - -Only Tapo cameras are currently supported. -In order for live view to work, you will need to enable your camera account in the Tapo App > **Advanced Settings** > **Camera Account**. -If you do not want to do this, keep **Live view** unchecked when adding the device. - -### Total consumption +#### Total consumption sensor This entity is only reported by older kasa devices. Currently, Tapo devices and newer Kasa devices do not report total consumption, although briefly during 2024.6, they incorrectly reported today's consumption as "total consumption." You can safely delete this entity if it is reported as unavailable on a newer Kasa or Tapo device. -### Update +#### Update available sensor This entity has been removed from the integration due to stability issues, calling the TPLink cloud API to check for updates. It will be replaced in a future release with a new Update entity, but if you have an Unavailable entity ID starting with `binary_sensor.` and ending with `update`, you can safely delete it. -## Light effects +### Raising support issues -If light effects are supported by a device they can be selected from the bottom of the light card. -They are currently not supported on Kasa bulbs. +For the maintainers of the TP-Link integration to be able to properly assist with a support issue, please follow these guidelines: -### Random Effect - Action `tplink.random_effect` +- Raise an issue with [Home Assistant Core](https://github.com/home-assistant/core/issues). +- Fill in as many of the fields in the issue template as you can. +- If applicable, list all steps taken from the [Troubleshooting device connections](#device-connections) section above. +- Upload [debug logs](#enable-debug-logging) that run from Home Assistant first starting up, until the error is encountered. + +### Enable debug logging + +To capture debug logs from Home Assistant first starting up, update [`configuration.yaml`](https://www.home-assistant.io/docs/configuration/) to look like this: + +```yaml +logger: + default: warning # This will already be present. Add the lines below. + logs: + homeassistant.components.tplink: debug + kasa: debug +``` + +Then restart Home Assistant, trigger the error, and download the logs from **Settings** > **System** > **Logs** > **Download logs** + +{% note %} +Remember to disable debug logging after troubleshooting to prevent excessive log growth and performance impact. +{% endnote %} + +## Examples + +### Automation ideas + +- Turn on lights when it gets dark and turn them off again with a voice command. +- Turn off privacy mode and turn on motion detection for internal cameras when you leave home (with geofencing) and toggle back when you get home. + +### Light effect services + +There are two services for light effects that can be used in automations. + +These are available on devices that support light effects such as bulbs and light strips, except for [kasa bulbs](#no-light-effects-on-kasa-bulbs) + +#### Random Effect - Action `tplink.random_effect` Light strips allow setting a random effect. @@ -161,7 +322,7 @@ data: random_seed: 80 ``` -### Sequence Effect - Action `tplink.sequence_effect` +#### Sequence Effect - Action `tplink.sequence_effect` Light strips allow setting a sequence effect. diff --git a/source/_integrations/tplink_tapo.markdown b/source/_integrations/tplink_tapo.markdown index 3ee90a156dd..961b1a71309 100644 --- a/source/_integrations/tplink_tapo.markdown +++ b/source/_integrations/tplink_tapo.markdown @@ -4,6 +4,7 @@ description: Connect and control your Tapo devices using the TP-Link Smart Home ha_category: - Binary sensor - Button + - Camera - Climate - Fan - Hub @@ -13,6 +14,7 @@ ha_category: - Sensor - Siren - Switch + - Vacuum ha_domain: tplink_tapo ha_release: 0.89 ha_integration_type: virtual @@ -26,6 +28,7 @@ ha_config_flow: true ha_platforms: - binary_sensor - button + - camera - climate - diagnostics - fan @@ -35,6 +38,7 @@ ha_platforms: - sensor - siren - switch + - vacuum ha_iot_class: Local Polling ha_dhcp: true --- diff --git a/source/_integrations/tradfri.markdown b/source/_integrations/tradfri.markdown index cd51168b901..bad806b3a3e 100644 --- a/source/_integrations/tradfri.markdown +++ b/source/_integrations/tradfri.markdown @@ -23,7 +23,7 @@ ha_platforms: ha_integration_type: integration --- -The IKEA TRÅDFRI integration allows you to connect your IKEA Trådfri Gateway to Home Assistant. The gateway can control compatible Zigbee-based lights (certified Zigbee Light Link products) connected to it. Home Assistant will automatically discover the gateway's presence on your local network if `discovery:` is present in your {% term "`configuration.yaml`" %} file. +The IKEA TRÅDFRI integration allows you to connect your IKEA Trådfri Gateway to Home Assistant. The gateway can control compatible Zigbee-based lights (certified Zigbee Light Link products) connected to it. {% include integrations/config_flow.md %} @@ -36,7 +36,7 @@ If you see an "Unable to connect" message, restart the gateway and try again. Do {% note %} There is currently no dedicated core integration for the Dirigera hub released in October 2022. -The Dirigera hub can, however, be integrated directly via the [HomeKit device](/integrations/homekit_controller/) integration. This configuration even provides events for motion sensors and buttons, which the original integration lacks. +The Dirigera hub can, however, be integrated directly via the [HomeKit device](/integrations/homekit_controller/) integration or the [Matter](/integrations/matter/#using-a-matter-bridge) integration. As of Hub version 2.615.8 (September 2024), there is support for the following device types via Matter Bridge: lights (including drivers), smart plugs/outlets, connected blinds, remotes, motion sensors, open/close sensors, air purifiers, and air quality sensors. {% endnote %} diff --git a/source/_integrations/trafikverket_weatherstation.markdown b/source/_integrations/trafikverket_weatherstation.markdown index 93e20a681ed..fc3a024a80f 100644 --- a/source/_integrations/trafikverket_weatherstation.markdown +++ b/source/_integrations/trafikverket_weatherstation.markdown @@ -10,6 +10,7 @@ ha_domain: trafikverket_weatherstation ha_codeowners: - '@gjohansson-ST' ha_platforms: + - diagnostics - sensor ha_integration_type: integration --- diff --git a/source/_integrations/transmission.markdown b/source/_integrations/transmission.markdown index 2f3208d2543..75417e85de2 100644 --- a/source/_integrations/transmission.markdown +++ b/source/_integrations/transmission.markdown @@ -26,23 +26,25 @@ Your Transmission client must first be configured to allow remote access. In you {% include integrations/config_flow.md %} -## Integration entities +## Supported functionality The Transmission integration will add the following sensors and switches. -**Sensors**: -- `sensor.transmission_current_status`: The status of your Transmission daemon. -- `sensor.transmission_download_speed`: The current download speed [MB/s]. -- `sensor.transmission_upload_speed`: The current upload speed [MB/s]. -- `sensor.transmission_active_torrents`: The current number of active torrents. -- `sensor.transmission_paused_torrents`: The current number of paused torrents. -- `sensor.transmission_total_torrents`: The total number of torrents present in the client. -- `sensor.transmission_started_torrents`: The current number of started torrents (downloading). -- `sensor.transmission_completed_torrents`: The current number of completed torrents (seeding). +### Sensors -**Switches**: -- `switch.transmission_switch`: A switch to start/stop all torrents. -- `switch.transmission_turtle_mode`: A switch to enable turtle mode (a.k.a. alternative speed limits). +- The status of your Transmission daemon. +- The current download speed [MB/s]. +- The current upload speed [MB/s]. +- The current number of active torrents. +- The current number of paused torrents. +- The total number of torrents present in the client. +- The current number of started torrents (downloading). +- The current number of completed torrents (seeding). + +### Switches + +- A switch to start/stop all torrents. +- A switch to enable turtle mode (a.k.a. alternative speed limits). ## Event automation diff --git a/source/_integrations/tts.markdown b/source/_integrations/tts.markdown index 35bb67c89f0..dbf10248b44 100644 --- a/source/_integrations/tts.markdown +++ b/source/_integrations/tts.markdown @@ -141,7 +141,8 @@ $ curl -X POST -H "Authorization: Bearer " \ ## Troubleshooting {% important %} -Depending on your setup, you might need to set an external URL (`external_url`) inside the [configuration](/integrations/homeassistant/#external_url). +Playing TTS media will prioritize the local Home Assistant URL, which can be configured by navigating to **{% my network title="Settings > System > Network" %}**. +It is highly recommended to set the local Home Assistant URL to automatic, in which case the generated URL will be `http://:`. {% endimportant %} The following sections describe some of the problems encountered with media devices. @@ -154,10 +155,14 @@ The `tts` action will send an `https://` URL to the media device, which will che ### Google cast devices -The Google cast devices (Google Home, Chromecast, etc.) present the following problems: +Google cast devices (Google Home, Chromecast, etc.) require the host in media URLs to be resolvable using Google's public DNS servers, and if the URL is specifying the `https` protocol, the certificate must be valid and not self-signed. + +These requirements present the following problems, all of which create problems if the local Home Assistant URL is not `http://:`: - They [reject self-signed certificates](#self-signed-certificates). -- They do not work with URLs that contain hostnames established by local naming means. Let's say your Home Assistant instance is running on a machine made known locally as `ha`. All your machines on your local network are able to access it as `ha`. However, try as you may, your cast device won't download the media files from your `ha` machine. That's because your cast device ignores your local naming setup. In this example, the `say` action creates a URL like `http://ha/path/to/media.mp3` (or `https://...` if you are using SSL). If you are _not_ using SSL then setting an internal URL that contains the IP address of your server works around this issue. By using an IP address, the cast device does not have to resolve the hostname. +- They use Google's public DNS servers to resolve names, not DNS servers provided via DHCP. Additionally, they do not resolve local names through mDNS. This means they do not work with URLs that contain hostnames established by local naming means. Let's say your Home Assistant instance is running on a machine made known locally as `ha` (via local DNS) and `homeassistant.local` (via mDNS). All machines on your local network can access it as `ha` or `homeassistant.local`. However, try as you may, your cast device won't download the media files from your `ha` machine. That's because your cast device ignores your local naming setup. In this example, the `say` action creates a URL like `http://ha/path/to/media.mp3` (or `https://...` if you are using SSL). If you are _not_ using SSL, then setting an internal URL that contains the IP address of your server works around this issue. By using an IP address, the cast device does not have to resolve the hostname. - If you are using SSL (e.g., `https://yourhost.example.org/...`) then you _must_ use the hostname in the certificate (e.g., `external_url: https://yourhost.example.org`). You cannot use an IP address since the certificate won't be valid for the IP address, and the cast device will refuse the connection. + +The recommended way to overcome these obstacles is to not manually configure a local Home Assistant URL. diff --git a/source/_integrations/tuya.markdown b/source/_integrations/tuya.markdown index 65dc17a3156..3e8ed785415 100644 --- a/source/_integrations/tuya.markdown +++ b/source/_integrations/tuya.markdown @@ -23,7 +23,6 @@ ha_domain: tuya ha_codeowners: - '@Tuya' - '@zlinoliver' - - '@frenck' ha_platforms: - alarm_control_panel - binary_sensor diff --git a/source/_integrations/twentemilieu.markdown b/source/_integrations/twentemilieu.markdown index 7f7ee6468db..033c98f2504 100644 --- a/source/_integrations/twentemilieu.markdown +++ b/source/_integrations/twentemilieu.markdown @@ -16,6 +16,7 @@ ha_platforms: - diagnostics - sensor ha_integration_type: service +ha_quality_scale: silver --- The Twente Milieu {% term integration %} enables you to monitor the upcoming diff --git a/source/_integrations/twinkly.markdown b/source/_integrations/twinkly.markdown index a16863acd55..7dc0cc7d512 100644 --- a/source/_integrations/twinkly.markdown +++ b/source/_integrations/twinkly.markdown @@ -14,6 +14,7 @@ ha_codeowners: ha_platforms: - diagnostics - light + - select ha_dhcp: true ha_integration_type: integration --- diff --git a/source/_integrations/ubiwizz.markdown b/source/_integrations/ubiwizz.markdown index d5802580c0d..ecef13f6a75 100644 --- a/source/_integrations/ubiwizz.markdown +++ b/source/_integrations/ubiwizz.markdown @@ -24,11 +24,6 @@ ha_supporting_integration: Overkiz ha_release: 2022.2 ha_codeowners: - '@imicknl' - - '@vlebourl' - - '@tetienne' - - '@nyroDev' - - '@tronix117' - - '@alexfp14' ha_config_flow: true ha_platforms: - alarm_control_panel diff --git a/source/_integrations/ublockout.markdown b/source/_integrations/ublockout.markdown new file mode 100644 index 00000000000..90036d7fe0e --- /dev/null +++ b/source/_integrations/ublockout.markdown @@ -0,0 +1,22 @@ +--- +title: Ublockout +description: Connect and control your Ublockout devices using the Motionblinds integration +ha_category: + - Cover +ha_domain: ublockout +ha_integration_type: virtual +ha_supporting_domain: motion_blinds +ha_supporting_integration: Motionblinds +ha_release: 2020.12 +ha_codeowners: + - '@starkillerOG' +ha_config_flow: true +ha_platforms: + - button + - cover + - sensor +ha_iot_class: Local Push +ha_dhcp: true +--- + +{% include integrations/supported_brand.md %} diff --git a/source/_integrations/ubus.markdown b/source/_integrations/ubus.markdown index c6f4a6c4dc8..4aa57c91a8e 100644 --- a/source/_integrations/ubus.markdown +++ b/source/_integrations/ubus.markdown @@ -15,7 +15,7 @@ related: ha_quality_scale: legacy --- -This is a presence detection scanner for [OpenWrt](https://openwrt.org/) using [ubus](https://wiki.openwrt.org/doc/techref/ubus). It scans for changes in `hostapd.*`, which will detect and report changes in devices connected to the access point on the router. +This is a presence detection scanner for [OpenWrt](https://openwrt.org/) using [ubus](https://openwrt.org/docs/techref/ubus). It scans for changes in `hostapd.*`, which will detect and report changes in devices connected to the access point on the router. Before this scanner can be used, you have to install the ubus RPC packages on OpenWrt (versions older than 18.06.x do not require the `uhttpd-mod-ubus` package): diff --git a/source/_integrations/unifi.markdown b/source/_integrations/unifi.markdown index 49c417ca237..2d58eb1dd27 100644 --- a/source/_integrations/unifi.markdown +++ b/source/_integrations/unifi.markdown @@ -143,17 +143,25 @@ Provides per-port PoE control. Entities are disabled by default. This feature re Entities appear automatically for each restriction group. If there are no restrictions in a group, no {% term entity %} will be visible. Toggling the switch in Home Assistant will enable or disable all restrictions inside a group. -### Control Port forward functonality - -Entities appear for each port forwarding rule. - ### Control WLAN availability 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 +### Control Port Forwarding Rules -Entities appear for each Traffic Rule. This allows toggling rules on and off. +Entities appear for each port Forwarding Rule. The switches can be identified from icon {% icon "mdi:upload-network" %}. + +### Control Traffic Rules + +Entities appear for each Traffic Rule. The switches can be identified from icon {% icon "mdi:security-network" %}. + +### Control Policy-Based Routing Rules + +Entities appear for each Policy-Based Routing Rule. The switches can be identified from icon {% icon "mdi:routes" %}. + +### Control Zone-Based Firewall Policies + +Entities appear for each Zone-Based Firewall Policy. The switches can be identified from icon {% icon "mdi:security-network" %}. ## Sensor diff --git a/source/_integrations/update.mqtt.markdown b/source/_integrations/update.mqtt.markdown index 326b16765c7..17cdfdbbf53 100644 --- a/source/_integrations/update.mqtt.markdown +++ b/source/_integrations/update.mqtt.markdown @@ -43,7 +43,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -56,7 +56,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template command_topic: @@ -148,7 +148,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`." required: false type: template json_attributes_topic: @@ -156,11 +156,11 @@ json_attributes_topic: required: false type: string latest_version_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the latest version value." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the latest version value. Use `state_topic` with a `value_template` if all update state values can be extracted from a single JSON payload." required: false type: template latest_version_topic: - description: The MQTT topic subscribed to receive an update of the latest version. + description: The MQTT topic subscribed to receive an update of the latest version. Use `state_topic` with a `value_template` if all update state values can be extracted from a single JSON payload. required: false type: string name: @@ -198,7 +198,7 @@ retain: type: boolean default: false state_topic: - description: "The MQTT topic subscribed to receive state updates. The state update may be either JSON or a simple string with `installed_version` value. When a JSON payload is detected, the state value of the JSON payload should supply the `installed_version` and can optional supply: `latest_version`, `title`, `release_summary`, `release_url` or an `entity_picture` URL." + description: "The MQTT topic subscribed to receive state updates. The state update may be either JSON or a simple string with `installed_version` value. When a JSON payload is detected, the state value of the JSON payload should supply the `installed_version` and can optionally supply: `latest_version`, `title`, `release_summary`, `release_url`, and an `entity_picture` URL. To allow progress monitoring `in_progress` (a boolean to indicate an update is in progress), or `update_percentage` (a float value to indicate the progress percentage) may be part of the JSON message." required: false type: string title: @@ -210,7 +210,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the `installed_version` state value or to render to a valid JSON payload on from the payload received on `state_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the `installed_version` state value or to render to a valid JSON payload on from the payload received on `state_topic`." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/utility_meter.markdown b/source/_integrations/utility_meter.markdown index bdab9600e16..7481fb4f6a3 100644 --- a/source/_integrations/utility_meter.markdown +++ b/source/_integrations/utility_meter.markdown @@ -65,7 +65,7 @@ Sensor always available: You need to understand that with this option activated, when the source entity becomes unavailable, the utility meter sensor will have the last totalized value and will not change until the source entity returns to a valid state. {% endconfiguration_basic %} -If the meter reset cycle and reset offsets are to limited for your use case, +If the meter reset cycle and reset offsets are too limited for your use case, consider using the YAML configuration below, which support CRON-style patterns that provide a greater flexibility. diff --git a/source/_integrations/vacuum.mqtt.markdown b/source/_integrations/vacuum.mqtt.markdown index 4260dc9bd0d..fc336fac5b8 100644 --- a/source/_integrations/vacuum.mqtt.markdown +++ b/source/_integrations/vacuum.mqtt.markdown @@ -35,7 +35,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -44,7 +44,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -118,7 +118,7 @@ fan_speed_list: required: false type: [string, list] json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: diff --git a/source/_integrations/valve.markdown b/source/_integrations/valve.markdown index 4b38e165503..6b47dca70ef 100644 --- a/source/_integrations/valve.markdown +++ b/source/_integrations/valve.markdown @@ -46,8 +46,8 @@ The following device classes are supported for valves: ### Valve control actions -All valves respond to `valve.open`, `valve.close`, and `valve.toggle`. -Valves that allow setting a specific position may also be controlled with `valve.set_position` and `valve.stop`. +All valves respond to `valve.open_valve`, `valve.close_valve`, and `valve.toggle`. +Valves that allow setting a specific position may also be controlled with `valve.set_valve_position` and `valve.stop_valve`. | Data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -61,12 +61,12 @@ automation: - trigger: time at: "07:15:00" actions: - - action: valve.close + - action: valve.close_valve target: entity_id: valve.demo ``` -### Action `valve.set_position` +### Action `valve.set_valve_position` Set the position of one or multiple valves if they support setting a specific position. @@ -83,7 +83,7 @@ automation: - trigger: time at: "07:15:00" actions: - - action: valve.set_position + - action: valve.set_valve_position target: entity_id: valve.demo data: diff --git a/source/_integrations/valve.mqtt.markdown b/source/_integrations/valve.mqtt.markdown index 77b609bd5ba..198418b6407 100644 --- a/source/_integrations/valve.mqtt.markdown +++ b/source/_integrations/valve.mqtt.markdown @@ -77,7 +77,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -86,7 +86,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the device's availability from the `availability_topic`. To determine the devices's availability, the result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -94,7 +94,7 @@ availability_topic: required: false type: string command_template: - description: Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to generate the payload to send to `command_topic`. + description: Defines a [template](/docs/configuration/templating/#using-command-templates-with-mqtt) to generate the payload to send to `command_topic`. required: false type: template command_topic: @@ -155,7 +155,7 @@ device: required: false type: string device_class: - description: Sets the [class of the device](/integrations/valve/), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`. + description: Sets the [class of the device](/integrations/valve/#device_class), changing the device state and icon that is displayed on the frontend. The `device_class` can be `null`. required: false type: string enabled_by_default: @@ -181,7 +181,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. A usage example can be found in the [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. A usage example can be found in the [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: @@ -284,7 +284,7 @@ unique_id: required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) that can be used to extract the payload for the `state_topic` topic. The rendered value should be a defined state payload or, if reporting a `position` is supported and `reports_position` is set to `true`, a numeric value is expected representing the position. See also `state_topic`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) that can be used to extract the payload for the `state_topic` topic. The rendered value should be a defined state payload or, if reporting a `position` is supported and `reports_position` is set to `true`, a numeric value is expected representing the position. See also `state_topic`." required: false type: template {% endconfiguration %} diff --git a/source/_integrations/velbus.markdown b/source/_integrations/velbus.markdown index b9cd185d2f6..bb611270b1c 100644 --- a/source/_integrations/velbus.markdown +++ b/source/_integrations/velbus.markdown @@ -27,6 +27,7 @@ ha_platforms: - sensor - switch ha_integration_type: hub +ha_quality_scale: bronze --- The **Velbus** {% term integration %} is used to control [Velbus](https://www.velbus.eu/?lang=en) modules. It supports the Velbus USB, Velbus serial and a TCP/IP gateway. @@ -34,15 +35,57 @@ The **Velbus** {% term integration %} is used to control [Velbus](https://www.ve {% include integrations/config_flow.md %} -### Configuration parameters +## Configuration parameters -The port string used in the user interface or the configuration file can have different formats depending on the type of connection: +During the setup you will be shown 2 choices on ways to connect to the Velbus bus: +- USB +- TCP/IP -- For a serial or USB devices: `/dev/ttyUSB00` -- For a TCP/IP devices: `127.0.0.1:3678` -- For Signum devices without authentication: `tls://192.168.1.9:27015` -- For Signum devices with authentication: `tls://password@192.168.1.9:27015` +### USB + +The USB connection is a way to connect to the Velbus bus. You will need a Velbus USB interface to connect to the bus. The USB interface is connected to the USB port of your Home Assistant device. +The interface USB devices are automatically detected and shown in a list. +Select the correct USB interface from the list and select **Submit**. + +There will be a connection test to make sure the connection is working, and if it's working the integration will be added to Home Assistant. + +### TCP/IP + +The TCP/IP connection is a way to connect to the Velbus bus. You will need a Velbus TCP/IP interface available in your network. + +There are a couple of parameters you need to fill in to connect to the Velbus bus: + +- tls +- host +- port +- password + +The `tls` parameter is optional and can be used to enable or disable the TLS connection. +The `host` parameter is the IP address of the Velbus TCP/IP interface. +The `port` parameter is the port number of the Velbus TCP/IP interface. +The `password` parameter is optional and can be used to authenticate to the Velbus TCP/IP interface. + +#### Example: signum + +- tls: yes +- host: your signum IP address +- port: 27015 +- password: your signum password (if configured) + +#### Example: velser + +- tls: no +- host: your velser IP address +- port: 6000 +- password: leave empty + +#### Example: Home Assistant add-on + +- tls: depending on your configuration +- host: your Home Assistant IP address +- port: 27015 if you kept the default +- password: leave empty {% note %} The pushbutton LEDs of input modules are disabled by default. These can be enabled from the **Devices** panel in the **Configuration** page of the web interface. @@ -187,4 +230,3 @@ The Velbus integration and its entities can be removed by following these steps: {% include integrations/remove_device_service.md %} Note: Removing the integration will delete all Velbus devices and their history from Home Assistant. - diff --git a/source/_integrations/velux.markdown b/source/_integrations/velux.markdown index 5456babc746..2102cbd66ec 100644 --- a/source/_integrations/velux.markdown +++ b/source/_integrations/velux.markdown @@ -10,12 +10,14 @@ ha_iot_class: Local Polling ha_codeowners: - '@Julius2342' - '@DeerMaximum' + - '@pawlizio' ha_domain: velux ha_platforms: - cover - light - scene ha_integration_type: integration +ha_dhcp: true --- [Velux](https://www.velux.com/) {% term integration %} for Home Assistant allows you to connect to a Velux KLF 200 interface, to control [io-homecontrol](http://www.io-homecontrol.com) devices like windows and blinds. The module allows you to start scenes configured within KLF 200. diff --git a/source/_integrations/vesync.markdown b/source/_integrations/vesync.markdown index c2b126cdd56..5c38c564d19 100644 --- a/source/_integrations/vesync.markdown +++ b/source/_integrations/vesync.markdown @@ -4,6 +4,7 @@ description: Instructions on how to set up VeSync switches, outlets, and fans wi ha_category: - Fan - Light + - Number - Switch ha_release: 0.66 ha_iot_class: Cloud Polling @@ -13,14 +14,18 @@ ha_codeowners: - '@webdjoe' - '@thegardenmonkey' - '@cdnninja' + - '@iprak' ha_domain: vesync ha_platforms: + - binary_sensor - diagnostics - fan + - humidifier - light + - number + - select - sensor - switch - - humidifier ha_integration_type: integration --- @@ -30,11 +35,13 @@ The devices must be added to the VeSync App before this {% term integration %} c The following platforms are supported: -- **light** -- **switch** +- **binary sensor** - **fan** -- **sensor** - **humidifier** +- **light** +- **number** +- **sensor** +- **switch** ## Supported devices @@ -68,11 +75,13 @@ This {% term integration %} supports devices controllable by the VeSync App. Th - Vital 100S Smart True HEPA Air Purifier (LAP-V102S-WUS) - Vital 200S Smart True HEPA Air Purifier (LAP-V201S-WUS) - LEVOIT Smart Wifi Air Purifier (LV-PUR131S) +- LEVOIT Smart Tower Fan (LTF-F422S-WUS) ### Humidifiers - Classic200S: Classic 200S Smart Ultrasonic Cool Mist Humidifier - Classic300S: Classic 300S Ultrasonic Smart Humidifier +- Superior6000S: Superior 6000S Smart Evaporative Humidifier ## Prerequisite @@ -125,6 +134,33 @@ VeSync air purifiers will expose the following details depending on the features | `night_light` | The current status of the night light (Core200S/Core400s) | off | | `child_lock` | The current status of the child lock (Core200S/300s/400s) | off | +| Select | Description | Example | +| ----------------------- | ---------------------------------------------------------------------------------- | --------- | +| `night_light_level` | Night light brightness level (Values: off, dim, on). | off | + +## Humidifier + +Sensors and settings exposed by VeSync humidifiers. + +| Sensor | Description | Example | +| ----------------------- | ---------------------------------------------------------------------------------- | --------- | +| `humidity` | Current humidity (in %) | 35 | + +| Number | Description | Example | +| ----------------------- | ---------------------------------------------------------------------------------- | --------- | +| `mist_level` | Mist level intensity (Range: 1-9, Step: 1). Only available in manual mode. | 1 | + +| Select | Description | Example | +| ----------------------- | ---------------------------------------------------------------------------------- | --------- | +| `night_light_level` | Night light brightness level (Values: off, dim, bright). | off | + +## Binary Sensors + +| Binary Sensor | Description | Example | +| ----------------------- | ---------------------------------------------------------------------------------- | --------- | +| `water_lacks` | Indicates whether the device needs a water refill | false | +| `water_tank_lifted` | Water tank is lifted | false | + ## Extracting attribute data In order to get the attributes readings from supported devices, such as voltage from outlets or fan attributes, you'll have to create a [template sensor](/integrations/template#state-based-template-sensors/). diff --git a/source/_integrations/vicare.markdown b/source/_integrations/vicare.markdown index f03288982d3..6801075769b 100644 --- a/source/_integrations/vicare.markdown +++ b/source/_integrations/vicare.markdown @@ -190,3 +190,9 @@ Invalid data from Vicare server: { ``` Usually, this resolves itself after a while, but if this state persists, try to power cycle your gateway. + +## Removing the integration + +This integration follows standard integration removal. Once the integration is removed, you can remove the API client (assuming it was only used by this integration) by going to the [Viessmann developer portal](https://app.developer.viessmann.com/) and deleting the client you created for Home Assistant. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/vodafone_station.markdown b/source/_integrations/vodafone_station.markdown index 58f91b42846..1585cf484e4 100644 --- a/source/_integrations/vodafone_station.markdown +++ b/source/_integrations/vodafone_station.markdown @@ -18,13 +18,46 @@ ha_platforms: - diagnostics - sensor ha_integration_type: hub +ha_quality_scale: silver --- The **Vodafone Station** {% term integration %} allows you to control your [Vodafone Station](https://www.vodafone.it/privati/area-supporto/assistenza-dispositivi/vodafone-station.html) based router. -{% note %} +The integration provides information about your internet connection and the connected devices. + +## Supported devices + The integration supports only Sercomm models so far. -{% endnote %} + +### Tested models + +This {% term integration %} was tested against the following models from Sercomm: + +- Vodafone Power Station (SHG3000) +- Vodafone Power Station WiFi 6 (SHG3060) +- Vodafone WiFi 6 Station (RHG3006) +- Vodafone Gigabox (SHG3000) - supplied by [Vodafone Ireland](https://deviceguides.vodafone.ie/vodafone/gigabox-windows-10/) +- Vodafone H300S + +{% include integrations/config_flow.md %} + +{% configuration_basic %} + host: + description: The IP address of the Vodafone Station router. + username: + description: The username of the Vodafone Station router. + password: + description: The password of the Vodafone Station router. +{% endconfiguration_basic %} + +{% include integrations/option_flow.md %} + +{% configuration_basic %} + consider home: + description: Number of seconds that must elapse before considering a disconnected device "not at home". +{% endconfiguration_basic %} + +## Supported functionality There is support for the following platform types within Home Assistant: @@ -32,14 +65,55 @@ There is support for the following platform types within Home Assistant: - **Sensor** - external IP address, uptime, firmware, resources and network monitors. - **Button** - restart router, dsl/fiber/internet key connections. -{% include integrations/config_flow.md %} +## Examples -## Integration options +### Automation: reconnect / get new IP every night -It is possible to change some behaviors through the {% term integration %} options. -To change the settings, go to {% my integrations title="**Settings** > **Devices & services**" %}. On the **Vodafone Station** integration, select the cogwheel. Then select **Configure**. +```yaml +automation: +- alias: "Reconnect Vodafone Station (Fiber)" + triggers: + - trigger: time + at: "05:00:00" + actions: + - action: button.press + target: + entity_id: button.vodafone_station_xxxx_reconnect_fiber +``` -- **Consider home**: Number of seconds that must elapse before considering a disconnected device "not at home". +### Automation: notify connected device not home + +```yaml +automation: +- alias: "Apple TV disconnect" + triggers: + - platform: state + entity_id: device_tracker.appletv + to: "not_home" + actions: + - action: notify.mobile_app_phone + data: + message: "TV lost network connection" +``` + +### Automation: notify router CPU usage too high + +```yaml +automation: +- alias: "Vodafone Station CPU high cpu usage" + triggers: + - platform: numeric_state + entity_id: sensor.vodafone_station_xxxx_cpu_usage + above: 80 + actions: + - action: notify.mobile_app_phone + data: + message: "Router CPU above 80%." +``` + +## Data updates + +This integration {% term polling polls %} data from the device every 30 seconds by default. ## Additional info @@ -47,10 +121,24 @@ To change the settings, go to {% my integrations title="**Settings** > **Devices **Note**: If you don't want to automatically track newly detected devices, disable the {% term integration %} system option `Enable new added entities`. -### Tested models +## Troubleshooting -This {% term integration %} was tested against the following models from Sercomm: +### Can’t set up the device -- Vodafone Power Station (SHG3000) -- Vodafone WiFi 6 Station (RHG3006) -- Vodafone Gigabox (SHG3000) - supplied by [Vodafone Ireland](https://deviceguides.vodafone.ie/vodafone/gigabox-windows-10/) +#### Symptom: "User already logged-in" + +When trying to set up the integration, the form shows the message "User already logged-in". + +##### Description + +This means that there is already a logged session to the Vodafone Station router. + +##### Resolution + +To resolve this issue, log out from all active sessions, or, if the session was abruptly closed, wait for the router timeout (usually 60 seconds). + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/voip.markdown b/source/_integrations/voip.markdown index 2c4af8077ec..aeb38fe6693 100644 --- a/source/_integrations/voip.markdown +++ b/source/_integrations/voip.markdown @@ -12,6 +12,7 @@ ha_domain: voip ha_integration_type: integration ha_quality_scale: internal ha_platforms: + - assist_satellite - binary_sensor - select - switch @@ -24,6 +25,8 @@ As an alternative, the [Grandstream HT802](https://www.amazon.com/Grandstream-GS Also, the Grandstream HT812 has been reported to work. Home Assistant supports using only one of the two phone ports. +If you are running Home Assistant on a machine with other VoIP software, you can configure the port the **VoIP** {%term integration %} listens on in the configuration. For outgoing calls, you can specify a **SIP user** value that will be sent to the phone in the **From** header, if required. +

    Connecting a phone to Home Assistant requires an adapter. diff --git a/source/_integrations/wallbox.markdown b/source/_integrations/wallbox.markdown index 0e12fa7f446..a820877b9ae 100644 --- a/source/_integrations/wallbox.markdown +++ b/source/_integrations/wallbox.markdown @@ -9,6 +9,7 @@ ha_domain: wallbox ha_platforms: - lock - number + - select - sensor - switch ha_config_flow: true @@ -54,6 +55,10 @@ The number {% term entity %} is only loaded if the supplied username has suffici The {% term integration %} adds a lock {% term entity %}, allowing you to lock the charger. Please note, this only works with a user with admin rights. +## Select + +The {% term integration %} adds a select {% term entity %} to control Solar Charging options, allowing you to choose between Eco Mode, Full Solar or disable Solar Charging. + ## Switch The {% term integration %} adds a switch {% term entity %}, allowing you to pause/resume the charging process. diff --git a/source/_integrations/water_heater.mqtt.markdown b/source/_integrations/water_heater.mqtt.markdown index 14c80540055..0919a7c6c33 100644 --- a/source/_integrations/water_heater.mqtt.markdown +++ b/source/_integrations/water_heater.mqtt.markdown @@ -43,7 +43,7 @@ availability: required: true type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_mode: @@ -52,7 +52,7 @@ availability_mode: type: string default: latest availability_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract device's availability from the `availability_topic`. To determine the devices's availability result of this template will be compared to `payload_available` and `payload_not_available`." required: false type: template availability_topic: @@ -147,7 +147,7 @@ icon: required: false type: icon json_attributes_template: - description: "Defines a [template](/docs/configuration/templating/#using-templates-with-the-mqtt-integration) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." + description: "Defines a [template](/docs/configuration/templating/#using-value-templates-with-mqtt) to extract the JSON dictionary from messages received on the `json_attributes_topic`. Usage example can be found in [MQTT sensor](/integrations/sensor.mqtt/#json-attributes-template-configuration) documentation." required: false type: template json_attributes_topic: diff --git a/source/_integrations/watergate.markdown b/source/_integrations/watergate.markdown index 5354e810ca2..280d23870d5 100644 --- a/source/_integrations/watergate.markdown +++ b/source/_integrations/watergate.markdown @@ -12,9 +12,11 @@ ha_codeowners: - '@adam-the-hero' ha_domain: watergate ha_platforms: - - valve - sensor - event + - valve +ha_quality_scale: bronze +ha_integration_type: integration --- The **Watergate** integration integrates your Watergate Devices (currently Sonic Wi-Fi) with your Home Assistant. @@ -98,12 +100,6 @@ IP address: description: "The IP address of your Sonic device." {% endconfiguration_basic %} -## Removing the integration - -This integration follows standard integration removal procedures. No extra steps are required. - -{% include integrations/remove_device_service.md %} - ## Examples ### Monitor water usage in the Energy Dashboard @@ -116,4 +112,10 @@ The water meter volume entity can be added to the Energy Dashboard, allowing you - Turn on the water when someone arrives home. - Send a notification when the water is too hot. - Send a notification when the water is too cold. -- Send a notification when water is flowing for too long. \ No newline at end of file +- Send a notification when water is flowing for too long. + +## Removing the integration + +This integration follows standard integration removal procedures. No extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/waze_travel_time.markdown b/source/_integrations/waze_travel_time.markdown index d41fc5fbd80..4e0c327ea85 100644 --- a/source/_integrations/waze_travel_time.markdown +++ b/source/_integrations/waze_travel_time.markdown @@ -32,8 +32,8 @@ with route alternatives and travel times between two locations. | Data attribute | Optional | Description | Example | | ---------------------- | -------- | ----------- | --------| -| `origin` | no | The origin of the route | "51.330436, 3.802043" | -| `destination` | no | The destination of the route | "51.330436, 3.802043" | +| `origin` | no | The origin of the route | "51.330436, 3.802043", "person.fred" | +| `destination` | no | The destination of the route | "51.330436, 3.802043", "zone.work", "Work" | | `region` | no | The region. Controls which waze server is used. | "us" | | `units` | yes | Which unit system to use | metric | | `vehicle_type` | yes | Which vehicle to use | "car" | diff --git a/source/_integrations/weather.markdown b/source/_integrations/weather.markdown index e04d50e2075..b42df01bff5 100644 --- a/source/_integrations/weather.markdown +++ b/source/_integrations/weather.markdown @@ -33,7 +33,7 @@ The `weather` {% term entity %} can provide the conditions listed below as its s - **Cloudy**: There are many clouds in the sky. `cloudy`. - **Fog**: There is a thick mist or fog reducing visibility. `fog`. - **Hail**: Hailstones are falling. `hail`. -- **Lightning**: Lightning/thunderstorms are occurring. `lighting`. +- **Lightning**: Lightning/thunderstorms are occurring. `lightning`. - **Lightning, rainy**: Lightning/thunderstorm is occurring along with rain. `lightning-rainy`. - **Partly cloudy**: The sky is partially covered with clouds. `partlycloudy`. - **Pouring**: It is raining heavily. `pouring`. diff --git a/source/_integrations/weatherflow_cloud.markdown b/source/_integrations/weatherflow_cloud.markdown index 44c903da4fe..9c8b8ddc256 100644 --- a/source/_integrations/weatherflow_cloud.markdown +++ b/source/_integrations/weatherflow_cloud.markdown @@ -1,5 +1,5 @@ --- -title: WeatherFlow Cloud +title: WeatherflowCloud description: Instructions on the Cloud based WeatherFlow integration ha_release: 2024.3 ha_category: @@ -84,4 +84,3 @@ There is not a straight 1-1 mapping between the Home Assistant supported weather | snow | snowy | | thunderstorm | lightning | | windy | windy | - diff --git a/source/_integrations/webdav.markdown b/source/_integrations/webdav.markdown new file mode 100644 index 00000000000..039685e45d4 --- /dev/null +++ b/source/_integrations/webdav.markdown @@ -0,0 +1,62 @@ +--- +title: WebDAV +description: Instructions on how to setup a WebDAV location to be used with backups. +ha_release: 2025.3 +ha_category: + - Backup +ha_iot_class: Cloud Polling +ha_config_flow: true +ha_domain: webdav +ha_codeowners: + - '@jpbede' +ha_integration_type: service +related: + - docs: /common-tasks/general/#backups + title: Backups +ha_quality_scale: bronze +--- + +This integration allows you to use a [WebDAV](https://en.wikipedia.org/wiki/WebDAV) compatible location for [Home Assistant Backups](/common-tasks/general/#backups). + +## Installation + +{% include integrations/config_flow.md %} +{% configuration_basic %} +URL: + description: "URL of the WebDAV server. Common examples are provided below." +Username: + description: "Username for the WebDAV server." +Password: + description: "Password for the WebDAV server." +Backup path: + description: "Path to the folder where the backups should be stored. The path is relative to the root of the WebDAV server." +Verify SSL: + description: "Verify the SSL certificate of the WebDAV server." +{% endconfiguration_basic %} + +### Common WebDAV URLs + +- [Nextcloud](https://nextcloud.com/): `https:///remote.php/webdav/` alternatively this can be found in the interface of your Nextcloud instance. + To do this, open the file overview and click on ‘Settings’ in the left-hand column. +- [Owncloud](https://owncloud.com/): `https:///remote.php/webdav/` +- [Hetzner Storage Box](https://www.hetzner.com/storage/storage-box): `https://.your-storagebox.de` +- [Strato HiDrive](https://www.strato.de/): `https://webdav.hidrive.strato.com` + +## Removing the integration + +This integration follows standard integration removal. No extra steps are required. + +{% include integrations/remove_device_service.md %} + +- If you remove the integration, the backup folder is not automatically deleted. You have to manually delete it. + +## Known issues / limitations + +Due to the nature of WebDAV, it is required to have a fairly high file upload limit on the server. +If you experience issues with the backup, please check the server configuration or with your WebDAV service provider. + +Following WebDAV services are known to have issues with Home Assistant backups: + +- Yandex Disk is not supported, as the speed is artificially slowed down when using WebDAV. +- mail.ru Cloud is not supported due to the lack of support for WebDAV properties. +- pCloud WebDAV implementation proved to be unstable and is not recommended for backups. \ No newline at end of file diff --git a/source/_integrations/webostv.markdown b/source/_integrations/webostv.markdown index e901115ca20..ef9c2ed2f0a 100644 --- a/source/_integrations/webostv.markdown +++ b/source/_integrations/webostv.markdown @@ -1,6 +1,6 @@ --- -title: LG webOS Smart TV -description: Instructions on how to integrate a LG webOS Smart TV within Home Assistant. +title: LG webOS TV +description: Instructions on how to integrate a LG webOS TV within Home Assistant. ha_category: - Media player - Notifications @@ -18,7 +18,7 @@ ha_platforms: ha_integration_type: integration --- -The `webostv` platform allows you to control a [LG](https://www.lg.com/) webOS Smart TV. +The `webostv` platform allows you to control a [LG](https://www.lg.com/) webOS TV. There is currently support for the following device types within Home Assistant: @@ -29,15 +29,40 @@ To begin with enable *LG Connect Apps* feature in *Network* settings of the TV. {% include integrations/config_flow.md %} -## Turn on action +{% configuration_basic %} +Host: + description: "The Hostname or IP address of your TV. You can find it in your router." +{% endconfiguration_basic %} -If you want to use an automation to turn on an LG webOS Smart TV, install an {% term integration %} such as the [HDMI-CEC](/integrations/hdmi_cec/) or [WakeOnLan](/integrations/wake_on_lan/). They provide an action that can be used for that. +## Configuration options +The integration provides the following configuration options: + +{% configuration_basic %} +Sources: + description: It is possible to select which sources will be available to the media player. When the TV is powered on press the **CONFIGURE** button in the {% term integration %} card and select the sources to enable. If you don't select any source the media player will offer all of the sources of the TV. +{% endconfiguration_basic %} + +## Supported devices + +LG webOS TV devices running webOS 2.0 and above. + +## Actions + +The integration provides the following actions. + +### Action: Turn on + +The `webostv.turn_on` action is used to create an automation to turn on the TV using the media player power button. + +| Data attribute | Optional | Description | +| ---------------------- | -------- | ---------------------------------------------------- | +| `entity_id` | no | Entity requested to turn on. For example `media_player.lg_webos_tv`| + +If you want to use an automation to turn on an LG webOS TV, install an {% term integration %} such as the [HDMI-CEC](/integrations/hdmi_cec/) or [WakeOnLan](/integrations/wake_on_lan/). They provide an action that can be used for that. Common for webOS 3.0 and higher would be to use WakeOnLan feature. To use this feature your TV should be connected to your network via Ethernet rather than Wireless and you should enable the *LG Connect Apps* feature in *Network* settings of the TV (or *Mobile App* in *General* settings for older models) (*may vary by version). -On newer models (2017+), WakeOnLan may need to be enabled in the TV settings by going to Settings > General > Mobile TV On > Turn On Via WiFi [instructions](https://support.quanticapps.com/hc/en-us/articles/115005985729-How-to-turn-on-my-LG-Smart-TV-using-the-App-WebOS-). - {% important %} This usually only works if the TV is connected to the same network. Routing the WakeOnLan packet to a different subnet requires special configuration on your router or may not be possible. {% endimportant %} @@ -53,7 +78,7 @@ automation: - alias: "Turn On Living Room TV with WakeOnLan" triggers: - trigger: webostv.turn_on - entity_id: media_player.lg_webos_smart_tv + entity_id: media_player.lg_webos_tv actions: - action: wake_on_lan.send_magic_packet data: @@ -62,11 +87,91 @@ automation: Any other [actions](/docs/automation/action/) to power on the device can be configured. -## Sources +### Action: Select sound output -It is possible to select which sources will be available to the media player. When the TV is powered on press the **CONFIGURE** button in the {% term integration %} card and select the sources to enable. If you don't select any source the media player will offer all of the sources of the TV. +The `webostv.select_sound_output` action is used to select the active sound output. +The current sound output of the TV can be found under the state attributes. -### Switching source with automation +| Data attribute | Optional | Description | +| ---------------------- | -------- | --------------------------------------- | +| `entity_id` | no | Target a specific webostv media player. | +| `sound_output` | no | Name of the sound output to switch to. | + +### Action: Button press + +The `webostv.button` action is used to simulate a button press. + +| Data attribute | Optional | Description | +| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `entity_id` | no | Target a specific webostv media player. | +| `button` | no | Name of the button. Known possible values are `LEFT`, `RIGHT`, `DOWN`, `UP`, `HOME`, `MENU`, `BACK`, `ENTER`, `DASH`, `INFO`, `ASTERISK`, `CC`, `EXIT`, `MUTE`, `RED`, `GREEN`, `BLUE`, `YELLOW`, `VOLUMEUP`, `VOLUMEDOWN`, `CHANNELUP`, `CHANNELDOWN`, `PLAY`, `PAUSE`, `NETFLIX`, `GUIDE`, `AMAZON`, `0`, `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9` | + +### Action: Generic command + +The `webostv.command` action is used to send a generic command to the TV. + +| Data attribute | Optional | Description | +| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `entity_id` | no | Target a specific webostv media player. | +| `command` | no | Endpoint for the command, e.g., `system.launcher/open`. The full list of known endpoints is available at | +| `payload` | yes | An optional payload to provide to the endpoint in the format of key value pair(s). | + +```yaml +script: + home_button: + sequence: + - action: webostv.button + target: + entity_id: media_player.lg_webos_tv + data: + button: "HOME" + + open_google_command: + sequence: + - action: webostv.command + target: + entity_id: media_player.lg_webos_tv + data: + command: "system.launcher/open" + payload: + target: https://www.google.com +``` + +### Action: Notify + +The `notify` platform allows you to send notifications to a LG webOS TV. +The icon can be overridden for individual notifications by providing a path to an alternative icon image to use: + +| Data attribute | Optional | Description | +| ---------------------- | -------- | --------------------------------------- | +| `entity_id` | no | Target a specific webostv media player. | +| `message` | no | Message to be displayed on the TV. | +| `icon` | yes | Optional icon to be shown with the notification. | + +```yaml +automation: + - alias: "Front door motion" + triggers: + - trigger: state + entity_id: binary_sensor.front_door_motion + to: "on" + actions: + - action: notify.livingroom_tv + data: + message: "Movement detected: Front Door" + data: + icon: "/home/homeassistant/images/doorbell.png" +``` + +{% important %} +The icon has to be a local file accessible by Home Assistant, not a web URL. The icon does not need to be accessible by the TV. The integration sends the icon to the TV encoded inside the notification message. +{% endimportant %} + +## Data updates + +LG webOS TV devices are automatically pushing data to Home Assistant. + +## Switching source with automation Imagine you want your LG TV to automatically switch to a specific source when it turns on. Below is a simple automation example that launches `YouTube` after the TV is switched on. It leverages `select_source` action from the [Media player](/integrations/media_player/) integration to launch a specific app installed on your LG TV. @@ -76,10 +181,10 @@ To find available sources for your TV 1. Go to {% my developer_states title="**Developer Tools** > **States**" %}. 2. Find your TV's media_player entity. 3. Look for the `source_list` attribute which contains all available sources. - + {% tip %} Source list example: `source_list: ARD Mediathek, Apps, HDMI 1, Home Dashboard, JBL Bar 1300, Media Player, Netflix, Prime Video, Public Value, Spotify - Music and Podcasts, Timer, Web Browser, YouTube, ZDFmediathek` -{% endtip %} +{% endtip %} The automation can be created entirely through the Home Assistant UI. When setting it up, you'll only need to manually enter the source name (for example, "YouTube") in the action configuration. Below is the YAML code generated as a result: @@ -115,7 +220,7 @@ The `play_media` action can be used in a script to switch to the specified TV ch # Example action entry in script to switch to channel number 1 action: media_player.play_media target: - entity_id: media_player.lg_webos_smart_tv + entity_id: media_player.lg_webos_tv data: media_content_id: 1 media_content_type: "channel" @@ -123,7 +228,7 @@ data: # Example action entry in script to switch to channel including 'TF1' in its name action: media_player.play_media target: - entity_id: media_player.lg_webos_smart_tv + entity_id: media_player.lg_webos_tv data: media_content_id: "TF1" media_content_type: "channel" @@ -136,81 +241,27 @@ The behavior of the next and previous buttons is different depending on the acti - if the source is 'LiveTV' (television): next/previous buttons act as channel up/down - otherwise: next/previous buttons act as next/previous track -### Sound output +## Troubleshooting -The current sound output of the TV can be found under the state attributes. -To change the sound output, the following action is available: +### Device is not automatically detected -#### Action `webostv.select_sound_output` +This integration uses the [SSDP](/integrations/ssdp) integration, which must be enabled for device discovery to work. -| Data attribute | Optional | Description | -| ---------------------- | -------- | --------------------------------------- | -| `entity_id` | no | Target a specific webostv media player. | -| `sound_output` | no | Name of the sound output to switch to. | +### [WakeOnLan](/integrations/wake_on_lan/) does not work -### Generic commands and buttons +On newer models (2017+), WakeOnLan may need to be enabled in the TV settings by going to **Settings** > **General** > **Mobile TV On** > **Turn On Via WiFi** [instructions](https://support.quanticapps.com/hc/en-us/articles/115005985729-How-to-turn-on-my-LG-Smart-TV-using-the-App-WebOS-). -Available actions: `button`, `command` +### Pairing fails when trying to add the TV -### Action `webostv.button` +Make sure to enable *LG Connect Apps* feature in *Network* settings of the TV. -| Data attribute | Optional | Description | -| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `entity_id` | no | Target a specific webostv media player. | -| `button` | no | Name of the button. Known possible values are `LEFT`, `RIGHT`, `DOWN`, `UP`, `HOME`, `MENU`, `BACK`, `ENTER`, `DASH`, `INFO`, `ASTERISK`, `CC`, `EXIT`, `MUTE`, `RED`, `GREEN`, `BLUE`, `YELLOW`, `VOLUMEUP`, `VOLUMEDOWN`, `CHANNELUP`, `CHANNELDOWN`, `PLAY`, `PAUSE`, `NETFLIX`, `GUIDE`, `AMAZON`, `0`, `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9` | +## Known limitations -### Action `webostv.command` +- If Home Assistant and your TV are not on the same network, you need to create a firewall rule, which allows a connection on ports 3000 & 3001 with the TCP protocol from Home Assistant to your TV. +- Most newer TV firmware does not allow passing the `icon` parameter to the `notify` command, the TV will ignore the icon and only display the message. -| Data attribute | Optional | Description | -| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `entity_id` | no | Target a specific webostv media player. | -| `command` | no | Endpoint for the command, e.g., `system.launcher/open`. The full list of known endpoints is available at | -| `payload` | yes | An optional payload to provide to the endpoint in the format of key value pair(s). | +## Removing the integration -### Example +This integration follows standard integration removal. No extra steps are required. -```yaml -script: - home_button: - sequence: - - action: webostv.button - target: - entity_id: media_player.lg_webos_smart_tv - data: - button: "HOME" - - open_google_command: - sequence: - - action: webostv.command - target: - entity_id: media_player.lg_webos_smart_tv - data: - command: "system.launcher/open" - payload: - target: https://www.google.com -``` - -## Notifications - -The `webostv` notify platform allows you to send notifications to a LG webOS Smart TV. - -The icon can be overridden for individual notifications by providing a path to an alternative icon image to use: - -```yaml -automation: - - alias: "Front door motion" - triggers: - - trigger: state - entity_id: binary_sensor.front_door_motion - to: "on" - actions: - - action: notify.livingroom_tv - data: - message: "Movement detected: Front Door" - data: - icon: "/home/homeassistant/images/doorbell.png" -``` - -## Notes - -If Home Assistant and your TV are not on the same network, you need to create a firewall rule, which allows a connection on ports 3000 & 3001 with the TCP protocol from Home Assistant to your TV. +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/weheat.markdown b/source/_integrations/weheat.markdown index 4d383d6666d..8723fe86250 100644 --- a/source/_integrations/weheat.markdown +++ b/source/_integrations/weheat.markdown @@ -12,12 +12,17 @@ ha_codeowners: - '@jesperraemaekers' ha_domain: weheat ha_platforms: + - binary_sensor - sensor ha_integration_type: integration --- The **Weheat** {% term integration %} allows you to display your [Weheat](https://www.weheat.nl/) devices through Home Assistant. +## Supported devices + +The Blackbird, Sparrow and Flint heat pumps are supported. + ## Prerequisites - You need a Weheat account, **username**, and **password** @@ -59,3 +64,25 @@ Depending on the model/installation, states for the Indoor Unit states are avail - **Indoor unit DHW valve or water pump** - **Indoor unit gas boiler heating allowed** - Note: This may be True even when no gas boiler is installed or active at this time. - **Indoor unit electric heater** + +## Data updates + +The integration uses {% term polling %} to retrieve data every 120 seconds for a single heat pump. This interval increases proportionally with the number of heat pumps, for example, to 240 seconds for two heat pumps. Additionally, energy data is retrieved from the cloud every 1800 seconds. + +## Actions + +This integration does not provide any actions. + +## Known limitations + +There is currently no way to control the heat pump via this integration. + +## Troubleshooting + +In case no devices are discovered, make sure that you can log in to the [Weheat portal](https://portal.weheat.nl) and the correct heat pumps are visible there. If they are available there, contact Weheat support. + +## Remove integration + +This integration follows standard integration removal, no extra steps are required. + +{% include integrations/remove_device_service.md %} diff --git a/source/_integrations/whisper.markdown b/source/_integrations/whisper.markdown index e6b004997b2..f4340d6a2b0 100644 --- a/source/_integrations/whisper.markdown +++ b/source/_integrations/whisper.markdown @@ -13,6 +13,7 @@ ha_codeowners: - '@synesthesiam' ha_config_flow: true ha_platforms: + - assist_satellite - binary_sensor - conversation - number diff --git a/source/_integrations/withings.markdown b/source/_integrations/withings.markdown index 4233856ed3e..f585dbe67dc 100644 --- a/source/_integrations/withings.markdown +++ b/source/_integrations/withings.markdown @@ -16,6 +16,7 @@ ha_platforms: - diagnostics - sensor ha_integration_type: integration +ha_dhcp: true --- The **Withings** {% term integration %} consumes data from various health products produced by [Withings](https://www.withings.com). diff --git a/source/_integrations/workday.markdown b/source/_integrations/workday.markdown index 067f3ac54b4..6827d51c485 100644 --- a/source/_integrations/workday.markdown +++ b/source/_integrations/workday.markdown @@ -26,7 +26,7 @@ This can be used to make daily automations that act differently on workdays than ## Setup -Check the [country list](https://github.com/dr-prodigy/python-holidays#available-countries) for available provinces (and other subdivisions, like states and territories) for each country. +Check the [country list](https://github.com/vacanza/holidays#available-countries) for available provinces (and other subdivisions, like states and territories) for each country. {% include integrations/config_flow.md %} diff --git a/source/_integrations/wyoming.markdown b/source/_integrations/wyoming.markdown index 7550079d424..ea0fb447218 100644 --- a/source/_integrations/wyoming.markdown +++ b/source/_integrations/wyoming.markdown @@ -11,6 +11,7 @@ ha_codeowners: ha_domain: wyoming ha_integration_type: service ha_platforms: + - assist_satellite - binary_sensor - conversation - number @@ -25,6 +26,7 @@ ha_zeroconf: true The **Wyoming** {% term integration %} connects external voice services to Home Assistant using a [small protocol](https://github.com/rhasspy/rhasspy3/blob/master/docs/wyoming.md). This enables [Assist](/voice_control/) to use a variety of local [speech-to-text](/integrations/stt/), [text-to-speech](/integrations/tts/), and [wake-word-detection](/integrations/wake_word/) systems, such as: +- Speech-to-Phrase {% my supervisor_addon badge addon="core_speech-to-phrase" %} - Whisper {% my supervisor_addon badge addon="core_whisper" %} - Piper {% my supervisor_addon badge addon="core_piper" %} - openWakeWord {% my supervisor_addon badge addon="core_openwakeword" %} diff --git a/source/_integrations/xbox.markdown b/source/_integrations/xbox.markdown index 98e1df4c109..07863300951 100644 --- a/source/_integrations/xbox.markdown +++ b/source/_integrations/xbox.markdown @@ -71,7 +71,7 @@ The Xbox remote platform will create Remote entities for each console linked to | Data attribute | Optional | Description | | ---------------------- | -------- | ---------------------------------------------------------------------- | | `entity_id` | no | `entity_id` of the Xbox remote. | -| `command` | no | List of the controller commands or text input to be sent.
    Commands: A, B, X, Y, Up, Down, Left, Right | +| `command` | no | List of the controller commands or text input to be sent.
    Commands: A, B, X, Y, Up, Down, Left, Right, Menu, View | | `num_repeats` | yes | Number of times to repeat the commands. | | `delay_secs` | yes | Interval in seconds between one send and another. | diff --git a/source/_integrations/yalexs_ble.markdown b/source/_integrations/yalexs_ble.markdown index f07016c40b1..6921773cd80 100644 --- a/source/_integrations/yalexs_ble.markdown +++ b/source/_integrations/yalexs_ble.markdown @@ -48,7 +48,7 @@ Devices must have a Yale Access module installed to function with this {% term i These devices do not send updates, but can be locked and unlocked. -- MD-04I (Yale Conexis L1, Yale Conexis L2) +- MD-04I (Yale Conexis L1 (requires yale access module), Yale Conexis L2) - YRCB-490 (Yale Smart Cabinet Lock) ## Troubleshooting diff --git a/source/_integrations/yolink.markdown b/source/_integrations/yolink.markdown index cd149290fb0..96ea4671c3e 100644 --- a/source/_integrations/yolink.markdown +++ b/source/_integrations/yolink.markdown @@ -111,9 +111,9 @@ Data attribute | Optional | Description -|-|- `target_device` | no| SpeakerHub device ID for audio playback. `message` | no| Text for speech conversion. -`tone` | no| Tone before playing audio. -`volume` | no| Speaker volume during playback. -`repeat` | no| The number of times the text will be repeated. +`tone` | yes| Tone before playing audio. +`volume` | yes| Override the speaker volume during playback of this message only. +`repeat` | yes| The number of times the text will be repeated. ## Community notes diff --git a/source/_integrations/zabbix.markdown b/source/_integrations/zabbix.markdown index 2cd7e7e8c16..361d481c770 100644 --- a/source/_integrations/zabbix.markdown +++ b/source/_integrations/zabbix.markdown @@ -14,6 +14,8 @@ related: - docs: /docs/configuration/ title: Configuration file ha_quality_scale: legacy +ha_codeowners: + - '@kruton' --- The **Zabbix** {% term integration %} is the main {% term integration %} to connect to a [Zabbix](https://www.zabbix.com/) monitoring instance via the Zabbix API. diff --git a/source/_integrations/zengge.markdown b/source/_integrations/zengge.markdown deleted file mode 100644 index e981d34fd2a..00000000000 --- a/source/_integrations/zengge.markdown +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Zengge -description: Instructions on how to integrate Zengge Bluetooth bulbs into Home Assistant. -ha_category: - - Light -ha_iot_class: Local Polling -ha_release: 0.36 -ha_domain: zengge -ha_platforms: - - light -ha_integration_type: integration -ha_codeowners: - - '@emontnemery' -related: - - docs: /docs/configuration/ - title: Configuration file -ha_quality_scale: legacy ---- - -The `zengge` {% term integration %} allows you to integrate your [Zengge Bluetooth bulbs](http://www.zengge.com/) into Home Assistant. - -## Configuration - -To enable the lights, add the following lines to your {% term "`configuration.yaml`" %} file. -{% include integrations/restart_ha_after_config_inclusion.md %} - -```yaml -# Example configuration.yaml entry -light: - - platform: zengge - devices: - "C4:BE:84:51:54:8B": - name: Living Room -``` - -{% configuration %} -devices: - description: The list of your devices/bulbs. - required: true - type: list - keys: - mac_address: - description: The MAC address of the bulb. - required: true - type: list - keys: - name: - description: The friendly name for the frontend. - required: false - type: string -{% endconfiguration %} diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown index dbb48214238..414f23da333 100644 --- a/source/_integrations/zha.markdown +++ b/source/_integrations/zha.markdown @@ -48,9 +48,7 @@ ha_zeroconf: true ha_integration_type: integration --- -The ZHA (Zigbee Home Automation) {% term integration %} allows you to wirelessly connect many off-the-shelf [Zigbee-based devices](https://csa-iot.org/csa-iot_products/) directly to Home Assistant, using one of the many available Zigbee coordinators. - -ZHA uses an open-source Python library implementing a hardware-independent Zigbee stack called [zigpy](https://github.com/zigpy/zigpy). All coordinators compatible with zigpy can be used with ZHA. +The Zigbee Home Automation (ZHA) {% term integration %} allows you to wirelessly connect many off-the-shelf [Zigbee-based devices](https://csa-iot.org/csa-iot_products/) directly to Home Assistant, using one of many compatible hardware adapters called _Zigbee coordinators_. This {% term integration %} currently supports the following device types within Home Assistant: @@ -69,33 +67,38 @@ This {% term integration %} currently supports the following device types within - [Switch](/integrations/switch/) - [Update](/integrations/update/) -In addition, it has support for "Zigbee groups" that enable native on-device grouping of multiple Zigbee lights, switches, and fans that enable controlling all entities for those devices in those groups with one command. At least two entities must be added to a Zigbee group inside the ZHA {% term integration %} before a group entity is created. There is also support for native on-device Zigbee [binding and unbinding (i.e. bind a remote to a lightbulb or group)](#zigbee-binding-and-unbinding). - ## Introduction -This ZHA integration is a hardware-independent Zigbee gateway implementation that can replace most proprietary Zigbee gateways/bridges/hubs/controllers. Zigbee is a low-bandwidth communication protocol that relies on using small low-power digital radios to connect compatible devices to local Zigbee wireless private area networks. ZHA will create a single Zigbee network to which you can then pair/join most Zigbee-based devices that are made for home automation and lighting. +The ZHA integration is a hardware-independent Zigbee gateway implementation that can replace most proprietary Zigbee gateways (or bridges, hubs, or controllers). ZHA creates a single Zigbee network to which you can add most Zigbee-based devices. -Before installing the ZHA integration in Home Assistant, you need to connect a Zigbee Coordinator radio adapter that will connect to your Zigbee network. Those normally come in the form of a USB dongle that plugs directly into the same computer that is running your Home Assistant installation. The ZHA integration is compatible with many different "Zigbee Coordinator" adapters from various manufacturers. Be sure to [note the recommendations in the respective sections below before buying a Zigbee Coordinator](#compatible-hardware). A Zigbee network always needs to have one Zigbee Coordinator (it can never have more than one), and Zigbee devices can never be connected to more than a single Zigbee network, however, a Zigbee network can have multiple "Zigbee Router" devices and "Zigbee End Device" products. +ZHA uses an open-source Python library called [zigpy](https://github.com/zigpy/zigpy), so any coordinator that is compatible with zigpy can be used with ZHA. Review [compatible hardware](#compatible-hardware) recommendations before purchasing Zigbee devices. -Once ZHA has been set up with a Zigbee Coordinator it will automatically create a Zigbee network and you will be able to join/pair any Zigbee Router devices and Zigbee End Devices. With only a few [limitations](#limitations), most devices will join/pair directly regardless of brand and manufacturer. Technically almost all devices that are compliant with the official Zigbee specifications should offer interoperability, though a newer Zigbee Coordinator with support for later firmware often offers better compatibility with both new and older devices. Still, be aware that [all functionality might not always be supported or exposed for every device out-of-the-box](#knowing-which-devices-are-supported) as some devices that use manufacturer-specific extensions to add non-standard functions and features could sometimes need [device-specific code to fully work with ZHA](#how-to-add-support-for-new-and-unsupported-devices). +### Zigbee terminology -Note that because Zigbee relies on "mesh networking" technology it depends heavily on having [Zigbee Router devices](#using-router-devices-to-add-more-devices) to expand the network coverage and extend its size. These are always mains-powered devices that route messages to other devices that are located close to them within the Zigbee network mesh to improve the range and increase the total amount of devices you can add. You should therefore make sure that you add many Zigbee Router devices and not just Zigbee End Devices or else its network mesh connection routes will be limited due to the short range and poor wall penetration of Zigbee radio signals. It is highly recommended that you read and follow all the general tips below about [Zigbee interference avoidance and network range/coverage optimization)](#zigbee-interference-avoidance-and-network-rangecoverage-optimization). +- **Zigbee network**: A mesh-network of devices with low-power digital radios using a low-bandwidth communication protocol. +- **Zigbee coordinator**: A hardware radio adapter (typically a USB dongle) that plugs directly into the same computer running your Home Assistant installation. +- **Zigbee router device**: A hardware device that is always mains-powered (AC) such as outlets or fans. +- **Zigbee end device**: A hardware device that is typically battery-powered (DC) such as remotes or motion sensors. +- **Zigbee group**: A collection of two or more Zigbee devices of the same type, different from Home Assistant's [Groups](/integrations/group/). + +### Zigbee concepts + +- A Zigbee network can have **only one** Zigbee coordinator, +- The Zigbee coordinator can have multiple **Zigbee router** or **Zigbee end devices** connected, +- Each Zigbee router device can have multiple **Zigbee end devices** connected to it, +- A Zigbee device can only be connected to a single Zigbee network, +- Zigbee networks depend heavily on having multiple [Zigbee Router devices](#using-router-devices-to-add-more-devices) to expand coverage and increase device capacity. +- Router devices help pass messages to other nearby devices in the Zigbee network and therefore can improve range and increase the number of devices you can add. ## Compatible hardware -ZHA {% term integration %} uses a hardware independent Zigbee stack implementation with modular design, which means that it can support any one of the many Zigbee coordinator radio modules/adapters available from different manufacturers, as long as that module/adapter is compatible with [zigpy](https://github.com/zigpy/zigpy). - -Note! Zigbee 3.0 support or not in zigpy, depends primarily on your Zigbee coordinator hardware and its firmware. Some Zigbee coordinator hardware supports Zigbee 3.0 but might be shipped with an older firmware which does not. In such a case you may want to upgrade the firmware manually yourself. - -Some other Zigbee coordinator hardware may not support a firmware that is capable of Zigbee 3.0 at all but can still be fully functional and feature-complete for your needs. This is very common as many, if not most, Zigbee devices do not yet Zigbee 3.0. As a general rule, newer Zigbee coordinator hardware generally supports Zigbee 3.0 firmware and it is up to its manufacturer to make such firmware available for them. - -### Known working Zigbee radio modules +The hardware-independent design of this integration provides support for many Zigbee coordinators available from different manufacturers, as long as the coordinator is compatible with the [zigpy](https://github.com/zigpy/zigpy) library. ### Recommended Zigbee radio adapters and modules - Silicon Labs EmberZNet based radios using the EZSP protocol (via the [bellows](https://github.com/zigpy/bellows) library for zigpy) - [Home Assistant Connect ZBT-1](/connectzbt1/) (EFR32MG21-based USB dongle) - - [Home Assistant Yellow](/yellow/) with integrated EFR32MG21 radio + - [Home Assistant Yellow](/yellow/) with integrated MGM210P radio, which is based on the EFR32MG21 - [ITead SONOFF Zigbee 3.0 USB Dongle Plus Model "ZBDongle-E" (EFR32MG21 variant)](https://itead.cc/product/zigbee-3-0-usb-dongle/) - [SMLIGHT SLZB-07](https://smlight.tech/product/slzb-07/) (EFR32MG21-based USB dongle) - Texas Instruments based radios (via the [zigpy-znp](https://github.com/zigpy/zigpy-znp) library for zigpy) @@ -106,49 +109,80 @@ Some other Zigbee coordinator hardware may not support a firmware that is capabl ### Other supported but not recommended Zigbee radio adapters or modules -- Silicon Labs EmberZNet based radios using legacy hardware using the EZSP protocol (via the [bellows](https://github.com/zigpy/bellows) library for zigpy) - - [Elelabs Zigbee USB Adapter](https://elelabs.com/products/elelabs-usb-adapter.html)/POPP ZB-Stick (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility)) - - [Elelabs Zigbee Raspberry Pi Shield](https://elelabs.com/products/elelabs-zigbee-shield.html) (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility)) - - [ITead Sonoff ZBBridge](https://itead.cc/product/sonoff-zbbridge/) (Note! [WiFi-based bridges are not recommended for ZHA with EZSP radios](https://github.com/home-assistant/home-assistant.io/issues/17170). Also, this first has to be flashed with [Tasmota firmware and Silabs EmberZNet NCP EZSP UART Host firmware to use as Serial-to-IP adapter](https://www.digiblur.com/2020/07/how-to-use-sonoff-zigbee-bridge-with.html)) - - [Nortek GoControl QuickStick Combo Model HUSBZB-1 (Z-Wave & Zigbee Ember 3581 USB Adapter)](https://www.nortekcontrol.com/products/2gig/husbzb-1-gocontrol-quickstick-combo/) (Note! Not a must but recommend [upgrade the EmberZNet NCP application firmware](https://github.com/walthowd/husbzb-firmware)) - - [Bitron Video/Smabit BV AV2010/10 USB-Stick](https://manuals.smabit.eu/len/av2010_10.html) with Silicon Labs Ember 3587 - - Telegesis ETRX357USB/ETRX357USB-LR/ETRX357USB-LRS+8M (Note! These first have to be [flashed with other EmberZNet firmware](https://github.com/walthowd/husbzb-firmware)) -- Texas Instruments based radios using legacy hardware (via the [zigpy-znp](https://github.com/zigpy/zigpy-znp) library for zigpy) - - [CC2538 USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) (no longer recommended as only got deprecated old end-of-life firmware) - - [CC2530/CC2531 USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) (no longer recommended as uses deprecated hardware and very old end-of-life firmware, plus will not work properly at all if the whole Zigbee network has more than 15-20 devices) -- dresden elektronik deCONZ based Zigbee radios using legacy hardware (via the [zigpy-deconz](https://github.com/zigpy/zigpy-deconz) library for zigpy) - - [ConBee II (a.k.a. ConBee 2) USB adapter from dresden elektronik](https://phoscon.de/conbee2) - - [RaspBee II (a.k.a. RaspBee 2) Raspberry Pi Shield from dresden elektronik](https://phoscon.de/raspbee2) - - [ConBee USB adapter from dresden elektronik](https://phoscon.de/conbee) - - [RaspBee Raspberry Pi Shield from dresden elektronik](https://phoscon.de/raspbee) -- Digi XBee Zigbee based radios (via the [zigpy-xbee](https://github.com/zigpy/zigpy-xbee) library for zigpy) - - [Digi XBee Series 3 (xbee3-24)](https://www.digi.com/products/embedded-systems/digi-xbee/rf-modules/2-4-ghz-rf-modules/xbee3-zigbee-3) and [Digi XBee Series S2C](https://www.digi.com/products/embedded-systems/digi-xbee/rf-modules/2-4-ghz-rf-modules/xbee-zigbee) modules - - Note! While not a must, [it is recommend to upgrade XBee Series 3 and S2C to newest firmware using XCTU](https://www.digi.com/resources/documentation/Digidocs/90002002/Default.htm#Tasks/t_load_zb_firmware.htm) - - [Digi XBee Series 2 (S2)](https://www.digi.com/support/productdetail?pid=3430) modules (Note! This first have to be [flashed with Zigbee Coordinator API firmware](https://www.digi.com/support/productdetail?pid=3430)) -- ZiGate based radios (via the [zigpy-zigate](https://github.com/zigpy/zigpy-zigate) library for zigpy and require firmware 3.1d or later) - - [ZiGate USB](https://zigate.fr/produit/zigate-usb/) - - [ZiGate USB-DIN](https://zigate.fr/produit/zigatev2-usb-din/) - - [PiZiGate (ZiGate Raspberry Pi module)](https://zigate.fr/produit/pizigatev2/) - - [ZiGate-Ethernet (Ethernet gateway board for PiZiGate)](https://zigate.fr/produit/zigate-ethernet/) - - [ZiGate + WiFi Pack](https://zigate.fr/produit/zigatev2-pack-wifi/) +The following hardware is supported, but _not recommended_. Specific models and details are noted where available in each section. -#### Warning about using Zigbee Coordinator over Wi-Fi/WAN/VPN +{% details "List of hardware that is not recommended" %} {% caution %} -Be aware that using a Zigbee Coordinator via a Serial-Proxy-Server (also known as Serial-to-IP bridge or Ser2Net remote adapter) over a Wi-Fi, WAN, or VPN connection is not recommended. -Serial protocols used by the Zigbee Coordinator do not have enough robustness, resilience, or fault tolerance to handle packet loss and latency delays that can occur over unstable connections. +- It is **not recommended** to run a coordinator via **Serial-Proxy-Server** _(also called Serial-to-IP bridge or Ser2Net remote adapter)_ over: + + - **Wi-Fi**, + - **WAN**, or + - **VPN** -A Zigbee Coordinator requires a stable local connection to its serial port interface with no drops in communication between it and the Zigbee gateway application running on the host computer. +- The coordinator requires a stable, local connection to its serial port interface without drops in communication with the Zigbee gateway application running on the host computer. +- Serial protocols used by the coordinator do not have enough robustness, resilience, or fault tolerance to handle packet loss and latency delays that can occur over unstable connections. {% endcaution %} -## Configuration - GUI +**Silicon Labs EmberZNet based radios using legacy hardware using the EZSP protocol (via the [bellows](https://github.com/zigpy/bellows) library for zigpy)** -Connect your radio module and restart Home Assistant. +- [Elelabs Zigbee USB Adapter](https://elelabs.com/products/elelabs-usb-adapter.html)/POPP ZB-Stick + - It is suggested to [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility) +- [Elelabs Zigbee Raspberry Pi Shield](https://elelabs.com/products/elelabs-zigbee-shield.html) + - It is suggested to [upgrade the EmberZNet NCP application firmware](https://github.com/Elelabs/elelabs-zigbee-ezsp-utility) +- [ITead Sonoff ZBBridge](https://itead.cc/product/sonoff-zbbridge/) + - Note: [WiFi-based bridges are not recommended for ZHA with EZSP radios](https://github.com/home-assistant/home-assistant.io/issues/17170). + - These first need to be flashed with [Tasmota firmware and Silabs EmberZNet NCP EZSP UART Host firmware to use as Serial-to-IP adapter](https://www.digiblur.com/2020/07/how-to-use-sonoff-zigbee-bridge-with.html) +- [Nortek GoControl QuickStick Combo Model HUSBZB-1 (Z-Wave & Zigbee Ember 3581 USB Adapter)](https://www.nortekcontrol.com/products/2gig/husbzb-1-gocontrol-quickstick-combo/) + - It is suggested to [upgrade the EmberZNet NCP application firmware](https://github.com/walthowd/husbzb-firmware) +- [Bitron Video/Smabit BV AV2010/10 USB-Stick](https://manuals.smabit.eu/len/av2010_10.html) with Silicon Labs Ember 3587 +- Telegesis ETRX357USB/ETRX357USB-LR/ETRX357USB-LRS+8M + - These first need to be [flashed with other EmberZNet firmware](https://github.com/walthowd/husbzb-firmware) -From the Home Assistant front page go to **Configuration** and then select **Integrations** from the list. +**Texas Instruments based radios using legacy hardware (via the [zigpy-znp](https://github.com/zigpy/zigpy-znp) library for zigpy)** -Use the plus button in the bottom right to add a new {% term integration %} called **ZHA**. +- [CC2538 USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) + - This is no longer recommended as it can only run deprecated (old/end-of-life) firmware. +- [CC2530/CC2531 USB stick, module, or dev board hardware flashed with Z-Stack coordinator firmware](https://www.zigbee2mqtt.io/information/supported_adapters) + - This is no longer recommended as it uses deprecated hardware and very old, end-of-life firmware. + - This will not work properly if the Zigbee network has more than 15-20 devices. + +**dresden elektronik deCONZ based Zigbee radios using legacy hardware (via the [zigpy-deconz](https://github.com/zigpy/zigpy-deconz) library for zigpy)** + +- [ConBee II (a.k.a. ConBee 2) USB adapter from dresden elektronik](https://phoscon.de/conbee2) +- [RaspBee II (a.k.a. RaspBee 2) Raspberry Pi Shield from dresden elektronik](https://phoscon.de/raspbee2) +- [ConBee USB adapter from dresden elektronik](https://phoscon.de/conbee) +- [RaspBee Raspberry Pi Shield from dresden elektronik](https://phoscon.de/raspbee) + +**Digi XBee Zigbee based radios (via the [zigpy-xbee](https://github.com/zigpy/zigpy-xbee) library for zigpy)** + +- [Digi XBee Series 3 (xbee3-24)](https://www.digi.com/products/embedded-systems/digi-xbee/rf-modules/2-4-ghz-rf-modules/xbee3-zigbee-3) and [Digi XBee Series S2C](https://www.digi.com/products/embedded-systems/digi-xbee/rf-modules/2-4-ghz-rf-modules/xbee-zigbee) modules + - It is suggested to [upgrade XBee Series 3 and S2C to newest firmware using XCTU](https://www.digi.com/resources/documentation/Digidocs/90002002/Default.htm#Tasks/t_load_zb_firmware.htm) +- [Digi XBee Series 2 (S2)](https://www.digi.com/support/productdetail?pid=3430) modules + - These first need to be [flashed with Zigbee Coordinator API firmware](https://www.digi.com/support/productdetail?pid=3430) + +**ZiGate based radios (via the [zigpy-zigate](https://github.com/zigpy/zigpy-zigate) library for zigpy and require firmware 3.1d or later)** + +- [ZiGate USB](https://zigate.fr/produit/zigate-usb/) +- [ZiGate USB-DIN](https://zigate.fr/produit/zigatev2-usb-din/) +- [PiZiGate (ZiGate Raspberry Pi module)](https://zigate.fr/produit/pizigatev2/) +- [ZiGate-Ethernet (Ethernet gateway board for PiZiGate)](https://zigate.fr/produit/zigate-ethernet/) +- [ZiGate + WiFi Pack](https://zigate.fr/produit/zigatev2-pack-wifi/) + +{% enddetails %} + +If you find an opportunity to improve this information, refer to the section on how to [add support for new and unsupported devices](#how-to-add-support-for-new-and-unsupported-devices). + +## Configuration requirements + +Be sure to connect a compatible radio module and restart Home Assistant before proceeding with configuration. + +ZHA will automatically create a Zigbee network once it is configured with a Zigbee coordinator; you can then add compatible devices. + +It is highly recommended to review the guidance for [Zigbee interference avoidance and network range/coverage optimization)](#zigbee-interference-avoidance-and-network-rangecoverage-optimization). + +{% include integrations/config_flow.md %} In the popup: @@ -194,44 +228,6 @@ If you are use ZiGate or Sonoff ZBBridge you have to use some special usb_path c - Wifi Zigate : `socket://[IP]:[PORT]` for example `socket://192.168.1.10:9999` - Sonoff ZBBridge : `socket://[IP]:[PORT]` for example `socket://192.168.1.11:8888` -### Discovery via USB or Zeroconf - -Some devices can be auto-discovered, which can simplify the ZHA setup process. The following devices have been tested with discovery and offer a quick setup experience: - -| Device | Discovery Method | Identifier | -| ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ------------------------------ | -| [ITead SONOFF Zigbee 3.0 USB Dongle Plus V2 Model "ZBDongle-E" (EFR32MG21 variant)](https://itead.cc/product/zigbee-3-0-usb-dongle/) | USB | 1A86:55D4 | -| [ITead SONOFF Zigbee 3.0 USB Dongle Plus Model "ZBDongle-P" (CC2652P variant)](https://itead.cc/product/sonoff-zigbee-3-0-usb-dongle-plus/) | USB | 10C4:EA60 | -| [Bitron Video/SMaBiT BV AV2010/10](https://manuals.smabit.eu/len/av2010_10.html) | USB | 10C4:8B34 | -| [ConBee II](https://phoscon.de/conbee2) | USB | 1CF1:0030 | -| [ConBee III](https://phoscon.de/conbee3) | USB | 0403:6015 | -| [Nortek HUSBZB-1](https://www.nortekcontrol.com/products/2gig/husbzb-1-gocontrol-quickstick-combo/) | USB | 10C4:8A2A | -| [slae.sh CC2652RB development stick](https://slae.sh/projects/cc2652/) | USB | 10C4:EA60 | -| [SMLIGHT SLZB-07](https://smlight.tech/product/slzb-07/) | USB | 10C4:EA60 | -| [ZigStar Stick (CC2652 + CH340B variant)](https://zig-star.com/projects/zigbee-stick-v4/) | USB | 1A86:7523 | -| [Tube’s EFR32 Pro Ethernet/Serial Coordinator](https://www.tubeszb.com/) | USB | 10C4:EA60 | -| [ZigStar Coordinators](https://zig-star.com/) | USB | 1A86:7523 | -| [XZG - Universal Firmware for Zigbee Gateway](https://xzg.xyzroe.cc/) | Zeroconf | xzg.local. | -| [SMLIGHT SLZB-06 POE Zigbee LAN WiFi USB Adapter](https://smlight.tech/product/slzb-06/) | Zeroconf | slzb-06.local. | -| [ZigStar UZG Universal Zigbee Gateway (UZG-01)](https://uzg.zig-star.com) | Zeroconf | uzg-01._tcp.local. | -| [cod.m Zigbee Coordinator](https://docs.codm.de/zigbee/coordinator/) | Zeroconf | czc._tcp.local. | -| [ZigStar LAN/POE Coordinators](https://zig-star.com/projects/zigbee-gw-lan/) | Zeroconf | zigstargw.local. | -| [Tube's CC2652P2 USB-powered Zigbee to Ethernet Serial Coordinator)](https://www.tubeszb.com/) | Zeroconf | tube_zb_gw_cc2652p2.local. | -| [Tube's CC2652P2 PoE-powered Zigbee to Ethernet Serial Coordinator)](https://www.tubeszb.com/) | Zeroconf | tube_zb_gw_cc2652p2_poe.local. | -| [Tube's EFR32 Based Zigbee to Ethernet Serial Coordinator)](https://www.tubeszb.com/) | Zeroconf | tube_zb_gw_efr32.local. | - -Additional devices in the [Known working Zigbee radio modules](#known-working-zigbee-radio-modules) list may be discoverable, however, only devices that have been confirmed discoverable are listed above. - -### OTA updates of Zigbee device firmware - -The ZHA integration has the ability to perform OTA (over-the-air) firmware updates of Zigbee devices. This feature is enabled by default. As it uses standard [Update](/integrations/update/) entities in Home Assistant, users will get a UI notification if and when an OTA firmware update is available for a specific device, with an option to initiate the update or ignore that specific update for the device. - -To see OTA updates for a device, it's required that it both supports OTA updates and that firmware images for the device are publicly provided by the manufacturer. For this reason, ZHA currently only includes OTA providers for a few manufacturers that provide these updates publicly. This includes IKEA, Inovelli, Ledvacnce/OSRAM, SALUS/Computime, Sonoff/iTead, and Third Reality. - -{% warning %} -Before updating a device, you should search for any disadvantages or if you even need to install an available update. Some firmware updates can break features you might use (e.g. group binding for IKEA devices). Some updates might also require changes to ZHA. In rare cases, you can even brick devices by installing a firmware update. -{% endwarning %} - ### Global Options There are a few global options available once ZHA has been configured. Press **Configure** to access these settings. @@ -247,7 +243,7 @@ Group members assume state of group: description: "When using ZHA groups, turning on a ZHA group light makes the ZHA group members optimistically change their state to \"on\", instead of waiting and polling the lights when off. _(default: on)_" {% endconfiguration_basic %} -## Configuration - YAML +### Configuration - YAML For more advanced configuration, you can modify {% term "`configuration.yaml`" %} and restart Home Assistant @@ -267,15 +263,20 @@ custom_quirks_path: type: string {% endconfiguration %} -### Advanced OTA configuration +#### Defining Zigbee channel to use -OTA for a few manufacturers is enabled by default, currently Ledvance, Sonoff, Inovelli, and ThirdReality. Other manufacturers are supported but disabled by default because their updates may change or remove device functionality, may require you to reconfigure devices, or are contributed by the community and may be minimally tested. +{% important %} +The best practice is to **not change the Zigbee channel** from the ZHA default. +{% endimportant %} -Refer to the [zigpy documentation for OTA configuration](https://github.com/zigpy/zigpy/wiki/OTA-Configuration) for more information on additional OTA providers. +{% note %} +**Before changing the Zigbee channel on an existing network**, review the following sections on this page: -### Defining Zigbee channel to use +- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) +- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization) -Tip! Before considering to change to an other Zigbee channel on an existing Zigbee network, it is highly recommended that you read through the two segments under the [troubleshooting](#troubleshooting) section below about "*Best practices to avoid pairing/connection difficulties*" and "*Zigbee interference avoidance and network range/coverage optimization*". These sections provide prerequisite information and advice on how to achieve the best possible Zigbee network in your environment. +These sections both provide helpful advice on improving your Zigbee network performance. +{% endnote %} ZHA prefers to use Zigbee channel 15 by default. You can change this using YAML configuration, but this only works if there's no existing network. To change the channel for an existing network, radio has to be factory reset and a new network to be formed. This requires re-pairing of all the devices. @@ -288,15 +289,17 @@ zha: channels: [15, 20, 25] # Channel mask ``` -Note! The best practice is to not change the Zigbee channel from the ZHA default. Also, the related troubleshooting segments mentioned in the tip above will, among other things, inform that if you have issues with overlapping frequencies between Wi-Fi and Zigbee, then it is usually better to first only try changing and setting a static Wi-Fi channel on your Wi-Fi router or all your Wi-Fi access points (instead of just changing to another Zigbee channel). -MetaGeek Support has a good reference article about channel selection for [Zigbee and WiFi coexistance](https://support.metageek.com/hc/en-us/articles/203845040-ZigBee-and-WiFi-Coexistence). + +The related troubleshooting segments mentioned above will, among other things, inform that if you have issues with overlapping frequencies between Wi-Fi and Zigbee, then it is usually better to first only try changing and setting a static Wi-Fi channel on your Wi-Fi router or all your Wi-Fi access points (instead of just changing to another Zigbee channel). + +MetaGeek Support has a good reference article about channel selection for [Zigbee and WiFi coexistence](https://support.metageek.com/hc/en-us/articles/203845040-ZigBee-and-WiFi-Coexistence). The Zigbee specification standards divide the 2.4 GHz ISM radio band into 16 Zigbee channels (i.e. distinct radio frequencies for Zigbee). For all Zigbee devices to be able to communicate, they must support the same Zigbee channel (i.e. Zigbee radio frequency) that is set on the Zigbee Coordinator as the channel to use for its Zigbee network. Not all Zigbee devices support all Zigbee channels. Channel support usually depends on the age of the hardware and firmware, as well as on the device's power ratings. The general recommendation is to only use channels 15, 20, or 25 in order to avoid interoperability problems with Zigbee devices. Not only because there is less chance of Wi-Fi networks interfering too much with the Zigbee network on other channels, but also because not all Zigbee devices support all channels. Some devices, for example, are limited to only being compatible with ZLL (Zigbee Light Link) channels. It is therefore especially not recommended to use Zigbee channels 11, 24, 25, or 26 on your Zigbee coordinator. These Zigbee channels are commonly only supported by relatively modern Zigbee hardware devices with newer Zigbee firmware. If using those channels, your coordinator may not be usable with older Zigbee devices. -### Modifying the device type +#### Modifying the device type As not all device manufacturers follow the Zigbee standard, at times a device can be incorrectly classified. For example, a switch could be classified as a light. @@ -311,6 +314,137 @@ zha: `{ieee}` is the device hardware address which can be read from the Home Assistant UI when looking at _Device info_. From device info, you can find the `{endpoint_id}` by viewing the _Zigbee device signature_. +### OTA updates of Zigbee device firmware + +The ZHA integration has the ability to perform OTA (over-the-air) firmware updates of Zigbee devices. This feature is enabled by default. As it uses standard [Update](/integrations/update/) entities in Home Assistant, users will get a UI notification if and when an OTA firmware update is available for a specific device, with an option to initiate the update or ignore that specific update for the device. + +To see OTA updates for a device, it must support OTA updates and firmware images for the device must be publicly provided by the manufacturer. ZHA currently only includes OTA providers for a few manufacturers that provide these updates publicly. + +**Included manufacturers:** + +- IKEA +- Inovelli +- Ledvance/OSRAM +- SALUS/Computime +- Sonoff/iTead +- Third Reality + +{% warning %} +Before updating a device, you should search for any disadvantages or if you even need to install an available update. Some firmware updates can break features you might use (e.g. group binding for IKEA devices). Some updates might also require changes to ZHA. In rare cases, you can even brick devices by installing a firmware update. +{% endwarning %} + +#### Advanced OTA configuration + +OTA for a few manufacturers is enabled by default, currently Ledvance, Sonoff, Inovelli, and ThirdReality. Other manufacturers are supported but disabled by default because their updates may change or remove device functionality, may require you to reconfigure devices, or are contributed by the community and may be minimally tested. + +Refer to the [zigpy documentation for OTA configuration](https://github.com/zigpy/zigpy/wiki/OTA-Configuration) for more information on additional OTA providers. + +## Adding devices + +{% tip %} +When adding devices, review the following sections on this page: + +- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) +- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization) + +These sections both provide helpful advice on improving your Zigbee network performance. +{% endtip %} + +**To add a new Zigbee device:** + +1. Go to {% my integrations title="**Settings** > **Devices & services**" %}. +2. Select the **Zigbee Home Automation** {% term integration %}. Then, select **Configure**. +3. To start a scan for new devices, on the bottom right corner of the screen, select **Add device**. +4. Reset your Zigbee devices to factory default settings according to the device instructions provided by the manufacturer (e.g., turn on/off lights up to 10 times; switches usually have a reset button/pin). It might take a few seconds for the devices to appear. You can click on **Show logs** for more verbose output. +5. Once the device is found, it will appear on that page and will be automatically added to your devices. You can optionally change its name and add it to an area (you can change this later). You can search again to add another device, or you can go back to the list of added devices. + +### Using router devices to add more devices + +Most mains-powered devices, e.g., many always-powered wall plugs or light bulbs in your Zigbee network will automatically act as a Zigbee router device (sometimes also referred to as a Zigbee "signal repeater" or "range extender"). + +Because Zigbee should use a [wireless mesh network](https://en.wikipedia.org/wiki/Wireless_mesh_network) to be effective, you will need to add Zigbee router devices to increase the number of Zigbee devices that can be used in your Zigbee network, both in the total number of devices that can be added as well as the total range and coverage of the network. Some Zigbee router devices do a much better job at routing and repeating Zigbee signals and messages than some other devices. You should not have a setup where Zigbee router devices (e.g. light bulbs) are often powered-off. Zigbee router devices are meant to be always available. + +All Zigbee coordinator firmware will only allow you to directly connect a certain amount of devices. That limit is set for two reasons; firstly, to not overload the Zigbee coordinator, and secondly, to encourage your Zigbee network to quickly begin to utilize a "[mesh networking](https://en.wikipedia.org/wiki/Mesh_networking)" topology instead of only a "[star network](https://en.wikipedia.org/wiki/Star_network)" topology. + +The total number of Zigbee devices that you can have on a Zigbee network depends on a few things. The Zigbee coordinator hardware and its firmware only play a larger role in Zigbee networks with a lot of devices. More important is the number of directly connected devices ("direct children") versus the number of routers that are connected to your Zigbee coordinator. The Zigpy library, which the ZHA {% term integration %} depends on, has an upper limit that is 32 direct children, but you can still have hundreds of Zigbee devices in total connected indirectly through routes via Zigbee router devices. + +In this theoretical example, a CC2652-based Zigbee coordinator has three CC2530 Zigbee router devices for a total limit of 77 devices: + +- Coordinator: 32 Zigbee End devices - 3 routers = 29 +- Router one: + 16 devices +- Router two: + 16 devices +- Router three: + 16 devices +- Total device limit = **77 devices** + +In practice, you will likely need to add a lot more Zigbee router devices than in this example in order to extend the coverage of the network to reach that many devices. + +### Discovery via USB or Zeroconf + +Some devices can be auto-discovered, which can simplify the ZHA setup process. The following devices have been tested with discovery and offer a quick setup experience. + +{% details "USB discovery devices" %} + +- **Bitron** + - [Bitron Video/SMaBiT BV AV2010/10](https://manuals.smabit.eu/len/av2010_10.html) + - Identifier: `10C4:8B34` +- **ConBee** + - [ConBee II](https://phoscon.de/conbee2) + - Identifier: `1CF1:0030` + - [ConBee III](https://phoscon.de/conbee3) + - Identifier: `0403:6015` +- **ITead** + - [ITead SONOFF Zigbee 3.0 USB Dongle Plus V2 Model "ZBDongle-E" (EFR32MG21 variant)](https://itead.cc/product/zigbee-3-0-usb-dongle/) + - Identifier: `1A86:55D4` + - [ITead SONOFF Zigbee 3.0 USB Dongle Plus Model "ZBDongle-P" (CC2652P variant)](https://itead.cc/product/sonoff-zigbee-3-0-usb-dongle-plus) + - Identifier: `10C4:EA60` +- **Nortek** + - [Nortek HUSBZB-1](https://www.nortekcontrol.com/products/2gig/husbzb-1-gocontrol-quickstick-combo/) + - Identifier: `10C4:8A2A` +- **slae.sh** + - [slae.sh CC2652RB development stick](https://slae.sh/projects/cc2652/) + - Identifier: `10C4:EA60` +- **SMLIGHT** + - [SMLIGHT SLZB-07](https://smlight.tech/product/slzb-07/) + - Identifier: `10C4:EA60` +- **Tube** + - [Tube’s EFR32 Pro Ethernet/Serial Coordinator](https://www.tubeszb.com/) + - Identifier: `10C4:EA60` +- **ZigStar** + - [ZigStar Stick (CC2652 + CH340B variant)](https://zig-star.com/projects/zigbee-stick-v4/) + - Identifier: `1A86:7523` + - [ZigStar Coordinators](https://zig-star.com/) + - Identifier: `1A86:7523` + +{% enddetails %} + +{% details "Zeroconf discovery devices" %} + +- **cod.m** + - [cod.m Zigbee Coordinator](https://docs.codm.de/zigbee/coordinator/) + - Identifier: `czc._tcp.local.` +- **SMLIGHT** + - [SMLIGHT SLZB-06 POE Zigbee LAN WiFi USB Adapter](https://smlight.tech/product/slzb-06/) + - Identifier: `slzb-06.local.` +- **Tube** + - [Tube's CC2652P2 USB-powered Zigbee to Ethernet Serial Coordinator](https://www.tubeszb.com/) + - Identifier: `tube_zb_gw_cc2652p2.local.` + - [Tube's CC2652P2 PoE-powered Zigbee to Ethernet Serial Coordinator](https://www.tubeszb.com/) + - Identifier: `tube_zb_gw_cc2652p2_poe.local.` + - [Tube's EFR32 Based Zigbee to Ethernet Serial Coordinator](https://www.tubeszb.com/) + - Identifier: `tube_zb_gw_efr32.local.` +- **XZG** + - [XZG - Universal Firmware for Zigbee Gateway](https://xzg.xyzroe.cc/) + - Identifier: `xzg.local.` +- **ZigStar** + - [ZigStar UZG Universal Zigbee Gateway (UZG-01)](https://uzg.zig-star.com) + - Identifier: `uzg-01._tcp.local.` + - [ZigStar LAN/POE Coordinators](https://zig-star.com/projects/zigbee-gw-lan/) + - Identifier: `zigstargw.local.` + +{% enddetails %} + +Additional devices in the [Compatible hardware](#compatible-hardware) section may be discoverable, however, only devices that have been confirmed discoverable are listed above. + ## Actions ### Action `zha.permit` @@ -335,11 +469,10 @@ from the same group: {% note %} Currently `qr_code` supports QR Install Codes from: - - - Aqara - - Bosch - - Consciot - - Embrighten + - Aqara + - Bosch + - Consciot + - Embrighten {% endnote %} ### Action `zha.remove` @@ -383,138 +516,189 @@ This action disables a lock code on a Zigbee lock. | ----------- | -------- | ------------------------------- | | `code_slot` | no | Which lock code slot to disable | -## Adding devices - -Tip! It is highly recommended that you read through the two segments under the troubleshooting section below about "*Best practices to avoid pairing/connection difficulties*" and "*Zigbee interference avoidance and network range/coverage optimization*" for general prerequisite knowledge and advice on how to achieve the best possible Zigbee network in your environment. - -**To add a new Zigbee device:** - -1. Go to {% my integrations title="**Settings** > **Devices & services**" %}. -2. Select the **Zigbee Home Automation** {% term integration %}. Then, select **Configure**. -3. To start a scan for new devices, on the bottom right corner of the screen, select **Add device**. -4. Reset your Zigbee devices to factory default settings according to the device instructions provided by the manufacturer (e.g., turn on/off lights up to 10 times; switches usually have a reset button/pin). It might take a few seconds for the devices to appear. You can click on **Show logs** for more verbose output. -5. Once the device is found, it will appear on that page and will be automatically added to your devices. You can optionally change its name and add it to an area (you can change this later). You can search again to add another device, or you can go back to the list of added devices. - -### Using router devices to add more devices - -Most mains-powered devices, e.g., many always-powered wall plugs or light bulbs in your Zigbee network will automatically act as a Zigbee router device (sometimes also referred to as a Zigbee "signal repeater" or "range extender"). - -Because Zigbee should use a [wireless mesh network](https://en.wikipedia.org/wiki/Wireless_mesh_network) to be effective, you will need to add Zigbee router devices to increase the number of Zigbee devices that can be used in your Zigbee network, both in the total number of devices that can be added as well as the total range and coverage of the network. Some Zigbee router devices do a much better job at routing and repeating Zigbee signals and messages than some other devices. You should not have a setup where Zigbee router devices (e.g. light bulbs) are often powered-off. Zigbee router devices are meant to be always available. - -All Zigbee coordinator firmware will only allow you to directly connect a certain amount of devices. That limit is set for two reasons; firstly, to not overload the Zigbee coordinator, and secondly, to encourage your Zigbee network to quickly begin to utilize a "[mesh networking](https://en.wikipedia.org/wiki/Mesh_networking)" topology instead of only a "[star network](https://en.wikipedia.org/wiki/Star_network)" topology. - -The total number of Zigbee devices that you can have on a Zigbee network depends on a few things. The Zigbee coordinator hardware and its firmware only play a larger role in Zigbee networks with a lot of devices. More important is the number of directly connected devices ("direct children") versus the number of routers that are connected to your Zigbee coordinator. The Zigpy library, which the ZHA {% term integration %} depends on, has an upper limit that is 32 direct children, but you can still have hundreds of Zigbee devices in total connected indirectly through routes via Zigbee router devices. - -In this theoretical example, a CC2652-based Zigbee coordinator has three CC2530 Zigbee router devices for a total limit of 77 devices: - -- Coordinator: 32 Zigbee End devices - 3 routers = 29 -- Router one: + 16 devices -- Router two: + 16 devices -- Router three: + 16 devices -- Total device limit = **77 devices** - -In practice, you will likely need to add a lot more Zigbee router devices than in this example in order to extend the coverage of the network to reach that many devices. - ## Zigbee groups and binding devices -ZHA supports Zigbee groups and binding devices to each other. These features can be used separately or combined. For example, binding a remote to a bulb or group has the benefit of faster response time and smoother control, as the remote directly controls the bound devices. +ZHA supports the creation of Zigbee groups (different from Home Assistant's [Group](/integrations/group/) integration), as well as binding devices to each other. Groups and device binding can be set up independently of each other, but they can be also used in combination (such as binding a device to another group of devices). -### Zigbee group +### Groups -A Zigbee group enables the grouping of multiple Zigbee lights, switches, and fans. This allows you to control those devices with only one command/entity. +A Zigbee group is a collection of two or more Zigbee lights, switches, or fans. A Zigbee group can then be controlled using only one command/entity. {% note %} While using a native Zigbee group instead of Home Assistant's [Group](/integrations/group/) integration can improve the visual responsiveness, the broadcast commands issued can flood the Zigbee network if issued repeatedly. {% endnote %} -To create a Zigbee Group, press the "Configure" button on the ZHA integration config page. At the top, choose "Groups" and select "Create Group". Set a group name and choose which devices to include in the group. +#### To create a Zigbee group -The group should consist of products of the same device type (e.g. all lights, switches, or fans), and at least two devices must be added to a Zigbee group before a group entity is created. +1. Select the **Configure** button on the ZHA integration page, +2. Choose **Groups** and select **Create Group**, +3. Enter a name for the group, +4. Select which devices to include in the group: + - At least two devices must be added to a Zigbee Group before a group entity is created. + - The group should consist of products of the same device type (all lights, all switches, or all fans). -### Zigbee binding and unbinding +### Binding -Binding is an on-device feature for Zigbee devices. It provides a mechanism for attaching an endpoint of one Zigbee device to an endpoint of another Zigbee device or to a Zigbee group. +Binding a Zigbee device attaches an endpoint from one device to an endpoint of another device (or group). -For example, binding a "target destination" Zigbee device like a remote to a Zigbee light bulb, switch or group of light bulbs allows direct control of the "target" device (light, switch, shade) from the "remote" Zigbee device, bypassing ZHA. This means that the remote can control the light bulb or group even when ZHA is not active. +Commands sent between bound devices bypass ZHA (even when ZHA is not active) and directly control the targeted device. Binding devices can allow for faster response times and smoother control. -Note that not all devices support binding. By default, ZHA binds remotes to the coordinator, so click events are forwarded to HA. As some remotes can only be bound to a single destination, you might need to unbind the remote from the coordinator before binding it to another device or group. +Before binding devices, note the following: -## Zigbee backup and restore in ZHA +- ZHA binds remotes to the Zigbee coordinator by default in order to forward click events to Home Assistant. +- Some remotes can only be bound to a single target; you might need to unbind the remote from the coordinator before binding it to another target. +- Not all devices support binding. Refer to the device manufacturer's documentation to confirm features. -Zigbee Home Automation (ZHA) {% term integration %} now features Zigbee network backup, restore/recovery, and migrating between Zigbee coordinators. Backups are taken automatically. However, a single backup to a file for easy download can also be manually created from the configuration page under Network Settings. +#### To manage bindings of a Zigbee device -After restoring a Home Assistant backup, you can re-configure ZHA and migrate to a new Zigbee Coordinator adapter without any loss of your settings or devices that were connected. This is helpful if your current radio fails or a new radio adapter type and model comes out that you may want to migrate to. +{% note %} +**This section only outlines how to manage bindings in general. It will not cover all use cases.** -Within ZHA it is possible to use this backup and restore feature to migrate between some different radio types, if the respective radio library supports it. Currently, ZHA supports migrating the Zigbee network between different Zigbee Coordinator adapters based on chips from Silicon Labs, Texas Instruments, or ConBee/RaspBee if the backup was made from inside ZHA. +Prerequisites and steps can vary depending on the device type, manufacturer, and your desired end result. +{% endnote %} -## Migrating to a new Zigbee coordinator adapter inside ZHA +1. Navigate to the Zigbee device's configuration page, +2. In the options menu (the "three-dots" icon), select **Manage Zigbee device**, +3. Select the **Bindings** tab in the pop-up dialog, +4. Choose the device from the dropdown list of _Bindable devices_ (or _Bindable groups_), +5. Confirm the Bind or Unbind action: + - To bind devices: select **Bind** (or **Bind group**), or + - To unbind devices, select **Unbind** (or **Unbind group**). -Follow this guide if you have a Zigbee Home Assistant (ZHA) network running and want to migrate from one Zigbee coordinator radio adapter to another Zigbee coordinator radio adapter. +## Backups and migration -### Prerequisites +The ZHA {% term integration %} performs automatic backups of your Zigbee network allowing you to restore/recover the network from a backup or migrate to a different Zigbee Coordinator (radio adapter). -- Your old Zigbee Coordinator radio adapter is used in the ZHA {% term integration %} (not in deCONZ or MQTT). -- It is of radio type ezsp (Silicon Labs EmberZnet), znp (Texas Instruments Z-Stack ZNP), or deCONZ (ConBee/RaspBee from dresden elektronik). - - If your old Zigbee coordinator is a deCONZ (ConBee/RaspBee) radio adapter, make sure it is running [firmware 0x26700700 (from 2021-08-18)](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Firmware-Changelog) or later. +After restoring a Home Assistant backup, you can reconfigure ZHA or migrate to a new Zigbee Coordinator without any loss of your settings or devices that were connected. This can be helpful if your current radio fails or a new radio adapter type/model comes out that you want to migrate to. -### To migrate to a new Zigbee coordinator radio inside ZHA +Manual backups can also be created from the configuration page under **Network Settings**. + +### Migrating to a new Zigbee Coordinator adapter inside ZHA + +ZHA supports migrating the Zigbee network between different Zigbee Coordinators based on chips from Silicon Labs, Texas Instruments, or ConBee/RaspBee if the backup was made from inside ZHA. + +#### Prerequisites + +Confirm you meet the following requirements before migrating: + +- The previous coordinator is used in the ZHA {% term integration %} and _not_ in deCONZ or MQTT. +- The radio type is one of the following: + - ezsp _(Silicon Labs EmberZnet)_ + - znp _(Texas Instruments Z-Stack ZNP)_ + - deCONZ _(ConBee/RaspBee from dresden elektronik)_ + - Be sure it is running [firmware 0x26700700 (from 2021-08-18)](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Firmware-Changelog) or later. + +{% details "To migrate to a new Zigbee coordinator radio inside ZHA:" %} + +{% important %} +You will not be able to control your existing Zigbee devices until the new coordinator fully joins the network after the migration. **This can take a few minutes.** + +If some existing devices do not resume normal functions after some time, try power-cycling them to attempt rejoining to the network. +{% endimportant %} 1. Go to **{% my integrations title="Settings > Devices & services" %}** and select the ZHA {% term integration %}. Then select **Configure**. 2. Under **Network settings**, select **Migrate radio**. 3. Reconfiguration of ZHA will start. Select **Submit**. 4. Under **Migrate or re-configure**, select **Migrate to a new radio**. -5. **Migrate to a new radio** will inform you that an automatic backup will be performed and that your old Zigbee coordinator radio will then be reset before the backup is automatically restored. - - Select **Submit**. -6. **Unplug your old radio** will inform you that your old Zigbee coordinator radio has been reset and that you can now plug in your new Zigbee coordinator radio adapter. - - To avoid interference, use a USB extension cable. - - Use a USB 2.0 port or a powered USB 2.0 hub and keep the Zigbee stick away from USB 3.0 devices. - - You may now also choose to either unplug your old Zigbee coordinator radio adapter or keep your old radio plugged in. - - If that radio was a combined Z-Wave and Zigbee radio, like the HUSBZB-1 adapter, then only the Zigbee radio part of it was reset. Confirm that the Zigbee Coordinator radio adapter is properly connected and select **Submit**. -7. You now need to start the backup restore process. - - Select your new Zigbee radio from the list of serial ports and select **Next**. - - If your new radio does not appear or you need to reboot after plugging in new hardware, you can resume the migration after a reboot: under **Network Settings**, select **Re-configure the current radio** and choose your new radio. +5. Select **Submit** to begin. + - An automatic backup will be performed, the Zigbee Coordinator radio will be reset, and the backup will be automatically restored. + - For combined Z-Wave and Zigbee radios, like the HUSBZB-1 adapter, only the Zigbee radio portion is reset. + - You may now unplug the old adapter, or you may leave the old radio adapter plugged in (for example, if the adapter is a combined Z-Wave adapter). +6. Plug in the new Zigbee Coordinator radio adapter. + - Select **Submit** after confirming the new Zigbee Coordinator radio adapter is properly connected. + - To minimize interference: + - Use a USB extension cable, + - Use a USB 2.0 port or a powered USB 2.0 hub, + - Keep the Zigbee stick away from USB 3.0 devices. +7. Start the backup restore process: + - Select the new Zigbee radio from the list of serial ports and select **Next**. + - A migration can be resumed if a reboot is required, such as when troubleshooting or if new hardware is plugged in. + - To resume, go to **Network Settings**, select **Re-configure the current radio**, choose the new radio and proceed. 8. Under **Network Formation**, select **Restore an automatic backup**. 9. Under **Restore Automation Backup**, choose the latest automatic backup and select **Submit**. -10. If your radio requires overwriting the IEEE address, you will see a screen titled **Overwrite Radio IEEE Address**. Check the **Permanently replace the radio IEEE address** box and click **Submit**. Overwriting the IEEE address may take a while. - - Your old Zigbee Coordinator radio and your new stick will now have the same Zigbee IEEE address (unique MAC address for the Zigbee device). - - Selecting this option is required for the migration process to complete successfully. - - From this point onwards, you should not operate the old stick in the same area unless you change the Zigbee IEEE address on it. - - If you do not migrate the Zigbee IEEE address from your old Zigbee Coordinator radio, then you will have to re-join/re-pair many of your devices in order to keep them working. +10. If the new radio requires overwriting the IEEE address (the unique MAC address), you will see the prompt for **Overwrite Radio IEEE Address**. + - Check the **Permanently replace the radio IEEE address** box and click **Submit**. + - Selecting this option is required for the migration process to complete successfully. + - Overwriting the IEEE address may take a while. + - Both the old and new Zigbee Coordinators will now have the same Zigbee IEEE address. + - You should not operate the old adapter in the same area unless you change its Zigbee IEEE address. + - If you do not migrate the Zigbee IEEE address from the old Zigbee Coordinator radio, you will have to reconnect many of your devices to keep them working. 11. Finally, a **Success!** message should pop up with information that all options were successfully saved. - Select **Finish** to confirm. -The migration process is complete. However, be aware that you will not be able to control your existing Zigbee devices until the new coordinator fully joins the network. This process can take a few minutes. If some existing devices do not function after some time, try power-cycling them to allow them to re-join the network. +{% enddetails %} ## Troubleshooting -To help resolve any kinks or compatibility problems, report bugs as issues with debug logs. Please note the current limitations and follow the instructions in this troubleshooting section. +{% note %} +To help resolve any kinks or compatibility problems, report bugs as issues with debug logs. +{% endnote %} -### Limitations +### Limitations -Note that ZHA only supports connecting a single dedicated Zigbee Coordinator radio adapter or module with a single Zigbee network and that the Zigbee Coordinator cannot already be connected or used by any other application. Any devices that are or have previously been connected to another Zigbee implementation will also need to first be reset to their factory default settings before they can be paired/joined to ZHA, please see each device manufacturer's documentation. +The list of ZHA limitations may not be exhaustive. -Any Zigbee device can only be connected to a single Zigbee Coordinator (only one Zigbee gateway). This is a limitation in the current (as well as previous) Zigbee protocol specifications, governed by the [CSA (Connectivity Standards Alliance)](https://csa-iot.org/all-solutions/zigbee/). As such, it is a limit that applies to all Zigbee implementations, not just the ZHA implementation. +{% details "List of ZHA limitations:" %} -Support for commissioning Zigbee 3.0 devices via "Install Code" or "QR Code" via the `zha.permit` action has so far only been implemented for 'ezsp' (Silicon Labs EmberZNet) or 'znp' (Texas Instruments) radio type in ZHA. Other radio types are missing support in their respective [radio libraries for zigpy](https://github.com/zigpy/) or manufacturer's firmware commands/APIs. +**ZHA only supports connecting a single dedicated Zigbee coordinator with a single Zigbee network:** -ZHA does currently not support devices that can only use the ZGP ("Zigbee Green Power") profile which is used in a few batteryless self-powered or energy harvesting devices, (such as for example; Philips Hue Click, Philips Hue Tap, and some "Friends of Hue" partnership switches). +- The Zigbee Coordinator cannot already be connected or used by any other application. +- Devices currently or previously connected to another Zigbee implementation will need to be reset to their factory default settings before they can be paired/joined to ZHA. +- Refer to each device manufacturer's documentation for reset steps. -ZHA does not currently support devices that can only use the ZSE ("Zigbee Smart Energy") profile, that is however due to the "Zigbee SE" specification not being part of the standard Zigbee 3.0 specification and thus not implemented in most of the Zigbee protocol stacks that are commonly available Zigbee Coordinator radio adapters and modules. +**A Zigbee device can only be connected to a single Zigbee Coordinator (only one Zigbee gateway):** + +- This is a limitation in the Zigbee protocol specifications, governed by the [CSA (Connectivity Standards Alliance)](https://csa-iot.org/all-solutions/zigbee/), applying to all Zigbee implementations and not just the ZHA implementation. + +**Support for commissioning Zigbee 3.0 devices via "Install Code" or "QR Code" via the `zha.permit` action:** + +- This has so far only been implemented for 'ezsp' (Silicon Labs EmberZNet) or 'znp' (Texas Instruments) radio type in ZHA. +- Other radio types are missing support in their respective [radio libraries for zigpy](https://github.com/zigpy/) or manufacturer's firmware commands/APIs. + +**ZHA does _not_ currently support devices that can only use:** + +- The ZGP ("Zigbee Green Power") profile: + - This is used in a few batteryless self-powered or energy harvesting devices, (such as Philips Hue Click, Philips Hue Tap, and some "Friends of Hue" partnership switches). +- The ZSE ("Zigbee Smart Energy") profile: + - This is due to the "Zigbee SE" specification not being part of the standard Zigbee 3.0 specification and thus not implemented in most of the Zigbee protocol stacks that are commonly available Zigbee Coordinator radio adapters and modules. + +{% enddetails %} ### Knowing which devices are supported -Home Assistant's ZHA {% term integration %} supports all standard Zigbee device types. It should be compatible with most Zigbee devices as long as they fully conform to the official ZCL (Zigbee Cluster Library) specifications defined by the [CSA (Connectivity Standards Alliance, formerly the Zigbee Alliance)](https://csa-iot.org/all-solutions/zigbee/). There is therefore no official compatibility list of devices that will work out-of-the-box with the ZHA {% term integration %} -Not all hardware manufacturers always fully comply with the standard specifications. Sometimes, they may also implement unique features. For this reason, some Zigbee devices pair/join fine with ZHA but then only show none or only a few entities in the {% term integration %}. Developers can work around most such interoperability issues by adding conversion/translation code in custom device handlers. For more information, refer to the section below on _How to add support for new and unsupported devices_. +Home Assistant's ZHA {% term integration %} supports all standard Zigbee device types as defined by the [CSA (Connectivity Standards Alliance, formerly the Zigbee Alliance)](https://csa-iot.org/all-solutions/zigbee/). -For clarification, normally only devices that do not fully conform to CSA's ZCL specifications that will not present all standard attributes as entities for configuration in the ZHA {% term integration %}. Zigbee devices that only use the standard clusters and attributes that are Zigbee specifications set by the Connectivity Standards Alliance should not need custom device handlers. +**There is therefore no official compatibility list of devices that will work out-of-the-box with the ZHA {% term integration %}.** -Before continuing with this section: If a device does not join/pair at all, read the troubleshooting sections about how to avoid pairing/connection difficulties, interference avoidance, and network range/coverage optimization. +{% tip %} +Check out [blakadder's unofficial Zigbee Device Compatibility Repository](https://zigbee.blakadder.com). -Tip to new Zigbee users: Checkout [blakadder's unofficial Zigbee Device Compatibility Repository](https://zigbee.blakadder.com). Anyone can help maintain the site by submitting device compatibility information to it. The repository contains independent community member's reports or device-specific pairing tips for several home automation gateway/bridge/hub software, including open-source Zigbee implementations, such as ZHA, Zigbee2MQTT, and Tasmota (Zigbee2Tasmota). +This unofficial list contains independent community members' reports _(or device-specific pairing tips)_ for several home automation gateway/bridge/hub software (including open-source Zigbee implementations such as ZHA, Zigbee2MQTT, and Tasmota/Zigbee2Tasmota). + +Anyone can help maintain the site by submitting device compatibility information to it. +{% endtip %} + +Not all hardware manufacturers fully comply with the standard. This can include: + +- Implementing unique (but non-standard) features, +- Not showing all expected entities within the Home Assistant {% term integration %} overview. +- Showing no entities within Home Assistant at all. + +Developers (or even advanced users) might be able to work around such interoperability issues by adding conversion/translation code in custom device handlers. For more information, refer to [How to add support for new and unsupported devices](#how-to-add-support-for-new-and-unsupported-devices). + +{% note %} +**If a device will not join/pair** at all, review the following sections on this page: + +- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) +- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization) + +These sections both provide helpful advice on improving your Zigbee network performance. +{% endnote %} ### How to add support for new and unsupported devices -If your Zigbee device pairs/joins successfully with the ZHA {% term integration %} but does not show all of the expected entities: +If your Zigbee device pairs/joins successfully with the ZHA {% term integration %} but does not show all of the expected entities: + 1. Try to re-pair/re-join the device several times. 2. Checkout the troubleshooting section. 3. Still not working? You may need a custom device handler. This handler will have exception handling code to work around device-specific issues. @@ -523,13 +707,14 @@ For devices that do not follow the standard defined in the CSA's ZCL (Zigbee Clu People familiar with other Zigbee gateway solutions for home automation may know similar concepts of using custom Zigbee device handlers/converters for non-standard devices. For example, [Zigbee2MQTT (and IoBroker) uses zigbee-herdsman converters](https://www.zigbee2mqtt.io/advanced/support-new-devices/01_support_new_devices.html) and [SmartThings Classics (Legacy) platform has Hub Connected Device Handlers](https://developer.smartthings.com/docs/devices/hub-connected/legacy). -If you do not want to develop such a "quirk" Python script yourself, you can submit a "device support request" as a new issue to the [ZHA Device Handlers project repository on GitHub](https://github.com/zigpy/zha-device-handlers/issues): -1. Sign in to GitHub. -2. Select **New issue** and follow the instructions. - - New device support requests require the device signature + diagnostic information. - - You may also need to actively help in further testing or provide additional information to the volunteering developers. +If you do not want to develop such a "quirk" Python script yourself, you can submit a "device support request" as a new issue to the [ZHA Device Handlers project repository on GitHub](https://github.com/zigpy/zha-device-handlers/issues): -Note that submitting a new "device support request" does not guarantee that someone else will develop a custom "quirk" for ZHA. The project relies on volunteering developers. However, without "device support requests", the developers may not be aware that your specific Zigbee device is not working correctly in ZHA. +1. Sign in to GitHub. +2. Select **New issue** and follow the instructions. + - New device support requests require the device signature + diagnostic information. + - You may also need to actively help in further testing or provide additional information to the volunteering developers. + +Note that submitting a new "device support request" does not guarantee that someone else will develop a custom "quirk" for ZHA. The project relies on volunteering developers. However, without "device support requests", the developers may not be aware that your specific Zigbee device is not working correctly in ZHA. ### Best practices to avoid pairing/connection difficulties @@ -538,15 +723,15 @@ If you experience problems pairing a device, verify that you follow best practic - Check that your setup and environment are optimized to avoid interference. - As interference avoidance is an extremely important topic on its own, please read and follow the tips in the separate section below about Zigbee interference avoidance and network range/coverage optimization. - Check that you have enough Zigbee router devices (also known as Zigbee signal repeaters or range extenders) and if you do not have any, invest and add some mains-powered devices that will work as Zigbee routers. - - Aim to start out with mains-powered devices before adding battery-operated devices as a "weak" Zigbee network mesh (e.g., the device is too far from the Zigbee coordinator or a Zigbee router) may prevent some devices from being paired. Zigbee router devices are also needed to increase the maximum of devices that can be connected to your Zigbee mesh network. - - Note that some Zigbee devices are not fully compatible with all brands of Zigbee router devices. Xiaomi/Aqara devices are for example known not to work with Zigbee router devices from Centralite, General Electrics, Iris, Ledvance/OSRAM, LIGHTIFY/Sylvania, Orvibo, PEQ, Securifi, and SmartThings/Samsung. Better results can usually be achieved by using mains-powered devices IKEA and Nue/3A Home or dedicated DIY routing devices based on Texas Instruments CC253x/CC26x2 and XBee Series 2/3 Zigbee radios. + - Aim to start out with mains-powered devices before adding battery-operated devices as a "weak" Zigbee network mesh (e.g., the device is too far from the Zigbee coordinator or a Zigbee router) may prevent some devices from being paired. Zigbee router devices are also needed to increase the maximum of devices that can be connected to your Zigbee mesh network. + - Note that some Zigbee devices are not fully compatible with all brands of Zigbee router devices. Xiaomi/Aqara devices are for example known not to work with Zigbee router devices from Centralite, General Electrics, Iris, Ledvance/OSRAM, LIGHTIFY/Sylvania, Orvibo, PEQ, Securifi, and SmartThings/Samsung. Better results can usually be achieved by using mains-powered devices IKEA and Nue/3A Home or dedicated DIY routing devices based on Texas Instruments CC253x/CC26x2 and XBee Series 2/3 Zigbee radios. - If possible try to pair your Zigbee devices in their intended final location, (and not pair it next to the Zigbee coordinator and then need to move it after). - Pairing a Zigbee device next to the Zigbee coordinator and then moving it later can result in dropped/lost connections or other issues. - If the device you want to add is not brand new and as such never paired before then you always have to make sure to first manually reset the device to its factory default settings before you will be able to add/pair it. - Some battery-operated Zigbee devices are known to have problems with pairing if they have Low battery voltage. - - Some people have reported replacing the battery on their newly received Xiaomi/Aqara devices solved pairing issues. + - Some people have reported replacing the battery on their newly received Xiaomi/Aqara devices solved pairing issues. - Be patient as the pairing of some Zigbee devices may require multiple attempts and you may sometimes need to try again and again. - - Some devices, like example those from Xiaomi/Aqara, are known to not be 100% compliant with the standard Zigbee specifications and may therefore require many paring attempts over 10-20 minutes or longer. + - Some devices, like example those from Xiaomi/Aqara, are known to not be 100% compliant with the standard Zigbee specifications and may therefore require many paring attempts over 10-20 minutes or longer. ### Zigbee interference avoidance and network range/coverage optimization @@ -569,13 +754,13 @@ Common root causes of unreliable performance are often seen with outdated Zigbee - Update to a later version of Zigbee Coordinator firmware on the existing radio adapter. - Most manufacturers usually provide straightforward guides for updating the firmware. - + - Try different physical placement and orientations of the Zigbee Coordinator and its antenna. - Optimal placement of the Zigbee adapter is close to the middle of the house as possible. - Try placing Zigbee Coordinator at some distance away from walls, ceilings, and floors. - Try different orientations of the Zigbee Coordinator adapter or its antenna. -While using an older Zigbee Coordinator radio adapter hardware might work, using obsolete hardware and/or old firmware can prevent reliable operation. It is also generally a good idea to upgrade Zigbee Coordinator firmware before troubleshooting any further if and when run into problems with devices. +While using an older Zigbee Coordinator radio adapter hardware might work, using obsolete hardware and/or old firmware can prevent reliable operation. It is also generally a good idea to upgrade Zigbee Coordinator firmware before troubleshooting any further if and when run into problems with devices. #### Actions to avoid or workaround EMI/EMF/RMI interference @@ -587,7 +772,7 @@ Since all Zigbee Coordinator radio adapters are very sensitive/susceptible to al - Extension cables also makes it easier to try different orientations of the adapter/antenna. - Avoid USB 3.0 ports/computers/peripherals as they are known culprits of RFI/EMI/EMF disruption. (See Ref. [1](https://www.usb.org/sites/default/files/327216.pdf) and [2](https://www.unit3compliance.co.uk/2-4ghz-intra-system-or-self-platform-interference-demonstration/)). - - Make sure to only connect the Zigbee USB adapter to a USB 2.0 port (and not to a USB 3.x port). + - Make sure to only connect the Zigbee USB adapter to a USB 2.0 port (and not to a USB 3.x port). - If a computer only has USB 3.x ports then buy and connect Zigbee Coordinator via a powered USB 2.0 hub. - Shield any unshielded computers/peripherals/devices by adding all-metal enclosures/chassis/casings. @@ -615,6 +800,7 @@ Missing links between Zigbee end devices (often battery-powered devices) in the Some end devices (for example, Xiaomi door sensors) sleep for an extended period, causing the parent Zigbee Router to remove them from its child table via a feature called router child aging. Since using child aging and removing them from the child table is a Zigbee 3.0 feature, this does not always occur because not all Zigbee router devices use child aging. This is what causes devices to show a missing link. Even though the device is no longer in the child table, the end device can still communicate via the parent Zigbee router. + #### How to interpret RSSI and LQI values Interpreting RSSI and LQI values can be complex, as metrics of network health and communication quality are provided by the devices themselves, and each device could get to its results in different ways. Unless you are a Zigbee specialist yourself or are guided by one, please ignore those values. They can be misleading. If you delve into this, it is important to understand not to judge RSSI or LQI values on their own. When troubleshooting Zigbee messages that are being dropped, you must interpret the combination of both RSSI and LQI. @@ -641,9 +827,14 @@ When reporting potential bugs related to the ZHA integration on the issues track 1. Debug logs for the issue, see [debug logging](#debug-logging). 2. Exact model and firmware of the Zigbee radio (Zigbee Coordinator adapter) being used. 3. If the issue is related to a specific Zigbee device, provide both the **Zigbee Device Signature** and the **Diagnostics** information. - - Both the **Zigbee Device Signature** and the **Diagnostics** information can be found under {% my integrations title="**Settings** > **Devices & services**" %}. Select the **Zigbee Home Automation** integration. Then, select **Configure** > **Devices** (pick your device). Select **Zigbee Device Signature** and **Download Diagnostics**, respectively. + - Both the **Zigbee Device Signature** and the **Diagnostics** information can be found under {% my integrations title="**Settings** > **Devices & services**" %}. Select the **Zigbee Home Automation** integration. Then, select **Configure** > **Devices** (pick your device). Select **Zigbee Device Signature** and **Download Diagnostics**, respectively. -Note: Please also make sure you give it your best effort to follow the recommended best practices for avoiding both [pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) and [Zigbee interference](#zigbee-interference-avoidance-and-network-rangecoverage-optimization), (which helps free up time for developers). +{% tip %} +For troubleshooting, read the following sections on this page. They provide information on improving your Zigbee network performance. + +- [Best practices to avoid pairing/connection difficulties](#best-practices-to-avoid-pairingconnection-difficulties) +- [Zigbee interference avoidance and network range/coverage optimization](#zigbee-interference-avoidance-and-network-rangecoverage-optimization) +{% endtip %} ### Debug logging @@ -669,31 +860,58 @@ logger: ### Add Philips Hue bulbs that have previously been added to another bridge -Philips Hue bulbs/lights that have previously been paired/added to another bridge/gateway will not show up during search in ZHA to pair/add a Zigbee device. That is because you have to first manually restore your bulbs/lights back to their factory default settings first, and just removing them from your old bridge/gateway is not enough to do so. Instead to achieve a proper device factory reset you can use one of these methods below. +Philips Hue bulbs that have previously been paired to another bridge/gateway will not show up during search in ZHA to add a Zigbee device. **Bulbs must be restored back to their factory default settings**. -You can use a Philips Hue Dimmer Switch or Lutron Connected Bulb Remote to factory-reset your bulbs. For this to work, the remote does not have to be paired with your previous bridge. Also, make sure there are no other Hue bulbs nearby that have just been turned on when using this method. Otherwise, you risk resetting them too. +{% important %} +**You must factory-reset the device.** -Newer Philips Hue bulbs you can reset via Bluetooth. The official Android app can connect to one of these bulbs even if it is already paired to a bridge. Then, you can reset the bulb in the app. +- Simply "removing" them from your old bridge/gateway is not sufficient. +- Be sure there are no other Hue bulbs nearby that have just been powered-on when using this method or you will risk resetting them in this process. -#### Philips Hue Dimmer Switch +{% endimportant %} -1. Turn on your Hue bulb/light you want to reset. (It is important that the bulb has just been turned). -2. Hold the Philips Hue Dimmer Switch near your bulb (closer than 10 centimeters / 4 inches). -3. Press and hold the (I)/(ON) and (O)/(OFF) buttons on the Philips Hue Dimmer Switch. The bulb should start blinking in 10-20 seconds. The bulb will blink, then turn off, then turn on. You can now release the dimmer buttons. -4. Your bulb is now factor reset and ready for pairing. A green light on the top left of the dimmer remote indicates that your bulb has been successfully reset to factory default settings. +The following reset methods can be used (depending on the bulb version): -Note: If you are unable to reset the bulb, remove it from the Hue Bridge and retry the procedure. +- **Zigbee remote:** + - Steps are outlined below for either the _Philips Hue Dimmer Switch_ or _Lutron Connected Bulb Remote_. + - The remote does not have to be paired with your previous bridge. +- **Bluetooth via Android app:** + - Newer Philips Hue bulbs can reset via Bluetooth using the official Android app. + - This is an option even if the bulb is already paired to a bridge. +- **Hue Thief command-line tool**: + - Advanced users can use a third-party tool called [Hue Thief](https://github.com/vanviegen/hue-thief/). + - This requires an EZSP-based Zigbee USB stick. -#### Lutron Connected Bulb Remote +#### Factory-reset using a Zigbee remote -1. Turn on your Hue bulb/light you want to reset. (It is important that the bulb has just been turned). -2. Hold the Dimmer Switch near your bulb (closer than 10 centimeters / 4 inches) -3. Press and hold the 2nd (up arrow) and 4th (light off) buttons on the Lutron Connected Bulb Remote simultaneously for about 10 seconds continuously until your bulb starts to blink and the green LED on the remote should also start blink slowly. -4. Continue to hold both buttons on the remote until the green LED on it stops blinking. Your bulb should also have stopped blinking and eventually turn on again indicating that your bulb has been successfully reset to factory default settings. +Icons or button names may vary between generations of remotes. The remote used for resetting does not have to be paired with your previous bridge. -#### hue-thief +{% details "To reset using a remote:" %} -Follow the instructions on [https://github.com/vanviegen/hue-thief/](https://github.com/vanviegen/hue-thief/) (EZSP-based Zigbee USB stick required) +1. Identify which buttons will be used later to perform the reset (based on the brand of remote): + - **Philips Hue Dimmer Switch**: + - Use the **(I)/(ON)** and **(O)/(OFF)** buttons. + - Button labels or icons may vary based on the generation of Hue remote. + - **Lutron Connected Bulb Remote:** + - Use the **2nd (up arrow)** and **4th (light off)** buttons. +2. Turn on the Hue bulb you want to reset. + - **It is important that the bulb has _just_ been powered on.** +3. Hold the remote near your bulb, closer than 10cm (about 4 inches). +4. Press-and-hold both buttons identified in the first step and continue holding them once the bulb begins to blink. + - Expect to hold the buttons for about another 10 seconds while the bulb blinks. + - **Lutron Connected Bulb Remote:** The green LED on the remote should also begin to blink slowly. +5. Release both buttons once the bulb turns off. + - **Lutron Connected Bulb Remote:** You can release the buttons after the green LED stops flashing on the remote. +6. The bulb will turn back on immediately after to indicate the factory-reset is complete. + - The bulb is now ready for pairing to ZHA following normal steps for [adding devices](#adding-devices). + +{% tip %} +A green light on the top left of the Philips Hue Dimmer Switch remote indicates that your bulb has been successfully reset to factory default settings. +{% endtip %} + +{% enddetails %} + +If you are unable to reset the bulb using a method above, remove it from the Hue Bridge (if it was re-discovered by the Hue Bridge) and try the procedure again. ### ZHA Start up issue with Home Assistant or Home Assistant Container @@ -741,3 +959,11 @@ services: When you see `NCP entered failed state. Requesting APP controller restart` in logs during normal operation, it indicates a drop in communication between ZHA and the serial interface of the Silabs EmberZNet Zigbee Coordinator. The EZSP (EmberZNet Serial Protocol) interface used by Silicon Labs EmberZNet Zigbee Coordinator adapters requires a stable connection to the serial port; therefore, it is not recommended to use a connection over Wi-Fi, WAN, VPN, etc. + +### Zigbee 3.0 support + +Some coordinators may not support firmware capable of Zigbee 3.0, but they can still be fully functional and feature-complete for your needs. + +{% note %} +It is up to hardware manufacturers to make such firmware available to them. If your coordinator was shipped with an older firmware version, you be able to manually upgrade the firmware. +{% endnote %} diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown index a69b7b3e4e3..054f42e7c3c 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -1003,6 +1003,19 @@ This association group is used when Home Assistant [resets the Z-Wave controller Under normal circumstances, it is not necessary to add a device to this group. +## Identification via Z-Wave + +Other Z-Wave devices can instruct a Home Assistant instance to identify itself by sending the following `Indicator Set` Z-Wave command (all bytes are hexadecimal): + +```txt +87010003500308500403500506 + ~~ ~~ ~~ +``` + +The bytes underlined with `~` can also have any other value. + +When receiving such a command, Home Assistant will show a notification in its sidebar, mentioning which node sent the command. + ## Z-Wave Command Classes Home Assistant responds to when queried The following table lists the Command Classes together with the implemented version and required security class. These are the Command Classes that Home Assistant will respond to when queried by other devices. diff --git a/source/_posts/2022-12-20-year-of-voice.markdown b/source/_posts/2022-12-20-year-of-voice.markdown index b109e172fd6..825136c2631 100644 --- a/source/_posts/2022-12-20-year-of-voice.markdown +++ b/source/_posts/2022-12-20-year-of-voice.markdown @@ -23,6 +23,10 @@ _**TL;DR**: It is our goal for 2023 to let users control Home Assistant in their - [Year of the Voice - Chapter 4](/blog/2023/10/12/year-of-the-voice-chapter-4-wakewords/) (October 12, 2023) - [Year of the Voice - Chapter 5](/blog/2023/12/13/year-of-the-voice-chapter-5/) (December 13, 2023) - [Voice - Chapter 6](/blog/2024/02/21/voice-chapter-6/) (February 21, 2024) + - [Voice - Chapter 7](/blog/2024/06/26/voice-chapter-7/) (June 26, 2024) + - [Voice - Chapter 8](/blog/2024/12/19/voice-chapter-8-assist-in-the-home/) (December 19, 2024) + - [Voice - Chapter 9](/blog/2025/02/13/voice-chapter-9-speech-to-phrase/) (February 13, 2024) +


    diff --git a/source/_posts/2025-01-03-3-2-1-backup.markdown b/source/_posts/2025-01-03-3-2-1-backup.markdown new file mode 100644 index 00000000000..cdb91af5876 --- /dev/null +++ b/source/_posts/2025-01-03-3-2-1-backup.markdown @@ -0,0 +1,80 @@ +--- +layout: post +title: "3…2…1… Backup" +description: "Stop what you're doing and take 5 minutes to set up automatic encrypted backups to keep your smart home running smoothly." +date: 2025-01-03 00:00:01 +date_formatted: "January 3, 2025" +author: Paulus Schoutsen +comments: true +categories: Announcements +og_image: /images/blog/2025-01-backups/art.jpg +--- + +3 2 1 backup + +Home Assistant is a powerful tool that can save you time and money by automating your home. Pretty important things around the home, from heating to an automatic fish feeder, need to depend on it. However, as your setup grows more complex, maintaining it—what we call *"digital housekeeping"*—can become a time-consuming task. Backups are a critical part of this maintenance, yet they’re often overlooked, especially by new users, often until it is too late when disaster strikes. + +To make backups effortless, we’ve introduced new automated and off-site backup features in [the latest release of Home Assistant](/blog/2025/01/03/release-20251/). These improvements will make it easier than ever to safeguard your setup. As we step into the New Year, we would encourage you to adopt a simple yet crucial resolution: regularly back up your data. With our new tools, it takes just five minutes to set up and provides lasting peace of mind. + +Learn more about our backups below, or get started now by [updating](https://my.home-assistant.io/redirect/updates/) and visiting the [backups](https://my.home-assistant.io/redirect/backup/) page. + + + +## What’s in a backup? +Backups are essential for a reliable smart home. They protect your system from hardware failures, natural disasters, and cyberattacks, allowing you to quickly restore operations. A solid backup strategy follows the 3-2-1 rule: + +- 3 copies of your data +- 2 stored on different media +- 1 kept off-site + +While this may seem excessive, consider a scenario like a lightning strike: both your Home Assistant system and any local storage, like network-attached storage (NAS), could be destroyed. That’s why an off-site backup is non-negotiable for true resilience, and a comprehensive backup strategy should include: + +- Regular and frequent backups of critical data +- Following the 3-2-1 rule for redundancy +- Encrypting backups to protect against theft and corruption +- Testing backups to ensure they are functional +- Defining how long backups should be retained + +To support these best practices, we have worked hard to introduce Automatic Backups and seamless integration with off-site backup location providers, such as [Home Assistant Cloud](/cloud/). These updates, part of [our 2024 roadmap](/blog/2024/06/12/roadmap-2024h1/#home-assistant-cloud-peace-of-mind), make it easier than ever to provide peace of mind to our users, by implementing a robust backup strategy, and keep your smart home running smoothly. + +## Backups have never been this easy + +the backup page + +Home Assistant backups are incredibly good, backing up every setting and add-on, making restores feel a bit like magic. It even works across different CPU architectures! Up until recently setting up a 3-2-1 backup strategy in Home Assistant was not entirely straightforward. This changes with Home Assistant 2025.1, where we're elevating our backup experience with three new important features. + +- **Automatic encrypted backups** - You can now schedule automatic backups every night or once a week, ensuring you always have a recent backup at hand. +- **Automatic cleanup** - No longer worry about backups overrunning your disk space, as you can now set the maximum number of backups that should be stored. +- **Backup locations** - We have added a new system for integrations to provide backup locations (also known as [backup agents](https://developers.home-assistant.io/docs/core/platform/backup)), allowing you to sync backups to both local or off-site storage. It's launching with support for [network shares](https://my.home-assistant.io/redirect/storage/) and [Home Assistant Cloud](https://my.home-assistant.io/redirect/cloud/) (included at no additional cost to subscribers), with more locations to follow. + +### Get started with our Backup Wizard + +the backup wizard + +The new automatic backup feature in Home Assistant 2025.1 comes with a new easy to use backup wizard. With a couple of clicks, you can backup your Home Assistant system on a regular schedule and easily choose the places where backups are stored. New users will be prompted with a wizard to make sure they set up automatic encrypted backups. Selecting the recommended settings ensures that a backup is made every night, that three backups are kept, and that they are uploaded to all available locations. + +### Backup locations + +backup locations + +At launch, only a few backup locations will be available, but we've made it easy for developers to integrate more, so expect a lot of options to follow. As part of this renewed focus on smart home resilience set out in [our roadmap](/blog/2024/06/12/roadmap-2024h1/#next-priority-encrypted-cloud-backup), cloud backup has been added to [Home Assistant Cloud](/cloud/), which will be available day one to all subscribers for no additional cost. It will only store the latest backup, which must be under 5GB (you'll be notified to repair it if it is too large to upload). If you lose your other backups, you can always go to [your Cloud account page](https://account.nabucasa.com/) and download the latest backup. + +New Home Assistant features like this supercharged backup capability is only possible with funding from our Home Assistant Cloud subscribers. Adding backup to the subscription at no additional cost, was the least we could do to thank them for their continued support. + +### Secure by default + +Encryption key page + +Backups contain all Home Assistant data, including all the keys to every integrated device in your smart home and the history of how you live your life. This data is very important to keep secure. With automatic backups and the 3-2-1 approach we are promoting to users to store their backups off-site. This is why all automatic backups are fully encrypted. + +When a user configures automatic backups, they will be presented with the encryption key and the option to download an emergency kit. The emergency kit contains all the important information, including a link to [the instructions on how to use it to restore a backup](/more-info/backup-emergency-kit). If you were to ever delete your emergency kit, it is available to re-download in the [backup configuration page](https://my.home-assistant.io/redirect/backup/). + +#### Apply 3-2-1 to your backups + + + +Check out the above video tutorial or read our docs to learn more about setting up [automatic and off-site backups](/integrations/backup/). + +## Conclusion + +Too often, people just starting their smart home journey move forward a little too fast and make a mistake that causes some downtime. This impacts the household's confidence, as something that should be making their lives easier is actually seen as unreliable. Avoid this early pitfall and build a resilient smart home with 3-2-1 backups. diff --git a/source/_posts/2025-01-03-release-20251.markdown b/source/_posts/2025-01-03-release-20251.markdown new file mode 100644 index 00000000000..fddf3e77398 --- /dev/null +++ b/source/_posts/2025-01-03-release-20251.markdown @@ -0,0 +1,1060 @@ +--- +layout: post +title: "2025.1: Backing Up into 2025!" +description: "A complete overhaul of the backup system, including Home Assistant Cloud backup storage, retention policies, and fully extendable by integrations. Lots of Month of 'What the Heck?!' improvements, new integrations, and more!" +date: 2025-01-03 00:00:00 +date_formatted: "January 3, 2025" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: + - Release-Notes + - Core +og_image: /images/blog/2025-01/social.jpg +--- + + + +Home Assistant 2025.1! 🥂 + +Happy New Year! The whole Home Assistant project wishes you and your loved ones +a fantastic and healthy 2025! ❤️ Let's make this year even better than the last! + +We are all super excited to kick off the new year with an absolute **massive** +release! 🎆 + +This release brings a complete overhaul of the backup system in Home Assistant, +which has been in the works for months! And I'm not just talking about some +user interface changes—no, we are talking about a complete overhaul from front +to back! + +Automated backups, encrypted Home Assistant Cloud backup storage, retention +policies, configuration wizards, and even the ability for integrations to offer +backup storage locations! 🤯 + +But that is not all! We also had the [Month of “What the Heck?!”](/blog/2024/11/30/the-month-of-what-the-heck/) +in December, which resulted in a lot of quality-of-life improvements raised +by the community that month! + +There is so much to unwrap in this release, seriously, let's just dive in! + +Enjoy the release! + +../Frenck + + + +- [Overhaul of the backup system](#overhaul-of-the-backup-system) + - [Automated backups 🤖](#automated-backups-) + - [Triggering an off-schedule automated backup 👆](#triggering-an-off-schedule-automated-backup-) + - [Home Assistant Cloud backups 😎](#home-assistant-cloud-backups-) + - [Backup locations are extendable by design 🧩](#backup-locations-are-extendable-by-design-) + - [Encrypted backups by default 🔒](#encrypted-backups-by-default-) + - [Restoring backups available to all installation methods 🤗](#restoring-backups-available-to-all-installation-methods-) + - [Backup retention 🗑](#backup-retention-) + - [Setting up backups for the first time 🚀](#setting-up-backups-for-the-first-time-) + - [3…2…1… Backups 🎊](#321-backups-) +- [Month of "What the Heck?!"](#month-of-what-the-heck) + - [Setting categories and labels when creating automations and scripts](#setting-categories-and-labels-when-creating-automations-and-scripts) + - [Quickly navigate to a device](#quickly-navigate-to-a-device) + - [Zoom \& Pan for charts](#zoom--pan-for-charts) + - [Controlling the default exposure of new entities to Assist](#controlling-the-default-exposure-of-new-entities-to-assist) + - [More "What the Heck?!" improvements](#more-what-the-heck-improvements) +- [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) + - [Farewell to the following](#farewell-to-the-following) +- [Other noteworthy changes](#other-noteworthy-changes) +- [Dashboard background settings](#dashboard-background-settings) +- [Media player volume feature for Tile card](#media-player-volume-feature-for-tile-card) +- [Patch releases](#patch-releases) + - [2025.1.1 - January 7](#202511---january-7) + - [2025.1.2 - January 9](#202512---january-9) + - [2025.1.3 - January 20](#202513---january-20) + - [2025.1.4 - January 24](#202514---january-24) +- [Need help? Join the community!](#need-help-join-the-community) +- [Backward-incompatible changes](#backward-incompatible-changes) +- [All changes](#all-changes) + +## Overhaul of the backup system + +Let’s talk about backups. Let’s be honest: they’re one of the most important yet +often overlooked tasks. But when disaster strikes, like a hardware failure, +having a reliable backup can save the day. Wouldn't you love to be back up and +running after disaster strikes? + +While Home Assistant's previous backup system has proven to be solid +and reliable over the years, it didn't exactly make following best +practices—like regular backups, encryption, and off-site +storage—easy. Many of you had to rely on custom add-ons, automations, +or blueprints for backups to fill the gaps. + +**That changes with this release! 🎉** + +We've completely reworked the Home Assistant backup experience to help you set +up a solid backup strategy, using best practices in just a few clicks; +giving you peace of mind when it comes to your backups. + +No worries, if you are using any custom solution for backups, they will continue +to work today. Even with everything new, we've made sure to keep everything +backward compatible. + +So, without further ado, let's dive into the new backup system! + +### Automated backups 🤖 + +Yes, you read that right—Home Assistant now supports automated backups! + +Using a schedule, backups will be created on a regular basis without you having +to lift a finger. This ensures you always have a recent backup available, +without having to worry about it. + +Screenshot showing the bew backup overview page which shows you exactly when your last backup took place + +When you navigate to your backups in the settings menu, you will be +greeted with a new overview page that shows you exactly when your last backup +took place and when the next one is scheduled. Instant peace of mind! + +Automated backups are taking place at 4:45 AM. So, while everyone in your home +is sleeping, Home Assistant makes sure your data is safe and sound. Backing up +at this early hour also means Home Assistant is done with its internal database +maintenance, ensuring your backup is as compact as possible. + +If something ever goes wrong during the automated scheduled backup process, +Home Assistant will notify you through the repair center, ensuring you are +aware of it and can take action. + +### Triggering an off-schedule automated backup 👆 + +Automated backups on a schedule are great, but sometimes, you might want to +trigger a backup **right now**! Maybe you are about to make big changes or +upgrade a whole bunch of things during an evening of tinkering. + +No worries! You can now trigger an off-schedule automated backup from the backup +page at any time. This will immediately create a backup with the same +configuration as your scheduled automated backups. + +Screenshot showing the backup now button + dialog that allows you to trigger an off-schedule backup at any time + +The ability to trigger an on-demand automated backup is excellent, as it covers +all your backup settings in a single click. However, the ability to create +manual backups also still exists. This allows you to create a very specific +backup with the exact contents you want to have in it. + +### Home Assistant Cloud backups 😎 + +Are you a [Home Assistant Cloud by Nabu Casa] subscriber? Then you're in for a +treat! You can now automatically store your latest, fully encrypted, backup in +your Home Assistant Cloud account. + +**This feature provides 5GB of storage at no extra cost, offering fully +encrypted off-site protection for your data! 🎁** + +Home Assistant Cloud is now a backup target location, that is included with the Home Assistant Cloud subscription at no additional costs + +The backup can be downloaded from Home Assistant itself, but also from the +[Home Assistant Cloud account page](https://account.nabucasa.com/) @ Nabu Casa +in case you need it. This way, you can always access your latest backup, even +in case your Home Assistant hardware completely fails. + +[Home Assistant Cloud by Nabu Casa]: https://www.nabucasa.com/ + +### Backup locations are extendable by design 🧩 + +So, automated backups can be stored on your local disk and in Home Assistant +Cloud, but what if you want to store your backups somewhere else? + +Choice is an important aspect of Home Assistant; we want to make everything as +flexible as possible without vendor lock-in. Therefore, the backup system +is designed to be **extendable**. + +This means **integrations** can offer new storage locations—such as NAS devices, +Google Drive, Backblaze B2, or other storage providers—in the future. + +Screenshot showing an potential example storage provider provided by an integration + +Currently, this feature is brand new ✨, so **no** integrations offer additional +locations yet. However, we expect to see a few more integrations that provide +backup locations in the next release. + +This extensibility ensures you can store your backups where you want them, +giving you the flexibility and choice to choose the storage solution you +prefer and trust. + +### Encrypted backups by default 🔒 + +With the addition of Home Assistant Cloud as an off-site backup location, and +the potential for integrations to offer even more (off-site) backup locations, +security has become more important than ever. Your backups not only contain the +access credentials to your smart home devices but also the history of your home, +and no one should be able to access information that sensitive! **Ever!** + +That is why all backups are now [AES-128] encrypted by default. To prioritize +your backups’ security we replaced the previous optional password +with a mandatory encryption key. + +The new backup overview page shows you exactly when your last backup took place + +When you set up your backups for the first time, an encryption key will be +generated for you. Make sure to store this key in a safe place, as you will need +it to restore your backups. To make this easier, you can download the key as +part of an emergency kit during setup—or anytime later from the backup settings +page. Keep it safe! 🔑 + +[AES-128]: https://en.wikipedia.org/wiki/Advanced_Encryption_Standard + +### Restoring backups available to all installation methods 🤗 + +More good news—restoring backups is now supported across +**all installation methods!** 🎉 + +Previously, only Home Assistant OS installations could restore backups. But +with this release, this feature is now available for all installation methods! +No matter how you run Home Assistant, even if you use our containers in a Docker +environment, you can now restore your Home Assistant backups. + +This also means you can restore backups from local storage, Home Assistant +Cloud, or any future backup locations added through integrations. + +As a matter of fact, all backup features, including everything we release today, +will be available regardless of the installation method you are using. We want +everyone to have a solid backup strategy. + +### Backup retention 🗑 + +Our previous backup system made solid backups, which was good, but if you didn't +clean them up manually, eventually, you'd annoyingly run out of disk space. 😬 + +So! Backup retention is now a thing! You can now configure how many backups you +want to keep, and Home Assistant will handle the rest. + +You can now configure a retention policy for your backups, allowing Home Assistant to clean it up automatically + +This cleanup will happen automatically after each backup. If you create a backup +manually for whatever reason, those will remain untouched, giving you full +control over special cases and workflows. + +### Setting up backups for the first time 🚀 + +Getting started with the new backup system is quick and easy! + +The first time you open the backup settings after upgrading, you will be greeted +by a **setup wizard** that will guide you through setting up your backups +step-by-step. + +Screenshot of the our friendly wizard that will help you setting up your backups + +The wizard will help you set up your encryption key, configure your backup +frequency, and set up your backup retention policy. And when it is ready, it +will immediately kick off your first backup! + +All set! One less thing to worry about 🎉 + +### 3…2…1… Backups 🎊 + +We are super excited about this new backup system! As we enter the new year, +we encourage you to get serious about your backups. +A good New Year’s resolution, maybe? 😉 + +So, stop what you are doing right now and set up your backups! Go ahead and set +up that 3-2-1 backup strategy. Not sure what that is? + +**You can read all about it in our [3…2…1… Backup blog post](/blog/2025/01/03/3-2-1-backup/).** + +## Month of "What the Heck?!" + +December’s **[Month of “What the Heck?!”](/blog/2024/11/30/the-month-of-what-the-heck/)** +was an absolute blast! 🎉 + +A big thank you to everyone who contributed by sharing their “What the Heck?!” +moments and ideas for improving Home Assistant. Your input is incredibly +valuable and helps shape our roadmap and priorities moving forward. + +Quite a bunch of shared "What the Heck?!" moments have been addressed in this +release already 🚀 —and we’re not stopping there! Expect to see even more +improvements inspired by your feedback in upcoming releases. + +### Setting categories and labels when creating automations and scripts + +For the first WTH item that has been resolved, we have [@jpbede] to thank! +And this one is also one of the higher-voted ones, so it is a good one! +Andrew Jackson wrote: + +[_**"WTH can you not add categories, labels etc when creating an automation"**_](https://community.home-assistant.io/t/wth-can-you-not-add-categories-labels-etc-when-creating-an-automation/802562) + +Yeah, that is a good WTH! Whenever you create a new automation or script, you +probably want to organize it right away and not have to go back to the settings. +**FIXED**! 🎉 + +If you press the d on your keyboard, it will pop up the Quickbar for devices + +When you create a new automation or script, and also when renaming it, +you can now set the description, category, labels, and areas right away! +🏷️ Nice! + +### Quickly navigate to a device + +You might be aware that you can bring up our quick navigation bar anywhere in +Home Assistant by pressing the `c` key on your keyboard to navigate various +places and the `e` key to search and navigate to any entity. However… + +[_**"WTH is there no quick bar for devices?"**_](https://community.home-assistant.io/t/wth-is-there-no-quick-bar-for-devices/802310) + +Well, that is a good question that Andreas Brett raised! There is indeed no +such thing for devices. [@jpbede] to the rescue! You can now navigate to any +device using the quick bar by pressing the `d` key on your keyboard. + +If you press the d on your keyboard, it will pop up the quick bar for devices + +### Zoom & Pan for charts + +KNXBroker raised the following WTH topic: + +[_**"WTH lets upgrade History Graphs"**_](https://community.home-assistant.io/t/wth-lets-upgrade-history-graphs/802568) + +You are right! The history graphs in Home Assistant are basic but functional! +Nevertheless, we can do better! 🚀 + +One of the bigger items in that WTH topic was the ability to zoom and pan... +Thanks to [@MindFreeze], you can now zoom and pan in any graph +in Home Assistant! 📈 + +

    +Zoom any graph in Home Assistant, by holding ctrl or command and scrolling your mouse wheel! +Zoom and drag any graph in Home Assistant, by holding ctrl (or command on mac) +and scrolling your mouse wheel! +

    + +Hold the control key (or command on macOS) and scroll to zoom in and out using +your mouse. You can also click and drag to pan around the zoomed graph. + +In addition to this change, [@MindFreeze] enabled small micro-animation for the +history graphs, making them look more alive and less static. + +[@MindFreeze]: https://github.com/MindFreeze + +### Controlling the default exposure of new entities to Assist + +mathd made the following point in a Month of "What the Heck?!" topic: + +[_"WTH Are all new entities exposed to Assist by default?"_](https://community.home-assistant.io/t/wth-are-all-new-entities-exposed-to-assist-by-default/803889) + +We hear you! Thanks to [@jpbede], you can now control the default exposure of +new entities to Assist. You can now toggle this on or off in the Home Assistant +Voice Assistant settings. + +Zoom any graph in Home Assistant, by holding ctrl or command and scroll your mouse wheel! + +### More "What the Heck?!" improvements + +Many smaller improvements originate from the Month of “What the Heck?!” in this +release. Here are some of the other noteworthy ones: + +[_**"WTH there is no hotkey for Assist"**_](https://community.home-assistant.io/t/wth-there-is-no-hotkey-for-assist/802403)** + +Well, thanks to [@jpbede], you can now press the `a` key on your keyboard +anywhere in Home Assistant to summon Assist! 🎙️ Nice! + +[_**"WTH doesn't HA ask if I want to save automations?"**_](https://community.home-assistant.io/t/wth-doesnt-ha-ask-if-i-want-to-save-automations/804030) + +Whoa! That is a good one! Thanks to [@jpbede], Home Assistant will now ask if +you want to save your automation before leaving the editor if there are unsaved +changes. 🤖 + +[_**"WTH Is in Energy Dashboard the individual devices not able to reorder"**_](https://community.home-assistant.io/t/wth-is-in-energy-dashboard-the-individual-devices-not-able-to-reorder/805051) + +Thanks for that one yormedia! Honestly, this one has been raised in previous +editions of the Month of "What the Heck?!" a few times. Reason enough for +[@karwosts] to pick this up and make it happen! You can now reorder them in +the setting for categorization purposes. 🔡 + +[_**"WTH Can't I filter labels within a table filter?"**_](https://community.home-assistant.io/t/wth-cant-i-filter-labels-within-a-table-filter/802529) + +Good question. If you have a lot of labels, scrolling through the list of labels +in the filter option can be a bit cumbersome. Thanks to [@silamon], you can +now search and filter through the labels in the filter option! 🔎 + +[_**WTH sentence trigger doesn't contain any context**_](https://community.home-assistant.io/t/wth-sentence-trigger-doesnt-contain-any-context/802386) + +Great idea! Thanks to [@balloob], the full conversation input is now available +to sentence triggers! 🗣️ This was actually the first WTH item to be resolved in +this edition! 😎 + +[@balloob]: https://github.com/balloob +[@jpbede]: https://github.com/jpbede +[@karwosts]: https://github.com/karwosts +[@silamon]: https://github.com/silamon + +## 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: + +- **[Cookidoo]**, added by [@miaucl] + Interact with your shopping lists of [Cookidoo the official Thermomix recipe platform]. +- **[EHEIM Digital]**, added by [@autinerd] + Control your [EHEIM Digital aquarium devices] with Home Assistant. +- **[Ituran]**, added by [@shmuelzon] + Retrieve and use information from your Ituran-equipped vehicle. +- **[Ohme]**, added by [@dan-r] + Get sensor information from your Ohme smart EV charger. +- **[Peblar]**, added by [@frenck] + Control and monitor the charging sessions of your [Peblar EV Charger]. +- **[Powerfox]**, added by [@klaasnicolaas] + Gather data from your [Poweropti] devices reading electricity, water, gas, and heat. +- **[Slide Local]**, added by [@dontinelli] + Integrate your [Slide] cover device directly with Home Assistant using a local API. +- **[Watergate]**, added by [@adam-the-hero] + Integrate your Watergate Sonic Local with Home Assistant. + +[@adam-the-hero]: https://github.com/adam-the-hero +[@autinerd]: https://github.com/autinerd +[@dan-r]: https://github.com +[@dontinelli]: https://github.com/dontinelli +[@frenck]: https://github.com/frenck +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@miaucl]: https://github.com/miaucl +[@shmuelzon]: https://github.com/shmuelzon +[Cookidoo the official Thermomix recipe platform]: https://cookidoo.international/ +[Cookidoo]: /integrations/cookidoo +[EHEIM Digital aquarium devices]: https://eheim.com/en_GB/aquatics/eheim-digital/ +[EHEIM Digital]: /integrations/eheimdigital +[Ituran]: /integrations/ituran +[Ohme]: /integrations/ohme +[Peblar EV Charger]: https://www.peblar.com +[Peblar]: /integrations/peblar +[Powerfox]: /integrations/powerfox +[Poweropti]: https://shop.powerfox.energy/collections/frontpage +[Slide Local]: /integrations/slide_local +[Slide]: https://slide.store/ +[Watergate]: /integrations/watergate + +### 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: + +- The [TP-Link Smart Home] now has support for cameras! Nice work [@sdb9696]! +- [@RaHehl] added [UniFi Protect AI Port] support to the + [UniFi Protect integration]. Awesome! +- The [Music Assistant integration] now has support for actions with response + values from your [Music Assistant]. Thanks, [@marcelveldt]! +- The [Cambridge Audio] integration now supports media browsing! + Thanks, [@noahhusby]! +- [@dotav] added the ability to control the combustion power of your + [Palazzetti] pellet stove. Nice! +- The [SwitchBot Bluetooth integration] now supports the SwitchBot Water Leak + Detector and relay switch. Good work, [@luc-ass] and [@greyeee]! +- [@davidrapan] has been working on the [Starlink integration], adding sensors + reporting power, energy, and data usage. Nice! + +[@davidrapan]: https://github.com/davidrapan +[@dotav]: https://github.com/dotav +[@greyeee]: https://github.com/greyeee +[@luc-ass]: https://github.com/luc-ass +[@marcelveldt]: https://github.com/marcelveldt +[@noahhusby]: https://github.com/noahhusby +[@RaHehl]: https://github.com/RaHehl +[@sdb9696]: https://github.com/sdb9696 +[Cambridge Audio]: /integrations/cambridge_audio +[Music Assistant integration]: /integrations/music_assistant +[Music Assistant]: https://music-assistant.io/ +[Palazzetti]: /integrations/palazzetti +[Starlink integration]: /integrations/starlink +[SwitchBot Bluetooth integration]: /integrations/switchbot +[TP-Link Smart Home]: /integrations/tplink +[UniFi Protect AI Port]: https://store.ui.com/us/en/products/up-ai-port +[UniFi Protect integration]: /integrations/unifiprotect + +### 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 integration is now available via the Home Assistant UI: + +- **[Niko Home Control]**, done by [@VandeurenGlenn] + +[@VandeurenGlenn]: https://github.com/VandeurenGlenn +[Niko Home Control]: /integrations/niko_home_control + +### Farewell to the following + +The following {% term integrations %} are also no longer available as +of this release: + +- **DTE Energy Bridge** has been removed after being deprecated. The integration + was no longer functional. +- **Simulated** has been previously deprecated and is now removed. +- **Stookalert** has been removed. The upstream data is no longer updated. + The [Stookwijzer] integration is a good alternative to get the same information. + +[Stookwijzer]: /integrations/stookwijzer + +## Other noteworthy changes + +There are many more improvements in this release; here are some of the other +noteworthy changes: + +- When viewing data tables and using `ctrl+f` in your browser to search, the + search input will now be focused automatically. As native browser searches + will not work on data tables. Thanks [@jpbede]! +- [@marcinbauer85] adjusted the "Add card" dialog, to automatically focus on the + search field when you add a card, so you can start typing to search + right away! Nice touch! +- Images uploaded through Home Assistant (for example, as background or as a + user profile picture) are now browsable in the media browser. + Thanks [@karwosts]! +- The unit of measurement is now shown next to the numeric slider in the + more-info dialog of number entities. Thanks, [@abmantis]! +- Home Assistant now supports `mWh` as a unit of measurement for energy sensors + and `mW` for electrical potential power sensors. Thanks [@agners]! +- [@wendevlin] added settings and category overflow actions to the automation + and script editor (the three-dotted menu in the top right corner), making + it easier to access those straight from the editor. Nice! +- The [logbook card] supports picking a target for things it should show + events for. You can now pick based on entities, devices, areas, floors, + and labels! Thanks, [@silamon]! + +[@abmantis]: https://github.com/abmantis +[@agners]: https://github.com/agners +[@jpbede]: https://github.com/jpbede +[@karwosts]: https://github.com/karwosts +[@marcinbauer85]: https://github.com/marcinbauer85 +[@silamon]: https://github.com/silamon +[@wendevlin]: https://github.com/wendevlin +[logbook card]: /dashboards/logbook/ + +## Dashboard background settings + +A few releases ago, we made adding a background image to your dashboard easier. +This release, [@silamon] takes it a step further by adding a lot of settings +to customize how the background image is displayed. + +This includes support for tiled backgrounds, transparency, size settings, +alignment, and allowing the background to scroll with the page or stay fixed. + +You can now fully customize the background of your dashboard, with the options to changing tiling, transparency, alignment, and size seettings + +Nice! Thanks, [@silamon]! + +[@silamon]: https://github.com/silamon + +## Media player volume feature for Tile card + +This is a super nice addition from [@simon-zumbrunnen]! The Tile card now +supports a media player volume slider feature. This feature allows you to +control the volume of a media player directly from the Tile card. 🔉 +Nice work Simon! + +The tile card with a media player entity, having the volume feature slider enabled + +[@simon-zumbrunnen]: https://github.com/simon-zumbrunnen + +## Patch releases + +We will also release patch releases for Home Assistant 2025.1 in January. +These patch releases only contain bug fixes. Our goal is to release a patch +release every Friday. + +### 2025.1.1 - January 7 + +- Matter Battery replacement icon ([@lboue] - [#134460]) +- Small fix to allow playing of expandable favorites on Squeezebox ([@peteS-UK] - [#134572]) +- Bump bleak-esphome to 2.0.0 ([@bdraco] - [#134580]) +- Bump uiprotect to version 7.2.0 ([@RaHehl] - [#134587]) +- Mention case-sensitivity in tplink credentials prompt ([@rytilahti] - [#134606]) +- Fix Flick Electric authentication ([@ZephireNZ] - [#134611]) +- Fix hive color tunable light ([@epenet] - [#134628]) +- Set logging in manifest for Cookidoo ([@miaucl] - [#134645]) +- Remove call to remove slide ([@joostlek] - [#134647]) +- Update twentemilieu to 2.2.1 ([@frenck] - [#134651]) +- Fix Reolink playback of recodings ([@starkillerOG] - [#134652]) +- Update peblar to 0.3.3 ([@frenck] - [#134658]) +- Bump cookidoo-api library to 0.11.1 of for Cookidoo ([@miaucl] - [#134661]) +- Update demetriek to 1.1.1 ([@frenck] - [#134663]) +- Cookidoo exotic domains ([@miaucl] - [#134676]) +- Iterate over a copy of the list of programs at Home Connect select setup entry ([@Diegorro98] - [#134684]) +- Change from host to ip in zeroconf discovery for slide_local ([@dontinelli] - [#134709]) +- Bump ZHA to 0.0.45 ([@TheJulianJES] - [#134726]) +- Bump openwebifpy to 4.3.1 ([@autinerd] - [#134746]) +- Fix swapped letter order in "°F" and "°C" temperature units ([@NoRi2909] - [#134750]) +- Bumb python-homewizard-energy to 7.0.1 ([@DCSBL] - [#134753]) +- Register base device entry during coordinator setup in AVM Fritz!Tools integration ([@mib1185] - [#134764]) +- Bump pysuezV2 to 2.0.1 ([@jb101010-2] - [#134769]) +- Fix missing sentence-casing etc. in several strings ([@NoRi2909] - [#134775]) +- Raise ImportError in python_script ([@gjohansson-ST] - [#134792]) +- Replace "id" with "ID" for consistency across HA ([@NoRi2909] - [#134798]) +- Fix a few typos or grammar issues in asus_wrt ([@NoRi2909] - [#134813]) +- Bump uiprotect to version 7.4.1 ([@RaHehl] - [#134829]) +- Bump habluetooth to 3.7.0 ([@bdraco] - [#134833]) +- Fix how function arguments are passed on actions at Home Connect ([@Diegorro98] - [#134845]) +- Bump aiolifx-themes to update colors ([@Djelibeybi] - [#134846]) +- Update Roborock config flow message when an account is already configured ([@allenporter] - [#134854]) +- Log upload BackupAgentError ([@ludeeus] - [#134865]) +- Log cloud backup upload response status ([@ludeeus] - [#134871]) +- Bump solax to 3.2.3 ([@squishykid] - [#134876]) +- Add extra failure exceptions during roborock setup ([@Lash-L] - [#134889]) +- Use uppercase for "ID" and sentence-case for "name" / "icon" ([@NoRi2909] - [#134890]) +- Bump python-kasa to 0.9.1 ([@sdb9696] - [#134893]) +- Add `bring_api` to loggers in Bring integration ([@tr4nt0r] - [#134897]) +- Fix wrong power limit decimal place in IronOS ([@tr4nt0r] - [#134902]) +- Update frontend to 20250106.0 ([@bramkragten] - [#134905]) +- Bump powerfox to v1.1.0 ([@klaasnicolaas] - [#134730]) +- Bump powerfox to v1.2.0 ([@klaasnicolaas] - [#134908]) +- Bump holidays to 0.64 ([@gjohansson-ST] - [#134922]) +- Revert "Remove deprecated supported features warning in LightEntity" ([@arturpragacz] - [#134927]) +- Revert "Remove deprecated supported features warning in ..." (multiple) ([@frenck] - [#134933]) + +[#134460]: https://github.com/home-assistant/core/pull/134460 +[#134572]: https://github.com/home-assistant/core/pull/134572 +[#134580]: https://github.com/home-assistant/core/pull/134580 +[#134587]: https://github.com/home-assistant/core/pull/134587 +[#134606]: https://github.com/home-assistant/core/pull/134606 +[#134611]: https://github.com/home-assistant/core/pull/134611 +[#134628]: https://github.com/home-assistant/core/pull/134628 +[#134645]: https://github.com/home-assistant/core/pull/134645 +[#134647]: https://github.com/home-assistant/core/pull/134647 +[#134651]: https://github.com/home-assistant/core/pull/134651 +[#134652]: https://github.com/home-assistant/core/pull/134652 +[#134658]: https://github.com/home-assistant/core/pull/134658 +[#134661]: https://github.com/home-assistant/core/pull/134661 +[#134663]: https://github.com/home-assistant/core/pull/134663 +[#134676]: https://github.com/home-assistant/core/pull/134676 +[#134684]: https://github.com/home-assistant/core/pull/134684 +[#134709]: https://github.com/home-assistant/core/pull/134709 +[#134726]: https://github.com/home-assistant/core/pull/134726 +[#134730]: https://github.com/home-assistant/core/pull/134730 +[#134746]: https://github.com/home-assistant/core/pull/134746 +[#134750]: https://github.com/home-assistant/core/pull/134750 +[#134753]: https://github.com/home-assistant/core/pull/134753 +[#134764]: https://github.com/home-assistant/core/pull/134764 +[#134769]: https://github.com/home-assistant/core/pull/134769 +[#134775]: https://github.com/home-assistant/core/pull/134775 +[#134792]: https://github.com/home-assistant/core/pull/134792 +[#134798]: https://github.com/home-assistant/core/pull/134798 +[#134813]: https://github.com/home-assistant/core/pull/134813 +[#134829]: https://github.com/home-assistant/core/pull/134829 +[#134833]: https://github.com/home-assistant/core/pull/134833 +[#134845]: https://github.com/home-assistant/core/pull/134845 +[#134846]: https://github.com/home-assistant/core/pull/134846 +[#134854]: https://github.com/home-assistant/core/pull/134854 +[#134865]: https://github.com/home-assistant/core/pull/134865 +[#134871]: https://github.com/home-assistant/core/pull/134871 +[#134876]: https://github.com/home-assistant/core/pull/134876 +[#134889]: https://github.com/home-assistant/core/pull/134889 +[#134890]: https://github.com/home-assistant/core/pull/134890 +[#134893]: https://github.com/home-assistant/core/pull/134893 +[#134897]: https://github.com/home-assistant/core/pull/134897 +[#134902]: https://github.com/home-assistant/core/pull/134902 +[#134905]: https://github.com/home-assistant/core/pull/134905 +[#134908]: https://github.com/home-assistant/core/pull/134908 +[#134922]: https://github.com/home-assistant/core/pull/134922 +[#134927]: https://github.com/home-assistant/core/pull/134927 +[#134933]: https://github.com/home-assistant/core/pull/134933 +[@DCSBL]: https://github.com/DCSBL +[@Diegorro98]: https://github.com/Diegorro98 +[@Djelibeybi]: https://github.com/Djelibeybi +[@Lash-L]: https://github.com/Lash-L +[@NoRi2909]: https://github.com/NoRi2909 +[@RaHehl]: https://github.com/RaHehl +[@TheJulianJES]: https://github.com/TheJulianJES +[@ZephireNZ]: https://github.com/ZephireNZ +[@allenporter]: https://github.com/allenporter +[@arturpragacz]: https://github.com/arturpragacz +[@autinerd]: https://github.com/autinerd +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@dontinelli]: https://github.com/dontinelli +[@epenet]: https://github.com/epenet +[@frenck]: https://github.com/frenck +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@jb101010-2]: https://github.com/jb101010-2 +[@joostlek]: https://github.com/joostlek +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@lboue]: https://github.com/lboue +[@ludeeus]: https://github.com/ludeeus +[@miaucl]: https://github.com/miaucl +[@mib1185]: https://github.com/mib1185 +[@peteS-UK]: https://github.com/peteS-UK +[@rytilahti]: https://github.com/rytilahti +[@sdb9696]: https://github.com/sdb9696 +[@squishykid]: https://github.com/squishykid +[@starkillerOG]: https://github.com/starkillerOG +[@tr4nt0r]: https://github.com/tr4nt0r + +### 2025.1.2 - January 9 + +- Fix Météo-France setup in non French cities (because of failed next rain sensor) ([@Quentame] - [#134782]) +- Increase cloud backup download timeout ([@ludeeus] - [#134961]) +- Fix ZHA "referencing a non existing `via_device`" warning ([@puddly] - [#135008]) +- Catch errors in automation (instead of raise unexpected error) in Overkiz ([@iMicknl] - [#135026]) +- Fix channel retrieval for Reolink DUO V1 connected to a NVR ([@starkillerOG] - [#135035]) +- Bump aioautomower to 2025.1.0 ([@Thomas55555] - [#135039]) +- Bump cookidoo-api to 0.12.2 ([@miaucl] - [#135045]) +- Implement upload retry logic in CloudBackupAgent ([@ludeeus] - [#135062]) +- Add jitter to backup start time to avoid thundering herd ([@emontnemery] - [#135065]) +- Bump pysuezV2 to 2.0.3 ([@jb101010-2] - [#135080]) +- Fix Flick Electric Pricing ([@ZephireNZ] - [#135154]) +- Update frontend to 20250109.0 ([@bramkragten] - [#135235]) + +[#134782]: https://github.com/home-assistant/core/pull/134782 +[#134961]: https://github.com/home-assistant/core/pull/134961 +[#135008]: https://github.com/home-assistant/core/pull/135008 +[#135026]: https://github.com/home-assistant/core/pull/135026 +[#135035]: https://github.com/home-assistant/core/pull/135035 +[#135039]: https://github.com/home-assistant/core/pull/135039 +[#135045]: https://github.com/home-assistant/core/pull/135045 +[#135062]: https://github.com/home-assistant/core/pull/135062 +[#135065]: https://github.com/home-assistant/core/pull/135065 +[#135080]: https://github.com/home-assistant/core/pull/135080 +[#135154]: https://github.com/home-assistant/core/pull/135154 +[#135235]: https://github.com/home-assistant/core/pull/135235 +[@Quentame]: https://github.com/Quentame +[@Thomas55555]: https://github.com/Thomas55555 +[@ZephireNZ]: https://github.com/ZephireNZ +[@bramkragten]: https://github.com/bramkragten +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@iMicknl]: https://github.com/iMicknl +[@jb101010-2]: https://github.com/jb101010-2 +[@ludeeus]: https://github.com/ludeeus +[@miaucl]: https://github.com/miaucl +[@puddly]: https://github.com/puddly +[@starkillerOG]: https://github.com/starkillerOG + +### 2025.1.3 - January 20 + +- Fix DiscoveryFlowHandler when discovery_function returns bool ([@kgraefe] - [#133563]) +- Aprilaire - Fix humidifier showing when it is not available ([@chamberlain2007] - [#133984]) +- Gracefully handle webhook unsubscription if error occurs while contacting Withings ([@dcmeglio] - [#134271]) +- Image entity key error when camera is ignored in EZVIZ ([@RenierM26] - [#134343]) +- Bump pyaussiebb to 0.1.5 ([@Bre77] - [#134943]) +- Fix Watergate Power supply mode description and MQTT/Wifi uptimes ([@adam-the-hero] - [#135085]) +- Fix missing comma in ollama MODEL_NAMES ([@epenet] - [#135262]) +- Bump Freebox to 1.2.2 ([@Quentame] - [#135313]) +- Actually use translated entity names in Lametric ([@joostlek] - [#135381]) +- Fix descriptions of send_message action of Bring! integration ([@NoRi2909] - [#135446]) +- Bump switchbot-api to 2.3.1 ([@SeraphicRav] - [#135451]) +- Fix incorrect cast in HitachiAirToWaterHeatingZone in Overkiz ([@iMicknl] - [#135468]) +- Replace pyhiveapi with pyhive-integration ([@KJonline] - [#135482]) +- Fix referenced objects in script sequences ([@arturpragacz] - [#135499]) +- Use STT/TTS languages for LLM fallback ([@synesthesiam] - [#135533]) +- Bump demetriek to 1.2.0 ([@joostlek] - [#135580]) +- Use device supplied ranges in LaMetric ([@joostlek] - [#135590]) +- Bump elkm1-lib to 2.2.11 ([@gwww] - [#135616]) +- Fix mqtt number state validation ([@jbouwh] - [#135621]) +- Add reauthentication to SmartThings ([@joostlek] - [#135673]) +- Handle invalid HS color values in HomeKit Bridge ([@bdraco] - [#135739]) +- Update aioairzone to v0.9.9 ([@Noltari] - [#135866]) +- Remove device_class from NFC and fingerprint event descriptions ([@RaHehl] - [#135867]) +- Prevent HomeKit from going unavailable when min/max is reversed ([@bdraco] - [#135892]) +- Bump onvif-zeep-async to 3.2.2 ([@bdraco] - [#135898]) +- Round brightness in Niko Home Control ([@VandeurenGlenn] - [#135920]) +- Update NHC lib to v0.3.4 ([@VandeurenGlenn] - [#135923]) +- Update knx-frontend to 2025.1.18.164225 ([@farmio] - [#135941]) +- Bump aiooui to 0.1.8 ([@bdraco] - [#135945]) +- Bump aiooui to 0.1.9 ([@bdraco] - [#135956]) +- Fix switchbot cloud library logger ([@joostlek] - [#135987]) +- Correct type for off delay in rfxtrx ([@elupus] - [#135994]) +- Handle invalid datetime in onvif ([@bdraco] - [#136014]) +- Bump aioraven to 0.7.1 ([@cottsay] - [#136017]) +- Bump onvif-zeep-async to 3.2.3 ([@bdraco] - [#136022]) +- Bump yt-dlp to 2025.01.15 ([@joostlek] - [#136072]) +- Bump deebot-client to 11.0.0 ([@edenhaus] - [#136073]) +- Always include SSL folder in backups ([@emontnemery] - [#136080]) + +[#133563]: https://github.com/home-assistant/core/pull/133563 +[#133984]: https://github.com/home-assistant/core/pull/133984 +[#134271]: https://github.com/home-assistant/core/pull/134271 +[#134343]: https://github.com/home-assistant/core/pull/134343 +[#134943]: https://github.com/home-assistant/core/pull/134943 +[#135085]: https://github.com/home-assistant/core/pull/135085 +[#135262]: https://github.com/home-assistant/core/pull/135262 +[#135313]: https://github.com/home-assistant/core/pull/135313 +[#135381]: https://github.com/home-assistant/core/pull/135381 +[#135446]: https://github.com/home-assistant/core/pull/135446 +[#135451]: https://github.com/home-assistant/core/pull/135451 +[#135468]: https://github.com/home-assistant/core/pull/135468 +[#135482]: https://github.com/home-assistant/core/pull/135482 +[#135499]: https://github.com/home-assistant/core/pull/135499 +[#135533]: https://github.com/home-assistant/core/pull/135533 +[#135580]: https://github.com/home-assistant/core/pull/135580 +[#135590]: https://github.com/home-assistant/core/pull/135590 +[#135616]: https://github.com/home-assistant/core/pull/135616 +[#135621]: https://github.com/home-assistant/core/pull/135621 +[#135673]: https://github.com/home-assistant/core/pull/135673 +[#135739]: https://github.com/home-assistant/core/pull/135739 +[#135866]: https://github.com/home-assistant/core/pull/135866 +[#135867]: https://github.com/home-assistant/core/pull/135867 +[#135892]: https://github.com/home-assistant/core/pull/135892 +[#135898]: https://github.com/home-assistant/core/pull/135898 +[#135920]: https://github.com/home-assistant/core/pull/135920 +[#135923]: https://github.com/home-assistant/core/pull/135923 +[#135941]: https://github.com/home-assistant/core/pull/135941 +[#135945]: https://github.com/home-assistant/core/pull/135945 +[#135956]: https://github.com/home-assistant/core/pull/135956 +[#135987]: https://github.com/home-assistant/core/pull/135987 +[#135994]: https://github.com/home-assistant/core/pull/135994 +[#136014]: https://github.com/home-assistant/core/pull/136014 +[#136017]: https://github.com/home-assistant/core/pull/136017 +[#136022]: https://github.com/home-assistant/core/pull/136022 +[#136072]: https://github.com/home-assistant/core/pull/136072 +[#136073]: https://github.com/home-assistant/core/pull/136073 +[#136080]: https://github.com/home-assistant/core/pull/136080 +[@Bre77]: https://github.com/Bre77 +[@KJonline]: https://github.com/KJonline +[@NoRi2909]: https://github.com/NoRi2909 +[@Noltari]: https://github.com/Noltari +[@Quentame]: https://github.com/Quentame +[@RaHehl]: https://github.com/RaHehl +[@RenierM26]: https://github.com/RenierM26 +[@SeraphicRav]: https://github.com/SeraphicRav +[@VandeurenGlenn]: https://github.com/VandeurenGlenn +[@adam-the-hero]: https://github.com/adam-the-hero +[@arturpragacz]: https://github.com/arturpragacz +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@chamberlain2007]: https://github.com/chamberlain2007 +[@cottsay]: https://github.com/cottsay +[@dcmeglio]: https://github.com/dcmeglio +[@edenhaus]: https://github.com/edenhaus +[@elupus]: https://github.com/elupus +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@farmio]: https://github.com/farmio +[@frenck]: https://github.com/frenck +[@gwww]: https://github.com/gwww +[@iMicknl]: https://github.com/iMicknl +[@jbouwh]: https://github.com/jbouwh +[@joostlek]: https://github.com/joostlek +[@kgraefe]: https://github.com/kgraefe +[@synesthesiam]: https://github.com/synesthesiam + +### 2025.1.4 - January 24 + +- Update Hydrawise maximum watering duration to meet the app limits ([@mattdoran] - [#136050]) +- Bump holidays to 0.65 ([@gjohansson-ST] - [#136122]) +- Handle width and height placeholders in the thumbnail URL ([@Makrit] - [#136227]) +- Fix slave id equal to 0 ([@crug80] - [#136263]) +- Handle LinkPlay devices with no mac ([@silamon] - [#136272]) +- Fallback to None for literal "Blank" serial number for APCUPSD integration ([@yuxincs] - [#136297]) +- Update peblar to v0.4.0 ([@frenck] - [#136329]) +- Avoid keyerror on incomplete api data in myuplink ([@astrandb] - [#136333]) +- Update frontend to 20250109.1 ([@piitaya] - [#136339]) +- Update frontend to 20250109.2 ([@piitaya] - [#136348]) +- Bump aiowithings to 3.1.5 ([@joostlek] - [#136350]) +- Bump powerfox to v1.2.1 ([@klaasnicolaas] - [#136366]) + +[#136050]: https://github.com/home-assistant/core/pull/136050 +[#136122]: https://github.com/home-assistant/core/pull/136122 +[#136227]: https://github.com/home-assistant/core/pull/136227 +[#136263]: https://github.com/home-assistant/core/pull/136263 +[#136272]: https://github.com/home-assistant/core/pull/136272 +[#136297]: https://github.com/home-assistant/core/pull/136297 +[#136329]: https://github.com/home-assistant/core/pull/136329 +[#136333]: https://github.com/home-assistant/core/pull/136333 +[#136339]: https://github.com/home-assistant/core/pull/136339 +[#136348]: https://github.com/home-assistant/core/pull/136348 +[#136350]: https://github.com/home-assistant/core/pull/136350 +[#136366]: https://github.com/home-assistant/core/pull/136366 +[@Makrit]: https://github.com/Makrit +[@astrandb]: https://github.com/astrandb +[@bramkragten]: https://github.com/bramkragten +[@crug80]: https://github.com/crug80 +[@frenck]: https://github.com/frenck +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@joostlek]: https://github.com/joostlek +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@mattdoran]: https://github.com/mattdoran +[@piitaya]: https://github.com/piitaya +[@silamon]: https://github.com/silamon +[@yuxincs]: https://github.com/yuxincs + +## 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 "1-Wire" %} + +The unit of measurement has been removed from 1-Wire counters because +`count` is not a unit 😁 + +([@jrieger] - [#132076]) ([documentation](/integrations/onewire)) + +[@jrieger]: https://github.com/jrieger +[#132076]: https://github.com/home-assistant/core/pull/132076 + +{% enddetails %} + +{% details "Denon HEOS" %} + +Grouping a HEOS media player will now raise an exception if one of the members +is not a valid HEOS player. Previously unknown or invalid members would be +silently dropped. + +([@andrewsayre] - [#132213]) ([documentation](/integrations/heos)) + +[@andrewsayre]: https://github.com/andrewsayre +[#132213]: https://github.com/home-assistant/core/pull/132213 + +{% enddetails %} + +{% details "devolo Home Control" %} + +The integration with devolo Home Control has been updated to remove the option +to set the mydevolo URL. This option was used to integrate with the devolo +Home Control Cloud for development purposes only. +This option is no longer available. + +([@Shutgun] - [#132821]) ([documentation](/integrations/devolo_home_control)) + +[@Shutgun]: https://github.com/Shutgun +[#132821]: https://github.com/home-assistant/core/pull/132821 + +{% enddetails %} + +{% details "FXCOM RFXtrx" %} + +The unit of measurement has been removed from FXCOM RFXtrx counters because +`count` is not a unit 😁 + +([@jrieger] - [#133108]) ([documentation](/integrations/rfxtrx)) + +[@jrieger]: https://github.com/jrieger +[#133108]: https://github.com/home-assistant/core/pull/133108 + +{% enddetails %} + +{% details "HomeWizard Energy" %} + +The unit of measurement for the "Water usage" sensor has been updated from +`l/min` to `L/min`. This change standardizes the unit to improve consistency +across Home Assistant. + +Any automations, scripts, or templates that rely on the old unit may need to be +adjusted. Long-term statistics will remain intact, but repair issues will be +created to ensure the data is updated with the new unit. + +([@DCSBL] - [#132261]) ([documentation](/integrations/homewizard)) + +[@DCSBL]: https://github.com/DCSBL +[#132261]: https://github.com/home-assistant/core/pull/132261 + +{% enddetails %} + +{% details "LIFX" %} + +The options `color_temp` and `kelvin` are no longer valid arguments for LIFX +actions. Please use `color_temp_kelvin` instead. + +([@epenet] - [#132730]) ([documentation](/integrations/lifx)) + +[@epenet]: https://github.com/epenet +[#132730]: https://github.com/home-assistant/core/pull/132730 + +{% enddetails %} + +{% details "Tesla Fleet" %} + +The included OAuth application credentials have been removed, as Tesla no longer +supports Open Source application registrations and is moving to a pay-per-use +model. + +Read more about this announcement in this [blog post](https://developer.tesla.com/docs/fleet-api/announcements#2024-11-27-pay-per-use-pricing). + +([@Bre77] - [#132431]) ([documentation](/integrations/tesla_fleet)) + +[@Bre77]: https://github.com/Bre77 +[#132431]: https://github.com/home-assistant/core/pull/132431 + +{% enddetails %} + +{% details "UniFi Network" %} + +The states of "Device State" sensors have been standardized to match +Home Assistant core rules and be translatable. This affects the following +UniFi sensor states: + +- `Connected`, which now became `connected` +- `Pending`, which now became `pending` +- `Firmware Mismatch`, which now became `firmware_mismatch` +- `Upgrading`, which now became `upgrading` +- `Provisioning`, which now became `provisioning` +- `Heartbeat Missed`, which now became `heartbeat_missed` +- `Adopting`, which now became `adopting` +- `Deleting`, which now became `deleting` +- `Inform Error`, which now became `inform_error` +- `Adoption Failed`, which now became `adoption_failed` +- `Isolated`, which now became `isolated` +- `Unknown`, which now became `unknown` + +If you used those states directly in your automations, scripts, or templates; +you will need to adjust those to match these changes. + +([@bieniu] - [#131921]) ([documentation](/integrations/unifi)) + +[@bieniu]: https://github.com/bieniu +[#131921]: https://github.com/home-assistant/core/pull/131921 + +{% enddetails %} + +{% details "Zabbix" %} + +The integration now uses the official Zabbix Python API. Because of this, the +minimum supported Zabbix version is now 5.0. This change drops support for +Zabbix 4 and before. + +([@kruton] - [#131674]) ([documentation](/integrations/zabbix)) + +[@kruton]: https://github.com/kruton +[#131674]: https://github.com/home-assistant/core/pull/131674 + +{% 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: + +- [Changed name of WaterHeaterEntityDescription](https://developers.home-assistant.io/blog/2024/12/13/water-heater-entity-description) +- [Climate entity now supports independent horizontal swing](https://developers.home-assistant.io/blog/2024/12/03/climate-horizontal-swing) +- [Moving to Pydantic v2](https://developers.home-assistant.io/blog/2024/12/21/moving-to-pydantic-v2) +- [New vacuum state property](https://developers.home-assistant.io/blog/2024/12/08/new-vacuum-state-property) +- [Use Kelvin as the preferred color temperature unit](https://developers.home-assistant.io/blog/2024/12/14/kelvin-preferred-color-temperature-unit) +- [New area device class](https://developers.home-assistant.io/blog/2024/12/26/area-squared-units/) + +[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 2025.1](/changelogs/core-2025.1) diff --git a/source/_posts/2025-02-05-release-20252.markdown b/source/_posts/2025-02-05-release-20252.markdown new file mode 100644 index 00000000000..91e12fbec1e --- /dev/null +++ b/source/_posts/2025-02-05-release-20252.markdown @@ -0,0 +1,988 @@ +--- +layout: post +title: "2025.2: Iterating on backups" +description: "Lot of backup features including using Google Drive and Microsoft OneDrive as backup locations! Voice can now broadcast messages and control your thermostat. And much more!" +date: 2025-02-05 00:00:00 +date_formatted: "February 5, 2025" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: + - Release-Notes + - Core +og_image: /images/blog/2025-02/social.jpg +--- + + + +Home Assistant 2025.2! ❤️ + +In the previous release, we [overhauled our backup system](/blog/2025/01/03/release-20251/#overhaul-of-the-backup-system), +and the response was overwhelming! Tons of suggestions and feature requests +came in, so this release is—once again—focused on backups. Based on this +community feedback, we’ve added loads of improvements, including the first +integrations to store your backups in **Google Drive** +and **Microsoft OneDrive**! + +This release also brings exciting new features to **Voice**! Home Assistant can +now call your **analog phone**, and when dinner is ready, you can **broadcast** +that message to all voice assistants in your home! But wait… there’s more! + +On **February 12, 2025**, we’re streaming live on YouTube all about Voice: +[**Voice - Chapter 9**](https://www.youtube.com/live/k6VvzDSI8RU)! 🎙 +Be sure to subscribe and hit the bell so you don’t miss it. 🛎 + +Before diving into the release notes, I also want to give a shoutout to our +friends at [**ESPHome**](https://esphome.io/) powering so much of the Home +Assistant ecosystem, including Home Assistant Voice PE! And +on **February 19th**, they’ll be hosting a +[**live release party for ESPHome 2025.2**](https://www.youtube.com/live/HtG3fjAO96c)! 🎉 + +Enjoy the release! + +../Frenck + +_PS: It is almost Valentine's day, did you set up some romantic scenes yet? 🌹_ + + + +- [Iterating on backups](#iterating-on-backups) + - [Unencrypted backups](#unencrypted-backups) + - [Ability to turn off encryption for specific locations](#ability-to-turn-off-encryption-for-specific-locations) + - [Downloading backups unencrypted](#downloading-backups-unencrypted) + - [Customize the time of your backups](#customize-the-time-of-your-backups) + - [Taking backups on an advanced schedule](#taking-backups-on-an-advanced-schedule) + - [Re-introduction of the backup toggle on update](#re-introduction-of-the-backup-toggle-on-update) + - [Backup on updating Home Assistant](#backup-on-updating-home-assistant) + - [Backup on updating add-ons](#backup-on-updating-add-ons) + - [Improved filenames for backups](#improved-filenames-for-backups) + - [New locations](#new-locations) +- [Voice](#voice) + - [Home Assistant will be able to call your analog phone to tell you a message](#home-assistant-will-be-able-to-call-your-analog-phone-to-tell-you-a-message) + - [New Broadcast intent](#new-broadcast-intent) + - [Setting Temperature on Thermostat](#setting-temperature-on-thermostat) + - [LLMs meet calendars](#llms-meet-calendars) + - [Shared history between the default conversation agent and its LLM-based fallback](#shared-history-between-the-default-conversation-agent-and-its-llm-based-fallback) + - [Model Context Protocol](#model-context-protocol) +- [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) +- [Other noteworthy changes](#other-noteworthy-changes) +- [Bluetooth config panel](#bluetooth-config-panel) +- [Preparing our graphs for the future](#preparing-our-graphs-for-the-future) +- [Patch releases](#patch-releases) + - [2025.2.1 - February 7](#202521---february-7) + - [2025.2.2 - February 10](#202522---february-10) + - [2025.2.3 - February 12](#202523---february-12) + - [2025.2.4 - February 14](#202524---february-14) + - [2025.2.5 - February 21](#202525---february-21) +- [Need help? Join the community!](#need-help-join-the-community) +- [Backward-incompatible changes](#backward-incompatible-changes) +- [All changes](#all-changes) + +## Iterating on backups + +In the previous release, we [fully revamped the entire backup experience](/blog/2025/01/03/release-20251/#overhaul-of-the-backup-system) +and added many new features to make it easier to use. That release set the +stage for the next iterations and opened up the ability for integrations to +provide locations to store backups. + +We've received **a lot** of feedback on the new backup system, which is awesome! ❤️ +All the feedback helped us prioritize the most requested features, and other +improvements to the backup system. + +This release includes a lot of the most requested improvements and abilities. + +### Unencrypted backups + +The new backup system came with a lot of security improvements, including +encryption of backups. However, as it turns out, many users use these backups +to extract and restore single files or configurations, a use case in which +encryption made things more difficult. In this release we made two changes +to the backup system to address this. + +#### Ability to turn off encryption for specific locations + +While our default recommendation remains to encrypt backups, as of this +release, you can turn off encryption on a per location basis. This allows you +to store backups on you local NAS, for example, in an unencrypted format. + +Screenshot showing the option to turn off encryption for a specific backup location. + +Screenshot showing the backup locations, one location indicates that encryption has been turned off. + +There is one exception to this, which is [Home Assistant Cloud](/cloud). Backups +stored in Home Assistant Cloud will always be encrypted, and encryption cannot +be turned off. At Nabu Casa, we take your privacy and security very seriously, +and we never ever want to be able to access your data. + +#### Downloading backups unencrypted + +When downloading backups from the Home Assistant interface, you will now always +download the backup in an unencrypted format that can be extracted using your +favorite archive tool. + +This works for all backups, regardless of the encryption settings of the +location in which they are stored. For instance, if you download an encrypted +backup from Home Assistant Cloud through the Home Assistant interface, +it will decrypt the backup on the fly while you download it. + +### Customize the time of your backups + +The initial iteration of the backup system scheduled backups to run at 4:45 AM, +but this time wasn't ideal for everyone. Some, for example, turned off their +network storage during the night, meaning the backup would fail. + +This release, we added the ability to customize the time of your backups to your +liking. Additionally, if you choose to make weekly backups, you can now select +the days of the week you want the backup to run. + +Screenshot showing the backup configuration options, you can now set your own time and select which days to backup. + +### Taking backups on an advanced schedule + +The above backup time changes not flexible enough for you? Well, you are in luck! In this +release, we added an action (`backup.create_automatic`) that you can use +to trigger a backup, with your preferred settings, in an automation. + +Screenshot showing an automation in the automation editor that is using the new action to create an automated backup. + +This allows you to create automated backups on any schedule you like, or even +add conditions and actions around it. For example, you could make an automation +that triggers on a calendar, wakes up your network storage, waits till it is +online, and then starts a backup. + +### Re-introduction of the backup toggle on update + +If you run Home Assistant OS, you get updates for Home Assistant along with +all your add-ons. The update dialog used to have a toggle to create a backup +before updating, which was removed in the previous release. + +This change was made because this feature was considered redundant when running +regular automated backups. However, we’ve received a lot of feedback that many +people relied on these backups to ensure they had the latest data, for instance, +if they needed to roll back to a previous version of an add-on. We are +re-introducing this backup on update toggle in this release, but in a smarter +way. 🤓 + +#### Backup on updating Home Assistant + +When updating Home Assistant, the toggle is now turned off by default and +shows the last time you made a backup. This allows you to decide whether to make +a new backup before updating. + +Screenshot showing an Home Assistant Core update dialog, giving the option to make a backup before update. + +If you turn the switch on, a full automated backup is created and synced to +your configured locations, before the update is started. + +This full sync is done to ensure you have the most recent backup available in +case the update causes issues and you need to restore your system. In the rare +case a Home Assistant update fatally fails and you can’t access the backup page, +if you’ve configured a second backup location, you’ll be able to download it +from there. + +#### Backup on updating add-ons + +Things are slightly different when updating add-ons. The toggle exists here too, +and is disabled by default. However, when you enable it, only a backup of your +add-on and its data is created. That way you can keep around the previous +version of the add-on, so you can always roll back to it if needed. + +Screenshot showing an Home Assistant add-on update dialog, giving the option to make a backup before update. + +To prevent your system from filling up with old add-on backups, we only retain +one backup per add-on, automatically deleting the previous backup whenever +a new one is created. Add-on backups you created manually, of course, +remain untouched and will not be deleted automatically. + +### Improved filenames for backups + +One piece of feedback we’ve seen a lot, is that the filenames created by backups +can be a bit cryptic and hard to understand for humans. + +This feedback was fair, as the filename was a hash and originally not designed +to be human-readable. This method was not newly introduced in the last release, +but it was made more apparent with the new backup system and locations. + +So, in this release, we've improved the filenames of the backups stored on your +backup locations. The filename now includes the date and time the backup was +created, making it easier to understand and identify the backup you are looking +for, even outside of Home Assistant. + +### New locations + +This release also introduces new locations to store your backups. There are new +integrations for [Google Drive](/integrations/google_drive/) and +[Microsoft OneDrive](/integrations/onedrive/), and backup support was added to +the [Synology DSM](/integrations/synology_dsm) integration. + +Screenshot showing the backup configuration panel, with all possible backup integrations set up! + +## Voice + +Assist, our [private voice assistant](/voice_control/), is getting a few new +features in this release. If you don't have Assist set up yet, check out our +[Home Assistant Voice: Preview Edition](/voice-pe/) to get started. + +### Home Assistant will be able to call your analog phone to tell you a message + +Remember our tutorial on turning an analog phone into the +[world's most private voice assistant](/voice_control/worlds-most-private-voice-assistant/)? +Thanks to [Jamin](https://github.com/jaminh), we now have a way to call +your analog phone from Home Assistant! + +You can use [`assist_satellite.announce`](/integrations/assist_satellite#action-assist_satelliteannounce) +to have Home Assistant call your phone and play a message when someone picks up +the phone. + +If you use an LLM as the brains for your voice assistant, you can take this one +step further with the new [`assist_satellite.start_conversation`](/integrations/assist_satellite#action-assist_satellitestart_conversation) +action. Instead of playing an announcement, it starts a conversation between +Home Assistant and the user, with Home Assistant saying the first message. +Left the garage door open for 30 minutes? No problem, let Home Assistant call +and ask if they want to close it. + +_(Starting a conversation with the default conversation agent is a bit more work +and did not make it this release)._ + +### New Broadcast intent + +You can now broadcast messages to every other voice assistant in your home. +Try it by saying _"Broadcast it is time for dinner"_. +As always with new intents, support may vary +[depending on your language](https://home-assistant.github.io/intents/), +but our language leaders are working hard on making sure it will be supported +soon in your language! + +### Setting Temperature on Thermostat + +A few releases ago we introduced an intent to get the current temperature from +a climate device. As of this release, you can also set the target temperature +of your thermostat by voice. + +By saying _"Set the temperature to 19 degrees"_ this will smartly target the +area you are in (if you have a thermostat per area, such as thermostatic valves +on your radiators) or the floor you are in (if you only have a central unit). +You can also target specific devices by name if you prefer. + +### LLMs meet calendars + +Without complex custom tooling, LLM-based conversation agents previously could +not fetch events from your calendar. This release changes that. Out of the box, +LLM-based agents can now retrieve today’s and this week’s events from any of +your calendars. Don’t forget to +[expose your calendar entities](/voice_control/voice_remote_expose_devices/) +to enable this functionality. + +### Shared history between the default conversation agent and its LLM-based fallback + +In [2024.12](/blog/2024/12/04/release-202412/) we introduced a lovely feature +that allowed you to use our fast and local default conversation agent for most +queries while still being able to fall back to a much more powerful LLM-based +agent for more complex queries. + +This introduced some interesting behaviors. From a user perspective, it looked +like you were talking to the same assistant, whereas, in reality, nothing was +shared between the two agents. This led to some less-than-optimal scenarios, +such as this one: + +Screenshot of missing history in the conversation + +The first command is processed locally by our default agent, but the follow-up +request is processed by the LLM-based agent. Since no memory is shared, it does +not understand what device you want to turn off. + +Starting with this release, both agents now share the same command history, +helping address this issue. + +Screenshot of the new improved behavior + +### Model Context Protocol + +This release adds the [Model Context Protocol](https://modelcontextprotocol.io/introduction) +to Home Assistant thanks to [Allen][@allenporter]. Home Assistant can both be an +[MCP server](/integrations/mcp_server/) and an +[MCP client](/integrations/mcp/). From the MCP website: + +> MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools. + +To give it a try yourself, [check out this client demo](https://gist.github.com/allenporter/b0e9946feb2ab60901c4f467ac1ba6f9). + +## 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: + +- **[Google Drive]**, added by [@tronikos]
    + Add your Google Drive as a location to store your Home Assistant backups. +- **[Homee]**, added by [@Taraman17]
    + Integrate your [Homee smart home system] into Home Assistant. +- **[igloohome]**, added by [@keithle888]
    + Monitor the battery levels of your [igloo smart access device(s)]. +- **[LetPot]**, added by [@jpelgrom]
    + Monitor and control your [LetPot indoor garden]. +- **[OneDrive]**, added by [@zweckj]
    + Allows you to store your Home Assistant backups in your Microsoft OneDrive. +- **[Overseerr]**, added by [@joostlek]
    + Interact with your [Overseerr media requests] directly from Home Assistant. +- **[Model Context Protocol Server]**, added by [@allenporter]
    + Enables using Home Assistant to provide context for MCP LLM Client + Applications. For example, you can expose your Google Tasks to-do list as a + tool for [Claude Desktop]. +- **[Model Context Protocol]**, added by [@allenporter]
    + Enables using [MCP Servers] in Home Assistant to provide additional tools to + use with a conversation agent. +- **[Qbus]**, added by [@thomasddn]
    + Allows you to integrate your [Qbus Control] into Home Assistant. + +This release also has a new virtual integration. Virtual integrations are stubs +that are handled by other (existing) integrations to help with findability. +The following virtual integration have been added: + +- **[Decorquip Dream]**, provided by [Motionblinds] added by [@starkillerOG] + +[@allenporter]: https://github.com/allenporter +[@joostlek]: https://github.com/joostlek +[@jpelgrom]: https://github.com/jpelgrom +[@keithle888]: https://github.com/keithle888 +[@starkillerOG]: https://github.com/starkillerOG +[@Taraman17]: https://github.com/Taraman17 +[@thomasddn]: https://github.com/thomasddn +[@tronikos]: https://github.com/tronikos +[@zweckj]: https://github.com/zweckj +[Claude Desktop]: https://claude.ai/download +[Decorquip Dream]: /integrations/decorquip/ +[Google Drive]: /integrations/google_drive +[Homee smart home system]: https://hom.ee/ +[Homee]: /integrations/homee +[igloo smart access device(s)]: https://www.igloohome.co/#products +[igloohome]: /integrations/igloohome +[LetPot indoor garden]: https://letpot.com/ +[LetPot]: /integrations/letpot +[MCP Servers]: https://modelcontextprotocol.io/ +[Model Context Protocol Server]: /integrations/mcp_server +[Model Context Protocol]: /integrations/mcp +[Motionblinds]: /integrations/motion_blinds +[OneDrive]: /integrations/onedrive +[Overseerr media requests]: https://overseerr.dev/ +[Overseerr]: /integrations/overseerr +[Qbus Control]: https://www.qbus.be/ +[Qbus]: /integrations/qbus/ + +### 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: + +- A big shoutout to [@NoRi2909]! He has been reviewing and improving every single + piece of text we show anywhere in Home Assistant. Thank you for your hard work! +- Also, [@lboue]! This hero keeps extending the device support for the [Matter] + integration by adding support for more and more devices. Home Assistant is + close to reaching full Matter 1.4 device support! +- [@chemelli74] added support for the [Shelly BLU TRV] to the [Shelly] + integration. Nice! +- The [HomeWizard Energy] integration now supports the + [HomeWizard Plug-In Battery]. Awesome work [@DCSBL]! +- Thanks to [@iprak], the [Vesync] integration now supports humidifiers! +- [@rytilahti] added vacuum support to the [TP-Link Smart Home] integration. Sweet! +- The [Reolink] integration keeps evolving, [@starkillerOG] added support for baby crying detection as a sensor. Nice! +- The [Bang & Olufsen] integration now provides entities allowing you to react + to physical button presses on all Bang & Olufsen devices. Thanks [@mj23000]! + +[@chemelli74]: https://github.com/chemelli74 +[@DCSBL]: https://github.com/DCSBL +[@iprak]: https://github.com/iprak +[@lboue]: https://github.com/lboue +[@mj23000]: https://github.com/mj23000 +[@NoRi2909]: https://github.com/NoRi2909 +[@rytilahti]: https://github.com/rytilahti +[@starkillerOG]: https://github.com/starkillerOG +[Bang & Olufsen]: /integrations/bang_olufsen +[HomeWizard Energy]: /integrations/homewizard +[HomeWizard Plug-In Battery]: https://www.homewizard.com/nl/plug-in-battery/ +[Matter]: /integrations/matter +[Reolink]: /integrations/reolink +[Shelly BLU TRV]: https://www.shelly.com/products/shelly-blu-trv-single-pack +[Shelly]: /integrations/shelly +[TP-Link Smart Home]: /integrations/tplink +[Vesync]: /integrations/vesync + +### 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 integration is now available via the Home Assistant UI: + +- **[NMBS]**, done by [@silamon] +- **[Filter]**, done by [@gjohansson-ST] + +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@silamon]: https://github.com/silamon +[Filter]: /integrations/filter +[NMBS]: /integrations/nmbs + +## Other noteworthy changes + +- When using the [Generic thermostat], setting a temperature that matches + one of the presets will automatically select that preset as active. + Thanks [@domingues]! +- [Time triggers] in automations can now be offset when using datetime input + helpers. Thanks [@Petro31]! + +[@domingues]: https://github.com/domingues +[@Petro31]: https://github.com/Petro31 +[Generic thermostat]: /integrations/generic_thermostat +[Time triggers]: /docs/automation/trigger/#time-trigger + +## Bluetooth config panel + +The [Bluetooth integration] now has its own configuration panel! 💙 + +The panel is accessible by going to **Settings** > **Device & services**. Find +and select the **Bluetooth** integration, and next select **Configure**. + +This new panel gives you access to the Bluetooth integration options and +insights into the connection slot allocations. More importantly, +it has an advertisement monitor! + +Selecting **Advertisement monitor** will open a new panel, where you can see +information about your Bluetooth devices, including the raw advertisement data +and how they are connected to your Home Assistant instance. This includes +which [Bluetooth proxy] it connects through! + +Screenshot of the new advertisement panel + +[Bluetooth integration]: /integrations/bluetooth +[Bluetooth proxy]: /integrations/bluetooth/#remote-adapters-bluetooth-proxies + +## Preparing our graphs for the future + +This release includes a major overhaul of every graph we display and show in +Home Assistant. We have entirely replaced the software library that renders +these graphs in the frontend. + +You can most definitely tell things have changed, but everything still looks +very similar. The latter was our goal for now, as we wanted the existing +experience to be familiar. + +However, this change is a preparation for the future. We have many plans and +ideas for our graphs, and this change was a necessary step to make those plans +possible. + +## Patch releases + +We will also release patch releases for Home Assistant 2025.2 in February. +These patch releases only contain bug fixes. Our goal is to release a patch +release every Friday. + +### 2025.2.1 - February 7 + +- Fix hassio test using wrong fixture ([@emontnemery] - [#137516]) +- Change Electric Kiwi authentication ([@mikey0000] - [#135231]) +- Update govee-ble to 0.42.1 ([@cdce8p] - [#137371]) +- Bump holidays to 0.66 ([@gjohansson-ST] - [#137449]) +- Bump aiohttp-asyncmdnsresolver to 0.1.0 ([@bdraco] - [#137492]) +- Bump aiohttp to 3.11.12 ([@bdraco] - [#137494]) +- Bump govee-ble to 0.43.0 to fix compat with new H5179 firmware ([@bdraco] - [#137508]) +- Bump habiticalib to v0.3.5 ([@tr4nt0r] - [#137510]) +- Fix Mill issue, where no sensors were shown ([@Danielhiversen] - [#137521]) +- Don't overwrite setup state in async_set_domains_to_be_loaded ([@emontnemery] - [#137547]) +- Use separate metadata files for onedrive ([@zweckj] - [#137549]) +- Fix sending polls to Telegram threads ([@jwhb] - [#137553]) +- Skip building wheels for electrickiwi-api ([@cdce8p] - [#137556]) +- Add excluded domains to broadcast intent ([@synesthesiam] - [#137566]) +- Revert "Add `PaddleSwitchPico` (Pico Paddle Remote) device trigger to Lutron Caseta" ([@bdraco] - [#137571]) +- Fix Overseerr webhook configuration JSON ([@denniseffing] - [#137572]) +- Do not rely on pyserial for port scanning with the CM5 + ZHA ([@puddly] - [#137585]) +- Bump eheimdigital to 1.0.6 ([@autinerd] - [#137587]) +- Bump pyfireservicerota to 0.0.46 ([@cyberjunky] - [#137589]) +- Bump reolink-aio to 0.11.10 ([@starkillerOG] - [#137591]) +- Allow to omit the payload attribute to MQTT publish action to allow an empty payload to be sent by default ([@jbouwh] - [#137595]) +- Handle previously migrated HEOS device identifier ([@andrewsayre] - [#137596]) +- Bump `aioshelly` to version `12.4.1` ([@bieniu] - [#137598]) +- Bump electrickiwi-api to 0.9.13 ([@mikey0000] - [#137601]) +- Bump ZHA to 0.0.48 ([@TheJulianJES] - [#137610]) +- Bump Electrickiwi-api to 0.9.14 ([@mikey0000] - [#137614]) +- Update google-nest-sdm to 7.1.3 ([@allenporter] - [#137625]) +- Don't use the current temperature from Shelly BLU TRV as a state for External Temperature number entity ([@bieniu] - [#137658]) +- Fix LG webOS TV turn off when device is already off ([@thecode] - [#137675]) + +[#135231]: https://github.com/home-assistant/core/pull/135231 +[#137371]: https://github.com/home-assistant/core/pull/137371 +[#137448]: https://github.com/home-assistant/core/pull/137448 +[#137449]: https://github.com/home-assistant/core/pull/137449 +[#137492]: https://github.com/home-assistant/core/pull/137492 +[#137494]: https://github.com/home-assistant/core/pull/137494 +[#137508]: https://github.com/home-assistant/core/pull/137508 +[#137510]: https://github.com/home-assistant/core/pull/137510 +[#137516]: https://github.com/home-assistant/core/pull/137516 +[#137521]: https://github.com/home-assistant/core/pull/137521 +[#137547]: https://github.com/home-assistant/core/pull/137547 +[#137549]: https://github.com/home-assistant/core/pull/137549 +[#137553]: https://github.com/home-assistant/core/pull/137553 +[#137556]: https://github.com/home-assistant/core/pull/137556 +[#137566]: https://github.com/home-assistant/core/pull/137566 +[#137571]: https://github.com/home-assistant/core/pull/137571 +[#137572]: https://github.com/home-assistant/core/pull/137572 +[#137585]: https://github.com/home-assistant/core/pull/137585 +[#137587]: https://github.com/home-assistant/core/pull/137587 +[#137589]: https://github.com/home-assistant/core/pull/137589 +[#137591]: https://github.com/home-assistant/core/pull/137591 +[#137595]: https://github.com/home-assistant/core/pull/137595 +[#137596]: https://github.com/home-assistant/core/pull/137596 +[#137598]: https://github.com/home-assistant/core/pull/137598 +[#137601]: https://github.com/home-assistant/core/pull/137601 +[#137610]: https://github.com/home-assistant/core/pull/137610 +[#137614]: https://github.com/home-assistant/core/pull/137614 +[#137625]: https://github.com/home-assistant/core/pull/137625 +[#137658]: https://github.com/home-assistant/core/pull/137658 +[#137675]: https://github.com/home-assistant/core/pull/137675 +[@Danielhiversen]: https://github.com/Danielhiversen +[@TheJulianJES]: https://github.com/TheJulianJES +[@allenporter]: https://github.com/allenporter +[@andrewsayre]: https://github.com/andrewsayre +[@autinerd]: https://github.com/autinerd +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@cdce8p]: https://github.com/cdce8p +[@cyberjunky]: https://github.com/cyberjunky +[@denniseffing]: https://github.com/denniseffing +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@jbouwh]: https://github.com/jbouwh +[@jwhb]: https://github.com/jwhb +[@mikey0000]: https://github.com/mikey0000 +[@puddly]: https://github.com/puddly +[@starkillerOG]: https://github.com/starkillerOG +[@synesthesiam]: https://github.com/synesthesiam +[@thecode]: https://github.com/thecode +[@tr4nt0r]: https://github.com/tr4nt0r +[@zweckj]: https://github.com/zweckj + +### 2025.2.2 - February 10 + +- LaCrosse View new endpoint ([@IceBotYT] - [#137284]) +- Convert coinbase account amounts as floats to properly add them together ([@natekspencer] - [#137588]) +- Bump ohmepy to 1.2.9 ([@dan-r] - [#137695]) +- Bump onedrive_personal_sdk to 0.0.9 ([@zweckj] - [#137729]) +- Limit habitica ConfigEntrySelect to integration domain ([@cdce8p] - [#137767]) +- Limit nordpool ConfigEntrySelect to integration domain ([@cdce8p] - [#137768]) +- Limit transmission ConfigEntrySelect to integration domain ([@cdce8p] - [#137769]) +- Fix tplink child updates taking up to 60s ([@bdraco] - [#137782]) +- Call backup listener during setup in Google Drive ([@tronikos] - [#137789]) +- Use the external URL set in Settings > System > Network if my is disabled as redirect URL for Google Drive instructions ([@tronikos] - [#137791]) +- Fix manufacturer_id matching for 0 ([@patman15] - [#137802]) +- Fix DAB radio in Onkyo ([@arturpragacz] - [#137852]) +- Fix LG webOS TV fails to setup when device is off ([@thecode] - [#137870]) +- Fix heos migration ([@balloob] - [#137887]) +- Bump pydrawise to 2025.2.0 ([@dknowles2] - [#137961]) +- Bump aioshelly to version 12.4.2 ([@bieniu] - [#137986]) +- Prevent crash if telegram message failed and did not generate an ID ([@CloCkWeRX] - [#137989]) +- Bump habiticalib to v0.3.7 ([@tr4nt0r] - [#137993]) +- Refresh the nest authentication token on integration start before invoking the pub/sub subsciber ([@allenporter] - [#138003]) +- Use resumable uploads in Google Drive ([@tronikos] - [#138010]) +- Bump py-synologydsm-api to 2.6.2 ([@mib1185] - [#138060]) +- Handle generic agent exceptions when getting and deleting backups ([@abmantis] - [#138145]) +- Bump onedrive-personal-sdk to 0.0.10 ([@zweckj] - [#138186]) +- Keep one backup per backup agent when executing retention policy ([@emontnemery] - [#138189]) +- Improve inexogy logging when failed to update ([@jpbede] - [#138210]) +- Bump pyheos to v1.0.2 ([@andrewsayre] - [#138224]) +- Update frontend to 20250210.0 ([@bramkragten] - [#138227]) +- Bump lacrosse-view to 1.1.1 ([@IceBotYT] - [#137282]) + +[#137282]: https://github.com/home-assistant/core/pull/137282 +[#137284]: https://github.com/home-assistant/core/pull/137284 +[#137448]: https://github.com/home-assistant/core/pull/137448 +[#137588]: https://github.com/home-assistant/core/pull/137588 +[#137688]: https://github.com/home-assistant/core/pull/137688 +[#137695]: https://github.com/home-assistant/core/pull/137695 +[#137729]: https://github.com/home-assistant/core/pull/137729 +[#137767]: https://github.com/home-assistant/core/pull/137767 +[#137768]: https://github.com/home-assistant/core/pull/137768 +[#137769]: https://github.com/home-assistant/core/pull/137769 +[#137782]: https://github.com/home-assistant/core/pull/137782 +[#137789]: https://github.com/home-assistant/core/pull/137789 +[#137791]: https://github.com/home-assistant/core/pull/137791 +[#137802]: https://github.com/home-assistant/core/pull/137802 +[#137852]: https://github.com/home-assistant/core/pull/137852 +[#137870]: https://github.com/home-assistant/core/pull/137870 +[#137887]: https://github.com/home-assistant/core/pull/137887 +[#137961]: https://github.com/home-assistant/core/pull/137961 +[#137986]: https://github.com/home-assistant/core/pull/137986 +[#137989]: https://github.com/home-assistant/core/pull/137989 +[#137993]: https://github.com/home-assistant/core/pull/137993 +[#138003]: https://github.com/home-assistant/core/pull/138003 +[#138010]: https://github.com/home-assistant/core/pull/138010 +[#138060]: https://github.com/home-assistant/core/pull/138060 +[#138145]: https://github.com/home-assistant/core/pull/138145 +[#138186]: https://github.com/home-assistant/core/pull/138186 +[#138189]: https://github.com/home-assistant/core/pull/138189 +[#138210]: https://github.com/home-assistant/core/pull/138210 +[#138224]: https://github.com/home-assistant/core/pull/138224 +[#138227]: https://github.com/home-assistant/core/pull/138227 +[@CloCkWeRX]: https://github.com/CloCkWeRX +[@IceBotYT]: https://github.com/IceBotYT +[@abmantis]: https://github.com/abmantis +[@allenporter]: https://github.com/allenporter +[@andrewsayre]: https://github.com/andrewsayre +[@arturpragacz]: https://github.com/arturpragacz +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@bramkragten]: https://github.com/bramkragten +[@cdce8p]: https://github.com/cdce8p +[@dan-r]: https://github.com/dan-r +[@dknowles2]: https://github.com/dknowles2 +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@jpbede]: https://github.com/jpbede +[@mib1185]: https://github.com/mib1185 +[@natekspencer]: https://github.com/natekspencer +[@patman15]: https://github.com/patman15 +[@thecode]: https://github.com/thecode +[@tr4nt0r]: https://github.com/tr4nt0r +[@tronikos]: https://github.com/tronikos +[@zweckj]: https://github.com/zweckj + +### 2025.2.3 - February 12 + +- Bump hass-nabucasa from 0.88.1 to 0.89.0 ([@ludeeus] - [#137321]) +- Move cloud backup upload/download handlers to lib ([@ludeeus] - [#137416]) +- Handle non-retryable errors when uploading cloud backup ([@ludeeus] - [#137517]) +- Add missing thermostat state EMERGENCY_HEAT to econet ([@jdanders] - [#137623]) +- Fix broken issue creation in econet ([@jdanders] - [#137773]) +- Fix version extraction for APsystems ([@alfwro13] - [#138023]) +- Refresh nest access token before before building subscriber Credentials ([@allenporter] - [#138259]) +- Fix BackupManager.async_delete_backup ([@emontnemery] - [#138286]) +- Fix next authentication token error handling ([@allenporter] - [#138299]) +- Bump pyenphase to 1.25.1 ([@catsmanac] - [#138327]) +- Bump sentry-sdk to 1.45.1 ([@edenhaus] - [#138349]) +- Bump zeroconf to 0.144.1 ([@bdraco] - [#138353]) +- Bump cryptography to 44.0.1 ([@edenhaus] - [#138371]) +- Fix tplink iot strip sensor refresh ([@sdb9696] - [#138375]) +- Bump deebot-client to 12.1.0 ([@edenhaus] - [#138382]) +- Bump hass-nabucasa from 0.89.0 to 0.90.0 ([@emontnemery] - [#138387]) +- Update cloud backup agent to use calculate_b64md5 from lib ([@emontnemery] - [#138391]) + +[#137321]: https://github.com/home-assistant/core/pull/137321 +[#137416]: https://github.com/home-assistant/core/pull/137416 +[#137448]: https://github.com/home-assistant/core/pull/137448 +[#137517]: https://github.com/home-assistant/core/pull/137517 +[#137623]: https://github.com/home-assistant/core/pull/137623 +[#137688]: https://github.com/home-assistant/core/pull/137688 +[#137773]: https://github.com/home-assistant/core/pull/137773 +[#138023]: https://github.com/home-assistant/core/pull/138023 +[#138231]: https://github.com/home-assistant/core/pull/138231 +[#138259]: https://github.com/home-assistant/core/pull/138259 +[#138286]: https://github.com/home-assistant/core/pull/138286 +[#138299]: https://github.com/home-assistant/core/pull/138299 +[#138327]: https://github.com/home-assistant/core/pull/138327 +[#138349]: https://github.com/home-assistant/core/pull/138349 +[#138353]: https://github.com/home-assistant/core/pull/138353 +[#138371]: https://github.com/home-assistant/core/pull/138371 +[#138375]: https://github.com/home-assistant/core/pull/138375 +[#138382]: https://github.com/home-assistant/core/pull/138382 +[#138387]: https://github.com/home-assistant/core/pull/138387 +[#138391]: https://github.com/home-assistant/core/pull/138391 +[@alfwro13]: https://github.com/alfwro13 +[@allenporter]: https://github.com/allenporter +[@bdraco]: https://github.com/bdraco +[@catsmanac]: https://github.com/catsmanac +[@edenhaus]: https://github.com/edenhaus +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@jdanders]: https://github.com/jdanders +[@ludeeus]: https://github.com/ludeeus +[@sdb9696]: https://github.com/sdb9696 + +### 2025.2.4 - February 14 + +- Bump python-kasa to 0.10.2 ([@sdb9696] - [#138381]) +- Bump hass-nabucasa from 0.90.0 to 0.91.0 ([@ludeeus] - [#138441]) +- Bump aiowebostv to 0.6.2 ([@thecode] - [#138488]) +- Bump ZHA to 0.0.49 to fix Tuya TRV issues ([@TheJulianJES] - [#138492]) +- Bump pyseventeentrack to 1.0.2 ([@shaiu] - [#138506]) +- Bump hass-nabucasa from 0.91.0 to 0.92.0 ([@emontnemery] - [#138510]) +- Bump py-synologydsm-api to 2.6.3 ([@mib1185] - [#138516]) +- Update frontend to 20250214.0 ([@bramkragten] - [#138521]) + +[#137448]: https://github.com/home-assistant/core/pull/137448 +[#137688]: https://github.com/home-assistant/core/pull/137688 +[#138231]: https://github.com/home-assistant/core/pull/138231 +[#138381]: https://github.com/home-assistant/core/pull/138381 +[#138408]: https://github.com/home-assistant/core/pull/138408 +[#138441]: https://github.com/home-assistant/core/pull/138441 +[#138488]: https://github.com/home-assistant/core/pull/138488 +[#138492]: https://github.com/home-assistant/core/pull/138492 +[#138506]: https://github.com/home-assistant/core/pull/138506 +[#138510]: https://github.com/home-assistant/core/pull/138510 +[#138516]: https://github.com/home-assistant/core/pull/138516 +[#138521]: https://github.com/home-assistant/core/pull/138521 +[@TheJulianJES]: https://github.com/TheJulianJES +[@bramkragten]: https://github.com/bramkragten +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@ludeeus]: https://github.com/ludeeus +[@mib1185]: https://github.com/mib1185 +[@sdb9696]: https://github.com/sdb9696 +[@shaiu]: https://github.com/shaiu +[@thecode]: https://github.com/thecode + +### 2025.2.5 - February 21 + +- Adjust Tuya Water Detector to support 1 as an alarm state ([@petacz] - [#135933]) +- Fix bug in set_preset_mode_with_end_datetime (wrong typo of frost_guard) ([@pectum83] - [#138402]) +- Bump pyhive-integration to 1.0.2 ([@KJonline] - [#138569]) +- Bump tesla-fleet-api to v0.9.10 ([@Bre77] - [#138575]) +- Bump pysmarty2 to 0.10.2 ([@lucab-91] - [#138625]) +- Rename "returned" state to "alert" ([@shaiu] - [#138676]) +- Bump pyvesync for vesync ([@cdnninja] - [#138681]) +- Opower: Fix unavailable "start date" and "end date" sensors ([@SaswatPadhi] - [#138694]) +- Correct backup filename on delete or download of cloud backup ([@emontnemery] - [#138704]) +- Correct invalid automatic backup settings when loading from store ([@emontnemery] - [#138716]) +- Bump airgradient to 0.9.2 ([@joostlek] - [#138725]) +- Clean up translations for mocked integrations inbetween tests ([@emontnemery] - [#138732]) +- Bump pyrympro from 0.0.8 to 0.0.9 ([@nivstein] - [#138753]) +- Don't allow setting backup retention to 0 days or copies ([@emontnemery] - [#138771]) +- Fix TV input source option for Sonos Arc Ultra ([@PeteRager] - [#138778]) +- Add assistant filter to expose entities list command ([@synesthesiam] - [#138817]) +- Fix playback for encrypted Reolink files ([@starkillerOG] - [#138852]) +- Correct backup date when reading a backup created by supervisor ([@emontnemery] - [#138860]) +- Bump pyfritzhome to 0.6.15 ([@mib1185] - [#138879]) +- Validate hassio backup settings ([@emontnemery] - [#138880]) +- Catch zeep fault as well on GetSystemDateAndTime call. ([@DmitryKuzmenko] - [#138916]) +- Fix Reolink callback id collision ([@starkillerOG] - [#138918]) +- Fix handling of min/max temperature presets in AVM Fritz!SmartHome ([@mib1185] - [#138954]) +- Bump pyprosegur to 0.0.13 ([@dgomes] - [#138960]) +- Bump reolink-aio to 0.12.0 ([@starkillerOG] - [#138985]) +- Bump deebot-client to 12.2.0 ([@edenhaus] - [#138986]) +- Omit unknown hue effects ([@joostlek] - [#138992]) +- Update frontend to 20250221.0 ([@bramkragten] - [#139006]) + +[#135933]: https://github.com/home-assistant/core/pull/135933 +[#137448]: https://github.com/home-assistant/core/pull/137448 +[#137688]: https://github.com/home-assistant/core/pull/137688 +[#138231]: https://github.com/home-assistant/core/pull/138231 +[#138402]: https://github.com/home-assistant/core/pull/138402 +[#138408]: https://github.com/home-assistant/core/pull/138408 +[#138530]: https://github.com/home-assistant/core/pull/138530 +[#138569]: https://github.com/home-assistant/core/pull/138569 +[#138575]: https://github.com/home-assistant/core/pull/138575 +[#138625]: https://github.com/home-assistant/core/pull/138625 +[#138676]: https://github.com/home-assistant/core/pull/138676 +[#138681]: https://github.com/home-assistant/core/pull/138681 +[#138694]: https://github.com/home-assistant/core/pull/138694 +[#138704]: https://github.com/home-assistant/core/pull/138704 +[#138716]: https://github.com/home-assistant/core/pull/138716 +[#138725]: https://github.com/home-assistant/core/pull/138725 +[#138732]: https://github.com/home-assistant/core/pull/138732 +[#138753]: https://github.com/home-assistant/core/pull/138753 +[#138771]: https://github.com/home-assistant/core/pull/138771 +[#138778]: https://github.com/home-assistant/core/pull/138778 +[#138817]: https://github.com/home-assistant/core/pull/138817 +[#138852]: https://github.com/home-assistant/core/pull/138852 +[#138860]: https://github.com/home-assistant/core/pull/138860 +[#138879]: https://github.com/home-assistant/core/pull/138879 +[#138880]: https://github.com/home-assistant/core/pull/138880 +[#138916]: https://github.com/home-assistant/core/pull/138916 +[#138918]: https://github.com/home-assistant/core/pull/138918 +[#138954]: https://github.com/home-assistant/core/pull/138954 +[#138960]: https://github.com/home-assistant/core/pull/138960 +[#138985]: https://github.com/home-assistant/core/pull/138985 +[#138986]: https://github.com/home-assistant/core/pull/138986 +[#138992]: https://github.com/home-assistant/core/pull/138992 +[#139006]: https://github.com/home-assistant/core/pull/139006 +[@Bre77]: https://github.com/Bre77 +[@DmitryKuzmenko]: https://github.com/DmitryKuzmenko +[@KJonline]: https://github.com/KJonline +[@PeteRager]: https://github.com/PeteRager +[@SaswatPadhi]: https://github.com/SaswatPadhi +[@bramkragten]: https://github.com/bramkragten +[@cdnninja]: https://github.com/cdnninja +[@dgomes]: https://github.com/dgomes +[@edenhaus]: https://github.com/edenhaus +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@joostlek]: https://github.com/joostlek +[@lucab-91]: https://github.com/lucab-91 +[@mib1185]: https://github.com/mib1185 +[@nivstein]: https://github.com/nivstein +[@pectum83]: https://github.com/pectum83 +[@petacz]: https://github.com/petacz +[@shaiu]: https://github.com/shaiu +[@starkillerOG]: https://github.com/starkillerOG +[@synesthesiam]: https://github.com/synesthesiam + +## 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 "Ecovacs" %} + +The attributes on the vacuum entity for the lifespan of the main brush, side +brush, and filter have been deprecated and are now removed. These attributes +are superseded by dedicated sensor entities. + +([@gjohansson-ST] - [#134492]) ([documentation](/integrations/ecovacs)) + +[@gjohansson-ST]: https://github.com/gjohansson-ST +[#134492]: https://github.com/home-assistant/core/pull/134492 + +{% enddetails %} + +{% details "Home Connect" %} + +Some appliances might lose their power entity as the API does not report the +power setting. + +([@Diegorro98] - [#135930]) ([documentation](/integrations/home_connect)) + +[@Diegorro98]: https://github.com/Diegorro98 +[#135930]: https://github.com/home-assistant/core/pull/135930 + +{% enddetails %} + +{% details "IMGW-PIB" %} + +Some hydrology data is no longer available to Home Assistant users via IMGW-PIB +API and for this reason, the following entities are removed: + +- `flood alarm` binary sensor +- `flood alarm level` sensor +- `flood warning` binary sensor +- `flood warning level` sensor + +([@bieniu] - [#134668]) ([documentation](/integrations/imgw_pib)) + +[@bieniu]: https://github.com/bieniu +[#134668]: https://github.com/home-assistant/core/pull/134668 + +{% enddetails %} + +{% details "KNX" %} + +The "State Updater" option in the integration settings now works as intended. +Previously, the option wasn’t applied correctly. + +- When disabled: KNX will only read a `state_address` once when the connection + is established. +- When enabled: KNX will also read any `state_address` if no value has been + received for one hour. + +Please review your integration settings to ensure this option is configured +according to your preferences. + +([@farmio] - [#135611]) ([documentation](/integrations/knx)) + +[@farmio]: https://github.com/farmio +[#135611]: https://github.com/home-assistant/core/pull/135611 + +{% enddetails %} + +{% details "Litter-Robot" %} + +Remove extra_state_attributes from Litter-Robot vacuum entities. +These were previously migrated to sensors. + +([@natekspencer] - [#136196]) ([documentation](/integrations/litterrobot)) + +[@natekspencer]: https://github.com/natekspencer +[#136196]: https://github.com/home-assistant/core/pull/136196 + +{% enddetails %} + +{% details "MQTT" %} + +To change the MQTT broker settings, you need to start a reconfiguration. +When `CONFIGURE` is selected, MQTT shows a "MQTT settings" page with subscribe +and publish tools. The `Re-configure MQTT` button will be replaced with +an `MQTT options` page. + +The reconfiguration option will only be available from the MQTT integration +entry context menu. + +([@jbouwh] - [#133342]) ([documentation](/integrations/mqtt)) + + +The MQTT publish action no longer supports the `topic_template` and `payload_template` attributes. Instead, only `topic` and `payload` should be used. In automation and scripts, users can use templates by default. Users were instructed to update their automations and scripts with a repair flow when the use of the deprecated action options was detected. + +([@jbouwh] - [#134056]) ([documentation](/integrations/mqtt)) + +[@jbouwh]: https://github.com/jbouwh +[#133342]: https://github.com/home-assistant/core/pull/133342 +[#134056]: https://github.com/home-assistant/core/pull/134056 + +{% enddetails %} + +{% details "Pentair ScreenLogic" %} + +Raw states derived from ScreenLogic enums are now lowercase instead of Title +Case. This change impacts: + +- pH/ORP dosing state sensor entities: + - `Dosing` -> `dosing` + - `Mixing` -> `mixing` + - `Monitoring` -> `monitoring` +- The `preset_mode` state attribute for ScreenLogic climate entities, where + raw states have also been underscored-spaced and had any punctuation removed. + - `Solar` -> `solar` + - `Solar Preferred` -> `solar_preferred` + - `Heater` -> `heater` + - `Don't Change` -> `dont_change` + +These changes support the addition of translation keys for text-based entity +states. You should update any references to the above states/preset_modes to +the new, lowercase versions. + +([@dieselrabbit] - [#133866]) ([documentation](/integrations/screenlogic)) + +[@dieselrabbit]: https://github.com/dieselrabbit +[#133866]: https://github.com/home-assistant/core/pull/133866 + +{% 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: + +- [Energy by distance units](https://developers.home-assistant.io/blog/2025/01/31/energy-distance-units/) +- [Relocate dhcp/ssdp/usb/zeroconf ServiceInfo models](https://developers.home-assistant.io/blog/2025/01/15/service-info) + +[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 2025.2](/changelogs/core-2025.2) diff --git a/source/_posts/2025-02-13-voice-chapter-9-speech-to-phrase.markdown b/source/_posts/2025-02-13-voice-chapter-9-speech-to-phrase.markdown new file mode 100644 index 00000000000..86ad8c2fa46 --- /dev/null +++ b/source/_posts/2025-02-13-voice-chapter-9-speech-to-phrase.markdown @@ -0,0 +1,136 @@ +--- +layout: post +title: "Speech-to-Phrase brings voice home - Voice chapter 9" +description: "This new tool brings fast, local speech processing to low-end hardware, along with some useful new voice and AI features" +date: 2025-02-13 00:00:01 +date_formatted: "February 13, 2025" +author: Mike Hansen +comments: true +categories: Assist +og_image: /images/blog/2025-02-voice-chapter-9/art.jpg +--- + + + +**Welcome to Voice chapter 9 🎉 part of our [long-running series](https://www.home-assistant.io/blog/categories/assist/) following the development of open voice.** + +We're still pumped from the launch of the [Home Assistant Voice Preview Edition](/voice-pe/) at the end of December. It sold out 23 minutes into our announcement - wow! We've been working hard to keep it in stock at [all our distributors](/voice-pe#buy). + +Today, we have a lot of cool stuff to improve your experience with Voice PE or any other Assist satellite you're using. This includes fully local and offline voice control that can be powered by nearly any Home Assistant system. + +- [Voice for the masses](#voice-for-the-masses) +- [Building an Open Voice Ecosystem](#building-an-open-voice-ecosystem) +- [Large language model improvements](#large-language-model-improvements) +- [Expanding Voice Capabilities](#expanding-voice-capabilities) +- [Home Assistant phones home: analog phones are back!](#home-assistant-phones-home-analog-phones-are-back) +- [Wyoming improvements](#wyoming-improvements) +- [🫵 Help us bring choice to voice!](#-help-us-bring-choice-to-voice) + + +Dragon NaturallySpeaking was a popular speech recognition program introduced in 1997. To run this software you needed at least a 133 MHz Pentium processor, 32 MB of RAM, and Windows 95 or later. Nearly thirty years later, Speech-to-Text is much better, but needs orders of magnitude more resources. + +Incredible technologies are being developed in speech processing, but it's currently unrealistic for a device that costs less than $100 to take real advantage of them. It's possible, of course, but running the previously recommended Speech-to-Text tool, [Whisper](https://github.com/openai/whisper), on a Raspberry Pi 4 takes at least 5 seconds to turn your speech into text, with varying levels of success. This is why we ended up recommending at least an Intel N100 to run your voice assistant fully locally. That stung. Our opt-in analytics shows over [50% of the Home Assistant OS users](https://analytics.home-assistant.io/) are running their homes on affordable, low-powered machines like the [Home Assistant Green](/green) or a Raspberry Pi. + +What's more, advancing the development of Whisper is largely in the hands of OpenAI, as we don't have the resources required to add languages to that tool. We could add every possible language to Home Assistant, but if any single part of our voice pipeline lacks language support, it renders voice unusable for that language. As a result, many widely spoken languages were unsupported for local voice control. + +This left many users unable to use voice to control their smart home without purchasing extra hardware or services. We’re changing this today with the launch of a key new piece of our voice pipeline. + +## Voice for the masses + +Speech-to-Phrase logo + +[Speech-to-Phrase](https://github.com/OHF-voice/speech-to-phrase) is based on old, almost ancient, voice technology by today's standards. Instead of the ability to transcribe virtually any speech into text, it is limited to a set of pre-trained phrases. Speech-to-Phrase will automatically generate the phrases and fine-tune a model based on the devices, areas, and sentence triggers in your Home Assistant server - 100% locally and offline. + +**The result:** speech transcribed in under a second on a Home Assistant Green or Raspberry Pi 4. The Raspberry Pi 5 processes commands seven times faster, clocking in at 150 milliseconds per command! + +With great speed comes *some* limitations. Speech-to-Phrase only supports a subset of Assist's voice commands, and more open-ended things like shopping lists, naming a timer, and broadcasts are not usable out of the box. Really any commands that can accept random words (wildcards) will not work. For the same reasons, Speech-to-Phrase is intended for home control only and not LLMs. + +The most important home control commands are supported, including turning lights on and off, changing brightness and color, getting the weather, setting timers, and controlling media players. [Custom sentences](/docs/automation/trigger/#sentence-trigger) can also be added to trigger things not covered by the current commands, and we expect the community will come up with some clever new ways to use this tech. + +Green and Voice PE join forces +

    All you need to get started with voice

    + +Speech-to-Phrase is launching with support for English, French, German, Dutch, Spanish, and Italian - covering nearly 70% of Home Assistant users. Nice. Unlike the local Speech-to-Text tools currently available, adding languages to Speech-to-Phrase is much easier. This means many more languages will be available in future releases, and [we would love your help](/voice_control/contribute-voice) adding them! + +We're working on updating the Voice wizard to include Speech-to-Phrase. Until then, you need to install the add-on manually: + +[!Open your Home Assistant instance and show the dashboard of an add-on.](https://my.home-assistant.io/redirect/supervisor_addon/?addon=core_speech-to-phrase) + +## Building an Open Voice Ecosystem + +When we launched Home Assistant Voice Preview Edition, we didn't just launch a product; we kickstarted an ecosystem. We did this by open-sourcing all parts and ensuring that the voice experience built into Home Assistant is not tied to a single product. Any voice assistant built for the Open Home ecosystem can take advantage of all this work. Even your DIY ones! + +With ESPHome 2025.2, which we're releasing next week, any ESPHome-based voice assistant will support making [broadcasts](/blog/2025/02/05/release-20252/#new-broadcast-intent) (more on that below), and they will also be able to use our new voice wizard to ensure new users have everything they need to get started. + +This will include updates for the [$13 Atom Echo](/voice_control/thirteen-usd-voice-remote/) and ESP32-S3-Box-3 devices that we used for development during the Year of the Voice! + +

    New broadcast feature in action with Atom and Box 3

    + +## Large language model improvements + +We aim for Home Assistant to be [the place for experimentation with AI in the smart home](/blog/2024/06/07/ai-agents-for-the-smart-home/). We support a wide range of models, both local and cloud-based, and are constantly improving the different ways people can interact with them. We're always running [benchmarks](https://github.com/allenporter/home-assistant-datasets/tree/main/reports) to track the best models, and make sure our changes lead to an improved experience. + +If you set up [Assist](/voice_control/), Home Assistant's built-in voice assistant, and configure it to use an LLM, you might have noticed some new features landing recently. One major change was the new "[prefer handling commands locally](/blog/2024/12/04/release-202412/#let-your-voice-assistant-fall-back-to-an-llm-based-agent)" setting, which always attempts to run commands with the built-in conversation agent before it sends it off to an LLM. We noticed many easy-to-run commands were being sent to an LLM, which can slow down things and waste tokens. If Home Assistant understands the command (e.g., turn on the lights), it will perform the necessary action, and only passes it on to your chosen LLM if it doesn't understand the command (e.g., what's the air quality like now). + +Adding the above features made us realize that LLMs need to understand the commands handled locally. Now, the [conversation history is shared](/blog/2025/02/05/release-20252/#shared-history-between-the-default-conversation-agent-and-its-llm-based-fallback) with the LLM. The context allows you to ask the LLM for follow-up questions that refer to recent commands, regardless of whether they helped process the request. + +Speech-to-Phrase logo +

    Left: without shared conversations. Right: Shared conversations enable GPT to understand context.

    + +### Reducing the time to first word with streaming + +When experimenting with larger models, or on slower hardware, LLM's can feel sluggish. They only respond once the entire reply is generated, which can take frustratingly long for lengthy responses (you'll be waiting a while if you ask it to tell you an epic fairy tale). + +In Home Assistant 2025.3 we're introducing support for LLMs to stream their response to the chat, allowing users to start reading while the response is being generated. A bonus side effect is that commands are now also faster: they will be executed as soon as they come in, without waiting for the rest of the message to be complete. + +Streaming is coming initially for Ollama and OpenAI. + +### Model Context Protocol brings Home Assistant to every AI + +In November 2024, Anthropic announced the [Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP). It is a new protocol to allow LLMs to control external services. In this release, contributed by [Allen Porter](https://github.com/allenporter), Home Assistant can speak MCP. + +Using the new Model Context Protocol [integration](/integrations/mcp), Home Assistant can integrate external MCP servers and make their tools available to LLMs that Home Assistant talks to (for your voice assistant or in automations). There is [quite a collection of MCP servers](https://github.com/punkpeye/awesome-mcp-servers), including wild ones like scraping websites ([tutorial](https://gist.github.com/allenporter/b0e9946feb2ab60901c4f467ac1ba6f9)), file server access, or even BlueSky. + +With the new Model Context Protocol [server integration](/integrations/mcp_server), Home Assistant's LLM tools can be included in other AI apps, like the Claude desktop app ([tutorial](https://modelcontextprotocol.io/quickstart/user)). If agentic AI takes off, your smart home will be ready to be integrated. + +Thanks Allen! + +## Expanding Voice Capabilities + +We keep enhancing the capabilities of the built-in conversation agent of Home Assistant. With the latest release, we're unlocking two new features: + +#### "Broadcast that it's time for dinner" + +The new [broadcast](/blog/2025/02/05/release-20252/#new-broadcast-intent) feature lets you quickly send messages to the other Assist satellites in your home. This makes it possible to announce it's time for dinner, or announce battles between your children 😅. + +#### "Set the temperature to 19 degrees" + +Previously Assist could only tell you the temperature, but now it can help you change the temperature of your HVAC system. Perfect for changing the temperature while staying cozy under a warm blanket. + +## Home Assistant phones home: analog phones are back! + +Two years ago, we introduced the [world's most private voice assistant](/voice_control/worlds-most-private-voice-assistant/): an analog phone! Users can pick it up to talk to their smart home, and only the user can hear the response. A fun feature we're adding today is that Home Assistant can now **call your analog phone!** + +Analog phones are great when you want to notify a room, instead of an entire home. For instance, when the laundry is done, you can notify someone in the living room, but not the office. Also since the user needs to pick up the horn to receive the call, you will know if your notification was received. + +

    Have your Home Assistant give you a call

    + +If you're using an LLM as your voice assistant, you can also start a conversation from a phone call. You can provide the opening sentence and via a new "extra system prompt" option, provide extra context to the LLM to interpret the response from the user. For example, + +- Extra system context: garage door cover.garage_door was left open for 30 minutes. We asked the user if it should be closed +- Assistant: should the garage door be closed? +- User: sure + +Thanks [JaminH](https://github.com/jaminh) for the contribution. + +## Wyoming improvements + +Wyoming is our standard for linking together all the different parts needed to build a voice assistant. Home Assistant 2025.3 will add support for announcements to Wyoming satellites, making them eligible for the new broadcast feature too.   + +We're also adding a new microWakeWord add-on (the same wake word engine running on Voice PE!) that can be used as an alternative to openWakeWord. As we collect more real-world samples from our [Wake Word Collective](https://ohf-voice.github.io/wake-word-collective/), the models included in microWakeWord will be retrained and improved. + +## 🫵 Help us bring choice to voice! + +We've said it before, and we'll say it again---the era of open voice has begun, and the more people who join us, the better it gets. Home Assistant offers many ways to start with voice control, whether by [building your own](/voice_control/#expand-and-experiment) Assist hardware or getting a [Home Assistant Voice Preview Edition](/voice-pe/). With every update, you'll see new features, and you'll get to preview the future of voice today. + +A huge thanks to all the language leaders and contributors helping to shape open voice in the home! There are many ways to get involved, from translating or sharing voice samples to building new features---learn more about how [you can contribute here](/voice_control/contribute-voice). Another great way to support development is by subscribing to [Home Assistant Cloud](/cloud/), which helps fund the Open Home projects that power voice. diff --git a/source/_posts/2025-02-27-apollo-joins-wwha.markdown b/source/_posts/2025-02-27-apollo-joins-wwha.markdown new file mode 100644 index 00000000000..17e9c60d45d --- /dev/null +++ b/source/_posts/2025-02-27-apollo-joins-wwha.markdown @@ -0,0 +1,50 @@ +--- +layout: post +title: "Apollo joins the Works With Home Assistant Program" +description: "Adding three devices, including their community favorite presence and air quality multisensors." +date: 2025-02-27 00:00:01 +date_formatted: "February 27, 2025" +author: Miranda Bishop +comments: true +categories: Announcements +og_image: /images/blog/2025-02-apollo/art.jpg +--- + +Apollo wwha logo + +[Apollo Automation](https://apolloautomation.com/) has joined the [Works with Home Assistant](https://partner.home-assistant.io/) program. Certifying three of their newest devices, including their community favorite presence and air quality multisensors, giving users the best possible experience when using these devices with Home Assistant. + +Notably, these are the first [ESPHome](https://esphome.io/index.html)-based devices to receive Works with Home Assistant certification. Apollo is one of the first movers in an important trend that we're very excited about: Home Assistant community members turning their open projects into viable businesses that support a thriving Open Home ecosystem. + + + +## Background + +Apollo Automation is a growing family-run business rooted in the Home Assistant and ESPHome communities. And yes, they're named after their German Shepherd, Apollo 🐕. + +
    +

    Apollo Automation is built by and for the Home Assistant community. We believe in open smart home technology that gives users control, privacy, and flexibility. Joining the Works With Home Assistant program is a natural step for us, ensuring our devices integrate seamlessly while supporting the ecosystem we love. Home Assistant allows users to create powerful smart homes, and we are excited to contribute by making high-quality, reliable hardware that enhances the experience for everyone.

    + - Justin Bunton, Co-Founder, Apollo Automation +
    + +Two years ago, they started sharing their designs for a new impressively small ESPHome-powered multisensor with the community. Getting feedback, sharing iterations, and working collaboratively, they turned that sensor into a full-fledged product, which was built to work with Home Assistant. They have continued this open, community-first approach and have now built several even more refined multisensors. + +

    Apollo MSR-2 multisensor +A multisensor for ants? 🐜

    + +Home Assistant is the [only true smart home platform](https://newsletter.openhomefoundation.org/true-platforms-let-you-create/) because it gives everyone full control to build and create. [ESPHome](/integrations/esphome/) is the ultimate smart device platform, and it is fostering an entirely new ecosystem of Open Home projects. ESPHome works fully locally, and it's a modder's paradise, allowing users to build DIY smart home devices (check out the [getting started with ESPHome guide](https://esphome.io/guides/getting_started_hassio.html)). + +Creators can also use it to build pre-built, plug-and-play products that give users a really seamless experience. With devices being discovered and easily added to your Wi-Fi network and Home Assistant, along with a one-click update within Home Assistant. + +ESPHome and Home Assistant allows anyone to turn their passion for building cool things into a career, and the things they build help support a more vibrant Open Home. Apollo is an exciting new partner for the Works with Home Assistant program and should serve as an inspiration to all aspiring makers in our community. + +## Devices +Works with Home Assistant differs from other certification programs as products are rigorously tested in-house to ensure they work seamlessly out of the box. Any company joining also commits to providing long-term support and firmware updates, while being a positive force in the Home Assistant community. Works with Home Assistant is operated by the [Open Home Foundation](https://www.openhomefoundation.org/), and it is the support of [Home Assistant Cloud](/cloud/) subscribers that funds this work. + +Apollo has chosen first to certify three products, which include: + +- [MTR-1 Multi-Target Radar Multisensor For Home Assistant (LD2450)](https://apolloautomation.com/products/mtr-1) - A tiny, but powerful radar-based (mmWave) presence sensor that can pack in many other sensors. +- [MSR-2 mmWave Multisensor For Home Assistant (LD2410B)](https://apolloautomation.com/products/msr-2) - An even smaller multisensor that is the successor of the initial community feedback-driven design. +- [AIR-1 Air Quality Sensor For Home Assistant](https://apolloautomation.com/products/air-1) - A small air quality multisensor that can be extended to incorporate a huge variety of sensors. + +We anticipate that Apollo will bring more of their lineup into the program, and we are excited to see their new innovations going forward! This is just the start of a year of many new Works with Home Assistant announcements, so please stay tuned! diff --git a/source/_posts/2025-03-05-music-assistants-next-big-hit.markdown b/source/_posts/2025-03-05-music-assistants-next-big-hit.markdown new file mode 100644 index 00000000000..94f8c3456b6 --- /dev/null +++ b/source/_posts/2025-03-05-music-assistants-next-big-hit.markdown @@ -0,0 +1,95 @@ +--- +layout: post +title: "Music Assistant's next big hit" +description: "Spotify Connect, Assist streaming, podcasts, audiobooks, Apple Music, a full EQ, and more!" +date: 2025-03-05 00:00:01 +date_formatted: "March 5, 2025" +author: Marcel van der Veldt +comments: true +categories: Music-Assistant +og_image: /images/blog/2025-03-music-assistant/art.jpg +--- + +

    Music Assistants next big hit

    + +Over the past several months, [Music Assistant](https://www.music-assistant.io/) has been hitting all the right notes with new features, greater stability, and a crescendo of contributors who keep pushing the project forward. If you're [unfamiliar with Music Assistant](/blog/2024/05/09/music-assistant-2/#what-is-music-assistant), it allows you to merge your libraries from leading audio streaming providers and local files, letting you play them on the most popular smart speakers. Since our [last update](/blog/2024/05/09/music-assistant-2/), Music Assistant has had a couple of big releases, but our most recent might just be our platinum record 💿, with a lot of new functionality coming in version 2.4. In case you've missed the last few updates, here are the biggest additions. + +**Table of contents** +- [Optimized for Assist](#say-my-name) +- [External audio & Spotify Connect](#across-the-universe) +- [Podcasts & Audiobooks](#radio-ga-ga) +- [More players and providers](#new-sensation) +- [Equalizer control & features](#all-about-that-bass) +- [Home Assistant improvements](#master-of-puppets) +- [More stable streaming](#d-d-dont-dont-stop-the-beat) +- [Get Music Assistant 2.4 today!](#drop-it-like-its-hot) + + + +### "Say My Name" +

    Optimized for Assist

    +

    audiobooks pageWe should have called it Hi-Fi edition

    + +The most recent release has some great advancements for [Assist](/voice_control/) devices, like the [Home Assistant Voice Preview Edition](/voice-pe/). We've been working closely with the [ESPHome](https://esphome.io/) team to ensure the most optimal audio streaming experience, which has helped make Assist devices into very capable media players. The community has even added some great functionality to fully [control your media player with your voice](https://github.com/music-assistant/voice-support), including choosing songs, artists, and more. Voice Preview Edition has a high-quality DAC that provides very clean audio playback from its 3.5mm jack, allowing you to stream lossless audio to connected speakers (this $59 device puts some of my expensive Hi-Fi gear to shame!). + +### "Across the Universe" +

    External audio & Spotify Connect

    +

    Spotify Connect on a Voice PESpotify Connect on Voice Preview Edition

    + +Another feature in the latest release is support for "external audio sources", which can be provided either by players themselves (source control) or with plugins. The first plugin to deliver this functionality is Spotify Connect. It's the easiest way to use Spotify with Music Assistant, and can be enabled on any player. This makes any Music Assistant supported device a Spotify Connect supported device (can confirm, Voice Preview Edition is great for this). [To get started](https://www.music-assistant.io/plugins/spotify-connect/) go to Music Assistant's settings, add the Spotify Connect Plugin, choose the devices you would like it to use, and within Spotify you will see the device as a player. Just note, Spotify Connect requires a Premium account to work. + +We've got our sights set on adding even more plugins like this down the line (AirPlay, anyone?). We're also hard at work making the whole setup process super simple, particularly for those using the Voice Preview Edition who might not need every single Music Assistant feature, but still want this simple casting capability. + +### "Radio Ga Ga" +

    Podcasts & Audiobooks

    + +

    audiobooks pageThe full book's progress is tracked, and chapters are clearly shown

    + +Your library just got a whole lot bigger! Music Assistant now has native support for podcasts and audiobooks. For podcasts, several providers have been added, including [Subsonic](https://www.music-assistant.io/music-providers/subsonic/), [YouTube](https://www.music-assistant.io/music-providers/youtube-music/), and [RSS feeds](https://www.music-assistant.io/music-providers/podcastfeed/). Audiobooks can be added via two brand new providers: [Audible](https://www.music-assistant.io/music-providers/audible/) and [Audiobookshelf](https://www.music-assistant.io/music-providers/audiobookshelf/), or imported directly from your local files. Audiobook playback presents the entire book as a single bar with dots showing each chapter (even if the book is separated into multiple files), allowing you to really track your progress. The entire core has been adjusted to keep better track of your progress through any media, so you will always resume where you left off. + +

    Continue listening sectionThe "Continue listening" section on the home page takes you back to where you left off

    + +### "New Sensation" +

    More players and providers

    + +Shortly after our last blog post, we added support for [Apple Music](https://www.music-assistant.io/music-providers/apple-music/) which was one of the most requested additions in the comments. A couple of other new providers were added, including [iBroadcast](https://www.music-assistant.io/music-providers/ibroadcast/) and [SiriusXM](https://www.music-assistant.io/music-providers/siriusxm/). For new hardware support we've added support for [Bluesound](https://www.music-assistant.io/player-support/bluesound/) players. If you have a provider or player you love and want to see it in Music Assistant, [request it](https://github.com/orgs/music-assistant/discussions?discussions_q=sort%3Atop)---but better yet [join us in developing it](https://github.com/music-assistant/server)! + +### "All About That Bass" +

    Equalizer control & features

    + +

    PEQ pageMake your own EQ settings or import pre-made settings for your speaker

    + +When we released 2.0 there were basic bass and treble controls for devices, but with our new [configurable DSP](https://www.music-assistant.io/audiopipeline/) (Digital Signal Processor) you can now fine-tune your audio like never before. This includes input and output gain, along with a powerful [parametric equalizer](https://www.music-assistant.io/dsp/parametriceq/) that can be applied per player 📈. You can conveniently view the entire audio pipeline by clicking the quality indicator icon. + +

    Music Assistants next big hit

    + +Another useful feature added was a "[Don't stop the music](https://www.music-assistant.io/usage/#:~:text=Don%27t%20Stop%20The%20Music%20(DSTM))" mode that keeps music playing even once your queue finishes, playing similar songs from your library. Another way to keep the music playing is through lock screens and widget controls built into many popular operating systems, which can now control Music Assistant. + +### "Master of Puppets" +

    Home Assistant improvements

    + +Home Assistant was always designed to work seamlessly with Music Assistant, and it's only getting better. In the [Home Assistant 2024.12 release](/blog/2024/12/04/release-202412/#new-integrations), we gave the community a Christmas present--Music Assistant moved from HACS to being a native integration ([please migrate if you haven't yet](https://www.music-assistant.io/integration/migrate/)). + +Many people now add all their players to Music Assistant first and then integrate Music Assistant with Home Assistant, eliminating the need to add each device separately. The most recent release added the ability to outsource any player control, including volume or turning it on/off, to a Home Assistant entity. There are other benefits to using them together, like Music Assistant [resuming audio playback](https://www.music-assistant.io/integration/announcements/) after an announcement or using Assist to find and play a song ([with or without LLMs](https://github.com/music-assistant/voice-support)). + +### "D-D-Don't Don't Stop the Beat" +

    More stable streaming

    + +One of the biggest goals for every release is to improve streaming stability across all providers and players. With every release, we've been improving stability, and since our last post, we've had a big influx of users who have been finding and helping squash bugs. There have been nice improvements to almost every provider helping with stability, speed, and quality. Just in the next patch release 2.4.3, we've improved streaming performance on slower network connections. The goal is that the music never stops. + +## "Praise You" - 🙏 + +A huge thank you to everyone who contributed to this release---whether through code, testing, or feedback. Your support keeps Music Assistant evolving into the ultimate tool for managing your music, on your players. + +## "Drop It Like It's Hot" +

    Get Music Assistant 2.4 today!

    + +If you haven't updated yet, now's the time! And if you haven't used it yet, you can install Music Assistant as a Home Assistant Add-on, + +[!Open your Home Assistant instance and show the dashboard of an add-on.](https://my.home-assistant.io/redirect/supervisor_addon/?addon=d5369777_music_assistant) + +For more on getting started with Music Assistant, [read the documentation](https://www.music-assistant.io/installation/). + +Have feedback or want to contribute? Join our growing community on GitHub and Discord! + +Happy listening! diff --git a/source/_posts/2025-03-05-release-20253.markdown b/source/_posts/2025-03-05-release-20253.markdown new file mode 100644 index 00000000000..36a31435c1a --- /dev/null +++ b/source/_posts/2025-03-05-release-20253.markdown @@ -0,0 +1,930 @@ +--- +layout: post +title: "2025.3: View those headers!" +description: "Beautiful dashboard view headers, tons of tile card improvements and new features, better map clustering, Assist now streams responses, and integrating with SmartThings is now better than ever!" +date: 2025-03-05 00:01:00 +date_formatted: "March 5, 2025" +author: Franck Nijhof +author_twitter: frenck +comments: true +categories: + - Release-Notes + - Core +og_image: /images/blog/2025-03/social.jpg +--- + + + +Home Assistant 2025.3! 🎉 + +But! Before I dive into the release, let me quickly catch you up on things you +might have missed. There is a lot of cool stuff happening lately! + +We had a live stream about Assist: [**Voice chapter 9**](https://www.youtube.com/watch?v=k6VvzDSI8RU)! +Here we announced [**Speech-to-Phrase**](/blog/2025/02/13/voice-chapter-9-speech-to-phrase/#voice-for-the-masses), +a voice recognition technology that is blazing fast and super accurate, even +on a Raspberry Pi! 🚀 + +I'm also super stoked [about the announcement](/blog/2025/02/27/apollo-joins-wwha/) +that [**Apollo Automation**](https://apolloautomation.com/) has joined the +[**Works with Home Assistant**](https://partner.home-assistant.io) program 🥰 + +And our friends at [**Music Assistant**](https://www.music-assistant.io/) have +[**shipped their next big hit**](/blog/2025/03/05/music-assistants-next-big-hit/)! +With awesome new features like Spotify Connect, Assist optimization, +an equalizer, and podcast & audiobook support. 🎶 + +Great stuff, right? But this release today is also packed with amazing things! + +After a few releases [focusing on backups](/blog/2025/02/05/release-20252/), +we are back with a release **packed** with new features and improvements, +mostly **focusing on dashboards**! 🤩 + +The new abilities, the tile card's fine-tuning, and the dashboard view's new +headers are really cool; I can’t wait to see screenshots of your dashboards +with these new features! 📸 + +Enjoy the release! + +../Frenck + + + +- [Dashboard view headers](#dashboard-view-headers) +- [Tile cards](#tile-cards) + - [Making tile card interactions clearer](#making-tile-card-interactions-clearer) + - [Position tile card features](#position-tile-card-features) + - [New tile card features](#new-tile-card-features) + - [Switch toggle](#switch-toggle) + - [Counter actions](#counter-actions) + - [Tiny interaction improvements](#tiny-interaction-improvements) + - [Editor improvements](#editor-improvements) +- [Assist chat now has streaming responses](#assist-chat-now-has-streaming-responses) +- [Integrations](#integrations) + - [New integrations](#new-integrations) + - [Noteworthy improvements to existing integrations](#noteworthy-improvements-to-existing-integrations) + - [SmartThings](#smartthings) +- [Other noteworthy changes](#other-noteworthy-changes) +- [Iterating on the legends of graphs](#iterating-on-the-legends-of-graphs) +- [Grouping/clustering of trackables on the maps](#groupingclustering-of-trackables-on-the-maps) +- [Patch releases](#patch-releases) + - [2025.3.1 - March 7](#202531---march-7) + - [2025.3.2 - March 11](#202532---march-11) + - [2025.3.3 - March 14](#202533---march-14) + - [2025.3.4 - March 21](#202534---march-21) +- [Need help? Join the community!](#need-help-join-the-community) +- [Backward-incompatible changes](#backward-incompatible-changes) +- [All changes](#all-changes) + +## Dashboard view headers + +This release brings a whole new look with the ability to add headers to your +dashboards. This allows you to add a title and welcoming text to your dashboards +using Markdown and even templates. Additionally, this gives you a lot of space +for badges next to the header. + +As always, we’ve baked in a lot of customization, with the ability to align the +header in multiple different ways. It comes with a responsive layout by default, +but you can also set it to always be left-aligned or center-aligned. + +Screenshot showing the new header feature in the dashboard view. + +The badges can also be positioned below the text (default) or above the text. A +great visual menu makes it easy to choose how you want to organize your header. + +## Tile cards + +This release has made many improvements and fine touches to the tile card. It +is one of the most versatile cards in Home Assistant, +and we have made it even better! + +### Making tile card interactions clearer + +There is no doubt the tile card can do a lot, but ever since its creation, +it has had a little flaw that you might have run into yourself… + +How would you know if tapping the icon on the tile card would trigger +an action or whether it would just display more information? We have addressed +this with some subtle visual language in this release! + +Screenshot showing tile cards with and without direct actions on their icons. The ones that do have a direct action have a circular background, others don't. + +When tapping the icon on the tile card directly performs an action, +like for example, turning on a light, the icon will have a circular background +around it. In all other cases, the little circle will not be displayed. + +Now you know! 👍 + +### Position tile card features + +Since [we added support for resizing cards](/blog/2024/07/03/release-20247/#resize-the-cards-on-your-dashboard), +we gained the ability to make very wide tile cards. These cards have a lot of +empty space surrounding them, which can be helpful at times. + +But what if you could do something useful with that space? Now you can! +All features of a tile card can now be positioned inline in the tile card! + +Screenshot showcasing the new inline tile card features (versus the existing bottom feature + +This brings a completely new look and feel, which we are sure you will love! +From the settings, you can add a feature, like a brightness slider, and position +it either below (bottom) or to the right side of the icon (inline). + +{% note %} +Only the first feature can be positioned inline; the rest will not be displayed. +{% endnote %} + +### New tile card features + +This release also ships with two new tile card features that can be +added to your entities to provide new controls. [@jpbede] contributed these, +so a big shout out to him! + +[@jpbede]: https://github.com/jpbede + +#### Switch toggle + +The first addition is one that is just surprising we didn't have it before: +A switch toggle! This allows you to toggle a switch entity directly from the +tile card. + +Screenshot showing the new tile card feature for switch entities. + +#### Counter actions + +The second addition is a counter toggle. This allows you to add a button to +increase, decrease, or reset a counter entity directly from the tile card. + +Screenshot showing the new tile card feature for counter helper entities. + +### Tiny interaction improvements + +More tweaks to the tile card have been made to improve their interaction +experience. For example, we now have nice little animations when you hover over +the tile card, making it more apparent that it is interactive. Still, when you +tap the tile card, it will show a little animation to indicate that the +tap was registered. + +
    +Screenrecording showing the new tiny micro interactions added to the tile card and a small demo of using keyboard navigation +
    + +Another nice addition is that the tile card can now interact with your keyboard! +Tab and shift + tab your way across the screen like the keyboard warrior you are. + +### Editor improvements + +Not just the tile card itself has been improved, but also the editor for +the tile card has been improved. It is now clearer and easier to use. + +The new control gives you a better overview of what the option will do for +the tile card. + +Screenshot showing the brand new visual card editor that make it more visually clear what options do. + +## Assist chat now has streaming responses + +If you have hooked up an LLM, like ChatGPT, to your Assist as +a conversation agent, it will now livestream the responses to you when +you are text chatting with it! + +When experimenting with larger models, or on slower hardware, LLM’s can feel +sluggish. They only respond once the entire reply is generated, which can take +frustratingly long for lengthy responses (you’ll be waiting a while if you ask +it to tell you an epic fairy tale). + +We've added support for LLMs to stream their response to the text chat, allowing you +to start reading while the response is being generated. A bonus side effect is +that commands are now also faster: they will be executed as soon as they come +in, without waiting for the rest of the message to be complete. + + + +There was quite a lot more to tell around Assist and the new voice features; +in case you missed it, you can read all about it in this blog post: + +📰 [Speech-to-Phrase brings voice home - Voice chapter 9](/blog/2025/02/13/voice-chapter-9-speech-to-phrase/) + +## 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: + +- **[Azure Storage]**, added by [@zweckj] + Use Azure Storage as a target location for your backups. +- **[IOmeter]**, added by [@MaestroOnICe] + Read out your [IOmeter device] data locally. +- **[PG LAB Electronics]**, added by [@pglab-electronics] + Control your [PG LAB Electronics devices] from Home Assistant. +- **[SensorPush Cloud]**, added by [@sstallion] + Integrate your [SensorPush devices] with Home Assistant, using their + cloud service. +- **[SNOO]**, added by [@Lash-L] + Get the state of your [SNOO Smart Sleeper Bassinet] into Home Assistant. +- **[WebDAV]**, added by [@jpbede] + Use any WebDAV compatible service as a target location for your backups. + +[@jpbede]: https://github.com/jpbede +[@Lash-L]: https://github.com/Lash-L +[@MaestroOnICe]: https://github.com/MaestroOnICe +[@pglab-electronics]: https://githb.com/pglab-electronics +[@sstallion]: https://github.com/sstallion +[@zweckj]: https://github.com/zweckj +[Azure Storage]: /integrations/azure_storage +[IOmeter device]: https://iometer.de/produkt/ +[IOmeter]: /integrations/iometer +[PG LAB Electronics devices]: https://www.pglab.dev/ +[PG LAB Electronics]: /integrations/pglab +[SensorPush Cloud]: /integrations/sensorpush_cloud +[SensorPush devices]: https://www.sensorpush.com/ +[SNOO Smart Sleeper Bassinet]: https://www.happiestbaby.com/ +[SNOO]: /integrations/snoo +[WebDAV]: /integrations/webdav + +This release also has new virtual integrations. Virtual integrations +are stubs that are handled by other (existing) integrations to help with +findability. These ones are new: + +- **[Burbank Water and Power (BWP)]**, provided by [Opower], added by [@tronikos] +- **[Heicko]**, provided by [Motionblinds], added by [@starkillerOG] +- **[LINAK]**, provided by [Idasen Desk], added by [@abmantis] +- **[Linx]**, provided by [Motionblinds], added by [@starkillerOG] +- **[Smart Rollos]**, provided by [Motionblinds], added by [@starkillerOG] +- **[Ublockout]**, provided by [Motionblinds], added by [@starkillerOG] + +[@abmantis]: https://github.com/abmantis +[@starkillerOG]: https://github.com/starkillerOG +[@tronikos]: https://github.com/tronikos +[Burbank Water and Power (BWP)]: /integrations/burbank_water_and_power +[Heicko]: /integrations/heicko +[Idasen Desk]: /integrations/idasen_desk +[LINAK]: /integrations/linak +[Linx]: /integrations/linx +[Motionblinds]: /integrations/motionblinds +[Opower]: /integrations/opower +[Smart Rollos]: /integrations/smart_rollos +[Ublockout]: /integrations/ublockout + +### 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: + +- [@MartinHjelmare] and [@Diegorro98] have been putting in a lot of effort to bring + the [Home Connect integration] to the next level. Nice! +- Got an [ESPHome] device that is acting up? [@bdraco] has added a new option + to the integration to let Home Assistant shadowlog the device logs. + Helpful! +- The [OpenAI conversation integration] now supports the `o1`, `o1-preview`, + `o1-mini`, and `o3-mini` reasoning models. Thanks, [@Shulyaka]! +- The [Shelly integration] now supports the 4th generation of the Shelly Flood + sensors and added support for Shelly script events entities. + Thanks, [@chemelli74] and [@wjtje]! +- Support for the [Switchbot Remote] has been added to the + [Switchbot integration]. Thanks, [@awahlig]! +- UniFi version 9 introduced zone-based rules. These are now supported by + [Unifi integration]. Thanks, [@Samywamy10]! +- [@Galorhallen] has added support for effects in [Govee lights]. Nice! + +[@awahlig]: https://github.com/awahlig +[@bdraco]: https://github.com/bdraco +[@chemelli74]: https://github.com/chemelli74 +[@Diegorro98]: https://github.com/Diegorro98 +[@Galorhallen]: https://github.com/Galorhallen +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@Samywamy10]: https://github.com/Samywamy10 +[@Shulyaka]: https://github.com/Shulyaka +[@wjtje]: https://github.com/wjtje +[ESPhome]: /integrations/esphome +[Govee lights]: /integrations/govee_light_local +[Home Connect integration]: /integrations/home_connect +[OpenAI conversation integration]: /integrations/openai_conversation +[Switchbot integration]: /integrations/switchbot +[Switchbot Remote]: https://eu.switch-bot.com/products/switchbot-Remote +[UniFi integration]: /integrations/unifi +[Shelly integration]: /integrations/shelly + +### SmartThings + +The [SmartThings] integration has been completely rewritten! 🎉 In December, +SmartThings shut down the old authentication method, but thanks to +SmartThings' hard work and close collaboration with us, [@joostlek] was able to +bring back the integration—better than ever. + +No more setting up routing, exposing ports, or creating developer accounts with +access tokens—**just log in with your Samsung account**, and you’re good to go! + +And there’s more! Push updates now work without exposing your instance to the +internet, making the experience faster, seamless, and more secure! 🚀 + +A huge shoutout to our amazing community, who played a key role in this effort! +💙 When [@joostlek] shared a guide on gathering test data, the community +stepped up—sending in valuable test data that helped fine-tune the integration. +This collaboration truly made a difference! + +[@joostlek]: https://github.com/joostlek +[SmartThings]: /integrations/smartthings + +## Other noteworthy changes + +There are many more improvements in this release; here are some of the other +noteworthy changes this release: + +- Ever upgraded Home Assistant and needed to do a hard refresh in your + browser to make it work again? We have been able to reduce the cases in + which this happens! Thanks, [@bramkragten]! +- [@balloob] made a small change with a big impact. When you set up a new + integration for a new device, Home Assistant will now redirect you to the + device page after setting it up. Nice! +- There is now an option to add an extra margin to the top of a section view. + Thanks, [@piitaya]! +- The add/edit area dialog has been improved and compacted. They are + much more pleasant to use now. Thanks, [@jpbede]! +- We now have a device class for the wind direction sensors! Thanks, [@edenhaus]! +- [@jschlyter] has added the energy distance device class for sensors, + which supports the following units: `kWh/100mi`, `kWh/100km`, and `mi/kWh`, + including conversion between them. Awesome! +- Media player entities that support browsing media now have a new action + available to [browse media as an action with a response]. Thanks, [@PeteRager]! +- [@rikroe] has added an action to [retrieve the configuration of a schedule + helper]. Thanks! + +[@balloob]: https://github.com/balloob +[@bramkragten]: https://github.com/bramkragten +[@edenhaus]: https://github.com/edenhaus +[@jpbede]: https://github.com/jpbede +[@jschlyter]: https://github.com/jschlyter +[@PeteRager]: https:/github.com/PeteRager +[@piitaya]: https://github.com/piitaya +[@rikroe]: https://github.com/rikroe +[browse media as an action with a response]: /integrations/media_player#action-media_playerbrowse_media +[retrieve the configuration of a schedule helper]: /integrations/schedule#action-scheduleget_schedule + +## Iterating on the legends of graphs + +Last release, we made [quite a big change to the charts](/blog/2025/02/05/release-20252/#preparing-our-graphs-for-the-future) +by replacing the software we use to make these graphs in Home Assistant. Things +changed behind the scenes, but our aim to start was to make it look +and feel similar. + +However, we received a lot of feedback from the community that the legends shown +on the new graphs were suboptimal. Our UX and frontend teams have been working +hard to improve this situation and make the new graph legends more similar +to the old ones. + +
    +A screen recording showing expanding and collapsing the legend +
    + +By default, we show the legend below the graph and show as many data points +as possible. If there are too many, they will be displayed on demand using the +little ellipsis button. + +When using these cards on your dashboard, if you want to always show the full +legend, a new option will allow you to keep it fully visible. + +You can now also zoom in and out, by double clicking on a graph. If you want +more control over the range you want to view in your graph, you can press the +ctrl/cmd key and then select the range on the graph you want to zoom in on. + +## Grouping/clustering of trackables on the maps + +The map card is perfect for visualizing your entities’ locations, but when too +many cluster together in the same spot, it can get a bit cluttered. + +To tackle this, we’ve introduced marker clustering, which groups nearby entities +together, making it easier to see them at a glance. When zooming in, the markers +‘spider’ out, showing individual entity locations with a connecting line to +their original positions. You can temporarily disable clustering with a +simple toggle. + +Thanks [@jpbede] and [@marcinbauer85] for this awesome improvement! + +
    +The map now nicely clusters the items on the same location. This animation shows the ability to expand the cluster of items. +
    + +[@jpbede]: https://github.com/jpbede +[@marcinbauer85]: https://github.com/marcinbauer85 + +## Patch releases + +We will also release patch releases for Home Assistant 2025.3 in March. +These patch releases only contain bug fixes. Our goal is to release a patch +release every Friday. + +### 2025.3.1 - March 7 + +- Check support for demand load control in SmartThings AC ([@Ishima] - [#139616]) +- Fix Unit of Measurement for Squeezebox duration sensor entity on LMS service ([@peteS-UK] - [#139861]) +- Trim the Schema allowed keys to match the Public Gemini API docs. ([@IvanLH] - [#139876]) +- Bump thermobeacon-ble to 0.8.1 ([@bdraco] - [#139919]) +- Deduplicate climate modes in SmartThings ([@joostlek] - [#139930]) +- Check if the unit of measurement is valid before creating the entity ([@jbouwh] - [#139932]) +- Bump pysmartthings to 2.6.1 ([@joostlek] - [#139936]) +- Bump aiowebdav2 to 0.4.0 ([@jpbede] - [#139938]) +- Add config entry level diagnostics to SmartThings ([@joostlek] - [#139939]) +- Set content length when uploading files to WebDAV ([@jpbede] - [#139950]) +- Bump to python-snoo 0.6.1 ([@Lash-L] - [#139954]) +- Fix SmartThings fan ([@joostlek] - [#139962]) +- Update frontend to 20250306.0 ([@bramkragten] - [#139965]) +- Fix SmartThings dust sensor UoM ([@joostlek] - [#139977]) +- Bump nexia to 2.2.2 ([@bdraco] - [#139986]) +- Bump aiowebdav2 to 0.4.1 ([@jpbede] - [#139988]) +- Correctly retrieve only loaded Google Generative AI config_entries ([@IvanLH] - [#139999]) +- Fix regression to evohome debug logging ([@zxdavb] - [#140000]) +- Check operation state on Home Connect program sensor update ([@Diegorro98] - [#140011]) +- Bump aiohomeconnect to 0.16.3 ([@MartinHjelmare] - [#140014]) +- Fix powerwall 0% in Tessie and Tesla Fleet ([@Bre77] - [#140017]) +- Fix shift state default in Teslemetry and Tessie ([@Bre77] - [#140018]) +- Add description for HomematicIP HCU1 in homematicip_cloud setup config flow ([@hahn-th] - [#140025]) +- Fix evohome to gracefully handle null schedules ([@zxdavb] - [#140036]) +- Fix SmartThings disabling working capabilities ([@joostlek] - [#140039]) +- Fix SmartThings thermostat climate check ([@joostlek] - [#140046]) +- Bump pysmartthings to 2.7.0 ([@joostlek] - [#140047]) +- Only keep valid powerConsumptionReports in SmartThings ([@joostlek] - [#140049]) +- Bump py-synologydsm-api to 2.7.1 ([@mib1185] - [#140052]) +- Restore SmartThings button event ([@joostlek] - [#140044]) + +[#139616]: https://github.com/home-assistant/core/pull/139616 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#139861]: https://github.com/home-assistant/core/pull/139861 +[#139876]: https://github.com/home-assistant/core/pull/139876 +[#139919]: https://github.com/home-assistant/core/pull/139919 +[#139930]: https://github.com/home-assistant/core/pull/139930 +[#139932]: https://github.com/home-assistant/core/pull/139932 +[#139936]: https://github.com/home-assistant/core/pull/139936 +[#139938]: https://github.com/home-assistant/core/pull/139938 +[#139939]: https://github.com/home-assistant/core/pull/139939 +[#139950]: https://github.com/home-assistant/core/pull/139950 +[#139954]: https://github.com/home-assistant/core/pull/139954 +[#139962]: https://github.com/home-assistant/core/pull/139962 +[#139965]: https://github.com/home-assistant/core/pull/139965 +[#139977]: https://github.com/home-assistant/core/pull/139977 +[#139986]: https://github.com/home-assistant/core/pull/139986 +[#139988]: https://github.com/home-assistant/core/pull/139988 +[#139999]: https://github.com/home-assistant/core/pull/139999 +[#140000]: https://github.com/home-assistant/core/pull/140000 +[#140011]: https://github.com/home-assistant/core/pull/140011 +[#140014]: https://github.com/home-assistant/core/pull/140014 +[#140017]: https://github.com/home-assistant/core/pull/140017 +[#140018]: https://github.com/home-assistant/core/pull/140018 +[#140025]: https://github.com/home-assistant/core/pull/140025 +[#140036]: https://github.com/home-assistant/core/pull/140036 +[#140039]: https://github.com/home-assistant/core/pull/140039 +[#140044]: https://github.com/home-assistant/core/pull/140044 +[#140046]: https://github.com/home-assistant/core/pull/140046 +[#140047]: https://github.com/home-assistant/core/pull/140047 +[#140049]: https://github.com/home-assistant/core/pull/140049 +[#140052]: https://github.com/home-assistant/core/pull/140052 +[@Bre77]: https://github.com/Bre77 +[@Diegorro98]: https://github.com/Diegorro98 +[@Ishima]: https://github.com/Ishima +[@IvanLH]: https://github.com/IvanLH +[@Lash-L]: https://github.com/Lash-L +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@frenck]: https://github.com/frenck +[@hahn-th]: https://github.com/hahn-th +[@jbouwh]: https://github.com/jbouwh +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@mib1185]: https://github.com/mib1185 +[@peteS-UK]: https://github.com/peteS-UK +[@zxdavb]: https://github.com/zxdavb + +### 2025.3.2 - March 11 + +- Don't allow creating backups if Home Assistant is not running ([@emontnemery] - [#139499]) +- Bump govee_ble to 0.43.1 ([@moosilauke18] - [#139862]) +- Label emergency heat switch ([@jrhillery] - [#139872]) +- Bump sense-energy lib to 0.13.7 ([@kbickar] - [#140068]) +- Update jinja to 3.1.6 ([@frenck] - [#140069]) +- Update evohome-async to 1.0.3 ([@zxdavb] - [#140083]) +- Fix HEOS discovery error when previously ignored ([@andrewsayre] - [#140091]) +- Map prewash job state in SmartThings ([@joostlek] - [#140097]) +- Check support for thermostat operating state in SmartThings ([@joostlek] - [#140103]) +- Handle None options in SmartThings ([@joostlek] - [#140110]) +- Fix MQTT JSON light not reporting color temp status if color is not supported ([@jbouwh] - [#140113]) +- Fix HEOS user initiated setup when discovery is waiting confirmation ([@andrewsayre] - [#140119]) +- Support null supported Thermostat modes in SmartThings ([@joostlek] - [#140101]) +- Set device class for Oven Completion time in SmartThings ([@joostlek] - [#140139]) +- Revert "Check if the unit of measurement is valid before creating the entity" ([@jbouwh] - [#140155]) +- Fix the order of the group members attribute of the Music Assistant integration ([@msm595] - [#140204]) +- Fix events without user in Bring integration ([@tr4nt0r] - [#140213]) +- Log broad exception in Electricity Maps config flow ([@jpbede] - [#140219]) +- Bump evohome-async to 1.0.4 to fix #140194 ([@zxdavb] - [#140230]) +- Refresh Home Connect token during config entry setup ([@Diegorro98] - [#140233]) +- Add 900 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140234]) +- Fix todo tool broken with Gemini 2.0 models. ([@Lash-L] - [#140246]) +- Fix version not always available in onewire ([@epenet] - [#140260]) +- Fix `client_id` not generated when connecting to the MQTT broker ([@jbouwh] - [#140264]) +- Bump velbusaio to 2025.3.0 ([@cereal2nd] - [#140267]) +- Fix dryer operating state in SmartThings ([@joostlek] - [#140277]) +- FGLair : Upgrade to ayla-iot-unofficial 1.4.7 ([@crevetor] - [#140296]) +- Bump pyheos to v1.0.3 ([@andrewsayre] - [#140310]) +- Bump ZHA to 0.0.52 ([@puddly] - [#140325]) +- Bump pydrawise to 2025.3.0 ([@dknowles2] - [#140330]) +- Bump teslemetry-stream ([@Bre77] - [#140335]) +- Fix no temperature unit in SmartThings ([@joostlek] - [#140363]) +- Fix double space quoting in WebDAV ([@jpbede] - [#140364]) +- Bump python-roborock to 2.12.2 ([@Lash-L] - [#140368]) +- Handle incomplete power consumption reports in SmartThings ([@joostlek] - [#140370]) +- Fix browsing Audible Favorites in Sonos ([@PeteRager] - [#140378]) +- Make sure SmartThings light can deal with unknown states ([@joostlek] - [#140190]) +- Delete subscription on shutdown of SmartThings ([@joostlek] - [#140135]) + +[#139499]: https://github.com/home-assistant/core/pull/139499 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#139862]: https://github.com/home-assistant/core/pull/139862 +[#139872]: https://github.com/home-assistant/core/pull/139872 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140068]: https://github.com/home-assistant/core/pull/140068 +[#140069]: https://github.com/home-assistant/core/pull/140069 +[#140083]: https://github.com/home-assistant/core/pull/140083 +[#140091]: https://github.com/home-assistant/core/pull/140091 +[#140097]: https://github.com/home-assistant/core/pull/140097 +[#140101]: https://github.com/home-assistant/core/pull/140101 +[#140103]: https://github.com/home-assistant/core/pull/140103 +[#140110]: https://github.com/home-assistant/core/pull/140110 +[#140113]: https://github.com/home-assistant/core/pull/140113 +[#140119]: https://github.com/home-assistant/core/pull/140119 +[#140135]: https://github.com/home-assistant/core/pull/140135 +[#140139]: https://github.com/home-assistant/core/pull/140139 +[#140155]: https://github.com/home-assistant/core/pull/140155 +[#140190]: https://github.com/home-assistant/core/pull/140190 +[#140204]: https://github.com/home-assistant/core/pull/140204 +[#140213]: https://github.com/home-assistant/core/pull/140213 +[#140219]: https://github.com/home-assistant/core/pull/140219 +[#140230]: https://github.com/home-assistant/core/pull/140230 +[#140233]: https://github.com/home-assistant/core/pull/140233 +[#140234]: https://github.com/home-assistant/core/pull/140234 +[#140246]: https://github.com/home-assistant/core/pull/140246 +[#140260]: https://github.com/home-assistant/core/pull/140260 +[#140264]: https://github.com/home-assistant/core/pull/140264 +[#140267]: https://github.com/home-assistant/core/pull/140267 +[#140277]: https://github.com/home-assistant/core/pull/140277 +[#140296]: https://github.com/home-assistant/core/pull/140296 +[#140310]: https://github.com/home-assistant/core/pull/140310 +[#140325]: https://github.com/home-assistant/core/pull/140325 +[#140330]: https://github.com/home-assistant/core/pull/140330 +[#140335]: https://github.com/home-assistant/core/pull/140335 +[#140363]: https://github.com/home-assistant/core/pull/140363 +[#140364]: https://github.com/home-assistant/core/pull/140364 +[#140368]: https://github.com/home-assistant/core/pull/140368 +[#140370]: https://github.com/home-assistant/core/pull/140370 +[#140378]: https://github.com/home-assistant/core/pull/140378 +[@Bre77]: https://github.com/Bre77 +[@Diegorro98]: https://github.com/Diegorro98 +[@Lash-L]: https://github.com/Lash-L +[@PeteRager]: https://github.com/PeteRager +[@andrewsayre]: https://github.com/andrewsayre +[@cereal2nd]: https://github.com/cereal2nd +[@crevetor]: https://github.com/crevetor +[@dknowles2]: https://github.com/dknowles2 +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@frenck]: https://github.com/frenck +[@jbouwh]: https://github.com/jbouwh +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@jrhillery]: https://github.com/jrhillery +[@kbickar]: https://github.com/kbickar +[@moosilauke18]: https://github.com/moosilauke18 +[@msm595]: https://github.com/msm595 +[@puddly]: https://github.com/puddly +[@tr4nt0r]: https://github.com/tr4nt0r +[@zxdavb]: https://github.com/zxdavb + +### 2025.3.3 - March 14 + +- Fix bug with all Roborock maps being set to the wrong map when empty ([@Lash-L] - [#138493]) +- Bump pysuezV2 to 2.0.4 ([@jb101010-2] - [#139824]) +- Bump upb-lib to 0.6.1 ([@gwww] - [#140212]) +- Use only IPv4 for zeroconf in bluesound integration ([@LouisChrist] - [#140226]) +- Only do WebDAV path migration when path differs ([@jpbede] - [#140402]) +- Bump velbusaio to 2025.3.1 ([@cereal2nd] - [#140443]) +- Mark value in number.set_value action as required ([@joostlek] - [#140445]) +- Bump Tesla Fleet API to 0.9.13 ([@Bre77] - [#140485]) +- Update xknxproject to 3.8.2 ([@farmio] - [#140499]) +- Fix Shelly diagnostics for devices without WebSocket Outbound support ([@bieniu] - [#140501]) +- Fix windowShadeLevel capability in SmartThings ([@joostlek] - [#140552]) +- Set unit of measurement for SmartThings oven setpoint ([@joostlek] - [#140560]) +- Fix missing UnitOfPower.MILLIWATT in sensor and number allowed units ([@ashionky] - [#140567]) + +[#138493]: https://github.com/home-assistant/core/pull/138493 +[#139824]: https://github.com/home-assistant/core/pull/139824 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140212]: https://github.com/home-assistant/core/pull/140212 +[#140226]: https://github.com/home-assistant/core/pull/140226 +[#140392]: https://github.com/home-assistant/core/pull/140392 +[#140402]: https://github.com/home-assistant/core/pull/140402 +[#140443]: https://github.com/home-assistant/core/pull/140443 +[#140445]: https://github.com/home-assistant/core/pull/140445 +[#140485]: https://github.com/home-assistant/core/pull/140485 +[#140499]: https://github.com/home-assistant/core/pull/140499 +[#140501]: https://github.com/home-assistant/core/pull/140501 +[#140552]: https://github.com/home-assistant/core/pull/140552 +[#140560]: https://github.com/home-assistant/core/pull/140560 +[#140567]: https://github.com/home-assistant/core/pull/140567 +[@Bre77]: https://github.com/Bre77 +[@Lash-L]: https://github.com/Lash-L +[@LouisChrist]: https://github.com/LouisChrist +[@ashionky]: https://github.com/ashionky +[@bieniu]: https://github.com/bieniu +[@cereal2nd]: https://github.com/cereal2nd +[@farmio]: https://github.com/farmio +[@frenck]: https://github.com/frenck +[@gwww]: https://github.com/gwww +[@jb101010-2]: https://github.com/jb101010-2 +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede + +### 2025.3.4 - March 21 + +- Fix initial fetch of Home Connect appliance data to handle API rate limit errors ([@Diegorro98] - [#139379]) +- Handle API rate limit error on Home Connect entities fetch ([@Diegorro98] - [#139384]) +- Album art not available for Sonos media library favorites ([@PeteRager] - [#140557]) +- Change max ICP value to fixed value for Wallbox Integration ([@hesselonline] - [#140592]) +- Add 700 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140607]) +- Handle non documented options at Home Connect select entities ([@Diegorro98] - [#140608]) +- Fix optional password in Velbus config flow ([@cereal2nd] - [#140615]) +- Make Oven setpoint follow temperature UoM in SmartThings ([@joostlek] - [#140666]) +- Fix Elk-M1 missing TLS 1.2 check ([@gwww] - [#140672]) +- Bump PySwitchBot to 0.57.1 ([@bdraco] - [#140681]) +- Check Celsius in SmartThings oven setpoint ([@joostlek] - [#140687]) +- Fix broken core integration Smart Meter Texas by switching it to use HA's SSL Context ([@adamfeldman] - [#140694]) +- Don't reload onedrive on options flow ([@zweckj] - [#140712]) +- Bump pySmartThings to 2.7.4 ([@joostlek] - [#140720]) +- Fix SmartThings ACs without supported AC modes ([@joostlek] - [#140744]) +- Bump pylamarzocco to 1.4.9 ([@zweckj] - [#140916]) +- Log SmartThings subscription error on exception ([@joostlek] - [#140939]) +- Ensure file is correctly uploaded by the GenAI SDK ([@IvanLH] - [#140969]) +- Reolink fix playback headers ([@starkillerOG] - [#141015]) +- Fix some Home Connect options keys ([@Diegorro98] - [#141023]) +- Bump ZHA to 0.0.53 ([@puddly] - [#141025]) +- Bump Python-Snoo to 0.6.3 ([@Lash-L] - [#140628]) +- Bump python-snoo to 0.6.4 ([@Lash-L] - [#141030]) +- Improve Home Connect appliances test fixture ([@MartinHjelmare] - [#139787]) + +[#139379]: https://github.com/home-assistant/core/pull/139379 +[#139384]: https://github.com/home-assistant/core/pull/139384 +[#139787]: https://github.com/home-assistant/core/pull/139787 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140392]: https://github.com/home-assistant/core/pull/140392 +[#140557]: https://github.com/home-assistant/core/pull/140557 +[#140583]: https://github.com/home-assistant/core/pull/140583 +[#140592]: https://github.com/home-assistant/core/pull/140592 +[#140607]: https://github.com/home-assistant/core/pull/140607 +[#140608]: https://github.com/home-assistant/core/pull/140608 +[#140615]: https://github.com/home-assistant/core/pull/140615 +[#140628]: https://github.com/home-assistant/core/pull/140628 +[#140666]: https://github.com/home-assistant/core/pull/140666 +[#140672]: https://github.com/home-assistant/core/pull/140672 +[#140681]: https://github.com/home-assistant/core/pull/140681 +[#140687]: https://github.com/home-assistant/core/pull/140687 +[#140694]: https://github.com/home-assistant/core/pull/140694 +[#140712]: https://github.com/home-assistant/core/pull/140712 +[#140720]: https://github.com/home-assistant/core/pull/140720 +[#140744]: https://github.com/home-assistant/core/pull/140744 +[#140916]: https://github.com/home-assistant/core/pull/140916 +[#140939]: https://github.com/home-assistant/core/pull/140939 +[#140969]: https://github.com/home-assistant/core/pull/140969 +[#141015]: https://github.com/home-assistant/core/pull/141015 +[#141023]: https://github.com/home-assistant/core/pull/141023 +[#141025]: https://github.com/home-assistant/core/pull/141025 +[#141030]: https://github.com/home-assistant/core/pull/141030 +[@Diegorro98]: https://github.com/Diegorro98 +[@IvanLH]: https://github.com/IvanLH +[@Lash-L]: https://github.com/Lash-L +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@PeteRager]: https://github.com/PeteRager +[@adamfeldman]: https://github.com/adamfeldman +[@bdraco]: https://github.com/bdraco +[@cereal2nd]: https://github.com/cereal2nd +[@frenck]: https://github.com/frenck +[@gwww]: https://github.com/gwww +[@hesselonline]: https://github.com/hesselonline +[@joostlek]: https://github.com/joostlek +[@puddly]: https://github.com/puddly +[@starkillerOG]: https://github.com/starkillerOG +[@zweckj]: https://github.com/zweckj + +## 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 "Automations & scripts" %} + +The `wait` variable and variables defined by a `response_variable` set in an +inner scope of a script or automation now propagate to outer scopes also if +a `variables` action is present in the inner scope. + +Furthermore, variables defined by a `response_variable` now also propagate +out from `parallel` sequences. Scripts and automations which relied on the +older (buggy) behavior might need to be adjusted. + +([@arturpragacz] - [#138883]) + +[@arturpragacz]: https://github.com/jrieger +[#138883]: https://github.com/home-assistant/core/pull/138883 + +{% enddetails %} + +{% details "GPSD" %} + +All state attributes of the main sensor were replaced with a dedicated sensor +Home Assistant in 2024.9. The deprecated attributes have now been removed. + +([@jrieger] - [#137600]) ([documentation](/integrations/gpsd)) + +[@jrieger]: https://github.com/jrieger +[#137600]: https://github.com/home-assistant/core/pull/137600 + +{% enddetails %} + +{% details "Home Connect" %} + +Some programs and program switches (which are being deprecated) and program +select entities may not be exposed anymore by the integration as they are +missing an `aiohomeconnect` program key enumeration ([file](https://github.com/MartinHjelmare/aiohomeconnect/blob/ccfbf802884aa781eef481da92e6bccd2e6de733/src/aiohomeconnect/model/program.py#L213C1-L507C6)). +You can get the diagnostics from the configuration entry or the device and open +an issue or submit a PR with the generated diagnostics file on the +[`aiohomeconnect` repository](https://github.com/MartinHjelmare/aiohomeconnect) +to suggest the missing program(s). + +([@Diegorro98] - [#136116]) ([documentation](/integrations/home_connect)) + +[@Diegorro98]: https://github.com/Diegorro98 +[#136116]: https://github.com/home-assistant/core/pull/136116 + +--- + +Using program and option keys that aren't in the API documentation in Home +Connect actions will no longer work. To be able to use undocumented program or +option keys, open an issue or submit a pull request with the required keys at +[MartinHjelmare/aiohomeconnect](https://github.com/MartinHjelmare/aiohomeconnect). + +([@Diegorro98] - [#137027]) ([documentation](/integrations/home_connect)) + +[@Diegorro98]: https://github.com/Diegorro98 +[#137027]: https://github.com/home-assistant/core/pull/137027 + +--- + +Multiple Home Connect config entries will not be allowed to be configured. For +regular users where all appliances in the home are connected to the same Home +Connect account, there should not be any reason to have more than one config +entry since all appliances in the home will be connected to the same account +and config entry. + +([@Diegorro98] - [#137088]) ([documentation](/integrations/home_connect)) + +[@Diegorro98]: https://github.com/Diegorro98 +[#137088]: https://github.com/home-assistant/core/pull/137088 + +{% enddetails %} + +{% details "MQTT" %} + + Legacy `color_mode` support for MQTT JSON lights has been removed. The support + was deprecated in HA Core 2024.4. + +Users with a YAML setup have been instructed to update their configuration in +`configuration.yaml` via repair issue flow. Deprecation issues with MQTT JSON +lights set up through discovery were communicated via warnings in the logs. +Using the removed parameters in discovery will not break the configuration but +will still log a warning. + +([@jbouwh] - [#136996]) ([documentation](/integrations/mqtt)) + +[@jbouwh]: https://github.com/jbouwh +[#136996]: https://github.com/home-assistant/core/pull/136996 + +{% enddetails %} + +{% details "Proximity" %} + +The distance is now measured to the edge of the monitored zones (it takes the +radius into account), instead of to the center of the zone as before. This leads +to slightly different expected distance values, which you may have to adjust +accordingly in your existing automations. + +([@Spcemarine] - [#138819]) ([documentation](/integrations/proximity)) + +[@Spcemarine]: https://github.com/Spcemarine +[#138819]: https://github.com/home-assistant/core/pull/138819 + +{% enddetails %} + +{% details "SmartThings" %} + +The energy and power sensors have been removed for every device that has a +switch. They rarely worked because there were no energy or power +capabilities available to get data from. If you do have the capabilities, +it will still work for you. + +([@joostlek] - [#138313]) ([documentation](/integrations/smartthings)) + +--- + +There are a lot of states that have been renamed; this might need an update in +your automations or other configurations. + +- Set options for dishwasher job state sensor in SmartThings ([#139349]) +- Add translatable states to SmartThings media source input ([#139353]) +- Add translatable states to SmartThings media playback ([#139354]) +- Add translatable states to oven mode in SmartThings ([#139356]) +- Add translatable states to oven job state in SmartThings ([#139361]) +- Add translatable states to robot cleaner movement in SmartThings ([#139363]) +- Add translatable states to robot cleaner turbo mode in SmartThings ([#139364]) +- Add translatable states to washer job state in SmartThings ([#139368]) +- Add translatable states to dryer job state in SmartThings ([#139370]) + + +[@joostlek]: https://github.com/joostlek +[#138313]: https://github.com/home-assistant/core/pull/138313 +[#139349]: https://github.com/home-assistant/core/pull/139349 +[#139353]: https://github.com/home-assistant/core/pull/139353 +[#139354]: https://github.com/home-assistant/core/pull/139354 +[#139356]: https://github.com/home-assistant/core/pull/139356 +[#139361]: https://github.com/home-assistant/core/pull/139361 +[#139363]: https://github.com/home-assistant/core/pull/139363 +[#139364]: https://github.com/home-assistant/core/pull/139364 +[#139368]: https://github.com/home-assistant/core/pull/139368 +[#139370]: https://github.com/home-assistant/core/pull/139370 + +{% enddetails %} + +{% details "Synology DSM" %} + +The scan interval option has been removed, and the default of 15 minutes is +used. If needed, there is an integration-independent and +[common way](/common-tasks/general/#defining-a-custom-polling-interval) +to set a custom polling interval. + +([@mib1185] - [#138490]) ([documentation](/integrations/synology_dsm)) + +[@mib1185]: https://github.com/mib1185 +[#138490]: https://github.com/home-assistant/core/pull/138490 + +{% enddetails %} + +{% details "TechnoVE" %} + +The status sensor state `high_charge_period` was renamed to `high_tariff_period`. + +([@Moustachauve] - [#139314]) ([documentation](/integrations/technove)) + +[@Moustachauve]: https://github.com/Moustachauve +[#139314]: https://github.com/home-assistant/core/pull/139314 + +{% 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 changes are the most notable for this release: + +- [Backup agents](https://developers.home-assistant.io/blog/2025/02/17/backup-agents) +- [Changed config entry state transitions](https://developers.home-assistant.io/blog/2025/02/19/new-config-entry-states) +- [Changes to the BackupAgent API](https://developers.home-assistant.io/blog/2025/03/04/backup-agent-api-changes) +- [Energy by distance units](https://developers.home-assistant.io/blog/2025/01/31/energy-distance-units) +- [New checks for config flow unique ID](https://developers.home-assistant.io/blog/2025/03/01/config-flow-unique-id/) +- [Relocate dhcp/ssdp/usb/zeroconf ServiceInfo models](https://developers.home-assistant.io/blog/2025/01/15/service-info) +- [Support for config subentries](https://developers.home-assistant.io/blog/2025/02/16/config-subentries) + +[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 2025.3](/changelogs/core-2025.3) diff --git a/source/_posts/2025-03-10-matter-certification.markdown b/source/_posts/2025-03-10-matter-certification.markdown new file mode 100644 index 00000000000..1c6398e092e --- /dev/null +++ b/source/_posts/2025-03-10-matter-certification.markdown @@ -0,0 +1,78 @@ +--- +layout: post +title: "Home Assistant officially Matters" +description: "Home Assistant gains certification, but also a powerful tool for any open source project" +date: 2025-03-10 00:00:01 +date_formatted: "March 10, 2025" +author: Marcel van der Veldt +comments: true +categories: + - Announcements + - Matter +og_image: /images/blog/2025-03-matter-certification/art.jpg +--- + +

    Home Assistant is officially matter certified

    + +Matter in Home Assistant has been officially certified! 🎉 The Connectivity Standards Alliance (CSA) has certified [Home Assistant](https://csa-iot.org/csa_product/home-assistant/) and the [Open Home Foundation Matter Server](https://csa-iot.org/csa_product/open-home-foundation-matter-server/), the first open-source project to receive this certification. Certification is proof that open source projects can sit among, or even above, big tech when it comes to providing the best smart home experience. + +Home Assistant, as part of the [Open Home Foundation](https://www.openhomefoundation.org/), strongly believes in open standards. They embody our values of choice, privacy, and sustainability in the smart home. When a standard is well supported, consumers get access to a wide range of smart home devices that should work far into the future, which is great for sustainability. Best of all, they work locally, keeping your smart home data in your home. + +All these benefits led us to include open standards certification [in our roadmap](/blog/2024/06/12/roadmap-2024h1/#open-standards-certified-quality). Home Assistant's implementations of Matter, Zigbee, and Z-Wave are already industry-leading, so it only makes sense to clearly signal and give users peace of mind that we provide true compatibility. This most recent certification is not just big for Home Assistant, but read on to see how it also helps any open source project looking to use Matter. + + + +## Matter matters + +

    Our live stream from 2024 explains Matter in depth

    + +Matter is the latest smart home open standard, which is looking to connect and control smart home devices regardless of their manufacturer or which ecosystem you want to control them from. Like the other open standards we support, it can be controlled fully locally, meaning these devices are not reliant on the cloud to work. The Connectivity Standards Alliance (CSA) is the body behind the Matter standard, representing its many members. They certify devices and set the rules on how they work together. + +If you're not familiar with Matter, I'm not surprised. Though its adoption is growing, it's only a [couple of years old](https://csa-iot.org/newsroom/matter-arrives/). The most important companies in the smart home space have joined this standard, but support is still growing and becoming more consistent. If it fulfills its promise, any smart home product should work with your ecosystem of choice, and that makes us optimistic about its future. + +More and more Matter devices are entering the market, and if you're buying new smart devices, it will just be a matter of time 😉 before you own one. To this point, Matter devices are even a part of our [Works With Home Assistant](https://partner.home-assistant.io/) program. [Aqara was the first](/blog/2024/09/03/aqara-joins-works-with-home-assistant/) to join our program with Matter devices, and we tested these devices ourselves to ensure they give the best experience possible in Home Assistant. This year, we expect many more Matter devices to join the program, and we should have more updates soon. + +From a technical perspective, Matter is really interesting---it can work with different smart home systems at the same time. It also keeps the way devices connect and communicate separate, allowing it to connect to devices over Wi-Fi, Ethernet, and [Thread](/integrations/thread/) (a new mesh network technology for smart devices). Read our [State of Matter blog](/blog/2024/01/25/matter-livestream-blog/) or watch Paulus' appearance on [the Vergecast Matter Holiday Spec-Tacular](https://youtu.be/0Y75XEXAXfY?si=nSDpP6THkWhkARuc&t=3493) for a deeper dive into the standard. + +## What certification brings + +

    Home Assistant Matter certificationWell, this is a bit... awesome

    + +First and foremost, from a usability perspective, nothing will change for you. We are consistently the first to adopt the newest Matter versions, currently providing the highest version available. We'll keep on improving the Matter Server and the Matter integration at the same pace, ensuring that all device types in the Matter spec will work perfectly with Home Assistant---just from now on it will come with this certification badge. + +The [Open Home Foundation Matter Server](https://csa-iot.org/csa_product/open-home-foundation-matter-server/) is now an officially trusted/certified software component, while [Home Assistant](https://csa-iot.org/csa_product/home-assistant/) is a certified "User Interface Component" (more on this distinction below). This allows us to clearly show this with a logo, along with being listed on the Matter website. For new Home Assistant users, this helps build confidence, knowing it is a supported way to use Matter. Similarly, for brands that don't know much about Home Assistant, these references can be surprisingly helpful, and it's our goal to have more brands target Home Assistant in their development. Another handy part of being certified is getting more access to pre-test new devices and SDK revisions, which will help development going forward. + +### Why two certifications (and the server add-on) + +

    Open Home Foundation Matter Server is certifiedSo much fun we did it twice

    + +If you're confused why we certified both Home Assistant and Open Home Foundation Matter Server, there are a couple of legal/procedural reasons, but it comes with some useful benefits. We certified the server as a standalone component to allow any project to use it. Each project that uses it, including Home Assistant, will have to go through a certification process to acknowledge that it uses a certified component as a "User Interface Component". Certification for the Open Home Foundation Matter Server means it properly connects and communicates with other Matter devices, while certification for Home Assistant is about being able to display the Matter trademark. + +This separation is important because it means that we won't need to go through recertification every time we update Home Assistant. This way we can keep the Matter-related backend isolated in both a software and certification sense. This is also why we will need to continue to have the Open Home Foundation Matter Server as an add-on, and it cannot be built into [Home Assistant Core](/installation/#advanced-installation-methods). + +## The road to certification + +Becoming Matter certified was not easy. When we started certification, the process was tooled up to test and certify devices, not Matter controllers, let alone completely software-based (and open source) controllers. We chose to collaborate with [Resillion](https://www.resillion.com/services/conformance-interoperability/wireless-product-testing/matter-certification/) for our certification. They are a testing and certification house based in Belgium with a lot of experience certifying Matter products. They do the formal testing and submit the results to the CSA. Together, we collaborated to write thousands of lines of test scripts, ensuring that as many test cases as possible were automated. + +

    Marcel van der Veldt at the Resillion labMy visit to Resillion's lab, I brought my own lab coat

    + +We really appreciate Resillion for taking on this challenge. Not only were we the first controller they certified, but we also went for all the device types in the Matter 1.3 specification. This was a huge effort for all involved, but now that these test scripts exist, they only require minor updates for each new version; we can reuse them whenever we need to recertify. + +
    +

    “At Resillion, we strongly support interoperability in connected home technology, and assure, secure and innovate to help make this technology work for everyone. For us, this was not only a fantastic way to contribute to the Home Assistant open-source project, but also upgrade our own Home Assistant instances with Matter, as enthusiasts of the project running active instances of HA in our own homes.

    +

    “Working on a controller utilizing the full Matter 1.3 feature set presents a great opportunity to advance HA and Matter, and we look forward to supporting the developed codebase and further contributing to an open smart home.”

    + - Jan Claes, Head of testing services - C&I Global, Resillion +
    + +This is another example of something that's only possible because of the support we get from users subscribing to [Home Assistant Cloud](/cloud/). Certification would be very difficult for any other open-source project, but we have the funding first to build a great server and also to pay for the required testing. Now this open source implementation exists and can be used by any project looking to add Matter. + +## The future Matters + +As we continue improving our Matter implementation, the Matter standard itself is also evolving. Even with the progress it has made in the past year, there are still challenges to overcome. Matter is completely built on IPv6, and its rollout is uncovering the poor state of IPv6 support in today's network hardware. Also, as it's a complicated standard, it can be difficult to explain concepts like Thread and Fabrics to the average user, but hopefully users won't need to be experts in the future to get the most out of Matter in their homes. + +Some might call Matter the smart home standard to replace all others, but we believe that there's room for multiple standards, each providing its own unique benefits. We are focused on providing the highest support for all local smart home standards ([certifying other standards is on our roadmap](/blog/2024/11/15/roadmap-2024h2/#open-protocols)) and ensuring they work far into the future, which is great for consumer choice and sustainability. + +As Home Assistant grows and takes important steps like certification, the more credibility we gain in the industry---it's a virtuous circle that helps us and Open Home projects continuously improve. Thanks for your support and helping us make this possible 🙏. + +**Try the Matter in Home Assistant today:** +[!Open your Home Assistant instance and show the dashboard of an add-on.](https://my.home-assistant.io/redirect/config_flow_start?domain=matter) diff --git a/source/_redirects b/source/_redirects index 10959560130..675fcebea9f 100644 --- a/source/_redirects +++ b/source/_redirects @@ -9,6 +9,8 @@ layout: null # General use redirects /join-chat https://discord.gg/home-assistant /twitter https://twitter.com/home_assistant/ +/mastodon https://fosstodon.org/@homeassistant +/bluesky https://bsky.app/profile/home-assistant.io /newsletter https://newsletter.openhomefoundation.org/ /suggest-community-highlight https://docs.google.com/forms/d/e/1FAIpQLSd9VWPeVM0xg0swWL6kT3wkQUKt8vWsTL5WtPO95LAy-0cYZw/viewform /get-blueprints https://community.home-assistant.io/c/blueprints-exchange/53 @@ -16,6 +18,7 @@ layout: null /feature-requests https://community.home-assistant.io/c/feature-requests /issues https://github.com/home-assistant/core/issues /community https://community.home-assistant.io/ +/voice /voice_control/builtin_sentences/ /latest-security-alert /security/ # Link to latest release notes @@ -645,6 +648,7 @@ layout: null /integrations/xfinity /more-info/removed-integration 301 /integrations/yessssms /more-info/removed-integration 301 /integrations/yweather /more-info/removed-integration 301 +/integrations/zengge /integrations/led_ble /components/zwave /integrations/zwave_js # Lovelace images diff --git a/source/changelogs/core-2025.1.markdown b/source/changelogs/core-2025.1.markdown new file mode 100644 index 00000000000..365e0b9d505 --- /dev/null +++ b/source/changelogs/core-2025.1.markdown @@ -0,0 +1,2475 @@ +--- +title: Full changelog for Home Assistant Core 2025.1 +description: Detailed changelog for the Home Assistant Core 2025.1 release +replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$ +--- + +These are all the changes included in the Home Assistant Core 2025.1 release. + +For a summary in a more readable format: +[Release notes blog for this release](/blog/2025/01/03/release-20251/). + +- Bump version to 2025.1.0dev0 ([@cdce8p] - [#131751]) +- Remove unreachable code in Habitica ([@tr4nt0r] - [#131778]) +- Add translations for units of measurement to Habitica integration ([@tr4nt0r] - [#131761]) +- Add units of measurement to Bring integration ([@tr4nt0r] - [#131763]) +- Log warning if via_device reference not exists when creating or updating a device registry entry ([@jbouwh] - [#131746]) +- Enable strict typing for Schlage ([@dknowles2] - [#131734]) +- Store Schlage runtime data in entry.runtime_data ([@dknowles2] - [#131731]) +- Set parallel updates in IronOS integration ([@tr4nt0r] - [#131721]) +- Remove deprecated camera constants ([@edenhaus] - [#131796]) +- Remvove deprecated core constants ([@edenhaus] - [#131803]) +- Remove deprecated automation constants ([@edenhaus] - [#131792]) +- Remove deprecated binary sensor constants ([@edenhaus] - [#131793]) +- Remove deprecated device registry constants ([@edenhaus] - [#131802]) +- Remove deprecated alarm control panel constants ([@edenhaus] - [#131790]) +- Remove deprecated home assistant const constants ([@edenhaus] - [#131799]) +- Remove deprecated water heater constants ([@edenhaus] - [#131805]) +- Remove deprecated remote constants ([@edenhaus] - [#131809]) +- Remove deprecated cover constants ([@edenhaus] - [#131797]) +- Remove deprecated siren constants ([@edenhaus] - [#131807]) +- Remove deprecated number constants ([@edenhaus] - [#131810]) +- Remove deprecated lock constants ([@edenhaus] - [#131812]) +- Fix group flaky test ([@epenet] - [#131815]) +- Cleanup deprecated exception in websocket tests ([@epenet] - [#131808]) +- Rename constant in tests/components/recorder/test_migration_from_schema_32.py ([@emontnemery] - [#131819]) +- Delay "Split tests for full run" in CI ([@epenet] - [#131813]) +- Remove deprecated switch constants ([@edenhaus] - [#131806]) +- Use common string for items unit in Bring ([@tr4nt0r] - [#131834]) +- Add comments in homeassistant/components/recorder/migration.py ([@emontnemery] - [#131820]) +- Remove deprecated device tracker constants ([@edenhaus] - [#131846]) +- Add unit translations to Ista EcoTrend integration ([@tr4nt0r] - [#131768]) +- Remove deprecated fan constants ([@edenhaus] - [#131845]) +- Remove deprecated humidifier constants ([@edenhaus] - [#131844]) +- Deprecate dt_util.utc_to_timestamp ([@emontnemery] - [#131787]) +- Add config flow rules to quality_scale hassfest validation ([@epenet] - [#131791]) +- Remove unnecessary hass.data defaults from Rainbird ([@allenporter] - [#131858]) +- Add diagnostics rule to quality_scale hassfest validation ([@epenet] - [#131859]) +- Correction of prices update time in Tibber integration (with CLA now) ([@rd-blue] - [#131861]) +- Use ConfigEntry.runtime_data in Nest ([@allenporter] - [#131871]) +- Remove deprecated sensor constants ([@edenhaus] - [#131843]) +- Add data descriptions to Nice G.O. config flow ([@IceBotYT] - [#131865]) +- Add strict_typing rule to quality_scale hassfest validation ([@epenet] - [#131877]) +- Remove deprecated data entry flow constants ([@edenhaus] - [#131800]) +- Remove deprecated climate constants ([@edenhaus] - [#131798]) +- Refactor calendars in Habitica ([@tr4nt0r] - [#131020]) +- Add documentation URL to quality_scale hassfest validation ([@epenet] - [#131879]) +- Add unique_config_entry rule to quality_scale hassfest validation ([@epenet] - [#131878]) +- Ensure Schlage exceptions are translated ([@dknowles2] - [#131733]) +- Add discovery rule to quality_scale hassfest validation ([@epenet] - [#131890]) +- Add runtime_data rule to quality_scale hassfest validation ([@allenporter] - [#131857]) +- Bump pynecil to v1.0.1 ([@tr4nt0r] - [#131935]) +- Bump ruff to 0.8.1 ([@autinerd] - [#131927]) +- Use typed ConfigEntry in discovergy ([@epenet] - [#131891]) +- Add missing state_class in IronOS ([@tr4nt0r] - [#131928]) +- Use HomeAssistant error in the right cases ([@Diegorro98] - [#131923]) +- Make uploaded images browsable in media ([@karwosts] - [#131468]) +- Add config flow to NHC ([@VandeurenGlenn] - [#130554]) +- Improvements for bluetooth device for lamarzocco ([@zweckj] - [#131875]) +- Add support for `linked_doorbell_sensor` to HomeKit locks ([@krauseerl] - [#131660]) +- Make the full conversation input available to sentence triggers ([@balloob] - [#131982]) +- Match "delete" with "create" in the action descriptions ([@NoRi2909] - [#131989]) +- Add final translations to mqtt exceptions ([@jbouwh] - [#131933]) +- Reduce time syscalls needed to insert new statistics ([@bdraco] - [#131984]) +- Use typed ConfigEntry in lamarzocco ([@epenet] - [#131892]) +- Use typed ConfigEntry in tedee ([@epenet] - [#131893]) +- Use typed ConfigEntry in twentemilieu ([@epenet] - [#131894]) +- Cleanup pylint obsolete import checks ([@epenet] - [#131904]) +- Add exception translation for entity action not supported ([@jbouwh] - [#131956]) +- Improve renault config-flow translation strings ([@epenet] - [#131706]) +- Improve renault config flow tests ([@epenet] - [#131698]) +- Improve recorder migration logging ([@emontnemery] - [#132006]) +- Remove unnecessary assignment in Recorder._process_state_changed_event_into_session ([@emontnemery] - [#132011]) +- Clarify description of fan actions, fix typo ([@NoRi2909] - [#132023]) +- Set parallel updates for BMW entities ([@rikroe] - [#132019]) +- Fix description of 'clear_completed_items' to use "remove" ([@NoRi2909] - [#132014]) +- Add pre-commit VSCode task ([@dotvav] - [#131637]) +- Add additional data_descriptions for Fully Kiosk Browser fields ([@cgarwood] - [#131716]) +- Add reauthentication flow for Autarco integration ([@klaasnicolaas] - [#131816]) +- Change library to livisi ([@joostlek] - [#132001]) +- Improve service names and descriptions for 'remote_connect' and 'remote_disconnect' in Home Assistant Cloud ([@yazan-abdalrahman] - [#131993]) +- Bump cryptography to 44.0.0 and pyOpenSSL to 24.3.0 ([@bdraco] - [#132035]) +- Use typed config entry in rainbird ([@epenet] - [#132031]) +- Use typed config entry in imap ([@epenet] - [#132029]) +- Remove CONF_NAME from config entry in solarlog ([@dontinelli] - [#131738]) +- Use runtime data in HEOS ([@andrewsayre] - [#132030]) +- Set PARALLEL_UPDATES in renault and bump quality scale ([@epenet] - [#132047]) +- Bump webio_api to 0.1.11 ([@nasWebio] - [#131730]) +- Update livisi to 0.0.24 ([@cdce8p] - [#132058]) +- Add additional number entities to IronOS ([@tr4nt0r] - [#131943]) +- Bump zwave-js-server-python to 0.60.0 ([@MindFreeze] - [#132059]) +- Bump dawidd6/action-download-artifact from 6 to 7 (@dependabot - [#132040]) +- Reboot host to aiohasupervisor ([@mdegat01] - [#130391]) +- Update mypy-dev to 1.14.0a5 ([@cdce8p] - [#132063]) +- Change wording in config flow dialog for fyta ([@dontinelli] - [#132075]) +- Remove option to update settings using second config flow in Reolink ([@starkillerOG] - [#131695]) +- Ensure Schlage config entry uniqueness ([@dknowles2] - [#131732]) +- Record Plugwise Quality Scale ([@CoMPaTech] - [#131888]) +- Add Reolink quality scale yaml ([@starkillerOG] - [#131123]) +- Fix type hints in IronOS coordinators ([@tr4nt0r] - [#132107]) +- Cleanup dead code in renault coordinator ([@epenet] - [#132078]) +- Improve Renault reauth test ([@epenet] - [#132077]) +- Rename 'Reolink IP NVR/camera' to 'Reolink' ([@starkillerOG] - [#132113]) +- Add data description to Nord pool config flow ([@gjohansson-ST] - [#132115]) +- Drop operating mode property in sharkiq ([@gjohansson-ST] - [#132097]) +- Remove unneeded step from reauth in Reolink ([@starkillerOG] - [#132143]) +- Revert "bump hassil and intents" ([@epenet] - [#132138]) +- Move set_room_setpoint to opentherm_gw hub ([@mvn23] - [#132152]) +- Bump syrupy to 4.8.0 ([@epenet] - [#132134]) +- Plugwise fixes from quality review ([@CoMPaTech] - [#132158]) +- Bump renault-api to 0.2.8 ([@epenet] - [#132135]) +- Support Z-Wave JS abort S2 bootstrapping ([@MindFreeze] - [#132140]) +- Set PARALLEL_UPDATES for all BMW platforms ([@rikroe] - [#132088]) +- Improve Reolink config flow tests ([@starkillerOG] - [#131693]) +- Bump voip-utils ([@synesthesiam] - [#132110]) +- Cleanup dead code in renault ([@epenet] - [#132172]) +- Bump nettigo-air-monitor to version 4.0.0 ([@bieniu] - [#132106]) +- Reapply "bump hassil and intents" (#132138) ([@epenet] - [#132151]) +- Dump pip freeze in CI ([@epenet] - [#132173]) +- Use typed config entry in SABnzbd coordinator ([@jpbede] - [#132098]) +- Pass config entry directly to update coordinator in Sensibo ([@gjohansson-ST] - [#132114]) +- Fix check dirty in Prepare dependencies CI ([@epenet] - [#132180]) +- Add initial quality scale for TotalConnect ([@austinmroczek] - [#132012]) +- Refactor roomba to set vacuums in vacuum file ([@gjohansson-ST] - [#132102]) +- Add dhcp discovery for fyta ([@dontinelli] - [#132185]) +- Remove support for live recorder data migration of entity IDs ([@emontnemery] - [#131952]) +- Bump pytest to 8.3.4 ([@epenet] - [#132179]) +- Generic Thermostat Add Target Min Max to UI config ([@hughsaunders] - [#131168]) +- Fix mypy issue in airzone cloud ([@gjohansson-ST] - [#132208]) +- Update test_config_flow for solarlog ([@dontinelli] - [#132104]) +- Fix next mypy issue in airzone_cloud ([@gjohansson-ST] - [#132217]) +- Improve BMWDataUpdateCoordinator typing ([@rikroe] - [#132087]) +- Add powerfox integration ([@klaasnicolaas] - [#131640]) +- Add missing data description for solarlog ([@dontinelli] - [#131712]) +- Bump pynecil to v2.0.2 ([@tr4nt0r] - [#132221]) +- Plugwise quality docs benchmark data update and removal ([@CoMPaTech] - [#132082]) +- Suez water add quality_scale.yaml ([@jb101010-2] - [#131360]) +- Add quality scale for fyta ([@dontinelli] - [#131508]) +- Add quality scale for Mastodon ([@andrew-codechimp] - [#131357]) +- Add quality_scale.yaml for Google Photos integration ([@allenporter] - [#131329]) +- Add reauthentication flow for Powerfox integration ([@klaasnicolaas] - [#132225]) +- Bump onvif-zeep-async to 3.1.13 ([@jterrace] - [#132229]) +- Add diagnostics to Powerfox integration ([@klaasnicolaas] - [#132226]) +- Use typed config entry in fyta ([@epenet] - [#132248]) +- Use typed config entry in mastodon ([@epenet] - [#132249]) +- Fix Visual Studio Code tasks to use selected Python interpreter ([@masto] - [#132219]) +- Improve discovery rule in IQS validation ([@epenet] - [#132251]) +- Pass config entry to UpdateCoordinator in yale_smart_alarm ([@gjohansson-ST] - [#132205]) +- Catch exceptions on entry setup for Autarco integration ([@klaasnicolaas] - [#132227]) +- Fix sensibo test coverage to 100% ([@gjohansson-ST] - [#132202]) +- Improve tests of recorder util resolve_period ([@emontnemery] - [#132259]) +- Bump github/codeql-action from 3.27.5 to 3.27.6 (@dependabot - [#132237]) +- Add IronOS quality scale record ([@tr4nt0r] - [#131598]) +- Refactor Snapcast client and group classes to use a common base clase ([@mill1000] - [#124499]) +- Set new polling interval for Powerfox integration ([@klaasnicolaas] - [#132263]) +- Add ista EcoTrend quality scale record ([@tr4nt0r] - [#131580]) +- Record current IQS state for Cambridge Audio ([@noahhusby] - [#131080]) +- Add quality scale for Husqvarna Automower ([@Thomas55555] - [#131560]) +- Fix test_dump_log_object timeouts in the CI ([@bdraco] - [#132234]) +- Add Bring! quality scale record ([@tr4nt0r] - [#131584]) +- Check token scope earlier in Husqvarna Automower ([@Thomas55555] - [#132289]) +- Refactor template lock to only return LockState or None ([@gjohansson-ST] - [#132093]) +- Clean up common modules in Husqvarna Automower ([@Thomas55555] - [#132290]) +- Add support for onvif tplink person and vehicle events ([@jterrace] - [#130769]) +- Bump aiosomecomfort to 0.0.28 in Honeywell ([@mkmer] - [#132294]) +- Use config_entry.runtime_data in Honeywell ([@mkmer] - [#132297]) +- Set command_line quality scale to legacy ([@gjohansson-ST] - [#132306]) +- Fix runtime data in Cambridge Audio ([@noahhusby] - [#132285]) +- Add quality scale to Onkyo ([@arturpragacz] - [#131322]) +- Remove stale requirement for androidtv ([@tofuSCHNITZEL] - [#132319]) +- Revert "Pin rpds-py to 0.21.0 to fix CI" ([@epenet] - [#132331]) +- Bump pylamarzocco to 1.3.2 ([@zweckj] - [#132344]) +- Remove dead code in fritzbox_callmonitor ([@epenet] - [#132353]) +- Fix missing AV info in Onkyo ([@arturpragacz] - [#132328]) +- Use typed config entry in husqvarna_automower ([@epenet] - [#132346]) +- Remove deprecated supported features warning in FanEntity ([@epenet] - [#132369]) +- Remove deprecated supported features warning in `ClimateEntity` ([@gjohansson-ST] - [#132206]) +- Mark test-before-setup as exempt in mqtt ([@epenet] - [#132334]) +- Remove yaml import from feedreader integration ([@jbouwh] - [#132278]) +- Remove yaml import from incomfort integration after deprecation time ([@jbouwh] - [#132275]) +- Add data description for Onkyo config flow ([@arturpragacz] - [#132349]) +- Remove deprecated supported features warning in CoverEntity ([@epenet] - [#132367]) +- Avoid access to `self.context["source"]` in integration config flows ([@epenet] - [#132355]) +- Remove _enable_turn_on_off_backwards_compatibility A-F ([@gjohansson-ST] - [#132417]) +- Remove _enable_turn_on_off_backwards_compatibility G-M ([@gjohansson-ST] - [#132418]) +- Remove _enable_turn_on_off_backwards_compatibility N-S ([@gjohansson-ST] - [#132422]) +- Remove _enable_turn_on_off_backwards_compatibility T-Z ([@gjohansson-ST] - [#132423]) +- Remove yaml import from hive ([@epenet] - [#132354]) +- Remove deprecated integration dte_energy_bridge ([@jbouwh] - [#132276]) +- Update mypy-dev to 1.14.0a6 ([@cdce8p] - [#132440]) +- Bump actions/cache from 4.1.2 to 4.2.0 (@dependabot - [#132419]) +- Handle Z-Wave JS S2 inclusion via Inclusion Controller ([@MindFreeze] - [#132073]) +- Fix flaky CI from azure_event_hub ([@epenet] - [#132461]) +- Log warning on use of deprecated light constants ([@epenet] - [#132387]) +- Adjust scope of zha global quirks fixture ([@epenet] - [#132463]) +- Implement new state property for vacuum which is using an enum ([@gjohansson-ST] - [#126353]) +- Bump codecov/codecov-action from 5.0.7 to 5.1.1 (@dependabot - [#132455]) +- Set parallel updates in Bring integration ([@tr4nt0r] - [#132504]) +- Move light constants to separate module ([@epenet] - [#132473]) +- Add tests for media player support_* properties ([@epenet] - [#132458]) +- Remove deprecated supported features warning in LightEntity ([@epenet] - [#132371]) +- Add check for unique id mismatch in reauth of Bring integration ([@tr4nt0r] - [#132499]) +- Add more models to Tesla Fleet ([@Bre77] - [#132430]) +- Remove default OAuth implementation from Tesla Fleet ([@Bre77] - [#132431]) +- Bump actions/attest-build-provenance from 1.4.4 to 2.0.0 (@dependabot - [#132332]) +- Remove migration for tag ([@gjohansson-ST] - [#132200]) +- Small cleanup in sensibo ([@gjohansson-ST] - [#132118]) +- Cache AST module parsing in hassfest ([@epenet] - [#132244]) +- Remove not needed name from yale_smart_alarm ([@gjohansson-ST] - [#132204]) +- Improve recorder util resolve_period ([@emontnemery] - [#132264]) +- Remove support for live recorder data migration of event type IDs ([@emontnemery] - [#131826]) +- Remove native_unit_of_measurement from Onewire counters ([@jrieger] - [#132076]) +- Removes previously deprecated simulated integration ([@gjohansson-ST] - [#132111]) +- Add parallel-updates rule to quality_scale validation ([@epenet] - [#132041]) +- Use build in unit of measurement in HomeWizard 'Water usage' sensor ([@DCSBL] - [#132261]) +- Plugwise add missing translation ([@CoMPaTech] - [#132239]) +- Add exception handlers to Home Connect action calls ([@Diegorro98] - [#131895]) +- Update go2rtc-client to 0.1.2 ([@frenck] - [#132517]) +- Use device area/floor in intent_script ([@arturpragacz] - [#130644]) +- Set PARALLEL_UPDATES in Bring sensor platform ([@jpbede] - [#132538]) +- Bump pylamarzocco to 1.3.3 ([@zweckj] - [#132534]) +- Bump uiprotect to 6.7.0 ([@RaHehl] - [#132565]) +- Use runtime_data in Whirlpool ([@mkmer] - [#132613]) +- Add tests to Nord Pool ([@gjohansson-ST] - [#132468]) +- Plugwise Quality improvements ([@CoMPaTech] - [#132175]) +- Bump nsapi to 3.1.2 ([@hugoideler] - [#132596]) +- Bump homematicip from 1.1.3 to 1.1.5 ([@hahn-th] - [#132537]) +- Increase test coverage in apsystems coordinator ([@Thomas55555] - [#132631]) +- Bump actions/attest-build-provenance from 2.0.0 to 2.0.1 (@dependabot - [#132661]) +- Remove deprecated supported features warning in Camera ([@epenet] - [#132640]) +- Use ast_parse_module in parallel_updates IQS rule ([@epenet] - [#132646]) +- Remove Stookalert integration ([@frenck] - [#132569]) +- Remove not needed code check in yale_smart_alarm ([@gjohansson-ST] - [#132649]) +- Remove deprecated supported features warning in Remote ([@epenet] - [#132643]) +- Remove deprecated supported features warning in Humidifier ([@epenet] - [#132641]) +- Remove deprecated supported features warning in Lock ([@epenet] - [#132642]) +- Remove YAML support from vizio ([@epenet] - [#132351]) +- Remove deprecated supported features warning in AlarmControlPanel ([@epenet] - [#132665]) +- Remove deprecated supported features warning in Siren ([@epenet] - [#132666]) +- Remove deprecated supported features warning in Vacuum ([@epenet] - [#132670]) +- Remove deprecated supported features warning in WaterHeater ([@epenet] - [#132668]) +- Add tip connected detection to IronOS ([@tr4nt0r] - [#131946]) +- Remove deprecated supported features warning in Update ([@epenet] - [#132667]) +- Add slightly more detailed descriptions for Counter actions ([@NoRi2909] - [#132576]) +- Set quality scale to silver for Husqvarna Automower ([@Thomas55555] - [#132293]) +- Use ATTR_COLOR_TEMP_KELVIN in emulated_hue light ([@epenet] - [#132693]) +- Use ATTR_COLOR_TEMP_KELVIN in baf light ([@epenet] - [#132692]) +- Move SABnzbd action setup to async_setup ([@jpbede] - [#132629]) +- Add binary platform to IronOS ([@tr4nt0r] - [#132691]) +- Increase test coverage in yale_smart_alarm ([@gjohansson-ST] - [#132650]) +- Palazzetti power control ([@dotvav] - [#131833]) +- Fix reading of max mireds from Matter lights ([@epenet] - [#132710]) +- Change to module function in statistics ([@gjohansson-ST] - [#132648]) +- Set unique_id in myuplink config entry ([@astrandb] - [#132672]) +- Migrate opple lights to use Kelvin ([@epenet] - [#132697]) +- Use kelvin attributes in baf ([@epenet] - [#132725]) +- Add myself as code owner to statistics ([@gjohansson-ST] - [#132719]) +- Update pylint to 3.3.2 and astroid to 3.3.6 ([@cdce8p] - [#132718]) +- Add Starlink consumption sensors ([@davidrapan] - [#132262]) +- Migrate flux_led lights to use Kelvin ([@epenet] - [#132687]) +- Migrate switchbot lights to use Kelvin ([@epenet] - [#132695]) +- Bump uiprotect to 6.8.0 ([@RaHehl] - [#132735]) +- Use ATTR_COLOR_TEMP_KELVIN in alexa ([@epenet] - [#132733]) +- Improve Plugwise tests ([@CoMPaTech] - [#132677]) +- Plugwise improve exception translations ([@CoMPaTech] - [#132663]) +- Add Watergate Sonic Local Integration ([@adam-the-hero] - [#129686]) +- Remove YAML support from cert_expiry ([@epenet] - [#132350]) +- Improve name and description of Include list, fix `holidays` keyword name ([@NoRi2909] - [#132188]) +- Add Ituran integration ([@shmuelzon] - [#129067]) +- Add reconfigure flow to Cambridge Audio ([@noahhusby] - [#131091]) +- Fix `LazyState` compatibility with `State` `under_cached_property` change ([@bdraco] - [#132752]) +- Migrate deconz lights to use Kelvin ([@epenet] - [#132698]) +- Add quality scale to myUplink - reflect current state ([@astrandb] - [#131686]) +- Mark Cambridge Audio quality scale as platinum ([@noahhusby] - [#132762]) +- Add clearer descriptions to all Timer actions ([@NoRi2909] - [#132571]) +- Migrate limitlessled lights to use Kelvin ([@epenet] - [#132689]) +- Remove old compatibility code (and add new warning) in lifx ([@epenet] - [#132730]) +- Migrate smartthings lights to use Kelvin ([@epenet] - [#132699]) +- Migrate hive lights to use Kelvin ([@epenet] - [#132686]) +- Change BMW reauth/reconfigure to only allow password ([@rikroe] - [#132767]) +- Remove deprecated supported features warning in MediaPlayer ([@epenet] - [#132365]) +- Use local ATTR_KELVIN constant in yeelight ([@epenet] - [#132731]) +- Add missing `last_reported_timestamp` to `LazyState` ([@bdraco] - [#132761]) +- Remove legacy behavior from Teslemetry ([@Bre77] - [#132760]) +- Update demetriek to v1.0.0 ([@frenck] - [#132765]) +- Improve description of 'vapid_email' field ([@NoRi2909] - [#131349]) +- Use consistent UI name for system_log.clear action ([@NoRi2909] - [#132083]) +- Migrate osramlightify lights to use Kelvin ([@epenet] - [#132688]) +- Migrate matter lights to use Kelvin ([@epenet] - [#132685]) +- Set Nord Pool device as a service ([@gjohansson-ST] - [#132717]) +- Suez_water: close session after config flow ([@jb101010-2] - [#132714]) +- Migrate abode lights to use Kelvin ([@epenet] - [#132690]) +- Add new api to fetch sentence triggers ([@balloob] - [#132764]) +- Migrate elgato lights to use Kelvin ([@epenet] - [#132789]) +- Change fields allowed to change in options flow for Mold indicator ([@gjohansson-ST] - [#132400]) +- Add Starlink usage sensors ([@davidrapan] - [#132738]) +- Bump actions/attest-build-provenance from 2.0.1 to 2.1.0 (@dependabot - [#132788]) +- Migrate homekit_controller lights to use Kelvin ([@epenet] - [#132792]) +- Remove sleep and forbidden handling from Teslemetry ([@Bre77] - [#132784]) +- Migrate eufy lights to use Kelvin ([@epenet] - [#132790]) +- Migrate blebox lights to use Kelvin ([@epenet] - [#132787]) +- Migrate mired attributes to kelvin in limitlessled ([@epenet] - [#132785]) +- Migrate iglo lights to use Kelvin ([@epenet] - [#132796]) +- Update ciso8601 to v2.3.2 ([@frenck] - [#132793]) +- bump pyituran to 0.1.4 ([@shmuelzon] - [#132791]) +- Add diagnostics platform to Russound RIO ([@noahhusby] - [#132776]) +- Bump aioswitcher to 5.1.0 ([@YogevBokobza] - [#132753]) +- Use UnitOfEnergy.KILO_CALORIE in Tractive integration ([@bieniu] - [#131909]) +- Migrate wiz lights to use Kelvin ([@epenet] - [#132809]) +- Migrate wemo lights to use Kelvin ([@epenet] - [#132808]) +- Migrate tuya lights to use Kelvin ([@epenet] - [#132803]) +- Migrate tradfri lights to use Kelvin ([@epenet] - [#132800]) +- Migrate template lights to use Kelvin ([@epenet] - [#132799]) +- Migrate homematic lights to use Kelvin ([@epenet] - [#132794]) +- Migrate nanoleaf lights to use Kelvin ([@epenet] - [#132797]) +- Address misc comments from myuplink quality scale review ([@astrandb] - [#132802]) +- Migrate yeelight lights to use Kelvin ([@epenet] - [#132814]) +- Migrate xiaomi_miio lights to use Kelvin ([@epenet] - [#132811]) +- Update pvo to v2.2.0 ([@frenck] - [#132812]) +- Migrate vesync lights to use Kelvin ([@epenet] - [#132806]) +- Use "remove" in description of "Clear playlist" action ([@NoRi2909] - [#132079]) +- Migrate zwave_js lights to use Kelvin ([@epenet] - [#132818]) +- Remove config flow option to set mydevolo URL ([@Shutgun] - [#132821]) +- Update gotailwind to v0.3.0 ([@frenck] - [#132817]) +- Add missing Kelvin attributes to mqtt ignore list ([@epenet] - [#132820]) +- Improve myuplink tests to reach full coverage for all modules ([@astrandb] - [#131937]) +- Update wled to v0.21.0 ([@frenck] - [#132822]) +- Address review comment on myuplink tests ([@astrandb] - [#132819]) +- Add check for typed ConfigEntry in quality scale validation ([@epenet] - [#132028]) +- spaceapi: fix sensor values ([@Xiretza] - [#132099]) +- Migrate hue lights to use Kelvin ([@epenet] - [#132835]) +- Add exception translations for Fronius ([@farmio] - [#132830]) +- Add data descriptions to devolo Home Control ([@Shutgun] - [#132703]) +- Cleanup unnecessary mired attributes in esphome ([@epenet] - [#132833]) +- Fix wrong name attribute in mqtt ignore list ([@epenet] - [#132831]) +- Plugwise improve platform tests ([@CoMPaTech] - [#132748]) +- Add a quality scale for fitbit integration ([@allenporter] - [#131326]) +- Add beolink_join source_id parameter to Bang & Olufsen ([@mj23000] - [#132377]) +- Bump mozart-api to 4.1.1.116.4 ([@mj23000] - [#132859]) +- Add retry to api calls in Nord Pool ([@gjohansson-ST] - [#132768]) +- Bump pydantic to 2.10.3 and update required deps ([@bdraco] - [#131963]) +- Use floats instead of datetime in statistics ([@gjohansson-ST] - [#132746]) +- Add quality scale to Nord Pool ([@gjohansson-ST] - [#132415]) +- Set config-flow rule in IQS to todo in Bring integration ([@tr4nt0r] - [#132855]) +- Migrate demo lights to use Kelvin ([@epenet] - [#132837]) +- Add model_id to flexit (bacnet) entity ([@lellky] - [#132875]) +- Update numpy to 2.2.0 ([@cdce8p] - [#132874]) +- Test the google tasks api connection in setup ([@allenporter] - [#132657]) +- Use runtime_data for roku ([@ctalkington] - [#132781]) +- Fix typo in water heater integration ([@lboue] - [#132891]) +- Bump github/codeql-action from 3.27.6 to 3.27.7 (@dependabot - [#132900]) +- Refactor light significant change to use kelvin attribute ([@epenet] - [#132853]) +- Remove old codeowner no longer working on the integration ([@shapournemati-iotty] - [#132807]) +- Fix docker hassfest ([@edenhaus] - [#132823]) +- Migrate flux to use Kelvin over Mireds ([@epenet] - [#132839]) +- Add remaining test coverage to yale_smart_alarm ([@gjohansson-ST] - [#132869]) +- Migrate tasmota lights to use Kelvin ([@epenet] - [#132798]) +- Migrate zha lights to use Kelvin ([@epenet] - [#132816]) +- Enable pydantic.v1 mypy plugin ([@cdce8p] - [#132907]) +- upgrade iottycloud lib to 0.3.0 ([@shapournemati-iotty] - [#132836]) +- Allow bytearray for mqtt payload type ([@cdce8p] - [#132906]) +- Use snapshot tests for remaining myuplink platforms ([@astrandb] - [#132915]) +- Create quality_scale.yaml from integration scaffold script ([@farmio] - [#132199]) +- Velbus add quality_scale.yaml ([@cereal2nd] - [#131377]) +- Set quality_scale for myUplink to Silver ([@astrandb] - [#132923]) +- Adjust lifx to use local _ATTR_COLOR_TEMP constant ([@epenet] - [#132840]) +- Add data description to suez_water config flow ([@jb101010-2] - [#132466]) +- Migrate mqtt lights to use Kelvin ([@epenet] - [#132828]) +- Split the velbus services code in its own file ([@cereal2nd] - [#131375]) +- Fix mqtt light attributes ([@epenet] - [#132941]) +- Set go2rtc quality scale to internal ([@edenhaus] - [#132945]) +- Update xknx to 3.4.0 ([@farmio] - [#132943]) +- Add Dutch locale on supported Alexa interfaces ([@jbouwh] - [#132936]) +- Record current IQS state for Russound RIO ([@noahhusby] - [#131219]) +- Add quality scale for nest integration ([@allenporter] - [#131330]) +- Improve coverage in light reproduce state ([@epenet] - [#132929]) +- Trigger full ci run on global mypy config change ([@cdce8p] - [#132909]) +- Remove port from Elgato configuration flow ([@frenck] - [#132961]) +- Bump pylamarzocco to 1.4.0 ([@zweckj] - [#132917]) +- Add parallel updates & use typed config entry for Russound RIO ([@noahhusby] - [#132958]) +- Update quality scale for nordpool ([@gjohansson-ST] - [#132964]) +- Merge feature branch with backup changes to dev ([@emontnemery] - [#132954]) +- Add reconfiguration flow to myuplink ([@astrandb] - [#132970]) +- Set strict typing for myuplink ([@astrandb] - [#132972]) +- Add missing body height icon in Withings integration ([@CFenner] - [#132991]) +- Introduce parallel updates for Plugwise ([@CoMPaTech] - [#132940]) +- Enforce strict typing for Russound RIO ([@noahhusby] - [#132982]) +- Improve config flow test coverage for Russound RIO ([@noahhusby] - [#132981]) +- Set parallel updates for roku ([@ctalkington] - [#132892]) +- Set parallel updates in Elgato ([@frenck] - [#132998]) +- Migrate elgato light tests to use Kelvin ([@epenet] - [#133004]) +- Move coordinator for TwenteMilieu into own module ([@frenck] - [#133000]) +- Bump velbusaio to 2024.12.0 ([@cereal2nd] - [#132989]) +- Use ConfigEntry runtime_data in EnergyZero ([@klaasnicolaas] - [#132979]) +- Don't use kitchen_sink integration in config entries tests ([@emontnemery] - [#133012]) +- Fix config entry import in Twente Milieu diagnostic ([@frenck] - [#133017]) +- Migrate google_assistant color_temp handlers to use Kelvin ([@epenet] - [#132997]) +- Add reconfigure flow for Powerfox integration ([@klaasnicolaas] - [#132260]) +- Improve diagnostics code of EnergyZero integration ([@klaasnicolaas] - [#133019]) +- Migrate tplink light tests to use Kelvin ([@epenet] - [#133026]) +- Small test cleanups in Twente Milieu ([@frenck] - [#133028]) +- Adjust backup agent platform ([@emontnemery] - [#132944]) +- Migrate template light tests to use Kelvin ([@epenet] - [#133025]) +- Explicitly pass config entry to coordinator in Elgato ([@frenck] - [#133014]) +- Clean up Elgato config flow tests ([@frenck] - [#133045]) +- Bump hass-nabucasa from 0.86.0 to 0.87.0 ([@klejejs] - [#133043]) +- Improve husqvarna_automower decorator typing ([@cdce8p] - [#133047]) +- Add data descriptions to Twente Milieu config flow ([@frenck] - [#133046]) +- Fix music_assistant decorator typing ([@cdce8p] - [#133044]) +- Bump ruff to 0.8.2 ([@autinerd] - [#133041]) +- Small test improvements to Tailwind tests ([@frenck] - [#133051]) +- Bump uv to 0.5.8 ([@edenhaus] - [#133036]) +- Migrate emulated_hue light tests to use Kelvin ([@epenet] - [#133006]) +- Migrate esphome light tests to use Kelvin ([@epenet] - [#133008]) +- Migrate homekit light tests to use Kelvin ([@epenet] - [#133011]) +- Improve Callable annotations ([@cdce8p] - [#133050]) +- Use PEP 695 TypeVar syntax ([@cdce8p] - [#133049]) +- Migrate mqtt light tests to use Kelvin ([@epenet] - [#133035]) +- Adjust light test helpers to use Kelvin, and cleanup unused helpers ([@epenet] - [#133048]) +- Remove reference to self.min/max_mireds in mqtt light ([@epenet] - [#133055]) +- Fix load of backup store ([@emontnemery] - [#133024]) +- Bump velbusaio to 2024.12.1 ([@cereal2nd] - [#133056]) +- Migrate deconz light tests to use Kelvin ([@epenet] - [#133002]) +- Fix backup strategy retention filter ([@MartinHjelmare] - [#133060]) +- Add HEOS quality scale ([@andrewsayre] - [#132311]) +- Update demetriek to v1.1.0 ([@frenck] - [#133064]) +- Explicitly pass config entry to coordinator in Tailwind ([@frenck] - [#133065]) +- Migrate group light tests to use Kelvin ([@epenet] - [#133010]) +- Use ConfigEntry runtime_data in easyEnergy ([@klaasnicolaas] - [#133053]) +- Improve auth generic typing ([@cdce8p] - [#133061]) +- Add support for subentries to config entries ([@emontnemery] - [#117355]) +- Migrate wiz light tests to use Kelvin ([@epenet] - [#133032]) +- Migrate abode light tests to use Kelvin ([@epenet] - [#133001]) +- Add new integration slide_local ([@dontinelli] - [#132632]) +- Migrate flux_led light tests to use Kelvin ([@epenet] - [#133009]) +- Add Cookidoo integration ([@miaucl] - [#129800]) +- Migrate wemo light tests to use Kelvin ([@epenet] - [#133031]) +- Migrate tradfri light tests to use Kelvin ([@epenet] - [#133030]) +- Migrate yeelight light tests to use Kelvin ([@epenet] - [#133033]) +- Migrate zwave_js light tests to use Kelvin ([@epenet] - [#133034]) +- Promote Twente Milieu quality scale to silver ([@frenck] - [#133074]) +- Migrate demo light tests to use Kelvin ([@epenet] - [#133003]) +- Migrate switch_as_x light tests to use Kelvin ([@epenet] - [#133023]) +- Migrate smartthings light tests to use Kelvin ([@epenet] - [#133022]) +- Use runtime_data in velbus ([@cereal2nd] - [#132988]) +- Small improvements to the AdGuard tests ([@frenck] - [#133073]) +- Add source zone exclusion to Russound RIO ([@noahhusby] - [#130392]) +- Refactor light reproduce state to use kelvin attribute ([@epenet] - [#132854]) +- Migrate alexa color_temp handlers to use Kelvin ([@epenet] - [#132995]) +- Migrate lifx light tests to use Kelvin ([@epenet] - [#133020]) +- Improve Solar.Forecast configuration flow tests ([@frenck] - [#133077]) +- Add test-before-setup rule to quality_scale validation ([@epenet] - [#132255]) +- Fix CI failure in russound_rio ([@epenet] - [#133081]) +- Update Rainbird quality scale grading on the Silver quality checks ([@allenporter] - [#131498]) +- Use correct ATTR_KELVIN constant in yeelight tests ([@epenet] - [#133088]) +- Bump github/codeql-action from 3.27.7 to 3.27.9 (@dependabot - [#133104]) +- Move config entry type of energyzero integration ([@klaasnicolaas] - [#133094]) +- Remove unused constant from blink ([@epenet] - [#133109]) +- Handle step size correctly in myuplink number platform ([@astrandb] - [#133016]) +- Bump watchdog to 6.0.0 ([@mweinelt] - [#132895]) +- Update devcontainer to Python 3.13 ([@cdce8p] - [#132313]) +- Velbus docs quality bump ([@cereal2nd] - [#133070]) +- Simplify access to hass in service calls ([@epenet] - [#133062]) +- Use internal min/max mireds in template ([@epenet] - [#133113]) +- Add mWh as unit of measurement for Matter energy sensors ([@agners] - [#133005]) +- Remove HEOS yaml import ([@andrewsayre] - [#133082]) +- Remove `native_unit_of_measurement` from rfxtrx counters ([@jrieger] - [#133108]) +- Replace functools.partial with ServiceCall.hass in knx ([@epenet] - [#133111]) +- Add data/data_description translation checks ([@epenet] - [#131705]) +- Raise issue for deprecated imperial unit system ([@gjohansson-ST] - [#130979]) +- Fix failing CI due to Russound Rio incorrect IQS ([@frenck] - [#133118]) +- Add a quality scale for Google Tasks ([@allenporter] - [#131497]) +- Cookidoo reauth config flow for silver ([@miaucl] - [#133110]) +- Fix typo in `WaterHeaterEntityDescription` name ([@lboue] - [#132888]) +- Add contact vip info to fritzbox_callmonitor sensor ([@cdce8p] - [#132913]) +- Push Nibe package to 2.14.0 ([@martijnrusschen] - [#133125]) +- Make Twitch sensor state and attributes translatable ([@jpbede] - [#133127]) +- Update open-meteo to v0.3.2 ([@frenck] - [#133122]) +- Reduce functools.partial with ServiceCall.hass in energyzero ([@epenet] - [#133134]) +- Replace functools.partial with ServiceCall.hass in unifiprotect ([@epenet] - [#133131]) +- Replace functools.partial with ServiceCall.hass in tibber ([@epenet] - [#133132]) +- Reduce functools.partial with ServiceCall.hass in easyenergy ([@epenet] - [#133133]) +- Improve data description and title for Cookidoo integration ([@miaucl] - [#133106]) +- Bump velbusaio to 2024.12.2 ([@cereal2nd] - [#133130]) +- Fix typos in devolo Home Network tests ([@Shutgun] - [#133139]) +- Set quality scale to silver for Powerfox integration ([@klaasnicolaas] - [#133095]) +- Add warning when light entities do not provide kelvin attributes or properties ([@epenet] - [#132723]) +- Fix missing password for slide_local ([@dontinelli] - [#133142]) +- Bump PyViCare to 2.38.0 ([@CFenner] - [#133126]) +- Velbus test before setup ([@cereal2nd] - [#133069]) +- Add reconfigure flow to MQTT ([@jbouwh] - [#132246]) +- Deprecate light constants ([@epenet] - [#132680]) +- Fix Tailwind config entry typing in async_unload_entry signature ([@frenck] - [#133153]) +- Bump ruff to 0.8.3 ([@autinerd] - [#133163]) +- Update debugpy to 1.8.11 ([@frenck] - [#133169]) +- Add STT error code for cloud authentication failure ([@synesthesiam] - [#133170]) +- Add response slot to HassRespond intent ([@synesthesiam] - [#133162]) +- Add eheimdigital integration ([@autinerd] - [#126757]) +- Bump uiprotect to 7.0.2 ([@bdraco] - [#132975]) +- Improve Slide Local device tests ([@joostlek] - [#133197]) +- Bump openwebifpy to 4.3.0 ([@autinerd] - [#133188]) +- Add reconfiguration to slide_local ([@dontinelli] - [#133182]) +- Add button entity to slide_local ([@dontinelli] - [#133141]) +- Add Ohme integration ([@dan-r] - [#132574]) +- Switcher move _async_call_api to entity.py ([@YogevBokobza] - [#132877]) +- Suez_water: add removal instructions ([@jb101010-2] - [#133206]) +- Bump pynecil to 2.1.0 ([@tr4nt0r] - [#133211]) +- Update Fronius translations ([@farmio] - [#132876]) +- set PARALLEL_UPDATES to 1 for enphase_envoy ([@catsmanac] - [#132373]) +- Suez_water: store coordinator in runtime_data ([@jb101010-2] - [#133204]) +- Fix pydantic warnings in purpleair ([@cdce8p] - [#133247]) +- Bump aioautomower to 2024.12.0 ([@Thomas55555] - [#132962]) +- Fix enigma2 integration for devices not reporting MAC address ([@autinerd] - [#133226]) +- Enhance translation strings in fibaro ([@rappenze] - [#133234]) +- Replace aiogithub dependency with pynecil update check ([@tr4nt0r] - [#133213]) +- Use entry.runtime_data in fibaro ([@rappenze] - [#133235]) +- Fix lingering mqtt device_trigger unload entry test ([@jbouwh] - [#133202]) +- Replace "this" with "a" to fix Install Update action description ([@NoRi2909] - [#133210]) +- Improve BMW translations ([@rikroe] - [#133236]) +- Update elevenlabs to 1.9.0 ([@cdce8p] - [#133264]) +- Mark Google Tasks action-exceptions quality scale as done ([@allenporter] - [#133253]) +- Bump pymodbus version 3.7.4 ([@crug80] - [#133175]) +- Don't update existing Fronius config entries from config flow ([@farmio] - [#132886]) +- Improve MQTT json color_temp validation ([@jbouwh] - [#133174]) +- Update quality scale documentation rules in IronOS integration ([@tr4nt0r] - [#133245]) +- Add button platform to Ohme ([@dan-r] - [#133267]) +- Use typed BMWConfigEntry ([@rikroe] - [#133272]) +- Fix two typos in KEF strings ([@NoRi2909] - [#133294]) +- Bump pynordpool 0.2.3 ([@gjohansson-ST] - [#133277]) +- Explicitly set `PARALLEL_UPDATES` for Google Tasks ([@allenporter] - [#133296]) +- Refactor Onkyo tests to patch underlying pyeiscp library ([@eclair4151] - [#132653]) +- Update quality scale for Nord Pool ([@gjohansson-ST] - [#133282]) +- Bump plugwise to v1.6.4 and adapt ([@bouwew] - [#133293]) +- Fix typo "configurered" in MQTT ([@NoRi2909] - [#133295]) +- Improve Fronius tests ([@farmio] - [#132872]) +- Mark Google Tasks `test-before-setup` quality scale rule as `done` ([@allenporter] - [#133298]) +- Adjust MQTT tests not to assert on deprecated color_temp attribute ([@jbouwh] - [#133198]) +- Fix missing Fronius data_description translation for reconfigure flow ([@farmio] - [#133304]) +- Increase test coverage for google tasks init ([@allenporter] - [#133252]) +- Full test coverage for Vodafone Station button platform ([@chemelli74] - [#133281]) +- Cleanup tests for tedee ([@zweckj] - [#133306]) +- Split coordinator in lamarzocco ([@zweckj] - [#133208]) +- Conversation: Use [] when we know key exists ([@balloob] - [#133305]) +- Update docker base image to 2024.12.1 ([@cdce8p] - [#133323]) +- Set default min/max color temperature in abode lights ([@epenet] - [#133331]) +- Set default min/max color temperature in demo lights ([@epenet] - [#133330]) +- Add reconfigure flow to Roku ([@ctalkington] - [#132986]) +- Set default min/max color temperature in wemo lights ([@epenet] - [#133338]) +- Avoid string manipulations in hassio backup reader/writer ([@emontnemery] - [#133339]) +- Set default min/max color temperature in deconz lights ([@epenet] - [#133333]) +- Use `ConfigEntry.runtime_data` in Twitch ([@jpbede] - [#133337]) +- Set default min/max color temperature in matter lights ([@epenet] - [#133340]) +- Suez_water: mark reached bronze scale level ([@jb101010-2] - [#133352]) +- Set default min/max color temperature in homekit_controller lights ([@epenet] - [#133334]) +- Reduce false-positives in test-before-setup IQS check ([@epenet] - [#133349]) +- Add Idasen Desk quality scale record ([@abmantis] - [#132368]) +- Add Habitica quality scale record ([@tr4nt0r] - [#131429]) +- Record current IQS state for LaMetric ([@frenck] - [#133040]) +- Use unique_id in devolo Home Network tests ([@Shutgun] - [#133147]) +- Update myuplink quality scale ([@astrandb] - [#133083]) +- Velbus finish config-flow-test-coverage ([@cereal2nd] - [#133149]) +- Add reauth flow to Ituran ([@shmuelzon] - [#132755]) +- Remove custom "unknown" state from Fronius Enum sensor ([@farmio] - [#133361]) +- Velbus add PARALLEL_UPDATES to all platforms ([@cereal2nd] - [#133155]) +- Update hassio backup agents on mount added or removed ([@emontnemery] - [#133344]) +- Translate exception messages in myUplink ([@astrandb] - [#131626]) +- Add HEOS reconfigure flow ([@andrewsayre] - [#133326]) +- Set default min/max color temperature in mqtt lights ([@epenet] - [#133356]) +- Increase backup upload timeout ([@ludeeus] - [#132990]) +- Add quality scale to ElevenLabs ([@sorgfresser] - [#133276]) +- Remove support for live recorder data post migration of entity IDs ([@emontnemery] - [#133370]) +- Gives a friendly name to emoncms entities if unit is not specified ([@alexandrecuer] - [#133358]) +- Add switch platform to local_slide ([@dontinelli] - [#133369]) +- Load sun via entity component ([@gjohansson-ST] - [#132598]) +- Improvements to the LaMetric config flow tests ([@frenck] - [#133383]) +- Add required domain to vacuum intents ([@synesthesiam] - [#133166]) +- Update axis to v64 ([@cdce8p] - [#133385]) +- Remove setup entry mock assert from LaMetric config flow ([@frenck] - [#133387]) +- Add reauth flow to Ohme ([@dan-r] - [#133275]) +- Nord Pool iqs platinum ([@gjohansson-ST] - [#133389]) +- Add Matter battery replacement description ([@lboue] - [#132974]) +- Update mypy-dev to 1.14.0a7 ([@cdce8p] - [#133390]) +- Fix issue when no data, where the integer sensor value is given a string ([@vche] - [#132123]) +- Add tests for Habitica integration ([@tr4nt0r] - [#131780]) +- Fix mqtt reconfigure flow ([@jbouwh] - [#133315]) +- Add palazzetti status sensor ([@dotvav] - [#131348]) +- Fix incorrect schema in config tests ([@epenet] - [#133404]) +- Add quality_scale.yaml to enphase_envoy ([@catsmanac] - [#132489]) +- Fix schema translation checks for nested config-flow sections ([@epenet] - [#133392]) +- Check if requirement is typed in strict_typing IQS validation ([@epenet] - [#133415]) +- Bump aiohasupervisor to version 0.2.2b2 ([@emontnemery] - [#133417]) +- Add reconfigure to Cookidoo integration ([@miaucl] - [#133144]) +- Improve hassio backup agent test coverage ([@emontnemery] - [#133424]) +- Improve hassio backup agent test coverage ([@emontnemery] - [#133426]) +- Mark lamarzocco as platinum quality ([@zweckj] - [#131609]) +- Mark acaia as platinum quality ([@zweckj] - [#131723]) +- Record current IQS scale for Tailwind ([@frenck] - [#133158]) +- Add MFA login flow support for cloud component ([@klejejs] - [#132497]) +- Record current IQS state for SABnzbd ([@jpbede] - [#131656]) +- Add quality scale for Fronius ([@farmio] - [#131770]) +- Adapt hassio backup agent to supervisor changes ([@emontnemery] - [#133428]) +- Fix two occurrences of "HomeAssistant" adding the missing space ([@NoRi2909] - [#133435]) +- Don't raise when removing non-existing cloud backup ([@emontnemery] - [#133429]) +- Remove three duplicated space characters in strings.json ([@NoRi2909] - [#133436]) +- Add transmission download path to events + add_torrent service ([@DrBlokmeister] - [#121371]) +- Support units and filters in async_get_travel_times_service for waze_travel_time ([@eifinger] - [#130776]) +- Simplify modern_forms config flow (part 2) ([@epenet] - [#130494]) +- Distinct sources per zone in Onkyo ([@arturpragacz] - [#130547]) +- Clean up backups after manual backup ([@emontnemery] - [#133434]) +- Don't run recorder data migration on new databases ([@emontnemery] - [#133412]) +- Improve empty state handling for SomfyThermostat in Overkiz ([@iMicknl] - [#131700]) +- Add optional category in OptionsFlow to holiday ([@gjohansson-ST] - [#129514]) +- Add missing CozyTouch servers to ConfigFlow expection handler in Overkiz ([@iMicknl] - [#131696]) +- Limit unique_id migration to platform for BMW ([@rikroe] - [#131582]) +- Remove unused constants from SABnzbd ([@jpbede] - [#133445]) +- Allow only single instance of energyzero integration ([@klaasnicolaas] - [#133443]) +- Use entity services in bluesound integration ([@LouisChrist] - [#129266]) +- Differentiate File integration entries by prefixing the title with the platform instead ([@benjamin-dcs] - [#131016]) +- Mark docs-removal-instructions for SABnzbd as done ([@jpbede] - [#133446]) +- Allow only single instance of easyenergy integration ([@klaasnicolaas] - [#133447]) +- Do not remove services when last config entry is unloaded in SABnzbd ([@jpbede] - [#133449]) +- Fix reconfigure in Nord Pool ([@gjohansson-ST] - [#133431]) +- Add Get price service to Nord Pool ([@gjohansson-ST] - [#130185]) +- Add integration_type to Idasen Desk ([@abmantis] - [#132486]) +- Bump actions/upload-artifact from 4.4.3 to 4.5.0 (@dependabot - [#133461]) +- Add sensors to Ituran integration ([@shmuelzon] - [#133359]) +- Add reconfigure flow to Russound RIO ([@noahhusby] - [#133091]) +- Add support for ACB batteries to Enphase Envoy ([@catsmanac] - [#131298]) +- Improve test coverage for Russound RIO ([@noahhusby] - [#133096]) +- Lift SABnzbd to bronze quality scale ([@jpbede] - [#133453]) +- Use a common base entity for Idasen Desk ([@abmantis] - [#132496]) +- Add ssdp discovery to Onkyo ([@eclair4151] - [#131066]) +- Fix test-before-setup IQS check ([@epenet] - [#133467]) +- Handle Home Connect error at diagnostics ([@Diegorro98] - [#131644]) +- Bump pypalazzetti to 0.1.15 ([@dotvav] - [#133433]) +- Add name to cloud connection info response ([@ludeeus] - [#133468]) +- Use enum instead of string for button entities key in Overkiz ([@iMicknl] - [#133472]) +- Add identify device class in Overkiz ([@iMicknl] - [#133474]) +- Set the with_strategy_settings to None for unknown backups ([@emontnemery] - [#133466]) +- Change device class from Volume to Volume Storage in Overkiz ([@iMicknl] - [#133473]) +- Add test button for SmokeSensor in Overkiz ([@iMicknl] - [#133476]) +- Add support for SwitchBot Relay Switch 1 and Relay Switch 1PM ([@greyeee] - [#132327]) +- Rename test file to singular form ([@joostlek] - [#133482]) +- Revert "Add support for subentries to config entries" ([@emontnemery] - [#133470]) +- Remove uneeded logger param from Idasen Desk Coordinator ([@abmantis] - [#133485]) +- Allow data description in sections ([@basbruss] - [#128965]) +- Deprecate Home Connect program switches ([@Diegorro98] - [#131641]) +- Add device_id parameter to LCN actions (service calls) ([@alengwenus] - [#129590]) +- Add entity translations to devolo Home Control ([@Shutgun] - [#132927]) +- Complete adding custom integration action sections support to hassfest ([@mj23000] - [#132443]) +- Add sensors platform to Watergate integration ([@adam-the-hero] - [#133015]) +- Add ability to translate ENUM sensor states in Unifi integration ([@bieniu] - [#131921]) +- Change log level of connection failure to info ([@philipdouglas] - [#132625]) +- Add diagnostics to slide_local ([@dontinelli] - [#133488]) +- Add (de)humidifier platform to Honeywell ([@mkmer] - [#132287]) +- Add exceptions and translations for slide_local ([@dontinelli] - [#133490]) +- Update quality scale for Russound RIO ([@noahhusby] - [#133093]) +- Rename strategy backup to automatic backup ([@emontnemery] - [#133489]) +- Increase Squeezebox config_flow test coverage to 100% ([@peteS-UK] - [#133484]) +- add exception translation to enphase_envoy ([@catsmanac] - [#132483]) +- Store automatic backup flag in backup metadata ([@emontnemery] - [#133500]) +- Add Peblar Rocksolid EV Chargers integration ([@frenck] - [#133501]) +- weatherkit: use stale data for up to an hour if updates fail ([@tjhorner] - [#130398]) +- Add select platform to IronOS ([@tr4nt0r] - [#132218]) +- Add tests for already_configured erros in IronOS integration ([@tr4nt0r] - [#132265]) +- Update number platform values before add in APSystems and add tests ([@Thomas55555] - [#131938]) +- Add "cancel room setpoint override" button to opentherm_gw ([@mvn23] - [#132162]) +- Use Switcher _async_call_api in climate ([@thecode] - [#133230]) +- Fix the local_file.update_file_path action's name and description ([@NoRi2909] - [#133509]) +- Reolink translate errors ([@starkillerOG] - [#132301]) +- Add tests for cover and increase test coverage for slide_local ([@dontinelli] - [#133515]) +- Ensure indices needed by data migrators exist ([@emontnemery] - [#133367]) +- Bump PyViCare to 2.39.0 ([@CFenner] - [#133519]) +- Bump uiprotect to 7.1.0 ([@RaHehl] - [#133520]) +- Reolink platinum quality scale ([@starkillerOG] - [#133514]) +- Fix names and description of two actions ([@NoRi2909] - [#133528]) +- Bump idasen-ha to 2.6.3 ([@abmantis] - [#133508]) +- Improve field descriptions for Download file action ([@NoRi2909] - [#133413]) +- Add integration setup tests to Peblar Rocksolid EV Chargers ([@frenck] - [#133532]) +- Simplify Idasen Desk entity properties ([@abmantis] - [#133536]) +- Add zeroconf discovery to Peblar Rocksolid EV chargers ([@frenck] - [#133529]) +- Optimize start time state queries for PostgreSQL ([@bdraco] - [#133228]) +- Use mV and mA as units for electrical power measurement in Matter ([@agners] - [#133505]) +- Set default min/max color temperature in hue lights ([@epenet] - [#133548]) +- Revert "Update docker base image to 2024.12.1" ([@frenck] - [#133552]) +- Add comment motivating magic number for MySQL error codes ([@emontnemery] - [#133516]) +- Bump pydantic to 2.10.4 ([@bdraco] - [#133539]) +- Revert "Optimize start time state queries for PostgreSQL" ([@bdraco] - [#133555]) +- Fulfill IQS rule config-flow in ViCare integration ([@CFenner] - [#133524]) +- Create repair issues when automatic backup fails ([@emontnemery] - [#133513]) +- Update Home Assistant base image to 2024.12.0 ([@frenck] - [#133558]) +- Grammar fixes for action names and descriptions ([@NoRi2909] - [#133559]) +- Change 'GSuite' to 'Workspace', fix 'Start' field label ([@NoRi2909] - [#133554]) +- Bump codecov/codecov-action from 5.1.1 to 5.1.2 (@dependabot - [#133547]) +- Replace start time state query with single correlated scalar subquery ([@bdraco] - [#133553]) +- Revert "Revert "Improve recorder history queries (#131702)"" ([@emontnemery] - [#133561]) +- Revert "Revert "Simplify recorder RecorderRunsManager (#131785)"" ([@emontnemery] - [#133564]) +- Add mW as unit of measurement for Matter electrical power sensors ([@agners] - [#133504]) +- Set Russound RIO quality scale to silver ([@noahhusby] - [#133494]) +- Bump pylamarzocco to 1.4.1 ([@zweckj] - [#133557]) +- Fix boot loop after restoring backup ([@emontnemery] - [#133581]) +- Improve Google Tasks coordinator updates behavior ([@allenporter] - [#133316]) +- Update Airgradient quality scale ([@joostlek] - [#133569]) +- Add data descriptions to Mealie integration ([@andrew-codechimp] - [#133590]) +- Set default min/max color temperature in template lights ([@epenet] - [#133549]) +- Add basic UniFi Protect AiPort support ([@RaHehl] - [#133523]) +- Improve Airgradient config flow tests ([@joostlek] - [#133594]) +- Bump yalexs-ble to 2.5.6 ([@bdraco] - [#133593]) +- Update Idasen Desk user flow step strings ([@abmantis] - [#133605]) +- Fix Watergate Water meter volume sensor ([@adam-the-hero] - [#133606]) +- Mark `docs-installation-parameters` for SABnzbd as done ([@jpbede] - [#133609]) +- Bump PyViCare to 2.39.1 ([@CFenner] - [#133619]) +- Remove lower bound for history start time state query ([@bdraco] - [#133607]) +- Fixes and code cleanup for IronOS integration ([@tr4nt0r] - [#133579]) +- Add min/max price sensor to Nord Pool ([@gjohansson-ST] - [#133534]) +- Add async_register_backup_agents_listener to cloud/backup ([@ludeeus] - [#133584]) +- Define setpoints as constants in flexit_bacnet ([@lellky] - [#133580]) +- Switch to official Zabbix Python API ([@kruton] - [#131674]) +- Bump aiohasupervisor to version 0.2.2b3 ([@emontnemery] - [#133631]) +- Add scale support to lamarzocco ([@zweckj] - [#133335]) +- Upgrade QS from bronze to silver for slide_local ([@dontinelli] - [#133560]) +- Record Knocki quality scale ([@joostlek] - [#133582]) +- Record Mealie quality scale ([@joostlek] - [#133587]) +- Record NYT Games quality scale ([@joostlek] - [#133592]) +- Add Swiss Public Transport quality scale record ([@miaucl] - [#131629]) +- Fix homeassistant_included flag for local backups ([@emontnemery] - [#133640]) +- Fix reading extra metadata for local backups ([@emontnemery] - [#133643]) +- Record Analytics Insights quality scale ([@joostlek] - [#133571]) +- Reject duplicates in WS command backup/config/update ([@emontnemery] - [#133650]) +- Fix inconsistent spelling of "PIN" vs. "pin" ([@NoRi2909] - [#133656]) +- Fix inconsistent spelling of "PIN" vs. "pin" ([@NoRi2909] - [#133655]) +- Add Mealie to strict typing ([@joostlek] - [#133644]) +- Fix inconsistent spelling of "PIN" and "ID" ([@NoRi2909] - [#133653]) +- Fix logic in backup retention filter ([@emontnemery] - [#133654]) +- Bump aiohasupervisor to version 0.2.2b4 ([@emontnemery] - [#133652]) +- Add outlet device class to iotty switch entity ([@shapournemati-iotty] - [#132912]) +- Validate password before restoring backup ([@emontnemery] - [#133647]) +- Fix target temperature for AtlanticElectricalTowelDryer in Overkiz ([@iMicknl] - [#133657]) +- Add translations to Mealie exceptions ([@joostlek] - [#133648]) +- Bump pypck to 0.8.1 ([@alengwenus] - [#133646]) +- Add missing await in Minecraft Server ([@elmurato] - [#133670]) +- Add check for client errors to stream component ([@sdb9696] - [#132866]) +- Replace tests for Idasen Desk with parameterized test ([@abmantis] - [#133672]) +- Improve recorder data migrator tests ([@emontnemery] - [#133628]) +- Reword invoke_pin action to avoid misunderstanding with "PIN" ([@NoRi2909] - [#133665]) +- Add parallel updates to Mealie ([@joostlek] - [#133660]) +- Bump intents to 2024.12.20 ([@synesthesiam] - [#133676]) +- Allow Filter title to be translated ([@gjohansson-ST] - [#128929]) +- Update Roborock to 2.8.4 ([@Lash-L] - [#133680]) +- Fix Mealie test coverage ([@joostlek] - [#133659]) +- Bump PySwitchbot to 0.55.2 ([@bdraco] - [#133690]) +- Add initial support for SwitchBot relay switch ([@greyeee] - [#130863]) +- Add entity translation strings for ScreenLogic ([@dieselrabbit] - [#130708]) +- Bump Ohme library version to 1.2.0 ([@dan-r] - [#133666]) +- iaqualink: fix load_verify_locations() blocking call ([@flz] - [#133459]) +- Use common mock fixture in Idasen Desk config flow tests ([@abmantis] - [#133679]) +- Adjust the default backup name ([@emontnemery] - [#133668]) +- Improve HEOS group handling ([@andrewsayre] - [#132213]) +- Simplify query to find oldest state ([@bdraco] - [#133700]) +- Improve purge performance for PostgreSQL with large databases ([@bdraco] - [#133699]) +- Update the Google Tasks quality scale with documentation improvements ([@allenporter] - [#133701]) +- Add update platform to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133570]) +- Fix inconsistent use of "pin" vs. "PIN" ([@NoRi2909] - [#133685]) +- Replace lowercase "pin" in error message with the correct "PIN" ([@NoRi2909] - [#133684]) +- Change "pin" to "PIN" for consistency with common string ([@NoRi2909] - [#133682]) +- Change "pin" to correct "PIN" for consistent translations ([@NoRi2909] - [#133681]) +- Handle WebsocketConnectionError during mqtt auto reconnect ([@bdraco] - [#133697]) +- Improve BMW config flow ([@rikroe] - [#133705]) +- Allow lamarzocco to reconnect websocket ([@zweckj] - [#133635]) +- Enable AEMET data cache ([@Noltari] - [#131226]) +- Add diagnostic to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133706]) +- Use MAC address in Twinkly `DeviceInfo.connections` ([@bieniu] - [#133708]) +- Add sensors tests for Peblar Rocksolid EV Chargers ([@frenck] - [#133710]) +- Adjust freezer tick in settings tests of IronOS integration ([@tr4nt0r] - [#133707]) +- Fix section translations check ([@arturpragacz] - [#133683]) +- Store Twinkly runtime data in config entry ([@bieniu] - [#133714]) +- Add updates tests for Peblar Rocksolid EV Chargers ([@frenck] - [#133712]) +- Test color_temp updates are processed when an mqtt json light is turned off ([@jbouwh] - [#133715]) +- Fix test coverage in workday ([@gjohansson-ST] - [#133616]) +- Add device test for Peblar Rocksolid EV Chargers ([@frenck] - [#133713]) +- Use super constructor self.config_entry in enphase_envoy coordinator ([@catsmanac] - [#133718]) +- Use mac address in Twinkly for unique id ([@joostlek] - [#133717]) +- Fix spelling of "Gateway PIN" and remove two excessive spaces ([@NoRi2909] - [#133716]) +- Add select platform to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133720]) +- KNX: Option to select specific tunnel endpoint on TCP connections ([@farmio] - [#131996]) +- Update aiohasupervisor to 0.2.2b5 ([@frenck] - [#133722]) +- Add power and energy related sensors to Peblar Rocksolid EV Chargers ([@frenck] - [#133729]) +- Update AEMET-OpenData to v0.6.4 ([@Noltari] - [#133723]) +- Add missing asserts to enphase_envoy config flow test ([@catsmanac] - [#133730]) +- Reuse title of deleted enphase_envoy config entry if present ([@catsmanac] - [#133611]) +- Replace two outdated occurrences of "service" with "action" ([@NoRi2909] - [#133728]) +- Replace "service" with "action" in Z-Wave action descriptions ([@NoRi2909] - [#133727]) +- Add reconfiguration flow to Plugwise ([@CoMPaTech] - [#132878]) +- Bump tplink python-kasa dependency to 0.9.0 ([@sdb9696] - [#133735]) +- Change niko_home_control library to nhc to get push updates ([@VandeurenGlenn] - [#132750]) +- Add DHCP discovery to Withings ([@joostlek] - [#133737]) +- Add number platform to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133739]) +- Add switch platform to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133749]) +- Update peblar to v0.3.0 ([@frenck] - [#133751]) +- Fix Peblar current limit user setting value ([@frenck] - [#133753]) +- Add binary sensor platform to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133755]) +- Add more sensors to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133754]) +- Add reauthentication support to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133757]) +- Replace queries using distinct with correlated scalar subqueries to significantly improve purge performance ([@bdraco] - [#133748]) +- Reduce complexity to find unused data_ids and attributes_ids for db engines with slow range select ([@bdraco] - [#133752]) +- TotalConnect use entry.runtime_data ([@austinmroczek] - [#133756]) +- Bump pyOverkiz to 1.15.4 ([@iMicknl] - [#133769]) +- Add additional Hitachi sensors to Overkiz ([@iMicknl] - [#133772]) +- Update integration quality scale for Peblar Rocksolid EV Chargers ([@frenck] - [#133764]) +- Merge similar tests to parameterized tests for enphase_envoy ([@catsmanac] - [#133740]) +- Migrate to runtime data in Overkiz ([@iMicknl] - [#133760]) +- Add support for HitachiAirToWaterHeatingZone in Overkiz ([@iMicknl] - [#133768]) +- Use new UnitOfEnergy constants in Overkiz ([@iMicknl] - [#133778]) +- Fix binary_sensor typing in Overkiz ([@iMicknl] - [#133782]) +- Add button platform to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133780]) +- Refactor Twinkly tests ([@joostlek] - [#133725]) +- Update quality-scale status for enphase_envoy config_flow missing data descriptions ([@catsmanac] - [#133726]) +- Set parallel updates for Peblar Rocksolid EV Chargers integration ([@frenck] - [#133786]) +- Fix errors in HitachiDHW in Overkiz ([@iMicknl] - [#133765]) +- Add base entity for Niko Home Control ([@joostlek] - [#133744]) +- Remove myself from govee_ble codeowners ([@PierreAronnax] - [#133790]) +- Add base entity to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133794]) +- Add reconfigure flow to Peblar Rocksolid EV Chargers integration ([@frenck] - [#133785]) +- Add button error handling for Peblar Rocksolid EV Chargers ([@frenck] - [#133802]) +- Use feature checks in tplink integration ([@sdb9696] - [#133795]) +- Add config flow stream preview to generic camera ([@davet2001] - [#122563]) +- Bump Weheat to 2024.12.22 ([@jesperraemaekers] - [#133796]) +- Bump PySwitchbot to 0.55.3 ([@bdraco] - [#133812]) +- Bump async-upnp-client to 0.42.0 ([@StevenLooman] - [#133806]) +- Add Compressor, Inside Unit and Energy Output fields to Weheat ([@barryvdh] - [#129632]) +- Show device name in Twinkly discovery ([@joostlek] - [#133814]) +- Add binary states for Weheat indoor unit ([@barryvdh] - [#133811]) +- Add select error handling for Peblar Rocksolid EV Chargers ([@frenck] - [#133804]) +- Fix typo in ElevenLabs ([@sorgfresser] - [#133819]) +- Remove unneeded type for enphase_envoy coordinator in async_unload_entry ([@catsmanac] - [#133817]) +- Add switch error handling for Peblar Rocksolid EV Chargers ([@frenck] - [#133805]) +- Add number error handling for Peblar Rocksolid EV Chargers ([@frenck] - [#133803]) +- Add get_user_keyring_info service to UniFi Protect integration ([@RaHehl] - [#133138]) +- Remove unused fixture from LCN tests ([@alengwenus] - [#133821]) +- Bump flux_led to 1.1.0 ([@bdraco] - [#133818]) +- Add camera platform to tplink integration ([@sdb9696] - [#129180]) +- Add reconfigure flow to slide_local ([@dontinelli] - [#133669]) +- Add already exists config flow tests for Ecovacs ([@edenhaus] - [#133572]) +- Add media browsing to Cambridge Audio ([@noahhusby] - [#129106]) +- Load data for multiple days in Nord Pool ([@gjohansson-ST] - [#133371]) +- Unifiprotect Add user information retrieval for NFC and fingerprint events ([@RaHehl] - [#132604]) +- Add pan/tilt features to tplink integration ([@sdb9696] - [#133829]) +- Bump pylamarzocco to 1.4.2 ([@zweckj] - [#133826]) +- Add Switchbot Water Leak Detector (BLE) ([@luc-ass] - [#133799]) +- Add light tests for Niko Home Control ([@joostlek] - [#133750]) +- Bump pyOverkiz to 1.15.5 ([@iMicknl] - [#133835]) +- Make To-do action names and descriptions consistent with HA standard ([@NoRi2909] - [#133734]) +- Reload on connection lost for LCN integration ([@alengwenus] - [#133638]) +- Suez_water: fix yesterday sensor extra_state invalid typing ([@jb101010-2] - [#133425]) +- Add data descriptions to Config Flow in Overkiz ([@iMicknl] - [#133758]) +- Add detection switches to tplink integration ([@sdb9696] - [#133828]) +- Unifiprotect: add error message if the get_user_keyring_info permissions are not sufficient ([@RaHehl] - [#133841]) +- Bump protobuf to 5.29.2 ([@bdraco] - [#133839]) +- Bump anyio to 4.7.0 ([@bdraco] - [#133842]) +- Fulfill IQS rule runtime-data in ViCare integration ([@CFenner] - [#133633]) +- Add backup the list of integrations platforms to preload ([@bdraco] - [#133856]) +- Add backup to the list of storage preloads ([@bdraco] - [#133855]) +- Bump ZHA to 0.0.43 ([@TheJulianJES] - [#133854]) +- Ensure late import in backup of hassio.backup does not block the event loop ([@bdraco] - [#133857]) +- Fix TypeError in maxcube climate action inference logic ([@mweinelt] - [#133853]) +- Ignore devices (bravias) with 'video' service_type for songpal discovery ([@rytilahti] - [#133724]) +- Bump github/codeql-action from 3.27.9 to 3.28.0 (@dependabot - [#133862]) +- Ensure icalendar==6.1.0 is installed for caldav integration ([@jon6fingrs] - [#133541]) +- Bump PySwitchbot to 0.55.4 ([@bdraco] - [#133861]) +- Add translated enum entity for Fronius error code ([@farmio] - [#133394]) +- Adding initial support for Tuya Electric Fireplaces ([@mrtlhfr] - [#133503]) +- Upgrade QS from silver to gold for slide_local ([@dontinelli] - [#133863]) +- Add Leak detect entity for YoLink water meter controller ([@matrixd2] - [#131682]) +- Use user defined charge limit for charge limit range in Peblar ([@DCSBL] - [#133868]) +- Add actions with response values to Music Assistant ([@marcelveldt] - [#133521]) +- Add coordinator error handling for Peblar Rocksolid EV Chargers ([@frenck] - [#133809]) +- Mark Peblar Rocksolid EV Chargers Platinum ([@frenck] - [#133823]) +- Add compatibility code for deprecated WaterHeaterEntityEntityDescription ([@epenet] - [#133351]) +- Add coordinator to Twinkly ([@joostlek] - [#133793]) +- Respect ESPHome ClimateTrait supports_current_temperature ([@Omniflux] - [#132149]) +- Bump deebot-client to 10.0.1 ([@edenhaus] - [#133634]) +- ElevenLabs invalid api key config flow testing ([@sorgfresser] - [#133822]) +- Fix tplink camera entity unique id ([@sdb9696] - [#133880]) +- Improve firmware update required issue ([@starkillerOG] - [#133878]) +- Add cover to the niko_home_control integration ([@VandeurenGlenn] - [#133801]) +- Add AEMET Weather Radar images ([@Noltari] - [#131386]) +- Add Ecovacs station entities ([@edenhaus] - [#133876]) +- Set Fronius integration quality scale to gold ([@farmio] - [#133884]) +- Update frontend to 20241223.1 ([@bramkragten] - [#133886]) +- Make tplink entities unavailable if camera is off ([@sdb9696] - [#133877]) +- Use SD stream for tplink mpeg stream ([@sdb9696] - [#133879]) +- Streamline Peblar translations ([@DCSBL] - [#133883]) +- Preload supported color properties in fritzbox lights ([@mib1185] - [#133798]) +- Catch ClientConnectorError and TimeOutError in APSystems ([@Thomas55555] - [#132027]) +- Fix a history stats bug when window and tracked state change simultaneously ([@karwosts] - [#133770]) +- Add Harvey virtual integration ([@Jordi1990] - [#133874]) +- Map RGB+CCT to RGB for WLED ([@mmrazik] - [#133900]) +- Sort integration platforms preload list ([@bdraco] - [#133905]) +- Ensure cloud and recorder backup platforms do not have to wait for the import executor ([@bdraco] - [#133907]) +- Fix duplicate call to async_register_preload_platform ([@bdraco] - [#133909]) +- Add cronsim to default dependencies ([@abmantis] - [#133913]) +- Slow down polling in Teslemetry ([@Bre77] - [#133924]) +- Fix missing % in string for generic camera ([@davet2001] - [#133925]) +- Fix Peblar import in data coordinator ([@frenck] - [#133926]) +- Stop using shared aiohttp client session for Subaru integration ([@G-Two] - [#133931]) +- Fix reload modbus component issue ([@crug80] - [#133820]) +- Hive: Fix error when device goes offline ([@KJonline] - [#133848]) +- fix "Slow" response leads to "Could not find a charging station" #124129 ([@dannerph] - [#133889]) +- Update apprise to v1.9.1 ([@frenck] - [#133936]) +- Use SignedSession in Xbox ([@joostlek] - [#133938]) +- Update Jinja2 to 3.1.5 ([@cdce8p] - [#133951]) +- Update frontend to 20241224.0 ([@bramkragten] - [#133963]) +- Fix swiss public transport line field none ([@miaucl] - [#133964]) +- Ensure all states have been migrated to use timestamps ([@bdraco] - [#134007]) +- Bump pylamarzocco to 1.4.3 ([@zweckj] - [#134008]) +- Improve Google Tasks error messages ([@allenporter] - [#134023]) +- Fix Nord Pool empty response ([@gjohansson-ST] - [#134033]) +- Cleanup devices in Nord Pool from reconfiguration ([@gjohansson-ST] - [#134043]) +- Bump aiorussound to 4.1.1 ([@noahhusby] - [#134058]) +- Change SimpliSafe websocket reconnection log to `DEBUG`-level ([@bachya] - [#134063]) +- Remove timeout from Russound RIO initialization ([@noahhusby] - [#134070]) +- Fix KNX config flow translations and add data descriptions ([@farmio] - [#134078]) +- Make google tasks recoverable ([@joostlek] - [#134092]) +- Make elevenlabs recoverable ([@joostlek] - [#134094]) +- Bump python-homeassistant-analytics to 0.8.1 ([@joostlek] - [#134101]) +- Bump `pytile` to 2024.12.0 ([@bachya] - [#134103]) +- Bump yt-dlp to 2024.12.23 ([@joostlek] - [#134131]) +- Add missing device classes in scrape ([@gjohansson-ST] - [#134141]) +- Update knx-frontend to 2024.12.26.233449 ([@farmio] - [#134184]) +- Make PEGELONLINE recoverable ([@mib1185] - [#134199]) +- Make feedreader recoverable ([@mib1185] - [#134202]) +- Fix Wake on LAN Port input as Box instead of Slider ([@luc-ass] - [#134216]) +- Bump VoIP utils to 0.2.2 ([@synesthesiam] - [#134219]) +- Bump frontend to 20241229.0 ([@balloob] - [#134225]) +- Bump pyvlx to 0.2.26 ([@pawlizio] - [#115483]) +- Make triggers and condition for monetary sensor consistent ([@NoRi2909] - [#131184]) +- Quickly process unavailable metrics in Prometheus ([@agoode] - [#133219]) +- Bump elmax-api ([@albertogeniola] - [#133845]) +- Fix duplicate sensor disk entities in Systemmonitor ([@gjohansson-ST] - [#134139]) +- Fix Onkyo volume rounding ([@arturpragacz] - [#134157]) +- Bump opower to 0.8.7 ([@tronikos] - [#134228]) +- Bump aiopegelonline to 0.1.1 ([@mib1185] - [#134230]) +- Avoid KeyError for ignored entries in async_step_zeroconf of Android TV Remote ([@tronikos] - [#134250]) +- Fix 400 This voice does not support speaking rate or pitch parameters at this time for Google Cloud Journey voices ([@tronikos] - [#134255]) +- Bump pylamarzocco to 1.4.5 ([@zweckj] - [#134259]) +- ollama: update to 0.4.5 ([@FliegendeWurst] - [#134265]) +- Remove excessive period at end of action name ([@NoRi2909] - [#134272]) +- Bump aiomealie to 0.9.5 ([@andrew-codechimp] - [#134274]) +- Update frontend to 20241230.0 ([@bramkragten] - [#134284]) +- Improve Mealie set mealplan service ([@joostlek] - [#130606]) +- Update Flick Electric API ([@ZephireNZ] - [#133475]) +- Add stream preview to options flow in generic camera ([@davet2001] - [#133927]) +- Bump aiocomelit to 0.10.1 ([@chemelli74] - [#134214]) +- Handle missing application credentials in Tesla Fleet ([@Bre77] - [#134237]) +- Allow automations to pass any conversation_id for Google Generative AI ([@tronikos] - [#134251]) +- Set backup manager state to completed when restore is finished ([@bramkragten] - [#134283]) +- Bump reolink-aio to 0.11.6 ([@starkillerOG] - [#134286]) +- Bump pysynthru version to 0.8.0 ([@nielstron] - [#134294]) +- Bump aioshelly to 12.2.0 ([@chemelli74] - [#134352]) +- Bump hassil to 2.1.0 ([@synesthesiam] - [#134359]) +- Revert speech seconds to 0.3 ([@synesthesiam] - [#134360]) +- Update frontend to 20241231.0 ([@bramkragten] - [#134363]) +- Bump pylamarzocco to 1.4.6 ([@zweckj] - [#134367]) +- Improve is docker env checks ([@candrews] - [#132404]) +- Handle backup errors more consistently ([@MartinHjelmare] - [#133522]) +- Improve support for Aprilaire S86WMUPR ([@chamberlain2007] - [#133974]) +- Add new ID LAP-V201S-AEUR for Vital200S AirPurifier in Vesync integration ([@by-cx] - [#133999]) +- Vesync unload error when not all platforms used ([@cdnninja] - [#134166]) +- Improve Supervisor backup error handling ([@agners] - [#134346]) +- Bump zabbix-utils to 2.0.2 ([@kruton] - [#134373]) +- Check vehicle metadata ([@Bre77] - [#134381]) +- Add state attributes translations to GIOS ([@krzysdabro] - [#134390]) +- Fix SQL sensor name ([@gjohansson-ST] - [#134414]) +- Bump intents to 2025.1.1 ([@synesthesiam] - [#134424]) +- Bump ZHA to 0.0.44 ([@TheJulianJES] - [#134427]) +- Improve hassio backup create and restore parameter checks ([@emontnemery] - [#134434]) +- Export IncorrectPasswordError from backup integration ([@emontnemery] - [#134436]) +- Adjust language in backup integration ([@emontnemery] - [#134440]) +- Initialize AppleTVConfigFlow.identifiers ([@emontnemery] - [#134443]) +- Bump aioacaia to 0.1.12 ([@zweckj] - [#134454]) +- Update frontend to 20250102.0 ([@bramkragten] - [#134462]) +- open_meteo: correct UTC timezone handling in hourly forecast ([@aagit] - [#129664]) +- Include host in Peblar EV-Charger discovery setup description ([@DCSBL] - [#133954]) +- Don't start recorder if a database from the future is used ([@emontnemery] - [#134467]) +- Bump deebot-client to 10.1.0 ([@edenhaus] - [#134470]) +- Fix a few small typos in peblar ([@NoRi2909] - [#134481]) +- Update peblar to 0.3.1 ([@frenck] - [#134486]) +- Fix input_datetime.set_datetime not accepting 0 timestamp value ([@frenck] - [#134489]) +- Bump aioacaia to 0.1.13 ([@zweckj] - [#134496]) +- Fix backup dir not existing ([@balloob] - [#134506]) +- Add error prints for recorder fatal errors ([@emontnemery] - [#134517]) +- Improve recorder schema migration error test ([@emontnemery] - [#134518]) +- Handle deCONZ color temp 0 is never used when calculating kelvin CT ([@Kane610] - [#134521]) +- Fix activating backup retention config on startup ([@emontnemery] - [#134523]) +- Update peblar to v0.3.2 ([@frenck] - [#134524]) +- Only load Peblar customization update entity when present ([@frenck] - [#134526]) +- Add Reolink proxy for playback ([@starkillerOG] - [#133916]) +- Simplify error handling when creating backup ([@emontnemery] - [#134528]) +- Add backup as after_dependency of frontend ([@emontnemery] - [#134534]) +- Set Ituran to silver ([@joostlek] - [#134538]) +- Avoid early COMPLETED event when restoring backup ([@emontnemery] - [#134546]) +- Log cloud backup agent file list ([@emontnemery] - [#134556]) +- Update frontend to 20250103.0 ([@bramkragten] - [#134561]) +- Cherry pick single file from #134020 to fix generic component tests ([@edenhaus] - [#134569]) +- Bump whirlpool-sixth-sense to 0.18.11 ([@abmantis] - [#134562]) + +## Release 2025.1.1 - January 7 + +- Matter Battery replacement icon ([@lboue] - [#134460]) +- Small fix to allow playing of expandable favorites on Squeezebox ([@peteS-UK] - [#134572]) +- Bump bleak-esphome to 2.0.0 ([@bdraco] - [#134580]) +- Bump uiprotect to version 7.2.0 ([@RaHehl] - [#134587]) +- Mention case-sensitivity in tplink credentials prompt ([@rytilahti] - [#134606]) +- Fix Flick Electric authentication ([@ZephireNZ] - [#134611]) +- Fix hive color tunable light ([@epenet] - [#134628]) +- Set logging in manifest for Cookidoo ([@miaucl] - [#134645]) +- Remove call to remove slide ([@joostlek] - [#134647]) +- Update twentemilieu to 2.2.1 ([@frenck] - [#134651]) +- Fix Reolink playback of recodings ([@starkillerOG] - [#134652]) +- Update peblar to 0.3.3 ([@frenck] - [#134658]) +- Bump cookidoo-api library to 0.11.1 of for Cookidoo ([@miaucl] - [#134661]) +- Update demetriek to 1.1.1 ([@frenck] - [#134663]) +- Cookidoo exotic domains ([@miaucl] - [#134676]) +- Iterate over a copy of the list of programs at Home Connect select setup entry ([@Diegorro98] - [#134684]) +- Change from host to ip in zeroconf discovery for slide_local ([@dontinelli] - [#134709]) +- Bump ZHA to 0.0.45 ([@TheJulianJES] - [#134726]) +- Bump openwebifpy to 4.3.1 ([@autinerd] - [#134746]) +- Fix swapped letter order in "°F" and "°C" temperature units ([@NoRi2909] - [#134750]) +- Bumb python-homewizard-energy to 7.0.1 ([@DCSBL] - [#134753]) +- Register base device entry during coordinator setup in AVM Fritz!Tools integration ([@mib1185] - [#134764]) +- Bump pysuezV2 to 2.0.1 ([@jb101010-2] - [#134769]) +- Fix missing sentence-casing etc. in several strings ([@NoRi2909] - [#134775]) +- Raise ImportError in python_script ([@gjohansson-ST] - [#134792]) +- Replace "id" with "ID" for consistency across HA ([@NoRi2909] - [#134798]) +- Fix a few typos or grammar issues in asus_wrt ([@NoRi2909] - [#134813]) +- Bump uiprotect to version 7.4.1 ([@RaHehl] - [#134829]) +- Bump habluetooth to 3.7.0 ([@bdraco] - [#134833]) +- Fix how function arguments are passed on actions at Home Connect ([@Diegorro98] - [#134845]) +- Bump aiolifx-themes to update colors ([@Djelibeybi] - [#134846]) +- Update Roborock config flow message when an account is already configured ([@allenporter] - [#134854]) +- Log upload BackupAgentError ([@ludeeus] - [#134865]) +- Log cloud backup upload response status ([@ludeeus] - [#134871]) +- Bump solax to 3.2.3 ([@squishykid] - [#134876]) +- Add extra failure exceptions during roborock setup ([@Lash-L] - [#134889]) +- Use uppercase for "ID" and sentence-case for "name" / "icon" ([@NoRi2909] - [#134890]) +- Bump python-kasa to 0.9.1 ([@sdb9696] - [#134893]) +- Add `bring_api` to loggers in Bring integration ([@tr4nt0r] - [#134897]) +- Fix wrong power limit decimal place in IronOS ([@tr4nt0r] - [#134902]) +- Update frontend to 20250106.0 ([@bramkragten] - [#134905]) +- Bump powerfox to v1.1.0 ([@klaasnicolaas] - [#134730]) +- Bump powerfox to v1.2.0 ([@klaasnicolaas] - [#134908]) +- Bump holidays to 0.64 ([@gjohansson-ST] - [#134922]) +- Revert "Remove deprecated supported features warning in LightEntity" ([@arturpragacz] - [#134927]) +- Revert "Remove deprecated supported features warning in ..." (multiple) ([@frenck] - [#134933]) + +[#134460]: https://github.com/home-assistant/core/pull/134460 +[#134572]: https://github.com/home-assistant/core/pull/134572 +[#134580]: https://github.com/home-assistant/core/pull/134580 +[#134587]: https://github.com/home-assistant/core/pull/134587 +[#134606]: https://github.com/home-assistant/core/pull/134606 +[#134611]: https://github.com/home-assistant/core/pull/134611 +[#134628]: https://github.com/home-assistant/core/pull/134628 +[#134645]: https://github.com/home-assistant/core/pull/134645 +[#134647]: https://github.com/home-assistant/core/pull/134647 +[#134651]: https://github.com/home-assistant/core/pull/134651 +[#134652]: https://github.com/home-assistant/core/pull/134652 +[#134658]: https://github.com/home-assistant/core/pull/134658 +[#134661]: https://github.com/home-assistant/core/pull/134661 +[#134663]: https://github.com/home-assistant/core/pull/134663 +[#134676]: https://github.com/home-assistant/core/pull/134676 +[#134684]: https://github.com/home-assistant/core/pull/134684 +[#134709]: https://github.com/home-assistant/core/pull/134709 +[#134726]: https://github.com/home-assistant/core/pull/134726 +[#134730]: https://github.com/home-assistant/core/pull/134730 +[#134746]: https://github.com/home-assistant/core/pull/134746 +[#134750]: https://github.com/home-assistant/core/pull/134750 +[#134753]: https://github.com/home-assistant/core/pull/134753 +[#134764]: https://github.com/home-assistant/core/pull/134764 +[#134769]: https://github.com/home-assistant/core/pull/134769 +[#134775]: https://github.com/home-assistant/core/pull/134775 +[#134792]: https://github.com/home-assistant/core/pull/134792 +[#134798]: https://github.com/home-assistant/core/pull/134798 +[#134813]: https://github.com/home-assistant/core/pull/134813 +[#134829]: https://github.com/home-assistant/core/pull/134829 +[#134833]: https://github.com/home-assistant/core/pull/134833 +[#134845]: https://github.com/home-assistant/core/pull/134845 +[#134846]: https://github.com/home-assistant/core/pull/134846 +[#134854]: https://github.com/home-assistant/core/pull/134854 +[#134865]: https://github.com/home-assistant/core/pull/134865 +[#134871]: https://github.com/home-assistant/core/pull/134871 +[#134876]: https://github.com/home-assistant/core/pull/134876 +[#134889]: https://github.com/home-assistant/core/pull/134889 +[#134890]: https://github.com/home-assistant/core/pull/134890 +[#134893]: https://github.com/home-assistant/core/pull/134893 +[#134897]: https://github.com/home-assistant/core/pull/134897 +[#134902]: https://github.com/home-assistant/core/pull/134902 +[#134905]: https://github.com/home-assistant/core/pull/134905 +[#134908]: https://github.com/home-assistant/core/pull/134908 +[#134922]: https://github.com/home-assistant/core/pull/134922 +[#134927]: https://github.com/home-assistant/core/pull/134927 +[#134933]: https://github.com/home-assistant/core/pull/134933 +[@DCSBL]: https://github.com/DCSBL +[@Diegorro98]: https://github.com/Diegorro98 +[@Djelibeybi]: https://github.com/Djelibeybi +[@Lash-L]: https://github.com/Lash-L +[@NoRi2909]: https://github.com/NoRi2909 +[@RaHehl]: https://github.com/RaHehl +[@TheJulianJES]: https://github.com/TheJulianJES +[@ZephireNZ]: https://github.com/ZephireNZ +[@allenporter]: https://github.com/allenporter +[@arturpragacz]: https://github.com/arturpragacz +[@autinerd]: https://github.com/autinerd +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@dontinelli]: https://github.com/dontinelli +[@epenet]: https://github.com/epenet +[@frenck]: https://github.com/frenck +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@jb101010-2]: https://github.com/jb101010-2 +[@joostlek]: https://github.com/joostlek +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@lboue]: https://github.com/lboue +[@ludeeus]: https://github.com/ludeeus +[@miaucl]: https://github.com/miaucl +[@mib1185]: https://github.com/mib1185 +[@peteS-UK]: https://github.com/peteS-UK +[@rytilahti]: https://github.com/rytilahti +[@sdb9696]: https://github.com/sdb9696 +[@squishykid]: https://github.com/squishykid +[@starkillerOG]: https://github.com/starkillerOG +[@tr4nt0r]: https://github.com/tr4nt0r + +## Release 2025.1.2 - January 9 + +- Fix Météo-France setup in non French cities (because of failed next rain sensor) ([@Quentame] - [#134782]) +- Increase cloud backup download timeout ([@ludeeus] - [#134961]) +- Fix ZHA "referencing a non existing `via_device`" warning ([@puddly] - [#135008]) +- Catch errors in automation (instead of raise unexpected error) in Overkiz ([@iMicknl] - [#135026]) +- Fix channel retrieval for Reolink DUO V1 connected to a NVR ([@starkillerOG] - [#135035]) +- Bump aioautomower to 2025.1.0 ([@Thomas55555] - [#135039]) +- Bump cookidoo-api to 0.12.2 ([@miaucl] - [#135045]) +- Implement upload retry logic in CloudBackupAgent ([@ludeeus] - [#135062]) +- Add jitter to backup start time to avoid thundering herd ([@emontnemery] - [#135065]) +- Bump pysuezV2 to 2.0.3 ([@jb101010-2] - [#135080]) +- Fix Flick Electric Pricing ([@ZephireNZ] - [#135154]) +- Update frontend to 20250109.0 ([@bramkragten] - [#135235]) + +[#134782]: https://github.com/home-assistant/core/pull/134782 +[#134961]: https://github.com/home-assistant/core/pull/134961 +[#135008]: https://github.com/home-assistant/core/pull/135008 +[#135026]: https://github.com/home-assistant/core/pull/135026 +[#135035]: https://github.com/home-assistant/core/pull/135035 +[#135039]: https://github.com/home-assistant/core/pull/135039 +[#135045]: https://github.com/home-assistant/core/pull/135045 +[#135062]: https://github.com/home-assistant/core/pull/135062 +[#135065]: https://github.com/home-assistant/core/pull/135065 +[#135080]: https://github.com/home-assistant/core/pull/135080 +[#135154]: https://github.com/home-assistant/core/pull/135154 +[#135235]: https://github.com/home-assistant/core/pull/135235 +[@Quentame]: https://github.com/Quentame +[@Thomas55555]: https://github.com/Thomas55555 +[@ZephireNZ]: https://github.com/ZephireNZ +[@bramkragten]: https://github.com/bramkragten +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@iMicknl]: https://github.com/iMicknl +[@jb101010-2]: https://github.com/jb101010-2 +[@ludeeus]: https://github.com/ludeeus +[@miaucl]: https://github.com/miaucl +[@puddly]: https://github.com/puddly +[@starkillerOG]: https://github.com/starkillerOG + +## Release 2025.1.3 - January 20 + +- Fix DiscoveryFlowHandler when discovery_function returns bool ([@kgraefe] - [#133563]) +- Aprilaire - Fix humidifier showing when it is not available ([@chamberlain2007] - [#133984]) +- Gracefully handle webhook unsubscription if error occurs while contacting Withings ([@dcmeglio] - [#134271]) +- Image entity key error when camera is ignored in EZVIZ ([@RenierM26] - [#134343]) +- Bump pyaussiebb to 0.1.5 ([@Bre77] - [#134943]) +- Fix Watergate Power supply mode description and MQTT/Wifi uptimes ([@adam-the-hero] - [#135085]) +- Fix missing comma in ollama MODEL_NAMES ([@epenet] - [#135262]) +- Bump Freebox to 1.2.2 ([@Quentame] - [#135313]) +- Actually use translated entity names in Lametric ([@joostlek] - [#135381]) +- Fix descriptions of send_message action of Bring! integration ([@NoRi2909] - [#135446]) +- Bump switchbot-api to 2.3.1 ([@SeraphicRav] - [#135451]) +- Fix incorrect cast in HitachiAirToWaterHeatingZone in Overkiz ([@iMicknl] - [#135468]) +- Replace pyhiveapi with pyhive-integration ([@KJonline] - [#135482]) +- Fix referenced objects in script sequences ([@arturpragacz] - [#135499]) +- Use STT/TTS languages for LLM fallback ([@synesthesiam] - [#135533]) +- Bump demetriek to 1.2.0 ([@joostlek] - [#135580]) +- Use device supplied ranges in LaMetric ([@joostlek] - [#135590]) +- Bump elkm1-lib to 2.2.11 ([@gwww] - [#135616]) +- Fix mqtt number state validation ([@jbouwh] - [#135621]) +- Add reauthentication to SmartThings ([@joostlek] - [#135673]) +- Handle invalid HS color values in HomeKit Bridge ([@bdraco] - [#135739]) +- Update aioairzone to v0.9.9 ([@Noltari] - [#135866]) +- Remove device_class from NFC and fingerprint event descriptions ([@RaHehl] - [#135867]) +- Prevent HomeKit from going unavailable when min/max is reversed ([@bdraco] - [#135892]) +- Bump onvif-zeep-async to 3.2.2 ([@bdraco] - [#135898]) +- Round brightness in Niko Home Control ([@VandeurenGlenn] - [#135920]) +- Update NHC lib to v0.3.4 ([@VandeurenGlenn] - [#135923]) +- Update knx-frontend to 2025.1.18.164225 ([@farmio] - [#135941]) +- Bump aiooui to 0.1.8 ([@bdraco] - [#135945]) +- Bump aiooui to 0.1.9 ([@bdraco] - [#135956]) +- Fix switchbot cloud library logger ([@joostlek] - [#135987]) +- Correct type for off delay in rfxtrx ([@elupus] - [#135994]) +- Handle invalid datetime in onvif ([@bdraco] - [#136014]) +- Bump aioraven to 0.7.1 ([@cottsay] - [#136017]) +- Bump onvif-zeep-async to 3.2.3 ([@bdraco] - [#136022]) +- Bump yt-dlp to 2025.01.15 ([@joostlek] - [#136072]) +- Bump deebot-client to 11.0.0 ([@edenhaus] - [#136073]) +- Always include SSL folder in backups ([@emontnemery] - [#136080]) + +[#133563]: https://github.com/home-assistant/core/pull/133563 +[#133984]: https://github.com/home-assistant/core/pull/133984 +[#134271]: https://github.com/home-assistant/core/pull/134271 +[#134343]: https://github.com/home-assistant/core/pull/134343 +[#134943]: https://github.com/home-assistant/core/pull/134943 +[#135085]: https://github.com/home-assistant/core/pull/135085 +[#135262]: https://github.com/home-assistant/core/pull/135262 +[#135313]: https://github.com/home-assistant/core/pull/135313 +[#135381]: https://github.com/home-assistant/core/pull/135381 +[#135446]: https://github.com/home-assistant/core/pull/135446 +[#135451]: https://github.com/home-assistant/core/pull/135451 +[#135468]: https://github.com/home-assistant/core/pull/135468 +[#135482]: https://github.com/home-assistant/core/pull/135482 +[#135499]: https://github.com/home-assistant/core/pull/135499 +[#135533]: https://github.com/home-assistant/core/pull/135533 +[#135580]: https://github.com/home-assistant/core/pull/135580 +[#135590]: https://github.com/home-assistant/core/pull/135590 +[#135616]: https://github.com/home-assistant/core/pull/135616 +[#135621]: https://github.com/home-assistant/core/pull/135621 +[#135673]: https://github.com/home-assistant/core/pull/135673 +[#135739]: https://github.com/home-assistant/core/pull/135739 +[#135866]: https://github.com/home-assistant/core/pull/135866 +[#135867]: https://github.com/home-assistant/core/pull/135867 +[#135892]: https://github.com/home-assistant/core/pull/135892 +[#135898]: https://github.com/home-assistant/core/pull/135898 +[#135920]: https://github.com/home-assistant/core/pull/135920 +[#135923]: https://github.com/home-assistant/core/pull/135923 +[#135941]: https://github.com/home-assistant/core/pull/135941 +[#135945]: https://github.com/home-assistant/core/pull/135945 +[#135956]: https://github.com/home-assistant/core/pull/135956 +[#135987]: https://github.com/home-assistant/core/pull/135987 +[#135994]: https://github.com/home-assistant/core/pull/135994 +[#136014]: https://github.com/home-assistant/core/pull/136014 +[#136017]: https://github.com/home-assistant/core/pull/136017 +[#136022]: https://github.com/home-assistant/core/pull/136022 +[#136072]: https://github.com/home-assistant/core/pull/136072 +[#136073]: https://github.com/home-assistant/core/pull/136073 +[#136080]: https://github.com/home-assistant/core/pull/136080 +[@Bre77]: https://github.com/Bre77 +[@KJonline]: https://github.com/KJonline +[@NoRi2909]: https://github.com/NoRi2909 +[@Noltari]: https://github.com/Noltari +[@Quentame]: https://github.com/Quentame +[@RaHehl]: https://github.com/RaHehl +[@RenierM26]: https://github.com/RenierM26 +[@SeraphicRav]: https://github.com/SeraphicRav +[@VandeurenGlenn]: https://github.com/VandeurenGlenn +[@adam-the-hero]: https://github.com/adam-the-hero +[@arturpragacz]: https://github.com/arturpragacz +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@chamberlain2007]: https://github.com/chamberlain2007 +[@cottsay]: https://github.com/cottsay +[@dcmeglio]: https://github.com/dcmeglio +[@edenhaus]: https://github.com/edenhaus +[@elupus]: https://github.com/elupus +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@farmio]: https://github.com/farmio +[@frenck]: https://github.com/frenck +[@gwww]: https://github.com/gwww +[@iMicknl]: https://github.com/iMicknl +[@jbouwh]: https://github.com/jbouwh +[@joostlek]: https://github.com/joostlek +[@kgraefe]: https://github.com/kgraefe +[@synesthesiam]: https://github.com/synesthesiam + +## Release 2025.1.4 - January 24 + +- Update Hydrawise maximum watering duration to meet the app limits ([@mattdoran] - [#136050]) +- Bump holidays to 0.65 ([@gjohansson-ST] - [#136122]) +- Handle width and height placeholders in the thumbnail URL ([@Makrit] - [#136227]) +- Fix slave id equal to 0 ([@crug80] - [#136263]) +- Handle LinkPlay devices with no mac ([@silamon] - [#136272]) +- Fallback to None for literal "Blank" serial number for APCUPSD integration ([@yuxincs] - [#136297]) +- Update peblar to v0.4.0 ([@frenck] - [#136329]) +- Avoid keyerror on incomplete api data in myuplink ([@astrandb] - [#136333]) +- Update frontend to 20250109.1 ([@piitaya] - [#136339]) +- Update frontend to 20250109.2 ([@piitaya] - [#136348]) +- Bump aiowithings to 3.1.5 ([@joostlek] - [#136350]) +- Bump powerfox to v1.2.1 ([@klaasnicolaas] - [#136366]) + +[#136050]: https://github.com/home-assistant/core/pull/136050 +[#136122]: https://github.com/home-assistant/core/pull/136122 +[#136227]: https://github.com/home-assistant/core/pull/136227 +[#136263]: https://github.com/home-assistant/core/pull/136263 +[#136272]: https://github.com/home-assistant/core/pull/136272 +[#136297]: https://github.com/home-assistant/core/pull/136297 +[#136329]: https://github.com/home-assistant/core/pull/136329 +[#136333]: https://github.com/home-assistant/core/pull/136333 +[#136339]: https://github.com/home-assistant/core/pull/136339 +[#136348]: https://github.com/home-assistant/core/pull/136348 +[#136350]: https://github.com/home-assistant/core/pull/136350 +[#136366]: https://github.com/home-assistant/core/pull/136366 +[@Makrit]: https://github.com/Makrit +[@astrandb]: https://github.com/astrandb +[@bramkragten]: https://github.com/bramkragten +[@crug80]: https://github.com/crug80 +[@frenck]: https://github.com/frenck +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@joostlek]: https://github.com/joostlek +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@mattdoran]: https://github.com/mattdoran +[@piitaya]: https://github.com/piitaya +[@silamon]: https://github.com/silamon +[@yuxincs]: https://github.com/yuxincs + +[#115483]: https://github.com/home-assistant/core/pull/115483 +[#117355]: https://github.com/home-assistant/core/pull/117355 +[#121371]: https://github.com/home-assistant/core/pull/121371 +[#122563]: https://github.com/home-assistant/core/pull/122563 +[#124499]: https://github.com/home-assistant/core/pull/124499 +[#126353]: https://github.com/home-assistant/core/pull/126353 +[#126757]: https://github.com/home-assistant/core/pull/126757 +[#128929]: https://github.com/home-assistant/core/pull/128929 +[#128965]: https://github.com/home-assistant/core/pull/128965 +[#129067]: https://github.com/home-assistant/core/pull/129067 +[#129106]: https://github.com/home-assistant/core/pull/129106 +[#129180]: https://github.com/home-assistant/core/pull/129180 +[#129266]: https://github.com/home-assistant/core/pull/129266 +[#129514]: https://github.com/home-assistant/core/pull/129514 +[#129590]: https://github.com/home-assistant/core/pull/129590 +[#129632]: https://github.com/home-assistant/core/pull/129632 +[#129664]: https://github.com/home-assistant/core/pull/129664 +[#129686]: https://github.com/home-assistant/core/pull/129686 +[#129800]: https://github.com/home-assistant/core/pull/129800 +[#130185]: https://github.com/home-assistant/core/pull/130185 +[#130391]: https://github.com/home-assistant/core/pull/130391 +[#130392]: https://github.com/home-assistant/core/pull/130392 +[#130398]: https://github.com/home-assistant/core/pull/130398 +[#130494]: https://github.com/home-assistant/core/pull/130494 +[#130547]: https://github.com/home-assistant/core/pull/130547 +[#130554]: https://github.com/home-assistant/core/pull/130554 +[#130606]: https://github.com/home-assistant/core/pull/130606 +[#130644]: https://github.com/home-assistant/core/pull/130644 +[#130708]: https://github.com/home-assistant/core/pull/130708 +[#130769]: https://github.com/home-assistant/core/pull/130769 +[#130776]: https://github.com/home-assistant/core/pull/130776 +[#130863]: https://github.com/home-assistant/core/pull/130863 +[#130979]: https://github.com/home-assistant/core/pull/130979 +[#131016]: https://github.com/home-assistant/core/pull/131016 +[#131020]: https://github.com/home-assistant/core/pull/131020 +[#131066]: https://github.com/home-assistant/core/pull/131066 +[#131080]: https://github.com/home-assistant/core/pull/131080 +[#131091]: https://github.com/home-assistant/core/pull/131091 +[#131123]: https://github.com/home-assistant/core/pull/131123 +[#131168]: https://github.com/home-assistant/core/pull/131168 +[#131184]: https://github.com/home-assistant/core/pull/131184 +[#131219]: https://github.com/home-assistant/core/pull/131219 +[#131226]: https://github.com/home-assistant/core/pull/131226 +[#131298]: https://github.com/home-assistant/core/pull/131298 +[#131322]: https://github.com/home-assistant/core/pull/131322 +[#131326]: https://github.com/home-assistant/core/pull/131326 +[#131329]: https://github.com/home-assistant/core/pull/131329 +[#131330]: https://github.com/home-assistant/core/pull/131330 +[#131348]: https://github.com/home-assistant/core/pull/131348 +[#131349]: https://github.com/home-assistant/core/pull/131349 +[#131357]: https://github.com/home-assistant/core/pull/131357 +[#131360]: https://github.com/home-assistant/core/pull/131360 +[#131375]: https://github.com/home-assistant/core/pull/131375 +[#131377]: https://github.com/home-assistant/core/pull/131377 +[#131386]: https://github.com/home-assistant/core/pull/131386 +[#131429]: https://github.com/home-assistant/core/pull/131429 +[#131468]: https://github.com/home-assistant/core/pull/131468 +[#131497]: https://github.com/home-assistant/core/pull/131497 +[#131498]: https://github.com/home-assistant/core/pull/131498 +[#131508]: https://github.com/home-assistant/core/pull/131508 +[#131560]: https://github.com/home-assistant/core/pull/131560 +[#131580]: https://github.com/home-assistant/core/pull/131580 +[#131582]: https://github.com/home-assistant/core/pull/131582 +[#131584]: https://github.com/home-assistant/core/pull/131584 +[#131598]: https://github.com/home-assistant/core/pull/131598 +[#131609]: https://github.com/home-assistant/core/pull/131609 +[#131626]: https://github.com/home-assistant/core/pull/131626 +[#131629]: https://github.com/home-assistant/core/pull/131629 +[#131637]: https://github.com/home-assistant/core/pull/131637 +[#131640]: https://github.com/home-assistant/core/pull/131640 +[#131641]: https://github.com/home-assistant/core/pull/131641 +[#131644]: https://github.com/home-assistant/core/pull/131644 +[#131656]: https://github.com/home-assistant/core/pull/131656 +[#131660]: https://github.com/home-assistant/core/pull/131660 +[#131674]: https://github.com/home-assistant/core/pull/131674 +[#131682]: https://github.com/home-assistant/core/pull/131682 +[#131686]: https://github.com/home-assistant/core/pull/131686 +[#131693]: https://github.com/home-assistant/core/pull/131693 +[#131695]: https://github.com/home-assistant/core/pull/131695 +[#131696]: https://github.com/home-assistant/core/pull/131696 +[#131698]: https://github.com/home-assistant/core/pull/131698 +[#131700]: https://github.com/home-assistant/core/pull/131700 +[#131705]: https://github.com/home-assistant/core/pull/131705 +[#131706]: https://github.com/home-assistant/core/pull/131706 +[#131712]: https://github.com/home-assistant/core/pull/131712 +[#131716]: https://github.com/home-assistant/core/pull/131716 +[#131721]: https://github.com/home-assistant/core/pull/131721 +[#131723]: https://github.com/home-assistant/core/pull/131723 +[#131730]: https://github.com/home-assistant/core/pull/131730 +[#131731]: https://github.com/home-assistant/core/pull/131731 +[#131732]: https://github.com/home-assistant/core/pull/131732 +[#131733]: https://github.com/home-assistant/core/pull/131733 +[#131734]: https://github.com/home-assistant/core/pull/131734 +[#131738]: https://github.com/home-assistant/core/pull/131738 +[#131746]: https://github.com/home-assistant/core/pull/131746 +[#131751]: https://github.com/home-assistant/core/pull/131751 +[#131761]: https://github.com/home-assistant/core/pull/131761 +[#131763]: https://github.com/home-assistant/core/pull/131763 +[#131768]: https://github.com/home-assistant/core/pull/131768 +[#131770]: https://github.com/home-assistant/core/pull/131770 +[#131778]: https://github.com/home-assistant/core/pull/131778 +[#131780]: https://github.com/home-assistant/core/pull/131780 +[#131787]: https://github.com/home-assistant/core/pull/131787 +[#131790]: https://github.com/home-assistant/core/pull/131790 +[#131791]: https://github.com/home-assistant/core/pull/131791 +[#131792]: https://github.com/home-assistant/core/pull/131792 +[#131793]: https://github.com/home-assistant/core/pull/131793 +[#131796]: https://github.com/home-assistant/core/pull/131796 +[#131797]: https://github.com/home-assistant/core/pull/131797 +[#131798]: https://github.com/home-assistant/core/pull/131798 +[#131799]: https://github.com/home-assistant/core/pull/131799 +[#131800]: https://github.com/home-assistant/core/pull/131800 +[#131802]: https://github.com/home-assistant/core/pull/131802 +[#131803]: https://github.com/home-assistant/core/pull/131803 +[#131805]: https://github.com/home-assistant/core/pull/131805 +[#131806]: https://github.com/home-assistant/core/pull/131806 +[#131807]: https://github.com/home-assistant/core/pull/131807 +[#131808]: https://github.com/home-assistant/core/pull/131808 +[#131809]: https://github.com/home-assistant/core/pull/131809 +[#131810]: https://github.com/home-assistant/core/pull/131810 +[#131812]: https://github.com/home-assistant/core/pull/131812 +[#131813]: https://github.com/home-assistant/core/pull/131813 +[#131815]: https://github.com/home-assistant/core/pull/131815 +[#131816]: https://github.com/home-assistant/core/pull/131816 +[#131819]: https://github.com/home-assistant/core/pull/131819 +[#131820]: https://github.com/home-assistant/core/pull/131820 +[#131826]: https://github.com/home-assistant/core/pull/131826 +[#131833]: https://github.com/home-assistant/core/pull/131833 +[#131834]: https://github.com/home-assistant/core/pull/131834 +[#131843]: https://github.com/home-assistant/core/pull/131843 +[#131844]: https://github.com/home-assistant/core/pull/131844 +[#131845]: https://github.com/home-assistant/core/pull/131845 +[#131846]: https://github.com/home-assistant/core/pull/131846 +[#131857]: https://github.com/home-assistant/core/pull/131857 +[#131858]: https://github.com/home-assistant/core/pull/131858 +[#131859]: https://github.com/home-assistant/core/pull/131859 +[#131861]: https://github.com/home-assistant/core/pull/131861 +[#131865]: https://github.com/home-assistant/core/pull/131865 +[#131871]: https://github.com/home-assistant/core/pull/131871 +[#131875]: https://github.com/home-assistant/core/pull/131875 +[#131877]: https://github.com/home-assistant/core/pull/131877 +[#131878]: https://github.com/home-assistant/core/pull/131878 +[#131879]: https://github.com/home-assistant/core/pull/131879 +[#131888]: https://github.com/home-assistant/core/pull/131888 +[#131890]: https://github.com/home-assistant/core/pull/131890 +[#131891]: https://github.com/home-assistant/core/pull/131891 +[#131892]: https://github.com/home-assistant/core/pull/131892 +[#131893]: https://github.com/home-assistant/core/pull/131893 +[#131894]: https://github.com/home-assistant/core/pull/131894 +[#131895]: https://github.com/home-assistant/core/pull/131895 +[#131904]: https://github.com/home-assistant/core/pull/131904 +[#131909]: https://github.com/home-assistant/core/pull/131909 +[#131921]: https://github.com/home-assistant/core/pull/131921 +[#131923]: https://github.com/home-assistant/core/pull/131923 +[#131927]: https://github.com/home-assistant/core/pull/131927 +[#131928]: https://github.com/home-assistant/core/pull/131928 +[#131933]: https://github.com/home-assistant/core/pull/131933 +[#131935]: https://github.com/home-assistant/core/pull/131935 +[#131937]: https://github.com/home-assistant/core/pull/131937 +[#131938]: https://github.com/home-assistant/core/pull/131938 +[#131943]: https://github.com/home-assistant/core/pull/131943 +[#131946]: https://github.com/home-assistant/core/pull/131946 +[#131952]: https://github.com/home-assistant/core/pull/131952 +[#131956]: https://github.com/home-assistant/core/pull/131956 +[#131963]: https://github.com/home-assistant/core/pull/131963 +[#131982]: https://github.com/home-assistant/core/pull/131982 +[#131984]: https://github.com/home-assistant/core/pull/131984 +[#131989]: https://github.com/home-assistant/core/pull/131989 +[#131993]: https://github.com/home-assistant/core/pull/131993 +[#131996]: https://github.com/home-assistant/core/pull/131996 +[#132001]: https://github.com/home-assistant/core/pull/132001 +[#132006]: https://github.com/home-assistant/core/pull/132006 +[#132011]: https://github.com/home-assistant/core/pull/132011 +[#132012]: https://github.com/home-assistant/core/pull/132012 +[#132014]: https://github.com/home-assistant/core/pull/132014 +[#132019]: https://github.com/home-assistant/core/pull/132019 +[#132023]: https://github.com/home-assistant/core/pull/132023 +[#132027]: https://github.com/home-assistant/core/pull/132027 +[#132028]: https://github.com/home-assistant/core/pull/132028 +[#132029]: https://github.com/home-assistant/core/pull/132029 +[#132030]: https://github.com/home-assistant/core/pull/132030 +[#132031]: https://github.com/home-assistant/core/pull/132031 +[#132035]: https://github.com/home-assistant/core/pull/132035 +[#132040]: https://github.com/home-assistant/core/pull/132040 +[#132041]: https://github.com/home-assistant/core/pull/132041 +[#132047]: https://github.com/home-assistant/core/pull/132047 +[#132058]: https://github.com/home-assistant/core/pull/132058 +[#132059]: https://github.com/home-assistant/core/pull/132059 +[#132063]: https://github.com/home-assistant/core/pull/132063 +[#132073]: https://github.com/home-assistant/core/pull/132073 +[#132075]: https://github.com/home-assistant/core/pull/132075 +[#132076]: https://github.com/home-assistant/core/pull/132076 +[#132077]: https://github.com/home-assistant/core/pull/132077 +[#132078]: https://github.com/home-assistant/core/pull/132078 +[#132079]: https://github.com/home-assistant/core/pull/132079 +[#132082]: https://github.com/home-assistant/core/pull/132082 +[#132083]: https://github.com/home-assistant/core/pull/132083 +[#132087]: https://github.com/home-assistant/core/pull/132087 +[#132088]: https://github.com/home-assistant/core/pull/132088 +[#132093]: https://github.com/home-assistant/core/pull/132093 +[#132097]: https://github.com/home-assistant/core/pull/132097 +[#132098]: https://github.com/home-assistant/core/pull/132098 +[#132099]: https://github.com/home-assistant/core/pull/132099 +[#132102]: https://github.com/home-assistant/core/pull/132102 +[#132104]: https://github.com/home-assistant/core/pull/132104 +[#132106]: https://github.com/home-assistant/core/pull/132106 +[#132107]: https://github.com/home-assistant/core/pull/132107 +[#132110]: https://github.com/home-assistant/core/pull/132110 +[#132111]: https://github.com/home-assistant/core/pull/132111 +[#132113]: https://github.com/home-assistant/core/pull/132113 +[#132114]: https://github.com/home-assistant/core/pull/132114 +[#132115]: https://github.com/home-assistant/core/pull/132115 +[#132118]: https://github.com/home-assistant/core/pull/132118 +[#132123]: https://github.com/home-assistant/core/pull/132123 +[#132134]: https://github.com/home-assistant/core/pull/132134 +[#132135]: https://github.com/home-assistant/core/pull/132135 +[#132138]: https://github.com/home-assistant/core/pull/132138 +[#132140]: https://github.com/home-assistant/core/pull/132140 +[#132143]: https://github.com/home-assistant/core/pull/132143 +[#132149]: https://github.com/home-assistant/core/pull/132149 +[#132151]: https://github.com/home-assistant/core/pull/132151 +[#132152]: https://github.com/home-assistant/core/pull/132152 +[#132158]: https://github.com/home-assistant/core/pull/132158 +[#132162]: https://github.com/home-assistant/core/pull/132162 +[#132172]: https://github.com/home-assistant/core/pull/132172 +[#132173]: https://github.com/home-assistant/core/pull/132173 +[#132175]: https://github.com/home-assistant/core/pull/132175 +[#132179]: https://github.com/home-assistant/core/pull/132179 +[#132180]: https://github.com/home-assistant/core/pull/132180 +[#132185]: https://github.com/home-assistant/core/pull/132185 +[#132188]: https://github.com/home-assistant/core/pull/132188 +[#132199]: https://github.com/home-assistant/core/pull/132199 +[#132200]: https://github.com/home-assistant/core/pull/132200 +[#132202]: https://github.com/home-assistant/core/pull/132202 +[#132204]: https://github.com/home-assistant/core/pull/132204 +[#132205]: https://github.com/home-assistant/core/pull/132205 +[#132206]: https://github.com/home-assistant/core/pull/132206 +[#132208]: https://github.com/home-assistant/core/pull/132208 +[#132213]: https://github.com/home-assistant/core/pull/132213 +[#132217]: https://github.com/home-assistant/core/pull/132217 +[#132218]: https://github.com/home-assistant/core/pull/132218 +[#132219]: https://github.com/home-assistant/core/pull/132219 +[#132221]: https://github.com/home-assistant/core/pull/132221 +[#132225]: https://github.com/home-assistant/core/pull/132225 +[#132226]: https://github.com/home-assistant/core/pull/132226 +[#132227]: https://github.com/home-assistant/core/pull/132227 +[#132229]: https://github.com/home-assistant/core/pull/132229 +[#132234]: https://github.com/home-assistant/core/pull/132234 +[#132237]: https://github.com/home-assistant/core/pull/132237 +[#132239]: https://github.com/home-assistant/core/pull/132239 +[#132244]: https://github.com/home-assistant/core/pull/132244 +[#132246]: https://github.com/home-assistant/core/pull/132246 +[#132248]: https://github.com/home-assistant/core/pull/132248 +[#132249]: https://github.com/home-assistant/core/pull/132249 +[#132251]: https://github.com/home-assistant/core/pull/132251 +[#132255]: https://github.com/home-assistant/core/pull/132255 +[#132259]: https://github.com/home-assistant/core/pull/132259 +[#132260]: https://github.com/home-assistant/core/pull/132260 +[#132261]: https://github.com/home-assistant/core/pull/132261 +[#132262]: https://github.com/home-assistant/core/pull/132262 +[#132263]: https://github.com/home-assistant/core/pull/132263 +[#132264]: https://github.com/home-assistant/core/pull/132264 +[#132265]: https://github.com/home-assistant/core/pull/132265 +[#132275]: https://github.com/home-assistant/core/pull/132275 +[#132276]: https://github.com/home-assistant/core/pull/132276 +[#132278]: https://github.com/home-assistant/core/pull/132278 +[#132285]: https://github.com/home-assistant/core/pull/132285 +[#132287]: https://github.com/home-assistant/core/pull/132287 +[#132289]: https://github.com/home-assistant/core/pull/132289 +[#132290]: https://github.com/home-assistant/core/pull/132290 +[#132293]: https://github.com/home-assistant/core/pull/132293 +[#132294]: https://github.com/home-assistant/core/pull/132294 +[#132297]: https://github.com/home-assistant/core/pull/132297 +[#132301]: https://github.com/home-assistant/core/pull/132301 +[#132306]: https://github.com/home-assistant/core/pull/132306 +[#132311]: https://github.com/home-assistant/core/pull/132311 +[#132313]: https://github.com/home-assistant/core/pull/132313 +[#132319]: https://github.com/home-assistant/core/pull/132319 +[#132327]: https://github.com/home-assistant/core/pull/132327 +[#132328]: https://github.com/home-assistant/core/pull/132328 +[#132331]: https://github.com/home-assistant/core/pull/132331 +[#132332]: https://github.com/home-assistant/core/pull/132332 +[#132334]: https://github.com/home-assistant/core/pull/132334 +[#132344]: https://github.com/home-assistant/core/pull/132344 +[#132346]: https://github.com/home-assistant/core/pull/132346 +[#132349]: https://github.com/home-assistant/core/pull/132349 +[#132350]: https://github.com/home-assistant/core/pull/132350 +[#132351]: https://github.com/home-assistant/core/pull/132351 +[#132353]: https://github.com/home-assistant/core/pull/132353 +[#132354]: https://github.com/home-assistant/core/pull/132354 +[#132355]: https://github.com/home-assistant/core/pull/132355 +[#132365]: https://github.com/home-assistant/core/pull/132365 +[#132367]: https://github.com/home-assistant/core/pull/132367 +[#132368]: https://github.com/home-assistant/core/pull/132368 +[#132369]: https://github.com/home-assistant/core/pull/132369 +[#132371]: https://github.com/home-assistant/core/pull/132371 +[#132373]: https://github.com/home-assistant/core/pull/132373 +[#132377]: https://github.com/home-assistant/core/pull/132377 +[#132387]: https://github.com/home-assistant/core/pull/132387 +[#132400]: https://github.com/home-assistant/core/pull/132400 +[#132404]: https://github.com/home-assistant/core/pull/132404 +[#132415]: https://github.com/home-assistant/core/pull/132415 +[#132417]: https://github.com/home-assistant/core/pull/132417 +[#132418]: https://github.com/home-assistant/core/pull/132418 +[#132419]: https://github.com/home-assistant/core/pull/132419 +[#132422]: https://github.com/home-assistant/core/pull/132422 +[#132423]: https://github.com/home-assistant/core/pull/132423 +[#132430]: https://github.com/home-assistant/core/pull/132430 +[#132431]: https://github.com/home-assistant/core/pull/132431 +[#132440]: https://github.com/home-assistant/core/pull/132440 +[#132443]: https://github.com/home-assistant/core/pull/132443 +[#132455]: https://github.com/home-assistant/core/pull/132455 +[#132458]: https://github.com/home-assistant/core/pull/132458 +[#132461]: https://github.com/home-assistant/core/pull/132461 +[#132463]: https://github.com/home-assistant/core/pull/132463 +[#132466]: https://github.com/home-assistant/core/pull/132466 +[#132468]: https://github.com/home-assistant/core/pull/132468 +[#132473]: https://github.com/home-assistant/core/pull/132473 +[#132483]: https://github.com/home-assistant/core/pull/132483 +[#132486]: https://github.com/home-assistant/core/pull/132486 +[#132489]: https://github.com/home-assistant/core/pull/132489 +[#132496]: https://github.com/home-assistant/core/pull/132496 +[#132497]: https://github.com/home-assistant/core/pull/132497 +[#132499]: https://github.com/home-assistant/core/pull/132499 +[#132504]: https://github.com/home-assistant/core/pull/132504 +[#132517]: https://github.com/home-assistant/core/pull/132517 +[#132534]: https://github.com/home-assistant/core/pull/132534 +[#132537]: https://github.com/home-assistant/core/pull/132537 +[#132538]: https://github.com/home-assistant/core/pull/132538 +[#132565]: https://github.com/home-assistant/core/pull/132565 +[#132569]: https://github.com/home-assistant/core/pull/132569 +[#132571]: https://github.com/home-assistant/core/pull/132571 +[#132574]: https://github.com/home-assistant/core/pull/132574 +[#132576]: https://github.com/home-assistant/core/pull/132576 +[#132596]: https://github.com/home-assistant/core/pull/132596 +[#132598]: https://github.com/home-assistant/core/pull/132598 +[#132604]: https://github.com/home-assistant/core/pull/132604 +[#132613]: https://github.com/home-assistant/core/pull/132613 +[#132625]: https://github.com/home-assistant/core/pull/132625 +[#132629]: https://github.com/home-assistant/core/pull/132629 +[#132631]: https://github.com/home-assistant/core/pull/132631 +[#132632]: https://github.com/home-assistant/core/pull/132632 +[#132640]: https://github.com/home-assistant/core/pull/132640 +[#132641]: https://github.com/home-assistant/core/pull/132641 +[#132642]: https://github.com/home-assistant/core/pull/132642 +[#132643]: https://github.com/home-assistant/core/pull/132643 +[#132646]: https://github.com/home-assistant/core/pull/132646 +[#132648]: https://github.com/home-assistant/core/pull/132648 +[#132649]: https://github.com/home-assistant/core/pull/132649 +[#132650]: https://github.com/home-assistant/core/pull/132650 +[#132653]: https://github.com/home-assistant/core/pull/132653 +[#132657]: https://github.com/home-assistant/core/pull/132657 +[#132661]: https://github.com/home-assistant/core/pull/132661 +[#132663]: https://github.com/home-assistant/core/pull/132663 +[#132665]: https://github.com/home-assistant/core/pull/132665 +[#132666]: https://github.com/home-assistant/core/pull/132666 +[#132667]: https://github.com/home-assistant/core/pull/132667 +[#132668]: https://github.com/home-assistant/core/pull/132668 +[#132670]: https://github.com/home-assistant/core/pull/132670 +[#132672]: https://github.com/home-assistant/core/pull/132672 +[#132677]: https://github.com/home-assistant/core/pull/132677 +[#132680]: https://github.com/home-assistant/core/pull/132680 +[#132685]: https://github.com/home-assistant/core/pull/132685 +[#132686]: https://github.com/home-assistant/core/pull/132686 +[#132687]: https://github.com/home-assistant/core/pull/132687 +[#132688]: https://github.com/home-assistant/core/pull/132688 +[#132689]: https://github.com/home-assistant/core/pull/132689 +[#132690]: https://github.com/home-assistant/core/pull/132690 +[#132691]: https://github.com/home-assistant/core/pull/132691 +[#132692]: https://github.com/home-assistant/core/pull/132692 +[#132693]: https://github.com/home-assistant/core/pull/132693 +[#132695]: https://github.com/home-assistant/core/pull/132695 +[#132697]: https://github.com/home-assistant/core/pull/132697 +[#132698]: https://github.com/home-assistant/core/pull/132698 +[#132699]: https://github.com/home-assistant/core/pull/132699 +[#132703]: https://github.com/home-assistant/core/pull/132703 +[#132710]: https://github.com/home-assistant/core/pull/132710 +[#132714]: https://github.com/home-assistant/core/pull/132714 +[#132717]: https://github.com/home-assistant/core/pull/132717 +[#132718]: https://github.com/home-assistant/core/pull/132718 +[#132719]: https://github.com/home-assistant/core/pull/132719 +[#132723]: https://github.com/home-assistant/core/pull/132723 +[#132725]: https://github.com/home-assistant/core/pull/132725 +[#132730]: https://github.com/home-assistant/core/pull/132730 +[#132731]: https://github.com/home-assistant/core/pull/132731 +[#132733]: https://github.com/home-assistant/core/pull/132733 +[#132735]: https://github.com/home-assistant/core/pull/132735 +[#132738]: https://github.com/home-assistant/core/pull/132738 +[#132746]: https://github.com/home-assistant/core/pull/132746 +[#132748]: https://github.com/home-assistant/core/pull/132748 +[#132750]: https://github.com/home-assistant/core/pull/132750 +[#132752]: https://github.com/home-assistant/core/pull/132752 +[#132753]: https://github.com/home-assistant/core/pull/132753 +[#132755]: https://github.com/home-assistant/core/pull/132755 +[#132760]: https://github.com/home-assistant/core/pull/132760 +[#132761]: https://github.com/home-assistant/core/pull/132761 +[#132762]: https://github.com/home-assistant/core/pull/132762 +[#132764]: https://github.com/home-assistant/core/pull/132764 +[#132765]: https://github.com/home-assistant/core/pull/132765 +[#132767]: https://github.com/home-assistant/core/pull/132767 +[#132768]: https://github.com/home-assistant/core/pull/132768 +[#132776]: https://github.com/home-assistant/core/pull/132776 +[#132781]: https://github.com/home-assistant/core/pull/132781 +[#132784]: https://github.com/home-assistant/core/pull/132784 +[#132785]: https://github.com/home-assistant/core/pull/132785 +[#132787]: https://github.com/home-assistant/core/pull/132787 +[#132788]: https://github.com/home-assistant/core/pull/132788 +[#132789]: https://github.com/home-assistant/core/pull/132789 +[#132790]: https://github.com/home-assistant/core/pull/132790 +[#132791]: https://github.com/home-assistant/core/pull/132791 +[#132792]: https://github.com/home-assistant/core/pull/132792 +[#132793]: https://github.com/home-assistant/core/pull/132793 +[#132794]: https://github.com/home-assistant/core/pull/132794 +[#132796]: https://github.com/home-assistant/core/pull/132796 +[#132797]: https://github.com/home-assistant/core/pull/132797 +[#132798]: https://github.com/home-assistant/core/pull/132798 +[#132799]: https://github.com/home-assistant/core/pull/132799 +[#132800]: https://github.com/home-assistant/core/pull/132800 +[#132802]: https://github.com/home-assistant/core/pull/132802 +[#132803]: https://github.com/home-assistant/core/pull/132803 +[#132806]: https://github.com/home-assistant/core/pull/132806 +[#132807]: https://github.com/home-assistant/core/pull/132807 +[#132808]: https://github.com/home-assistant/core/pull/132808 +[#132809]: https://github.com/home-assistant/core/pull/132809 +[#132811]: https://github.com/home-assistant/core/pull/132811 +[#132812]: https://github.com/home-assistant/core/pull/132812 +[#132814]: https://github.com/home-assistant/core/pull/132814 +[#132816]: https://github.com/home-assistant/core/pull/132816 +[#132817]: https://github.com/home-assistant/core/pull/132817 +[#132818]: https://github.com/home-assistant/core/pull/132818 +[#132819]: https://github.com/home-assistant/core/pull/132819 +[#132820]: https://github.com/home-assistant/core/pull/132820 +[#132821]: https://github.com/home-assistant/core/pull/132821 +[#132822]: https://github.com/home-assistant/core/pull/132822 +[#132823]: https://github.com/home-assistant/core/pull/132823 +[#132828]: https://github.com/home-assistant/core/pull/132828 +[#132830]: https://github.com/home-assistant/core/pull/132830 +[#132831]: https://github.com/home-assistant/core/pull/132831 +[#132833]: https://github.com/home-assistant/core/pull/132833 +[#132835]: https://github.com/home-assistant/core/pull/132835 +[#132836]: https://github.com/home-assistant/core/pull/132836 +[#132837]: https://github.com/home-assistant/core/pull/132837 +[#132839]: https://github.com/home-assistant/core/pull/132839 +[#132840]: https://github.com/home-assistant/core/pull/132840 +[#132853]: https://github.com/home-assistant/core/pull/132853 +[#132854]: https://github.com/home-assistant/core/pull/132854 +[#132855]: https://github.com/home-assistant/core/pull/132855 +[#132859]: https://github.com/home-assistant/core/pull/132859 +[#132866]: https://github.com/home-assistant/core/pull/132866 +[#132869]: https://github.com/home-assistant/core/pull/132869 +[#132872]: https://github.com/home-assistant/core/pull/132872 +[#132874]: https://github.com/home-assistant/core/pull/132874 +[#132875]: https://github.com/home-assistant/core/pull/132875 +[#132876]: https://github.com/home-assistant/core/pull/132876 +[#132877]: https://github.com/home-assistant/core/pull/132877 +[#132878]: https://github.com/home-assistant/core/pull/132878 +[#132886]: https://github.com/home-assistant/core/pull/132886 +[#132888]: https://github.com/home-assistant/core/pull/132888 +[#132891]: https://github.com/home-assistant/core/pull/132891 +[#132892]: https://github.com/home-assistant/core/pull/132892 +[#132895]: https://github.com/home-assistant/core/pull/132895 +[#132900]: https://github.com/home-assistant/core/pull/132900 +[#132906]: https://github.com/home-assistant/core/pull/132906 +[#132907]: https://github.com/home-assistant/core/pull/132907 +[#132909]: https://github.com/home-assistant/core/pull/132909 +[#132912]: https://github.com/home-assistant/core/pull/132912 +[#132913]: https://github.com/home-assistant/core/pull/132913 +[#132915]: https://github.com/home-assistant/core/pull/132915 +[#132917]: https://github.com/home-assistant/core/pull/132917 +[#132923]: https://github.com/home-assistant/core/pull/132923 +[#132927]: https://github.com/home-assistant/core/pull/132927 +[#132929]: https://github.com/home-assistant/core/pull/132929 +[#132936]: https://github.com/home-assistant/core/pull/132936 +[#132940]: https://github.com/home-assistant/core/pull/132940 +[#132941]: https://github.com/home-assistant/core/pull/132941 +[#132943]: https://github.com/home-assistant/core/pull/132943 +[#132944]: https://github.com/home-assistant/core/pull/132944 +[#132945]: https://github.com/home-assistant/core/pull/132945 +[#132954]: https://github.com/home-assistant/core/pull/132954 +[#132958]: https://github.com/home-assistant/core/pull/132958 +[#132961]: https://github.com/home-assistant/core/pull/132961 +[#132962]: https://github.com/home-assistant/core/pull/132962 +[#132964]: https://github.com/home-assistant/core/pull/132964 +[#132970]: https://github.com/home-assistant/core/pull/132970 +[#132972]: https://github.com/home-assistant/core/pull/132972 +[#132974]: https://github.com/home-assistant/core/pull/132974 +[#132975]: https://github.com/home-assistant/core/pull/132975 +[#132979]: https://github.com/home-assistant/core/pull/132979 +[#132981]: https://github.com/home-assistant/core/pull/132981 +[#132982]: https://github.com/home-assistant/core/pull/132982 +[#132986]: https://github.com/home-assistant/core/pull/132986 +[#132988]: https://github.com/home-assistant/core/pull/132988 +[#132989]: https://github.com/home-assistant/core/pull/132989 +[#132990]: https://github.com/home-assistant/core/pull/132990 +[#132991]: https://github.com/home-assistant/core/pull/132991 +[#132995]: https://github.com/home-assistant/core/pull/132995 +[#132997]: https://github.com/home-assistant/core/pull/132997 +[#132998]: https://github.com/home-assistant/core/pull/132998 +[#133000]: https://github.com/home-assistant/core/pull/133000 +[#133001]: https://github.com/home-assistant/core/pull/133001 +[#133002]: https://github.com/home-assistant/core/pull/133002 +[#133003]: https://github.com/home-assistant/core/pull/133003 +[#133004]: https://github.com/home-assistant/core/pull/133004 +[#133005]: https://github.com/home-assistant/core/pull/133005 +[#133006]: https://github.com/home-assistant/core/pull/133006 +[#133008]: https://github.com/home-assistant/core/pull/133008 +[#133009]: https://github.com/home-assistant/core/pull/133009 +[#133010]: https://github.com/home-assistant/core/pull/133010 +[#133011]: https://github.com/home-assistant/core/pull/133011 +[#133012]: https://github.com/home-assistant/core/pull/133012 +[#133014]: https://github.com/home-assistant/core/pull/133014 +[#133015]: https://github.com/home-assistant/core/pull/133015 +[#133016]: https://github.com/home-assistant/core/pull/133016 +[#133017]: https://github.com/home-assistant/core/pull/133017 +[#133019]: https://github.com/home-assistant/core/pull/133019 +[#133020]: https://github.com/home-assistant/core/pull/133020 +[#133022]: https://github.com/home-assistant/core/pull/133022 +[#133023]: https://github.com/home-assistant/core/pull/133023 +[#133024]: https://github.com/home-assistant/core/pull/133024 +[#133025]: https://github.com/home-assistant/core/pull/133025 +[#133026]: https://github.com/home-assistant/core/pull/133026 +[#133028]: https://github.com/home-assistant/core/pull/133028 +[#133030]: https://github.com/home-assistant/core/pull/133030 +[#133031]: https://github.com/home-assistant/core/pull/133031 +[#133032]: https://github.com/home-assistant/core/pull/133032 +[#133033]: https://github.com/home-assistant/core/pull/133033 +[#133034]: https://github.com/home-assistant/core/pull/133034 +[#133035]: https://github.com/home-assistant/core/pull/133035 +[#133036]: https://github.com/home-assistant/core/pull/133036 +[#133040]: https://github.com/home-assistant/core/pull/133040 +[#133041]: https://github.com/home-assistant/core/pull/133041 +[#133043]: https://github.com/home-assistant/core/pull/133043 +[#133044]: https://github.com/home-assistant/core/pull/133044 +[#133045]: https://github.com/home-assistant/core/pull/133045 +[#133046]: https://github.com/home-assistant/core/pull/133046 +[#133047]: https://github.com/home-assistant/core/pull/133047 +[#133048]: https://github.com/home-assistant/core/pull/133048 +[#133049]: https://github.com/home-assistant/core/pull/133049 +[#133050]: https://github.com/home-assistant/core/pull/133050 +[#133051]: https://github.com/home-assistant/core/pull/133051 +[#133053]: https://github.com/home-assistant/core/pull/133053 +[#133055]: https://github.com/home-assistant/core/pull/133055 +[#133056]: https://github.com/home-assistant/core/pull/133056 +[#133060]: https://github.com/home-assistant/core/pull/133060 +[#133061]: https://github.com/home-assistant/core/pull/133061 +[#133062]: https://github.com/home-assistant/core/pull/133062 +[#133064]: https://github.com/home-assistant/core/pull/133064 +[#133065]: https://github.com/home-assistant/core/pull/133065 +[#133069]: https://github.com/home-assistant/core/pull/133069 +[#133070]: https://github.com/home-assistant/core/pull/133070 +[#133073]: https://github.com/home-assistant/core/pull/133073 +[#133074]: https://github.com/home-assistant/core/pull/133074 +[#133077]: https://github.com/home-assistant/core/pull/133077 +[#133081]: https://github.com/home-assistant/core/pull/133081 +[#133082]: https://github.com/home-assistant/core/pull/133082 +[#133083]: https://github.com/home-assistant/core/pull/133083 +[#133088]: https://github.com/home-assistant/core/pull/133088 +[#133091]: https://github.com/home-assistant/core/pull/133091 +[#133093]: https://github.com/home-assistant/core/pull/133093 +[#133094]: https://github.com/home-assistant/core/pull/133094 +[#133095]: https://github.com/home-assistant/core/pull/133095 +[#133096]: https://github.com/home-assistant/core/pull/133096 +[#133104]: https://github.com/home-assistant/core/pull/133104 +[#133106]: https://github.com/home-assistant/core/pull/133106 +[#133108]: https://github.com/home-assistant/core/pull/133108 +[#133109]: https://github.com/home-assistant/core/pull/133109 +[#133110]: https://github.com/home-assistant/core/pull/133110 +[#133111]: https://github.com/home-assistant/core/pull/133111 +[#133113]: https://github.com/home-assistant/core/pull/133113 +[#133118]: https://github.com/home-assistant/core/pull/133118 +[#133122]: https://github.com/home-assistant/core/pull/133122 +[#133125]: https://github.com/home-assistant/core/pull/133125 +[#133126]: https://github.com/home-assistant/core/pull/133126 +[#133127]: https://github.com/home-assistant/core/pull/133127 +[#133130]: https://github.com/home-assistant/core/pull/133130 +[#133131]: https://github.com/home-assistant/core/pull/133131 +[#133132]: https://github.com/home-assistant/core/pull/133132 +[#133133]: https://github.com/home-assistant/core/pull/133133 +[#133134]: https://github.com/home-assistant/core/pull/133134 +[#133138]: https://github.com/home-assistant/core/pull/133138 +[#133139]: https://github.com/home-assistant/core/pull/133139 +[#133141]: https://github.com/home-assistant/core/pull/133141 +[#133142]: https://github.com/home-assistant/core/pull/133142 +[#133144]: https://github.com/home-assistant/core/pull/133144 +[#133147]: https://github.com/home-assistant/core/pull/133147 +[#133149]: https://github.com/home-assistant/core/pull/133149 +[#133153]: https://github.com/home-assistant/core/pull/133153 +[#133155]: https://github.com/home-assistant/core/pull/133155 +[#133158]: https://github.com/home-assistant/core/pull/133158 +[#133162]: https://github.com/home-assistant/core/pull/133162 +[#133163]: https://github.com/home-assistant/core/pull/133163 +[#133166]: https://github.com/home-assistant/core/pull/133166 +[#133169]: https://github.com/home-assistant/core/pull/133169 +[#133170]: https://github.com/home-assistant/core/pull/133170 +[#133174]: https://github.com/home-assistant/core/pull/133174 +[#133175]: https://github.com/home-assistant/core/pull/133175 +[#133182]: https://github.com/home-assistant/core/pull/133182 +[#133188]: https://github.com/home-assistant/core/pull/133188 +[#133197]: https://github.com/home-assistant/core/pull/133197 +[#133198]: https://github.com/home-assistant/core/pull/133198 +[#133202]: https://github.com/home-assistant/core/pull/133202 +[#133204]: https://github.com/home-assistant/core/pull/133204 +[#133206]: https://github.com/home-assistant/core/pull/133206 +[#133208]: https://github.com/home-assistant/core/pull/133208 +[#133210]: https://github.com/home-assistant/core/pull/133210 +[#133211]: https://github.com/home-assistant/core/pull/133211 +[#133213]: https://github.com/home-assistant/core/pull/133213 +[#133219]: https://github.com/home-assistant/core/pull/133219 +[#133226]: https://github.com/home-assistant/core/pull/133226 +[#133228]: https://github.com/home-assistant/core/pull/133228 +[#133230]: https://github.com/home-assistant/core/pull/133230 +[#133234]: https://github.com/home-assistant/core/pull/133234 +[#133235]: https://github.com/home-assistant/core/pull/133235 +[#133236]: https://github.com/home-assistant/core/pull/133236 +[#133245]: https://github.com/home-assistant/core/pull/133245 +[#133247]: https://github.com/home-assistant/core/pull/133247 +[#133252]: https://github.com/home-assistant/core/pull/133252 +[#133253]: https://github.com/home-assistant/core/pull/133253 +[#133264]: https://github.com/home-assistant/core/pull/133264 +[#133267]: https://github.com/home-assistant/core/pull/133267 +[#133272]: https://github.com/home-assistant/core/pull/133272 +[#133275]: https://github.com/home-assistant/core/pull/133275 +[#133276]: https://github.com/home-assistant/core/pull/133276 +[#133277]: https://github.com/home-assistant/core/pull/133277 +[#133281]: https://github.com/home-assistant/core/pull/133281 +[#133282]: https://github.com/home-assistant/core/pull/133282 +[#133293]: https://github.com/home-assistant/core/pull/133293 +[#133294]: https://github.com/home-assistant/core/pull/133294 +[#133295]: https://github.com/home-assistant/core/pull/133295 +[#133296]: https://github.com/home-assistant/core/pull/133296 +[#133298]: https://github.com/home-assistant/core/pull/133298 +[#133304]: https://github.com/home-assistant/core/pull/133304 +[#133305]: https://github.com/home-assistant/core/pull/133305 +[#133306]: https://github.com/home-assistant/core/pull/133306 +[#133315]: https://github.com/home-assistant/core/pull/133315 +[#133316]: https://github.com/home-assistant/core/pull/133316 +[#133323]: https://github.com/home-assistant/core/pull/133323 +[#133326]: https://github.com/home-assistant/core/pull/133326 +[#133330]: https://github.com/home-assistant/core/pull/133330 +[#133331]: https://github.com/home-assistant/core/pull/133331 +[#133333]: https://github.com/home-assistant/core/pull/133333 +[#133334]: https://github.com/home-assistant/core/pull/133334 +[#133335]: https://github.com/home-assistant/core/pull/133335 +[#133337]: https://github.com/home-assistant/core/pull/133337 +[#133338]: https://github.com/home-assistant/core/pull/133338 +[#133339]: https://github.com/home-assistant/core/pull/133339 +[#133340]: https://github.com/home-assistant/core/pull/133340 +[#133344]: https://github.com/home-assistant/core/pull/133344 +[#133349]: https://github.com/home-assistant/core/pull/133349 +[#133351]: https://github.com/home-assistant/core/pull/133351 +[#133352]: https://github.com/home-assistant/core/pull/133352 +[#133356]: https://github.com/home-assistant/core/pull/133356 +[#133358]: https://github.com/home-assistant/core/pull/133358 +[#133359]: https://github.com/home-assistant/core/pull/133359 +[#133361]: https://github.com/home-assistant/core/pull/133361 +[#133367]: https://github.com/home-assistant/core/pull/133367 +[#133369]: https://github.com/home-assistant/core/pull/133369 +[#133370]: https://github.com/home-assistant/core/pull/133370 +[#133371]: https://github.com/home-assistant/core/pull/133371 +[#133383]: https://github.com/home-assistant/core/pull/133383 +[#133385]: https://github.com/home-assistant/core/pull/133385 +[#133387]: https://github.com/home-assistant/core/pull/133387 +[#133389]: https://github.com/home-assistant/core/pull/133389 +[#133390]: https://github.com/home-assistant/core/pull/133390 +[#133392]: https://github.com/home-assistant/core/pull/133392 +[#133394]: https://github.com/home-assistant/core/pull/133394 +[#133404]: https://github.com/home-assistant/core/pull/133404 +[#133412]: https://github.com/home-assistant/core/pull/133412 +[#133413]: https://github.com/home-assistant/core/pull/133413 +[#133415]: https://github.com/home-assistant/core/pull/133415 +[#133417]: https://github.com/home-assistant/core/pull/133417 +[#133424]: https://github.com/home-assistant/core/pull/133424 +[#133425]: https://github.com/home-assistant/core/pull/133425 +[#133426]: https://github.com/home-assistant/core/pull/133426 +[#133428]: https://github.com/home-assistant/core/pull/133428 +[#133429]: https://github.com/home-assistant/core/pull/133429 +[#133431]: https://github.com/home-assistant/core/pull/133431 +[#133433]: https://github.com/home-assistant/core/pull/133433 +[#133434]: https://github.com/home-assistant/core/pull/133434 +[#133435]: https://github.com/home-assistant/core/pull/133435 +[#133436]: https://github.com/home-assistant/core/pull/133436 +[#133443]: https://github.com/home-assistant/core/pull/133443 +[#133445]: https://github.com/home-assistant/core/pull/133445 +[#133446]: https://github.com/home-assistant/core/pull/133446 +[#133447]: https://github.com/home-assistant/core/pull/133447 +[#133449]: https://github.com/home-assistant/core/pull/133449 +[#133453]: https://github.com/home-assistant/core/pull/133453 +[#133459]: https://github.com/home-assistant/core/pull/133459 +[#133461]: https://github.com/home-assistant/core/pull/133461 +[#133466]: https://github.com/home-assistant/core/pull/133466 +[#133467]: https://github.com/home-assistant/core/pull/133467 +[#133468]: https://github.com/home-assistant/core/pull/133468 +[#133470]: https://github.com/home-assistant/core/pull/133470 +[#133472]: https://github.com/home-assistant/core/pull/133472 +[#133473]: https://github.com/home-assistant/core/pull/133473 +[#133474]: https://github.com/home-assistant/core/pull/133474 +[#133475]: https://github.com/home-assistant/core/pull/133475 +[#133476]: https://github.com/home-assistant/core/pull/133476 +[#133482]: https://github.com/home-assistant/core/pull/133482 +[#133484]: https://github.com/home-assistant/core/pull/133484 +[#133485]: https://github.com/home-assistant/core/pull/133485 +[#133488]: https://github.com/home-assistant/core/pull/133488 +[#133489]: https://github.com/home-assistant/core/pull/133489 +[#133490]: https://github.com/home-assistant/core/pull/133490 +[#133494]: https://github.com/home-assistant/core/pull/133494 +[#133500]: https://github.com/home-assistant/core/pull/133500 +[#133501]: https://github.com/home-assistant/core/pull/133501 +[#133503]: https://github.com/home-assistant/core/pull/133503 +[#133504]: https://github.com/home-assistant/core/pull/133504 +[#133505]: https://github.com/home-assistant/core/pull/133505 +[#133508]: https://github.com/home-assistant/core/pull/133508 +[#133509]: https://github.com/home-assistant/core/pull/133509 +[#133513]: https://github.com/home-assistant/core/pull/133513 +[#133514]: https://github.com/home-assistant/core/pull/133514 +[#133515]: https://github.com/home-assistant/core/pull/133515 +[#133516]: https://github.com/home-assistant/core/pull/133516 +[#133519]: https://github.com/home-assistant/core/pull/133519 +[#133520]: https://github.com/home-assistant/core/pull/133520 +[#133521]: https://github.com/home-assistant/core/pull/133521 +[#133522]: https://github.com/home-assistant/core/pull/133522 +[#133523]: https://github.com/home-assistant/core/pull/133523 +[#133524]: https://github.com/home-assistant/core/pull/133524 +[#133528]: https://github.com/home-assistant/core/pull/133528 +[#133529]: https://github.com/home-assistant/core/pull/133529 +[#133532]: https://github.com/home-assistant/core/pull/133532 +[#133534]: https://github.com/home-assistant/core/pull/133534 +[#133536]: https://github.com/home-assistant/core/pull/133536 +[#133539]: https://github.com/home-assistant/core/pull/133539 +[#133541]: https://github.com/home-assistant/core/pull/133541 +[#133547]: https://github.com/home-assistant/core/pull/133547 +[#133548]: https://github.com/home-assistant/core/pull/133548 +[#133549]: https://github.com/home-assistant/core/pull/133549 +[#133552]: https://github.com/home-assistant/core/pull/133552 +[#133553]: https://github.com/home-assistant/core/pull/133553 +[#133554]: https://github.com/home-assistant/core/pull/133554 +[#133555]: https://github.com/home-assistant/core/pull/133555 +[#133557]: https://github.com/home-assistant/core/pull/133557 +[#133558]: https://github.com/home-assistant/core/pull/133558 +[#133559]: https://github.com/home-assistant/core/pull/133559 +[#133560]: https://github.com/home-assistant/core/pull/133560 +[#133561]: https://github.com/home-assistant/core/pull/133561 +[#133564]: https://github.com/home-assistant/core/pull/133564 +[#133569]: https://github.com/home-assistant/core/pull/133569 +[#133570]: https://github.com/home-assistant/core/pull/133570 +[#133571]: https://github.com/home-assistant/core/pull/133571 +[#133572]: https://github.com/home-assistant/core/pull/133572 +[#133579]: https://github.com/home-assistant/core/pull/133579 +[#133580]: https://github.com/home-assistant/core/pull/133580 +[#133581]: https://github.com/home-assistant/core/pull/133581 +[#133582]: https://github.com/home-assistant/core/pull/133582 +[#133584]: https://github.com/home-assistant/core/pull/133584 +[#133587]: https://github.com/home-assistant/core/pull/133587 +[#133590]: https://github.com/home-assistant/core/pull/133590 +[#133592]: https://github.com/home-assistant/core/pull/133592 +[#133593]: https://github.com/home-assistant/core/pull/133593 +[#133594]: https://github.com/home-assistant/core/pull/133594 +[#133605]: https://github.com/home-assistant/core/pull/133605 +[#133606]: https://github.com/home-assistant/core/pull/133606 +[#133607]: https://github.com/home-assistant/core/pull/133607 +[#133609]: https://github.com/home-assistant/core/pull/133609 +[#133611]: https://github.com/home-assistant/core/pull/133611 +[#133616]: https://github.com/home-assistant/core/pull/133616 +[#133619]: https://github.com/home-assistant/core/pull/133619 +[#133628]: https://github.com/home-assistant/core/pull/133628 +[#133631]: https://github.com/home-assistant/core/pull/133631 +[#133633]: https://github.com/home-assistant/core/pull/133633 +[#133634]: https://github.com/home-assistant/core/pull/133634 +[#133635]: https://github.com/home-assistant/core/pull/133635 +[#133638]: https://github.com/home-assistant/core/pull/133638 +[#133640]: https://github.com/home-assistant/core/pull/133640 +[#133643]: https://github.com/home-assistant/core/pull/133643 +[#133644]: https://github.com/home-assistant/core/pull/133644 +[#133646]: https://github.com/home-assistant/core/pull/133646 +[#133647]: https://github.com/home-assistant/core/pull/133647 +[#133648]: https://github.com/home-assistant/core/pull/133648 +[#133650]: https://github.com/home-assistant/core/pull/133650 +[#133652]: https://github.com/home-assistant/core/pull/133652 +[#133653]: https://github.com/home-assistant/core/pull/133653 +[#133654]: https://github.com/home-assistant/core/pull/133654 +[#133655]: https://github.com/home-assistant/core/pull/133655 +[#133656]: https://github.com/home-assistant/core/pull/133656 +[#133657]: https://github.com/home-assistant/core/pull/133657 +[#133659]: https://github.com/home-assistant/core/pull/133659 +[#133660]: https://github.com/home-assistant/core/pull/133660 +[#133665]: https://github.com/home-assistant/core/pull/133665 +[#133666]: https://github.com/home-assistant/core/pull/133666 +[#133668]: https://github.com/home-assistant/core/pull/133668 +[#133669]: https://github.com/home-assistant/core/pull/133669 +[#133670]: https://github.com/home-assistant/core/pull/133670 +[#133672]: https://github.com/home-assistant/core/pull/133672 +[#133676]: https://github.com/home-assistant/core/pull/133676 +[#133679]: https://github.com/home-assistant/core/pull/133679 +[#133680]: https://github.com/home-assistant/core/pull/133680 +[#133681]: https://github.com/home-assistant/core/pull/133681 +[#133682]: https://github.com/home-assistant/core/pull/133682 +[#133683]: https://github.com/home-assistant/core/pull/133683 +[#133684]: https://github.com/home-assistant/core/pull/133684 +[#133685]: https://github.com/home-assistant/core/pull/133685 +[#133690]: https://github.com/home-assistant/core/pull/133690 +[#133697]: https://github.com/home-assistant/core/pull/133697 +[#133699]: https://github.com/home-assistant/core/pull/133699 +[#133700]: https://github.com/home-assistant/core/pull/133700 +[#133701]: https://github.com/home-assistant/core/pull/133701 +[#133705]: https://github.com/home-assistant/core/pull/133705 +[#133706]: https://github.com/home-assistant/core/pull/133706 +[#133707]: https://github.com/home-assistant/core/pull/133707 +[#133708]: https://github.com/home-assistant/core/pull/133708 +[#133710]: https://github.com/home-assistant/core/pull/133710 +[#133712]: https://github.com/home-assistant/core/pull/133712 +[#133713]: https://github.com/home-assistant/core/pull/133713 +[#133714]: https://github.com/home-assistant/core/pull/133714 +[#133715]: https://github.com/home-assistant/core/pull/133715 +[#133716]: https://github.com/home-assistant/core/pull/133716 +[#133717]: https://github.com/home-assistant/core/pull/133717 +[#133718]: https://github.com/home-assistant/core/pull/133718 +[#133720]: https://github.com/home-assistant/core/pull/133720 +[#133722]: https://github.com/home-assistant/core/pull/133722 +[#133723]: https://github.com/home-assistant/core/pull/133723 +[#133724]: https://github.com/home-assistant/core/pull/133724 +[#133725]: https://github.com/home-assistant/core/pull/133725 +[#133726]: https://github.com/home-assistant/core/pull/133726 +[#133727]: https://github.com/home-assistant/core/pull/133727 +[#133728]: https://github.com/home-assistant/core/pull/133728 +[#133729]: https://github.com/home-assistant/core/pull/133729 +[#133730]: https://github.com/home-assistant/core/pull/133730 +[#133734]: https://github.com/home-assistant/core/pull/133734 +[#133735]: https://github.com/home-assistant/core/pull/133735 +[#133737]: https://github.com/home-assistant/core/pull/133737 +[#133739]: https://github.com/home-assistant/core/pull/133739 +[#133740]: https://github.com/home-assistant/core/pull/133740 +[#133744]: https://github.com/home-assistant/core/pull/133744 +[#133748]: https://github.com/home-assistant/core/pull/133748 +[#133749]: https://github.com/home-assistant/core/pull/133749 +[#133750]: https://github.com/home-assistant/core/pull/133750 +[#133751]: https://github.com/home-assistant/core/pull/133751 +[#133752]: https://github.com/home-assistant/core/pull/133752 +[#133753]: https://github.com/home-assistant/core/pull/133753 +[#133754]: https://github.com/home-assistant/core/pull/133754 +[#133755]: https://github.com/home-assistant/core/pull/133755 +[#133756]: https://github.com/home-assistant/core/pull/133756 +[#133757]: https://github.com/home-assistant/core/pull/133757 +[#133758]: https://github.com/home-assistant/core/pull/133758 +[#133760]: https://github.com/home-assistant/core/pull/133760 +[#133764]: https://github.com/home-assistant/core/pull/133764 +[#133765]: https://github.com/home-assistant/core/pull/133765 +[#133768]: https://github.com/home-assistant/core/pull/133768 +[#133769]: https://github.com/home-assistant/core/pull/133769 +[#133770]: https://github.com/home-assistant/core/pull/133770 +[#133772]: https://github.com/home-assistant/core/pull/133772 +[#133778]: https://github.com/home-assistant/core/pull/133778 +[#133780]: https://github.com/home-assistant/core/pull/133780 +[#133782]: https://github.com/home-assistant/core/pull/133782 +[#133785]: https://github.com/home-assistant/core/pull/133785 +[#133786]: https://github.com/home-assistant/core/pull/133786 +[#133790]: https://github.com/home-assistant/core/pull/133790 +[#133793]: https://github.com/home-assistant/core/pull/133793 +[#133794]: https://github.com/home-assistant/core/pull/133794 +[#133795]: https://github.com/home-assistant/core/pull/133795 +[#133796]: https://github.com/home-assistant/core/pull/133796 +[#133798]: https://github.com/home-assistant/core/pull/133798 +[#133799]: https://github.com/home-assistant/core/pull/133799 +[#133801]: https://github.com/home-assistant/core/pull/133801 +[#133802]: https://github.com/home-assistant/core/pull/133802 +[#133803]: https://github.com/home-assistant/core/pull/133803 +[#133804]: https://github.com/home-assistant/core/pull/133804 +[#133805]: https://github.com/home-assistant/core/pull/133805 +[#133806]: https://github.com/home-assistant/core/pull/133806 +[#133809]: https://github.com/home-assistant/core/pull/133809 +[#133811]: https://github.com/home-assistant/core/pull/133811 +[#133812]: https://github.com/home-assistant/core/pull/133812 +[#133814]: https://github.com/home-assistant/core/pull/133814 +[#133817]: https://github.com/home-assistant/core/pull/133817 +[#133818]: https://github.com/home-assistant/core/pull/133818 +[#133819]: https://github.com/home-assistant/core/pull/133819 +[#133820]: https://github.com/home-assistant/core/pull/133820 +[#133821]: https://github.com/home-assistant/core/pull/133821 +[#133822]: https://github.com/home-assistant/core/pull/133822 +[#133823]: https://github.com/home-assistant/core/pull/133823 +[#133826]: https://github.com/home-assistant/core/pull/133826 +[#133828]: https://github.com/home-assistant/core/pull/133828 +[#133829]: https://github.com/home-assistant/core/pull/133829 +[#133835]: https://github.com/home-assistant/core/pull/133835 +[#133839]: https://github.com/home-assistant/core/pull/133839 +[#133841]: https://github.com/home-assistant/core/pull/133841 +[#133842]: https://github.com/home-assistant/core/pull/133842 +[#133845]: https://github.com/home-assistant/core/pull/133845 +[#133848]: https://github.com/home-assistant/core/pull/133848 +[#133853]: https://github.com/home-assistant/core/pull/133853 +[#133854]: https://github.com/home-assistant/core/pull/133854 +[#133855]: https://github.com/home-assistant/core/pull/133855 +[#133856]: https://github.com/home-assistant/core/pull/133856 +[#133857]: https://github.com/home-assistant/core/pull/133857 +[#133861]: https://github.com/home-assistant/core/pull/133861 +[#133862]: https://github.com/home-assistant/core/pull/133862 +[#133863]: https://github.com/home-assistant/core/pull/133863 +[#133868]: https://github.com/home-assistant/core/pull/133868 +[#133874]: https://github.com/home-assistant/core/pull/133874 +[#133876]: https://github.com/home-assistant/core/pull/133876 +[#133877]: https://github.com/home-assistant/core/pull/133877 +[#133878]: https://github.com/home-assistant/core/pull/133878 +[#133879]: https://github.com/home-assistant/core/pull/133879 +[#133880]: https://github.com/home-assistant/core/pull/133880 +[#133883]: https://github.com/home-assistant/core/pull/133883 +[#133884]: https://github.com/home-assistant/core/pull/133884 +[#133886]: https://github.com/home-assistant/core/pull/133886 +[#133889]: https://github.com/home-assistant/core/pull/133889 +[#133900]: https://github.com/home-assistant/core/pull/133900 +[#133905]: https://github.com/home-assistant/core/pull/133905 +[#133907]: https://github.com/home-assistant/core/pull/133907 +[#133909]: https://github.com/home-assistant/core/pull/133909 +[#133913]: https://github.com/home-assistant/core/pull/133913 +[#133916]: https://github.com/home-assistant/core/pull/133916 +[#133924]: https://github.com/home-assistant/core/pull/133924 +[#133925]: https://github.com/home-assistant/core/pull/133925 +[#133926]: https://github.com/home-assistant/core/pull/133926 +[#133927]: https://github.com/home-assistant/core/pull/133927 +[#133931]: https://github.com/home-assistant/core/pull/133931 +[#133936]: https://github.com/home-assistant/core/pull/133936 +[#133938]: https://github.com/home-assistant/core/pull/133938 +[#133951]: https://github.com/home-assistant/core/pull/133951 +[#133954]: https://github.com/home-assistant/core/pull/133954 +[#133963]: https://github.com/home-assistant/core/pull/133963 +[#133964]: https://github.com/home-assistant/core/pull/133964 +[#133974]: https://github.com/home-assistant/core/pull/133974 +[#133999]: https://github.com/home-assistant/core/pull/133999 +[#134007]: https://github.com/home-assistant/core/pull/134007 +[#134008]: https://github.com/home-assistant/core/pull/134008 +[#134023]: https://github.com/home-assistant/core/pull/134023 +[#134033]: https://github.com/home-assistant/core/pull/134033 +[#134043]: https://github.com/home-assistant/core/pull/134043 +[#134058]: https://github.com/home-assistant/core/pull/134058 +[#134063]: https://github.com/home-assistant/core/pull/134063 +[#134070]: https://github.com/home-assistant/core/pull/134070 +[#134078]: https://github.com/home-assistant/core/pull/134078 +[#134092]: https://github.com/home-assistant/core/pull/134092 +[#134094]: https://github.com/home-assistant/core/pull/134094 +[#134101]: https://github.com/home-assistant/core/pull/134101 +[#134103]: https://github.com/home-assistant/core/pull/134103 +[#134131]: https://github.com/home-assistant/core/pull/134131 +[#134139]: https://github.com/home-assistant/core/pull/134139 +[#134141]: https://github.com/home-assistant/core/pull/134141 +[#134157]: https://github.com/home-assistant/core/pull/134157 +[#134166]: https://github.com/home-assistant/core/pull/134166 +[#134184]: https://github.com/home-assistant/core/pull/134184 +[#134199]: https://github.com/home-assistant/core/pull/134199 +[#134202]: https://github.com/home-assistant/core/pull/134202 +[#134214]: https://github.com/home-assistant/core/pull/134214 +[#134216]: https://github.com/home-assistant/core/pull/134216 +[#134219]: https://github.com/home-assistant/core/pull/134219 +[#134225]: https://github.com/home-assistant/core/pull/134225 +[#134228]: https://github.com/home-assistant/core/pull/134228 +[#134230]: https://github.com/home-assistant/core/pull/134230 +[#134237]: https://github.com/home-assistant/core/pull/134237 +[#134250]: https://github.com/home-assistant/core/pull/134250 +[#134251]: https://github.com/home-assistant/core/pull/134251 +[#134255]: https://github.com/home-assistant/core/pull/134255 +[#134259]: https://github.com/home-assistant/core/pull/134259 +[#134265]: https://github.com/home-assistant/core/pull/134265 +[#134272]: https://github.com/home-assistant/core/pull/134272 +[#134274]: https://github.com/home-assistant/core/pull/134274 +[#134283]: https://github.com/home-assistant/core/pull/134283 +[#134284]: https://github.com/home-assistant/core/pull/134284 +[#134286]: https://github.com/home-assistant/core/pull/134286 +[#134294]: https://github.com/home-assistant/core/pull/134294 +[#134346]: https://github.com/home-assistant/core/pull/134346 +[#134352]: https://github.com/home-assistant/core/pull/134352 +[#134359]: https://github.com/home-assistant/core/pull/134359 +[#134360]: https://github.com/home-assistant/core/pull/134360 +[#134363]: https://github.com/home-assistant/core/pull/134363 +[#134367]: https://github.com/home-assistant/core/pull/134367 +[#134373]: https://github.com/home-assistant/core/pull/134373 +[#134381]: https://github.com/home-assistant/core/pull/134381 +[#134390]: https://github.com/home-assistant/core/pull/134390 +[#134414]: https://github.com/home-assistant/core/pull/134414 +[#134424]: https://github.com/home-assistant/core/pull/134424 +[#134427]: https://github.com/home-assistant/core/pull/134427 +[#134434]: https://github.com/home-assistant/core/pull/134434 +[#134436]: https://github.com/home-assistant/core/pull/134436 +[#134440]: https://github.com/home-assistant/core/pull/134440 +[#134443]: https://github.com/home-assistant/core/pull/134443 +[#134454]: https://github.com/home-assistant/core/pull/134454 +[#134462]: https://github.com/home-assistant/core/pull/134462 +[#134467]: https://github.com/home-assistant/core/pull/134467 +[#134470]: https://github.com/home-assistant/core/pull/134470 +[#134481]: https://github.com/home-assistant/core/pull/134481 +[#134486]: https://github.com/home-assistant/core/pull/134486 +[#134489]: https://github.com/home-assistant/core/pull/134489 +[#134496]: https://github.com/home-assistant/core/pull/134496 +[#134506]: https://github.com/home-assistant/core/pull/134506 +[#134517]: https://github.com/home-assistant/core/pull/134517 +[#134518]: https://github.com/home-assistant/core/pull/134518 +[#134521]: https://github.com/home-assistant/core/pull/134521 +[#134523]: https://github.com/home-assistant/core/pull/134523 +[#134524]: https://github.com/home-assistant/core/pull/134524 +[#134526]: https://github.com/home-assistant/core/pull/134526 +[#134528]: https://github.com/home-assistant/core/pull/134528 +[#134534]: https://github.com/home-assistant/core/pull/134534 +[#134538]: https://github.com/home-assistant/core/pull/134538 +[#134546]: https://github.com/home-assistant/core/pull/134546 +[#134556]: https://github.com/home-assistant/core/pull/134556 +[#134561]: https://github.com/home-assistant/core/pull/134561 +[#134562]: https://github.com/home-assistant/core/pull/134562 +[#134569]: https://github.com/home-assistant/core/pull/134569 +[@Bre77]: https://github.com/Bre77 +[@CFenner]: https://github.com/CFenner +[@CoMPaTech]: https://github.com/CoMPaTech +[@DCSBL]: https://github.com/DCSBL +[@Diegorro98]: https://github.com/Diegorro98 +[@DrBlokmeister]: https://github.com/DrBlokmeister +[@FliegendeWurst]: https://github.com/FliegendeWurst +[@G-Two]: https://github.com/G-Two +[@IceBotYT]: https://github.com/IceBotYT +[@Jordi1990]: https://github.com/Jordi1990 +[@KJonline]: https://github.com/KJonline +[@Kane610]: https://github.com/Kane610 +[@Lash-L]: https://github.com/Lash-L +[@LouisChrist]: https://github.com/LouisChrist +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MindFreeze]: https://github.com/MindFreeze +[@NoRi2909]: https://github.com/NoRi2909 +[@Noltari]: https://github.com/Noltari +[@Omniflux]: https://github.com/Omniflux +[@PierreAronnax]: https://github.com/PierreAronnax +[@RaHehl]: https://github.com/RaHehl +[@Shutgun]: https://github.com/Shutgun +[@StevenLooman]: https://github.com/StevenLooman +[@TheJulianJES]: https://github.com/TheJulianJES +[@Thomas55555]: https://github.com/Thomas55555 +[@VandeurenGlenn]: https://github.com/VandeurenGlenn +[@Xiretza]: https://github.com/Xiretza +[@YogevBokobza]: https://github.com/YogevBokobza +[@ZephireNZ]: https://github.com/ZephireNZ +[@aagit]: https://github.com/aagit +[@abmantis]: https://github.com/abmantis +[@adam-the-hero]: https://github.com/adam-the-hero +[@agners]: https://github.com/agners +[@agoode]: https://github.com/agoode +[@albertogeniola]: https://github.com/albertogeniola +[@alengwenus]: https://github.com/alengwenus +[@alexandrecuer]: https://github.com/alexandrecuer +[@allenporter]: https://github.com/allenporter +[@andrew-codechimp]: https://github.com/andrew-codechimp +[@andrewsayre]: https://github.com/andrewsayre +[@arturpragacz]: https://github.com/arturpragacz +[@astrandb]: https://github.com/astrandb +[@austinmroczek]: https://github.com/austinmroczek +[@autinerd]: https://github.com/autinerd +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@barryvdh]: https://github.com/barryvdh +[@basbruss]: https://github.com/basbruss +[@bdraco]: https://github.com/bdraco +[@benjamin-dcs]: https://github.com/benjamin-dcs +[@bieniu]: https://github.com/bieniu +[@bouwew]: https://github.com/bouwew +[@bramkragten]: https://github.com/bramkragten +[@by-cx]: https://github.com/by-cx +[@candrews]: https://github.com/candrews +[@catsmanac]: https://github.com/catsmanac +[@cdce8p]: https://github.com/cdce8p +[@cdnninja]: https://github.com/cdnninja +[@cereal2nd]: https://github.com/cereal2nd +[@cgarwood]: https://github.com/cgarwood +[@chamberlain2007]: https://github.com/chamberlain2007 +[@chemelli74]: https://github.com/chemelli74 +[@crug80]: https://github.com/crug80 +[@ctalkington]: https://github.com/ctalkington +[@dan-r]: https://github.com/dan-r +[@dannerph]: https://github.com/dannerph +[@davet2001]: https://github.com/davet2001 +[@davidrapan]: https://github.com/davidrapan +[@dieselrabbit]: https://github.com/dieselrabbit +[@dknowles2]: https://github.com/dknowles2 +[@dontinelli]: https://github.com/dontinelli +[@dotvav]: https://github.com/dotvav +[@eclair4151]: https://github.com/eclair4151 +[@edenhaus]: https://github.com/edenhaus +[@eifinger]: https://github.com/eifinger +[@elmurato]: https://github.com/elmurato +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@farmio]: https://github.com/farmio +[@flz]: https://github.com/flz +[@frenck]: https://github.com/frenck +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@greyeee]: https://github.com/greyeee +[@hahn-th]: https://github.com/hahn-th +[@hughsaunders]: https://github.com/hughsaunders +[@hugoideler]: https://github.com/hugoideler +[@iMicknl]: https://github.com/iMicknl +[@jb101010-2]: https://github.com/jb101010-2 +[@jbouwh]: https://github.com/jbouwh +[@jesperraemaekers]: https://github.com/jesperraemaekers +[@jon6fingrs]: https://github.com/jon6fingrs +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@jrieger]: https://github.com/jrieger +[@jterrace]: https://github.com/jterrace +[@karwosts]: https://github.com/karwosts +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@klejejs]: https://github.com/klejejs +[@krauseerl]: https://github.com/krauseerl +[@kruton]: https://github.com/kruton +[@krzysdabro]: https://github.com/krzysdabro +[@lboue]: https://github.com/lboue +[@lellky]: https://github.com/lellky +[@luc-ass]: https://github.com/luc-ass +[@ludeeus]: https://github.com/ludeeus +[@marcelveldt]: https://github.com/marcelveldt +[@martijnrusschen]: https://github.com/martijnrusschen +[@masto]: https://github.com/masto +[@matrixd2]: https://github.com/matrixd2 +[@mdegat01]: https://github.com/mdegat01 +[@miaucl]: https://github.com/miaucl +[@mib1185]: https://github.com/mib1185 +[@mill1000]: https://github.com/mill1000 +[@mj23000]: https://github.com/mj23000 +[@mkmer]: https://github.com/mkmer +[@mmrazik]: https://github.com/mmrazik +[@mrtlhfr]: https://github.com/mrtlhfr +[@mvn23]: https://github.com/mvn23 +[@mweinelt]: https://github.com/mweinelt +[@nasWebio]: https://github.com/nasWebio +[@nielstron]: https://github.com/nielstron +[@noahhusby]: https://github.com/noahhusby +[@pawlizio]: https://github.com/pawlizio +[@peteS-UK]: https://github.com/peteS-UK +[@philipdouglas]: https://github.com/philipdouglas +[@rappenze]: https://github.com/rappenze +[@rd-blue]: https://github.com/rd-blue +[@rikroe]: https://github.com/rikroe +[@rytilahti]: https://github.com/rytilahti +[@sdb9696]: https://github.com/sdb9696 +[@shapournemati-iotty]: https://github.com/shapournemati-iotty +[@shmuelzon]: https://github.com/shmuelzon +[@sorgfresser]: https://github.com/sorgfresser +[@starkillerOG]: https://github.com/starkillerOG +[@synesthesiam]: https://github.com/synesthesiam +[@thecode]: https://github.com/thecode +[@tjhorner]: https://github.com/tjhorner +[@tofuSCHNITZEL]: https://github.com/tofuSCHNITZEL +[@tr4nt0r]: https://github.com/tr4nt0r +[@tronikos]: https://github.com/tronikos +[@vche]: https://github.com/vche +[@yazan-abdalrahman]: https://github.com/yazan-abdalrahman +[@zweckj]: https://github.com/zweckj diff --git a/source/changelogs/core-2025.2.markdown b/source/changelogs/core-2025.2.markdown new file mode 100644 index 00000000000..b3db05fb0ea --- /dev/null +++ b/source/changelogs/core-2025.2.markdown @@ -0,0 +1,3225 @@ +--- +title: Full changelog for Home Assistant Core 2025.2 +description: Detailed changelog for the Home Assistant Core 2025.2 release +replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$ +--- + +These are all the changes included in the Home Assistant Core 2025.2 release. + +For a summary in a more readable format: +[Release notes blog for this release](/blog/2025/02/05/release-20252/). + +- Add removal instructions to ElevenLabs ([@sorgfresser] - [#133895]) +- Bump version to 2025.2.0dev0 ([@frenck] - [#133893]) +- Mark missing IQS requirements for Idasen Desk as done ([@abmantis] - [#133910]) +- Revise codeowners for Overkiz ([@iMicknl] - [#133784]) +- Remove myself as codeowner from Plugwise ([@frenck] - [#133920]) +- Remove myself as codeowner from Tuya integration ([@frenck] - [#133921]) +- Prevent imports from tests in core codebase ([@frenck] - [#133928]) +- Make screenlogic state enums lowercase ([@dieselrabbit] - [#133866]) +- Bump velbusaio to 2024.12.3 ([@cereal2nd] - [#133939]) +- Update pyvesync version ([@cdnninja] - [#131433]) +- Add pip wheel build constraints to fix numpy builds ([@cdce8p] - [#133962]) +- Bump subarulink to 0.7.13 ([@G-Two] - [#133970]) +- Bump numpy to 2.2.1 ([@bdraco] - [#133844]) +- Add parallel updates to swiss public transport ([@miaucl] - [#133996]) +- Add clear shopping list button for Cookidoo ([@miaucl] - [#133583]) +- Add config flow data description to swiss public transport ([@miaucl] - [#133997]) +- Fulfill IQS rule docs-removal-instructions in ViCare integration ([@CFenner] - [#133982]) +- Update silver docs for swiss public transport ([@miaucl] - [#134001]) +- Bump Tesla Fleet API library ([@Bre77] - [#134019]) +- Bump python-google-nest-sdm to 7.0.0 ([@allenporter] - [#134016]) +- Tado update code owners ([@erwindouna] - [#133987]) +- Fix typo in get_command action description ([@NoRi2909] - [#134026]) +- Use correct uppercase for abbreviations ([@NoRi2909] - [#134028]) +- Fix Nest ConfigEntry typing ([@allenporter] - [#134021]) +- Replace "service" with "action" plus fixed descriptions ([@NoRi2909] - [#134053]) +- Bump pyipma to 3.0.8 ([@dgomes] - [#134055]) +- Remove mqtt publish templates after 6 months of deprecation ([@jbouwh] - [#134056]) +- Fix unifiprotect DeprecationWarnings in tests ([@cdce8p] - [#134060]) +- Suez_water: remove redundant log on refresh failure ([@jb101010-2] - [#134025]) +- Add state_class to EcoWittSensorTypes.DEGREE ([@tkunzfeld] - [#134004]) +- Roborock Add vacuum_goto service ([@RaHehl] - [#133994]) +- Revert "Add state_class to EcoWittSensorTypes.DEGREE" ([@frenck] - [#134079]) +- Add azure_data_explorer to microsoft brand ([@zweckj] - [#134088]) +- Bump pyheos to v0.8.0 ([@andrewsayre] - [#134069]) +- Remove Tile unique id migration ([@joostlek] - [#134106]) +- Extract Tile coordinator in separate file ([@joostlek] - [#134104]) +- Remove YAML import from Tile ([@joostlek] - [#134108]) +- Bump Tado to 0.18.5 ([@erwindouna] - [#133988]) +- Set PARALLEL_UPDATES for incomfort entity platforms ([@jbouwh] - [#134110]) +- Introduce base entity for Tile ([@joostlek] - [#134109]) +- Add unit test for sensors in swiss public transport ([@miaucl] - [#134115]) +- Migrate Tile to use entry.runtime_data ([@joostlek] - [#134107]) +- Remove deprecated yaml import for Russound RIO ([@noahhusby] - [#134072]) +- Bump aiorussound to 4.2.0 ([@noahhusby] - [#134117]) +- Converge stream av open methods, options, and error handling ([@allenporter] - [#134020]) +- Add mute support to Russound RIO ([@noahhusby] - [#134118]) +- Bump pysqueezebox to v0.11.1 ([@rajlaud] - [#134097]) +- Remove incorrect device check in LCN events ([@alengwenus] - [#134116]) +- Add Overseerr integration ([@joostlek] - [#133981]) +- Remove unused parameters from function calls in rainbird ([@allenporter] - [#134124]) +- Refactor Tile tests ([@joostlek] - [#134130]) +- Add Tile device tests ([@joostlek] - [#134138]) +- Add ClassVar annotation for singleton patterns ([@cdce8p] - [#134135]) +- Add Velbus binary sensor tests ([@cereal2nd] - [#134132]) +- Add Tile device tracker tests ([@joostlek] - [#134137]) +- Bump python-overseerr to 0.3.0 ([@joostlek] - [#134147]) +- Add versions to Tile device ([@joostlek] - [#134150]) +- Use x,y in roborock action call ([@gjohansson-ST] - [#134133]) +- Remove deprecated Mastodon yaml config import ([@andrew-codechimp] - [#134040]) +- Add quality_scale.yaml for KNX ([@farmio] - [#133937]) +- Suez_water: use meter id as unique_id ([@jb101010-2] - [#133959]) +- Bump pynecil to v3.0.0 ([@tr4nt0r] - [#134151]) +- Add binary sensor to Tile ([@joostlek] - [#134153]) +- Suez_water: clear quality scale ([@jb101010-2] - [#134027]) +- Add switch platform to IronOS integration ([@tr4nt0r] - [#133691]) +- Bump pynecil to v3.0.1 ([@tr4nt0r] - [#134174]) +- Add Velbus Button tests ([@cereal2nd] - [#134186]) +- Add button platform to IronOS integration ([@tr4nt0r] - [#133678]) +- Bump python-overseerr to 0.4.0 ([@joostlek] - [#134192]) +- Migrate Habitica integration to habiticalib ([@tr4nt0r] - [#131032]) +- Move coordinator to own file in Open-Meteo ([@gjohansson-ST] - [#134197]) +- Bump aioswitcher to 6.0.0 ([@thecode] - [#134185]) +- Fix method subtyping [elkm1] ([@cdce8p] - [#134210]) +- Fix method subtyping [knx] ([@cdce8p] - [#134211]) +- Fix method subtyping [recorder] ([@cdce8p] - [#134212]) +- Fix method subtyping [helpers] ([@cdce8p] - [#134213]) +- Add slot list service to ohme ([@dan-r] - [#134170]) +- Use config entry runtime data in Open-Meteo ([@gjohansson-ST] - [#134198]) +- Add reauth flow to Habitica integration ([@tr4nt0r] - [#131676]) +- Set Scrape sensor unavailable when errors ([@gjohansson-ST] - [#134143]) +- Bump habiticalib to v0.3.2 ([@tr4nt0r] - [#134244]) +- Remove unused translations from Russound RIO ([@noahhusby] - [#134246]) +- Remove deprecated yaml import from OTP integration ([@tr4nt0r] - [#134196]) +- Record LG WebOS TV Quality scale ([@joostlek] - [#133732]) +- Bump Python Matter server to 7.0.0 (Matter 1.4) ([@lboue] - [#132502]) +- Fix two descriptions of yeelight actions ([@NoRi2909] - [#134282]) +- Add battery sensor to ohme ([@dan-r] - [#134222]) +- Replace "service" with "action" ([@NoRi2909] - [#134279]) +- Replace unnecessary abbreviations in set_room_temperature action ([@NoRi2909] - [#134278]) +- Add discovery to Russound RIO ([@noahhusby] - [#134245]) +- Add parallel updates to camera platform in Trafikverket Camera ([@gjohansson-ST] - [#134298]) +- Use typed config entry in Trafikverket Camera ([@gjohansson-ST] - [#134299]) +- Use typed config entry everywhere in Trafikverket Ferry ([@gjohansson-ST] - [#134300]) +- Set parallel updates in Trafikverket Ferry ([@gjohansson-ST] - [#134301]) +- Use typed config entry everywhere in Trafikverket Weatherstation ([@gjohansson-ST] - [#134308]) +- Set parallel updates in Trafiverket Weatherstation ([@gjohansson-ST] - [#134309]) +- Explicitly set config entry in Trafikverket Weatherstation coordinator ([@gjohansson-ST] - [#134310]) +- Explicitly set config entry in Trafikverket Ferry coordinator ([@gjohansson-ST] - [#134305]) +- Use typed config entry everywhere in Trafikverket Train ([@gjohansson-ST] - [#134303]) +- Explicitly set config entry in Trafikverket Train coordinator ([@gjohansson-ST] - [#134304]) +- Set parallel updates in Trafikverket Train ([@gjohansson-ST] - [#134302]) +- Bump pyvesync to 2.1.15 ([@iprak] - [#134156]) +- Update description of the script toggle action ([@NoRi2909] - [#134093]) +- Full test coverage for Vodafone Station sensor platform ([@chemelli74] - [#133285]) +- Refactor and simplify config flow in generic camera ([@davet2001] - [#134330]) +- Bump aiorussound to 4.3.0 ([@noahhusby] - [#134242]) +- Add Bang & Olufsen button Event entities ([@mj23000] - [#127550]) +- Bump aiorussound to 4.4.0 ([@noahhusby] - [#134366]) +- Add Reolink baby crying binary sensor ([@starkillerOG] - [#134290]) +- Use text selectors for lamarzocco config flow ([@zweckj] - [#134368]) +- Remove leftover newline codes and periods from strings.json ([@NoRi2909] - [#134354]) +- Bump ohmepy to 1.2.3 ([@dan-r] - [#134348]) +- Change Reolink test switch entity ID ([@starkillerOG] - [#134339]) +- Ensure an entity platform is added in mqtt tests ([@jbouwh] - [#134331]) +- Use "restore from" in field descriptions of restore_partial action ([@NoRi2909] - [#134285]) +- Add placeholder url to Sensibo api description ([@gjohansson-ST] - [#134342]) +- Add velbus switch platform testcases ([@cereal2nd] - [#134207]) +- Add diagnostics to Trafikverket Weatherstation ([@gjohansson-ST] - [#134314]) +- Add integration for igloohome devices ([@keithle888] - [#130657]) +- Cleanup lamarzocco tests ([@zweckj] - [#134383]) +- Implement base entity class for Twinkly ([@sVnsation] - [#134382]) +- Add Velbus climate platform tests ([@cereal2nd] - [#134387]) +- Calculate number of discovery topics correctly ([@jbouwh] - [#134393]) +- Velbus select platform testcases ([@cereal2nd] - [#134394]) +- Move available property to base entity in Sensibo ([@gjohansson-ST] - [#134410]) +- Add mill number platform ([@Danielhiversen] - [#134044]) +- Add the Model Context Protocol Server integration ([@allenporter] - [#134122]) +- Add base entity to Mill ([@gjohansson-ST] - [#134415]) +- Update mypy-dev to 1.15.0a1 ([@cdce8p] - [#134416]) +- Add HEOS options flow for optional authentication ([@andrewsayre] - [#134105]) +- Add debug log and Optimize code ([@ashionky] - [#134328]) +- Add `current_humidity` state attribute to Google Nest climate entity ([@jbarreiros] - [#134426]) +- Add action translations to Sensibo ([@gjohansson-ST] - [#134420]) +- Add translations to all Sensibo errors ([@gjohansson-ST] - [#134422]) +- Remove habitipy references in Habitica integration ([@tr4nt0r] - [#134419]) +- Improve names and descriptions in neato.custom_cleaning action ([@NoRi2909] - [#134399]) +- Add mode selector to Twinkly ([@sVnsation] - [#134041]) +- Update types packages ([@cdce8p] - [#134433]) +- Add sw_version to apsystems ([@Thomas55555] - [#134441]) +- Improve action descriptions with some more detail from the docs ([@NoRi2909] - [#134120]) +- Add types package for pyserial ([@cdce8p] - [#134444]) +- Remove deprecated yaml import from pyLoad integration ([@tr4nt0r] - [#134200]) +- Improve pandora media_player typing ([@cdce8p] - [#134447]) +- Update pexpect to 4.9.0 ([@cdce8p] - [#134450]) +- Remove deprecated YAML import from MPD ([@noahhusby] - [#134459]) +- Add support for specifying hvac_onoff_register value on modbus ([@illia-piskurov] - [#128366]) +- Remove excessive newline codes from strings.json ([@NoRi2909] - [#134468]) +- Change Reolink person binary sensor icon ([@SparkyDan555] - [#134472]) +- Remove sneaked in IronOS submodule ([@frenck] - [#134477]) +- Use username as config entry title in Sensibo ([@gjohansson-ST] - [#134488]) +- Improve error strings in Sensibo ([@gjohansson-ST] - [#134487]) +- Remove worldclock config entry import ([@gjohansson-ST] - [#134491]) +- Remove deprecated attributes from ecovacs ([@gjohansson-ST] - [#134492]) +- Remove deprecated uptime sensor from qnap_qsw ([@gjohansson-ST] - [#134493]) +- Update pillow to 11.1.0 ([@cdce8p] - [#134469]) +- Bump psutil to 6.1.1 ([@gjohansson-ST] - [#134494]) +- Add types package for pexpect ([@cdce8p] - [#134461]) +- Use the latest version of the pyserial-asyncio-fast library ([@rrooggiieerr] - [#134501]) +- Push Overseerr updates via webhook ([@joostlek] - [#134187]) +- Bump python-overseerr to 0.5.0 ([@joostlek] - [#134522]) +- Add quality scale to Sensibo ([@gjohansson-ST] - [#134296]) +- Add switch platform to Ohme ([@dan-r] - [#134347]) +- Add coordinator to vesync ([@iprak] - [#134087]) +- Add get_tasks action to Habitica integration ([@tr4nt0r] - [#127687]) +- Add state_class to Airthings integration ([@LaStrada] - [#134503]) +- Refactor all Sensibo tests ([@gjohansson-ST] - [#134478]) +- Enable strict typing for pandora ([@cdce8p] - [#134536]) +- Velbus add init testcases ([@cereal2nd] - [#134533]) +- Add Homee integration to Core ([@Taraman17] - [#133738]) +- Fix description of google_assistant.request_sync action ([@NoRi2909] - [#134535]) +- Remove deprecated sensors in Habitica integration ([@tr4nt0r] - [#134320]) +- Add support for `xvoltage` sensor for Shelly Plus UNI ([@bieniu] - [#134261]) +- Move SiLabs firmware probing helper from ZHA into `homeassistant_hardware` ([@puddly] - [#131586]) +- Update quality scale for Sensibo ([@gjohansson-ST] - [#134551]) +- Add supported features property in Sensibo ([@gjohansson-ST] - [#134479]) +- Add HEOS Reauth Flow ([@andrewsayre] - [#134465]) +- Require at least bronze for new integrations ([@joostlek] - [#134537]) +- Improve habitica action descriptions ([@NoRi2909] - [#134563]) +- Add sleep switch for all Foscam cameras if more than 1 camera are configured ([@N3rdix] - [#126064]) +- Velbus diagnostics code cleanup ([@cereal2nd] - [#134553]) +- Add image platform to Habitica integration ([@tr4nt0r] - [#129009]) +- Add velbus light and sensor platform testcases ([@cereal2nd] - [#134485]) +- Clean up docstrings in Sensibo ([@gjohansson-ST] - [#134591]) +- Add velbus diagnostics tests ([@cereal2nd] - [#134621]) +- Bump ical to 8.3.0 ([@allenporter] - [#134617]) +- Fix typo 'devide_id', use uppercase for abbreviations ID and LED ([@NoRi2909] - [#134634]) +- Replace aioclient_mock in Sensibo tests ([@gjohansson-ST] - [#134543]) +- Fix description of device_id field of reconnect_client actions ([@NoRi2909] - [#134275]) +- Update guppy to 3.1.5 ([@frenck] - [#134646]) +- Add velbus cover platform testcases ([@cereal2nd] - [#134654]) +- Remove LG WebOS TV legacy uuid migration ([@thecode] - [#134671]) +- Prefer a local webhook for Overseerr ([@joostlek] - [#134667]) +- Add Overseerr service to get requests ([@joostlek] - [#134229]) +- Bump gcal_sync to 7.0.0 ([@allenporter] - [#134687]) +- Clean-up HEOS entity event setup ([@andrewsayre] - [#134683]) +- Add prompts to MCP server ([@allenporter] - [#134619]) +- Remove excessive newline codes from squeezebox strings ([@NoRi2909] - [#134682]) +- Fix wrong description of group.set action ([@NoRi2909] - [#134697]) +- Fix typos / grammar in description of create_task action ([@NoRi2909] - [#134705]) +- Fix typos / grammar in nasweb integration ([@NoRi2909] - [#134721]) +- Fix spelling of "MAC (address)" and "Gateway" name ([@NoRi2909] - [#134724]) +- Deprecate HEOS sign_in and sign_out actions ([@andrewsayre] - [#134616]) +- Add support for "Lumin Smart Light" LD-0003 ([@rpavlik] - [#133328]) +- Bump ruff to 0.8.6 ([@autinerd] - [#134745]) +- Bump aranet4 to 2.5.0 ([@luc-ass] - [#134752]) +- Fix spelling of "MAC (address)" and "Slide" name in slide_local ([@NoRi2909] - [#134747]) +- Use uppercase "Chime" for product name, fix "MAC address" ([@NoRi2909] - [#134748]) +- Small fixes in the strings file of the Vera integration ([@NoRi2909] - [#134780]) +- Add ATTR_MODEL to DeviceInfo for Aranet ([@luc-ass] - [#134307]) +- Add latest Nighthawk WiFi 7 routers to V2 models ([@lanthaler] - [#134765]) +- Remove unneeded vesync device base class ([@cdnninja] - [#134499]) +- Use uppercase "ID" in Home Connect strings ([@NoRi2909] - [#134783]) +- Fix spelling of "ID" in Roku integration ([@NoRi2909] - [#134779]) +- Update roborock to ensure every room has a name, falling back to a placeholder ([@allenporter] - [#134733]) +- Fix spelling of "ID", slightly reword action description ([@NoRi2909] - [#134817]) +- Pass config entry directly to coordinator in System monitor ([@gjohansson-ST] - [#134837]) +- Set single_config_entry in System monitor manifest ([@gjohansson-ST] - [#134838]) +- Add python_script to strict typing ([@gjohansson-ST] - [#134822]) +- Make ChunkAsyncStreamIterator an aiohttp helper ([@mib1185] - [#134843]) +- Add get device capabilities action call for Sensibo ([@gjohansson-ST] - [#134596]) +- Add horizontal swing to Sensibo ([@gjohansson-ST] - [#132117]) +- Bump pynecil to v4.0.1 ([@tr4nt0r] - [#134852]) +- Remove deprecated binary sensor battery charging from technove ([@gjohansson-ST] - [#134844]) +- Fix spelling of "set up", change "id" to uppercase ([@NoRi2909] - [#134888]) +- Use correct uppercase for "ID" and sentence-case otherwise ([@NoRi2909] - [#134815]) +- Add heat meter to Powerfox integration ([@klaasnicolaas] - [#134799]) +- Add Decorquip virtual motion blinds integration ([@starkillerOG] - [#134402]) +- Bump pymodbus version to 3.8.3 ([@wlcrs] - [#134809]) +- fix typo "looses" to "loses" in MQTT configuration message ([@GlennReilly] - [#134894]) +- Add extra prompt to assist pipeline and conversation ([@balloob] - [#124743]) +- Bump py-synologydsm-api to 2.6.0 ([@mib1185] - [#134914]) +- Handle discovering user configured Wyoming flow ([@balloob] - [#134916]) +- Bump pylutron-caseta to 0.23.0 ([@eclair4151] - [#134906]) +- Remove excessive newline code, fix "ID", enhance descriptions ([@NoRi2909] - [#134920]) +- Add device trackers to enabled_by_default fixture ([@zweckj] - [#134446]) +- Remove deprecated hdr switch from reolink ([@gjohansson-ST] - [#134924]) +- Remove deprecated config entry import from bluesound ([@gjohansson-ST] - [#134926]) +- Add support for extra_system_prompt to OpenAI ([@balloob] - [#134931]) +- Migrate to using aiohttp-asyncmdnsresolver for aiohttp resolver ([@bdraco] - [#134830]) +- Add device tracker test for Vodafone Station ([@chemelli74] - [#134334]) +- Fix spelling of "ID", slightly reword action descriptions ([@NoRi2909] - [#134778]) +- UnifiProtect Refactor light control methods to use new API ([@RaHehl] - [#134625]) +- add proxy view for unifiprotect to grab snapshot at specific time ([@EliSchleifer] - [#133546]) +- Update Shelly integration: Remove double "Error fetching ..." from error messages ([@davidrapan] - [#134950]) +- Bump renault-api to 0.2.9 ([@kelyaenn] - [#134858]) +- Bump zeroconf to 0.137.2 ([@bdraco] - [#134942]) +- Change "id" to uppercase for consistency ([@NoRi2909] - [#134971]) +- Use sentence case, capitalize "IP Secure" and "ID" ([@NoRi2909] - [#134966]) +- Simplify onewire config-flow ([@epenet] - [#134952]) +- Set parallel-updates and scan-interval explicitly in onewire ([@epenet] - [#134953]) +- Update roborock tests to only load the platform under test ([@allenporter] - [#134694]) +- Update HEOS Quality Scale docs-related items ([@andrewsayre] - [#134466]) +- Fix DSMR migration ([@emontnemery] - [#134990]) +- Simplify roborock coordinator ([@allenporter] - [#134700]) +- Add reconfigure to onewire ([@epenet] - [#134996]) +- Validate device id when adding or updating entity registry entry ([@emontnemery] - [#134982]) +- Set PARALLEL_UPDATES to 1 in onewire ([@epenet] - [#135006]) +- Use standard "entity_registry_enabled_by_default" fixture ([@chemelli74] - [#134962]) +- Add total cleaning count sensor to Roborock ([@Lash-L] - [#135015]) +- Add Controller state sensor to screenlogic ([@dieselrabbit] - [#133827]) +- Move OneWireConfigEntry type definition ([@epenet] - [#135004]) +- Improve logic for event polling duration in Overkiz ([@iMicknl] - [#133617]) +- Bump voluptuous openapi to 0.0.6 ([@allenporter] - [#134998]) +- Add data description translations to all tplink config flow steps ([@sdb9696] - [#135022]) +- Improve Huawei LTE suspend integration service description ([@NoRi2909] - [#135021]) +- Add new sensors to fyta ([@dontinelli] - [#135032]) +- Add weather warning sensor to IPMA ([@dgomes] - [#134054]) +- Bump dbus-fast to 2.28.0 ([@bdraco] - [#135049]) +- Fix climate react type ([@gjohansson-ST] - [#135030]) +- Improve type hints in onewire tests ([@epenet] - [#134993]) +- Delete KNX config storage when removing the integration ([@farmio] - [#135071]) +- Update pyheos to 0.9.0 ([@andrewsayre] - [#134947]) +- Add Reolink unexpected error translation ([@starkillerOG] - [#134807]) +- Cleanup LG webOS TV name ([@thecode] - [#135028]) +- Fix DSMR migration ([@emontnemery] - [#135068]) +- TotalConnect improved config flow and test before setup ([@austinmroczek] - [#133852]) +- Remove rounding from onewire sensors ([@epenet] - [#135095]) +- Add quality_scale file to onewire ([@epenet] - [#134951]) +- Add binary sensors to fyta ([@dontinelli] - [#134900]) +- Add satel integra switches and alarm control panels unique_id ([@david1024pl] - [#129636]) +- Update addition logger string in fan.py ([@farkasdi] - [#135098]) +- Add quality_scale.yaml to Minecraft Server ([@elmurato] - [#132551]) +- Add PARALLEL_UPDATES constant to tplink integration platforms ([@sdb9696] - [#135083]) +- Raise HomeAssistantError from tplink light effect service ([@sdb9696] - [#135081]) +- Refactor patching in onewire tests ([@epenet] - [#135070]) +- Split simple and recovery in onewire config-flow user tests ([@epenet] - [#135102]) +- Fix hvac_modes never empty in Sensibo ([@gjohansson-ST] - [#135029]) +- Improve onewire options flow tests ([@epenet] - [#135109]) +- Improve holidays config form and naming ([@bors-ltd] - [#133663]) +- Update enphase_envoy test_init to use str for unique_id and test for loaded config entry ([@catsmanac] - [#133810]) +- Add quality scale file to tplink integration ([@sdb9696] - [#135017]) +- Remove enphase_envoy config flow tests that make no sense ([@catsmanac] - [#133833]) +- Add suggested precision for Airthings BLE integration ([@LaStrada] - [#134985]) +- Add LetPot integration ([@jpelgrom] - [#134925]) +- Set PARALLEL_UPDATES in LG webOS TV ([@thecode] - [#135135]) +- Add DataUpdateCoordinator to bluesound integration ([@LouisChrist] - [#135125]) +- Use is in FlowResultType enum comparison in integration scaffold tests ([@jpelgrom] - [#135133]) +- Impove LG webOS TV tests quality ([@thecode] - [#135130]) +- Add support for Lutron Wood Tilt Blinds ([@eclair4151] - [#135057]) +- Render select entity unavailable when active feature is missing in Sensibo ([@gjohansson-ST] - [#135031]) +- Change minimum SQLite version to 3.40.1 ([@gjohansson-ST] - [#135042]) +- Make devices dynamic in Sensibo ([@gjohansson-ST] - [#134935]) +- Deprecate StarLine engine switch attributes ([@Anonym-tsk] - [#133958]) +- Bump zeroconf to 0.138.1 ([@bdraco] - [#135148]) +- Deprecate raw_value attribute in onewire entity ([@epenet] - [#135171]) +- Mark docs-installation-parameters and docs-removal-instructions for inexogy as done ([@jpbede] - [#135126]) +- Add outside temperature sensor to fujitsu_fglair ([@crevetor] - [#130717]) +- Move OneWire PLATFORM constant back to init ([@epenet] - [#135172]) +- Add and cleanup tplink translations ([@sdb9696] - [#135120]) +- Add uuid as unique_id to config entries for Cookidoo ([@miaucl] - [#134831]) +- Use snapshot_platform helper in onewire tests ([@epenet] - [#135176]) +- Set PARALLEL_UPDATES to 0 in onewire ([@epenet] - [#135178]) +- Add yue language support to Google Translate TTS ([@beginner2047] - [#134480]) +- Fix stale docstrings in tplink integration ([@sdb9696] - [#135183]) +- Update scaffold to use internal _PLATFORM constant ([@epenet] - [#135177]) +- Add select platform to onewire ([@epenet] - [#135181]) +- Add event entities to Overseerr ([@joostlek] - [#134975]) +- Update title and description for setup dialog of thethingsnetwork ([@NoRi2909] - [#134954]) +- add support for dimming/brightening X10 lamps ([@kereyroper] - [#130196]) +- No need to set unique_id in enphase_envoy reauth step ([@catsmanac] - [#133615]) +- Update module properties on module scan for LCN ([@alengwenus] - [#135018]) +- Use friendly names in add_to_playlist action, fix "ID" ([@NoRi2909] - [#134978]) +- Avoid unnecessary executor calls in onewire ([@epenet] - [#135187]) +- Allow to process kelvin as color_temp for mqtt basic light ([@jbouwh] - [#133953]) +- Allow unregistering LLM APIs ([@allenporter] - [#135162]) +- Make generated files appear as generated ([@KapJI] - [#134991]) +- Use typed config entry in tplink coordinator ([@sdb9696] - [#135182]) +- Refactor onewire hub ([@epenet] - [#135186]) +- Fix LG webOS TV init test coverage ([@thecode] - [#135194]) +- Allow to process kelvin as color_temp for mqtt json light ([@jbouwh] - [#133955]) +- Add streaming sensors to Teslemetry ([@Bre77] - [#132783]) +- Bump zeroconf to 0.139.0 ([@bdraco] - [#135213]) +- Use remove-prefix/suffix introduced in Python 3.9 ([@epenet] - [#135206]) +- Add exception-translations rule to quality_scale pytest validation ([@epenet] - [#131914]) +- Add support for Shelly BLU TRV ([@chemelli74] - [#128439]) +- Bump anyio to 4.8.0 ([@bdraco] - [#135224]) +- Refactor Vodafone Station tests ([@chemelli74] - [#134956]) +- Bump fnv-hash-fast to 1.1.0 ([@bdraco] - [#135237]) +- Expand Squeezebox auth test for config_flow to finish on create_entry ([@peteS-UK] - [#133612]) +- Remove per engine max bind vars ([@bdraco] - [#135153]) +- Make description of alarm_arm_vacation consistent ([@NoRi2909] - [#135257]) +- Improve formatting in core files ([@epenet] - [#135256]) +- Split long strings in components ([@epenet] - [#135263]) +- Combine short byte strings in xiaomi_ble tests ([@epenet] - [#135268]) +- Fix LG webOS TV media player test coverage ([@thecode] - [#135225]) +- Improve formatting in component test files ([@epenet] - [#135267]) +- Change 'entity_id' to UI-friendly 'Entity ID', fix spelling of "setpoint" ([@NoRi2909] - [#135234]) +- Combine short strings in components ([@epenet] - [#135265]) +- Split long strings in stream hls tests ([@epenet] - [#135271]) +- Velbus light platform code cleanup ([@cereal2nd] - [#134482]) +- Fix incorrect test in test_core_config ([@epenet] - [#135260]) +- Add model_id and serial_number to onewire device info ([@epenet] - [#135279]) +- Allow to process kelvin as color_temp for mqtt template light ([@jbouwh] - [#133957]) +- Improve formatting in component files ([@epenet] - [#135261]) +- Discover new devices at runtime in onewire ([@epenet] - [#135199]) +- Simplify vesync init loading ([@cdnninja] - [#135052]) +- Move LG webOS TV actions to entitiy services ([@thecode] - [#135285]) +- Adjust HomeWizard to use updated python-homewizard-energy library ([@DCSBL] - [#135046]) +- Smaller grammar fixes, replace 'entity_id' with UI-friendly 'ID' ([@NoRi2909] - [#135236]) +- Mark FGLAir entities unavailable if they are reporting to be offline ([@crevetor] - [#135202]) +- Bump pypalazzetti to 0.1.16 ([@dotvav] - [#135269]) +- Replace 'entity_id' with UI-friendly, localizable 'entity ID' ([@NoRi2909] - [#135232]) +- Add USB-PD Mode select entity to IronOS integration ([@tr4nt0r] - [#134901]) +- Grammar and consistency fixes in hdmi_cec strings ([@NoRi2909] - [#135292]) +- Bump aioshelly to version 12.3.1 ([@bieniu] - [#135299]) +- Use runtime_data in LG webOS TV ([@thecode] - [#135301]) +- Fix typos and inconsistent spelling of "tedee" brand name ([@NoRi2909] - [#135305]) +- Fix typos, replace duplicated strings with references ([@NoRi2909] - [#135303]) +- Don't store uv's lockfile in hassfest image ([@edenhaus] - [#135214]) +- Fix Habitica gems/hourglass sensors ([@tr4nt0r] - [#135323]) +- Use LOGGER from homewizard.const instead per-file loggers ([@DCSBL] - [#135320]) +- Bump habluetooth to 3.8.0 ([@bdraco] - [#135322]) +- Extract resolve announcement media ID for AssistSatelliteEntity ([@balloob] - [#134917]) +- Add bluetooth subscribe_advertisements WebSocket API ([@bdraco] - [#134291]) +- Fix spelling of "Log in", fix "outdated student" ([@NoRi2909] - [#135348]) +- Small fixes in setup flow strings, correct sentence-case ([@NoRi2909] - [#135349]) +- Add config flow to NMBS ([@silamon] - [#121548]) +- Fix backup formatting ([@joostlek] - [#135350]) +- Bump actions/upload-artifact from 4.5.0 to 4.6.0 (@dependabot - [#135255]) +- Bump docker/build-push-action from 6.10.0 to 6.11.0 (@dependabot - [#135254]) +- Remove code owner for nmbs ([@silamon] - [#135357]) +- Fix spelling of "Log in …" and "API key" in LOQED integration ([@NoRi2909] - [#135347]) +- Fix Tado config flow ([@erwindouna] - [#135353]) +- Add more typings to nmbs sensor ([@silamon] - [#135359]) +- Palazzetti Quality Scale update after doc improvement ([@dotvav] - [#135277]) +- Bump Teslemetry Stream ([@Bre77] - [#135344]) +- Enable slowly-changing, important diagnostics for connected devices by default ([@lanthaler] - [#134776]) +- Add reconfigure to LG webOS TV ([@thecode] - [#135360]) +- Add @jterrace to onvif integration owners ([@jterrace] - [#135398]) +- Switcher runner child lock support ([@YogevBokobza] - [#133270]) +- Make all three numbered lists consistent, using 1. 1. 1. for the syntax ([@NoRi2909] - [#135400]) +- Add additional Tapo ONVIF Person/Vehicle/Line/Tamper/Intrusion events ([@jterrace] - [#135399]) +- Reword action descriptions for better translations in Teslemetry ([@NoRi2909] - [#135370]) +- Add sensors for inventory items to Habitica ([@tr4nt0r] - [#135331]) +- Bump pyheos to 1.0.0 ([@andrewsayre] - [#135415]) +- Fix config entries typo s/entruis/entries/ ([@tronikos] - [#135431]) +- Fix translation string: numbering in list ([@WaterInTheLake] - [#135441]) +- Update translations and error messages in Bring! integration ([@tr4nt0r] - [#135455]) +- Fix strings for the Google integrations ([@tronikos] - [#135445]) +- Add current and voltage for plugs to switchbot_cloud ([@SeraphicRav] - [#135458]) +- Refactor upcloud to use config entry runtime data ([@scop] - [#135449]) +- Add bluetooth API to remove scanners that are no longer used ([@bdraco] - [#135408]) +- Ensure Shelly cleanups Bluetooth scanner data upon removal ([@bdraco] - [#135472]) +- Ensure ESPHome cleanups Bluetooth scanner data upon removal ([@bdraco] - [#135470]) +- Bump github/codeql-action from 3.28.0 to 3.28.1 (@dependabot - [#135492]) +- Bump uv to 0.5.18 ([@mib1185] - [#135454]) +- Add missing `total active returned energy` sensor for Shelly Mini PM Gen3 ([@bieniu] - [#135433]) +- Fix typing in zha update entity ([@emontnemery] - [#135500]) +- Add remain, running, schedule time sensors to LG ThinQ ([@LG-ThinQ-Integration] - [#131133]) +- Rework velbus services to deprecated the interface parameter ([@cereal2nd] - [#134816]) +- Change icon ID name in Lametric ([@joostlek] - [#135368]) +- Add hassio discovery to onewire ([@epenet] - [#135294]) +- Replace "Login …" with "Log in …" in two strings of Habitica integration ([@NoRi2909] - [#135383]) +- Add dhcp discovery to velux ([@pawlizio] - [#135138]) +- Replace "click" with "select" to fit for mobile app ([@NoRi2909] - [#135382]) +- Fix when live status is blank in Telsemetry ([@Bre77] - [#130408]) +- Add kV and MV unit conversion for voltages ([@lschloetterer] - [#135396]) +- TotalConnect update quality_scale with documentation updates ([@austinmroczek] - [#134049]) +- Fix grey dailies with weekly frequency and no weekdays selected in Habitica ([@tr4nt0r] - [#135419]) +- Move HomeWizard API initialisation to async_setup_entry ([@DCSBL] - [#135315]) +- Use proper sentence-case for all strings in azure_event_hub ([@NoRi2909] - [#135328]) +- Replace climate fan speed 'silent' with a button ([@dotvav] - [#135075]) +- Bump pypalazzetti to 0.1.19 ([@dotvav] - [#135465]) +- Refresh token before setting up weheat ([@jesperraemaekers] - [#135264]) +- Refactor config flow tests in generic camera ([@davet2001] - [#134385]) +- Small fixes in the strings file of the azure_data_explorer integration ([@NoRi2909] - [#135309]) +- Fix typos "Login" > "Log in" and "Setup" > "Set up" ([@NoRi2909] - [#135306]) +- Fix LG webOS TV trigger validation ([@thecode] - [#135312]) +- Update getmac to 0.9.5 ([@cdce8p] - [#135506]) +- Improve tests of energyzero integration ([@klaasnicolaas] - [#133452]) +- Refactor number/select to use common method in IronOS ([@tr4nt0r] - [#134173]) +- Revert "Make all three numbered lists consistent, using 1. 1. 1. for the syntax" ([@frenck] - [#135510]) +- Change Trafikverket Train to use station signatures ([@gjohansson-ST] - [#131416]) +- Expose raw PM2.5 in Airgradient ([@gentoo-root] - [#135457]) +- Bump go2rtc recommended version to 1.9.8 ([@edenhaus] - [#135523]) +- Removing unused API file form weheat ([@jesperraemaekers] - [#135518]) +- Palazzetti integration: Add support for additional fans ([@dotvav] - [#135377]) +- Bump velbusaio to 2025.1.0 ([@cereal2nd] - [#135525]) +- Deprecate sensors in Habitica integration ([@tr4nt0r] - [#134036]) +- Add zeroconf discovery to onewire ([@epenet] - [#135295]) +- Refactor the MQTT option and reconfigure flow ([@jbouwh] - [#133342]) +- Bump aioimaplib to 2.0.0 ([@jbouwh] - [#135448]) +- Add humidifier entity for Vesync devices ([@iprak] - [#134333]) +- Cleanup tplink test framework ([@sdb9696] - [#135205]) +- Bump smhi-pkg to 1.0.19 ([@gjohansson-ST] - [#135537]) +- Add option to allow to use setpoint instead of override for legacy incomfort RF gateway ([@jbouwh] - [#135143]) +- Register Airzone WebServer device ([@Noltari] - [#135538]) +- Add new integration Qbus ([@Qbus-iot] - [#127280]) +- Velbus update unique-config-entry quality score ([@cereal2nd] - [#135524]) +- Velbus unsubscribe to the status updates on removal ([@cereal2nd] - [#135530]) +- Add quality scale for weheat ([@jesperraemaekers] - [#135384]) +- Velbus add subdevices for din-rail modules ([@cereal2nd] - [#131371]) +- Add person component to strict type checking ([@IgnusG] - [#132754]) +- Add data_descriptions to inexogy config flow ([@jpbede] - [#135536]) +- Set PARALLEL_UPDATES for inexogy ([@jpbede] - [#135545]) +- Fix grammar issue in 'invalid_auth' string ([@NoRi2909] - [#135546]) +- Changed json.schemas.url for devcontainers ([@Master-Guy] - [#135281]) +- Improve improv via BLE log messages ([@emontnemery] - [#135575]) +- Fix deprecated enums ([@arturpragacz] - [#134824]) +- Bump habiticalib to v.0.3.3 ([@tr4nt0r] - [#135551]) +- Set PARALLEL_UPDATES for Weheat ([@jesperraemaekers] - [#135574]) +- Fix nmbs sensor unique_id ([@emontnemery] - [#135576]) +- Add iprak to to vesync code owners ([@iprak] - [#135562]) +- Use percent formatting in logging per guidelines ([@scop] - [#135550]) +- Set inexogy quality scale to silver ([@jpbede] - [#135547]) +- Migrate Velbus to have Entity name ([@cereal2nd] - [#135520]) +- Mark Velbus test coverage as done ([@cereal2nd] - [#135571]) +- Cleanup tedee callbacks ([@zweckj] - [#135577]) +- Bump Weheat to 2025.1.14 ([@jesperraemaekers] - [#135578]) +- Set MQTT quality scale to gold ([@jbouwh] - [#135579]) +- Bump ruff to 0.9.1 ([@joostlek] - [#135197]) +- Bump hass-nabucasa from 0.87.0 to 0.88.1 ([@klejejs] - [#135521]) +- Remove incorrect logging about Unknown device ([@iprak] - [#135585]) +- Unignore ruff rule ISC001 ([@joostlek] - [#135581]) +- Update tplink quality_scale.yaml ([@sdb9696] - [#135209]) +- Match the upstream alt id of the new Levoit air purifier ([@jiriappl] - [#135426]) +- Avoid core documentation url hosted elsewhere ([@joostlek] - [#130513]) +- Reverted async-dependency to todo for Weheat ([@jesperraemaekers] - [#135588]) +- Bump securetar to 2025.1.1 ([@emontnemery] - [#135582]) +- Add streaming binary sensors to Teslemetry ([@Bre77] - [#135248]) +- Add serial number to LaMetric ([@joostlek] - [#135591]) +- Skip fetching deactivated shopping lists in Bring integration ([@tr4nt0r] - [#135336]) +- Adding support for new Lutron RGB tape light ([@RBaragona] - [#130731]) +- Add vesync number platform ([@iprak] - [#135564]) +- Make mqtt integration exports explicit ([@jbouwh] - [#135595]) +- Add entity pictures to Habitica integration ([@tr4nt0r] - [#134179]) +- Rename onewire entity classes ([@epenet] - [#135601]) +- Drop Python 3.12 support ([@frenck] - [#135589]) +- Bump securetar to 2025.1.2 ([@emontnemery] - [#135614]) +- Add `PaddleSwitchPico` (Pico Paddle Remote) device trigger to Lutron Caseta ([@dustMason] - [#135615]) +- More UpCloud config entry refactors ([@scop] - [#135548]) +- Fix spotify typing for Python 3.13 ([@cdce8p] - [#135628]) +- Return OFF in hvac_action for Honeywell climate ([@mkmer] - [#135620]) +- Update mypy-dev to 1.15.0a2 ([@cdce8p] - [#135633]) +- Update Python version for mypy to 3.13 ([@cdce8p] - [#135636]) +- Fix spelling of EnOcean in strings file of the integration ([@NoRi2909] - [#135622]) +- Dynamic devices for Husqvarna Automower ([@Thomas55555] - [#133227]) +- Update buttons in Teslemetry ([@Bre77] - [#135631]) +- Reduce scan interval on SMLIGHT firmware updates ([@tl-sl] - [#135650]) +- Bump pysmlight v0.1.5 ([@tl-sl] - [#135647]) +- Bump homematicip to 1.1.6 ([@hahn-th] - [#135649]) +- Remove unused noqas ([@joostlek] - [#135583]) +- Set MQTT quality scale to platinum ([@jbouwh] - [#135612]) +- Bump aiolifx-themes to v0.6.2 ([@Djelibeybi] - [#135645]) +- Move ZeroconfServiceInfo to service_info helpers ([@epenet] - [#135653]) +- Fix descriptions of send_command action for consistency ([@NoRi2909] - [#135670]) +- Move DhcpServiceInfo to service_info helpers ([@epenet] - [#135658]) +- Improve logging of backup upload errors ([@MartinHjelmare] - [#135672]) +- Move SsdpServiceInfo to service_info helpers ([@epenet] - [#135661]) +- Bump python-otbr-api to 2.7.0 ([@puddly] - [#135638]) +- Add missing camera functions to pylint type hints plugin ([@edenhaus] - [#135676]) +- Move UsbServiceInfo to service_info helpers ([@epenet] - [#135663]) +- Call async_forward_setup_entry after the first refresh in SwitchBot Cloud ([@mckbrmn] - [#135625]) +- Use new ServiceInfo location in components (part 1) ([@epenet] - [#135682]) +- Use new ServiceInfo location in components (part 2) ([@epenet] - [#135685]) +- Use new ServiceInfo location in components (part 3) ([@epenet] - [#135687]) +- Use new ServiceInfo location in sonos ([@epenet] - [#135699]) +- Use new ServiceInfo location in tplink ([@epenet] - [#135700]) +- Use new ServiceInfo location in rainforest_raven ([@epenet] - [#135697]) +- Use new ServiceInfo location in rabbitair ([@epenet] - [#135696]) +- Use new ServiceInfo location in modem_callerid ([@epenet] - [#135695]) +- Use new ServiceInfo location in insteon ([@epenet] - [#135694]) +- Update tplink quality_scale.yaml ([@sdb9696] - [#135705]) +- Add WS command backup/can_decrypt_on_download ([@emontnemery] - [#135662]) +- Bump eheimdigital to 1.0.4 ([@autinerd] - [#135722]) +- Create switches for controlling policy-based routes ([@Ik-12] - [#134473]) +- Add dynamic child device handling to tplink integration ([@sdb9696] - [#135229]) +- Use new ServiceInfo location in wmspro ([@epenet] - [#135702]) +- Use SIP URI for VoIP device identifier ([@jaminh] - [#135603]) +- Slow down polling for Tesla Fleet ([@Bre77] - [#135747]) +- Ensure entity platform in bluetooth tests ([@gjohansson-ST] - [#135716]) +- Add receive backup tests ([@MartinHjelmare] - [#135680]) +- Reword action descriptions to match Home Assistant style ([@NoRi2909] - [#135733]) +- Palazzetti integration: Update integration quality scale ([@dotvav] - [#135752]) +- Ensure entity platform in light tests ([@gjohansson-ST] - [#135724]) +- Bump govee-ble to 0.41.0 ([@bdraco] - [#135750]) +- Reduce USB rescan cooldown from 1 minute to 10 seconds ([@puddly] - [#135712]) +- Use new ServiceInfo location in homeassistant_sky_connect ([@epenet] - [#135693]) +- Use new ServiceInfo location in zwave_js ([@epenet] - [#135704]) +- Return Chat IDs on Telegram Bot ([@tyron] - [#131274]) +- Support decrypting backups when downloading ([@emontnemery] - [#135728]) +- Fix rmtree in translation script on MacOS ([@srescio] - [#129352]) +- Avoid using the backup manager in restore tests ([@MartinHjelmare] - [#135757]) +- Add message_thread_id to telegram_text and telegram_command events ([@DrDonoso] - [#130738]) +- Enable RUF100 ([@joostlek] - [#135760]) +- Use new ServiceInfo location in apple_tv ([@epenet] - [#135688]) +- Bump securetar to 2025.1.3 ([@emontnemery] - [#135762]) +- Change AdGuard Home URL field validator to accept paths ([@maxcabrajac] - [#127957]) +- Add further ventilation-related sensors to ViCare ([@CFenner] - [#131496]) +- Use new ServiceInfo location in esphome ([@epenet] - [#135692]) +- Use new ServiceInfo location in dlna_dmr ([@epenet] - [#135691]) +- Enable RUF022 ([@joostlek] - [#135767]) +- Add temperature and humidity entities to area registry ([@balloob] - [#135423]) +- Fix Vicare patch ([@joostlek] - [#135773]) +- Improve backup decrypt exceptions ([@emontnemery] - [#135765]) +- Improve incomfort coordinator logging ([@jbouwh] - [#135777]) +- Move HomeWizard config options to class ([@DCSBL] - [#135778]) +- Bump youless-api to 2.2.0 ([@gjong] - [#135781]) +- Fix Bang & Olufsen event testing ([@mj23000] - [#135707]) +- Add button to move netatmo cover to preferred position ([@PoppyPop] - [#134722]) +- Add Bluetooth config entries for remote scanners ([@bdraco] - [#135543]) +- Add broadcast intent ([@balloob] - [#135337]) +- Implement a polling fallback for USB monitor ([@puddly] - [#130918]) +- Update aiolifx-themes to 0.6.4 ([@Djelibeybi] - [#135805]) +- Bump govee-ble to 0.42.0 ([@bdraco] - [#135801]) +- USB device add/remove callbacks ([@puddly] - [#131224]) +- Assign entity_category for incomfort entities ([@jbouwh] - [#135807]) +- Improve incomfort test coverage ([@jbouwh] - [#135806]) +- Ensure entity platform in core config tests ([@gjohansson-ST] - [#135729]) +- Remove misleading "Current" in NUT power sensor names ([@thecode] - [#135800]) +- Improve backup store in tests ([@emontnemery] - [#135798]) +- Fix service description to match HA style, fix casing ([@NoRi2909] - [#135797]) +- SMA add serial number in DeviceInfo ([@erwindouna] - [#135809]) +- Fix spelling of "API" and use consistent term "API token" ([@NoRi2909] - [#135795]) +- Bump eheimdigital to 1.0.5 ([@autinerd] - [#135802]) +- Bump SMA to 0.7.5 ([@erwindouna] - [#135799]) +- Several strings fixes in the emoncms integration ([@NoRi2909] - [#135792]) +- Ensure entity platform in media_player tests ([@gjohansson-ST] - [#135788]) +- Ensure entity platform in light tests ([@gjohansson-ST] - [#135787]) +- Ensure entity platform in vacuum tests ([@gjohansson-ST] - [#135786]) +- Bump `imgw_pib` to version 1.0.9 and remove hydrological detail entities ([@bieniu] - [#134668]) +- Enable more RUF rules ([@joostlek] - [#135770]) +- SMA update code owners ([@erwindouna] - [#135812]) +- New paint_theme service added to the LIFX integration ([@Djelibeybi] - [#135667]) +- Bump dbus-fast to 2.29.0 ([@bdraco] - [#135804]) +- Small cleanups to lifx services to reduce code ([@bdraco] - [#135817]) +- Bump zeroconf to 0.140.1 ([@bdraco] - [#135815]) +- Ensure entity platform in blackbird tests ([@gjohansson-ST] - [#135715]) +- Allow is_state_attr to check attributes for None ([@Petro31] - [#132879]) +- Ensure entity platform in alert tests ([@gjohansson-ST] - [#135714]) +- Ensure entity platform in universal tests ([@gjohansson-ST] - [#135727]) +- Ensure entity platform in mochad tests ([@gjohansson-ST] - [#135725]) +- Ensure entity platform in kira tests ([@gjohansson-ST] - [#135723]) +- Ensure entity platform in homeassistant tests ([@gjohansson-ST] - [#135721]) +- Use new syntax for TypeVar defaults ([@cdce8p] - [#135780]) +- Ensure entity platform in google_wifi tests ([@gjohansson-ST] - [#135720]) +- Ensure entity platform in google_assistant tests ([@gjohansson-ST] - [#135719]) +- Ensure entity platform in dsmr_reader tests ([@gjohansson-ST] - [#135718]) +- Use new ServiceInfo location in bosch_shc ([@epenet] - [#135689]) +- Add 'silent' to HTML5_SHOWNOTIFICATION_PARAMETERS ([@redge76] - [#135709]) +- Update quality scale docs-installation-parameters rule for IronOS integration ([@tr4nt0r] - [#133318]) +- Reduce duplicate code in the Bluetooth WebSocket API ([@bdraco] - [#135808]) +- Add BMW quality scale details ([@rikroe] - [#132017]) +- Improve BMW test quality ([@rikroe] - [#133704]) +- Add model option to speak action for ElevenLabs ([@sorgfresser] - [#133902]) +- Enable RUF021 ([@joostlek] - [#135832]) +- Add Energy History to Tesla Fleet ([@Bre77] - [#126878]) +- Set target value on LCN regulator lock ([@alengwenus] - [#133870]) +- Add media position & seek to Russound RIO ([@noahhusby] - [#134372]) +- Enable RUF023 ([@joostlek] - [#135830]) +- Enable RUF101 ([@joostlek] - [#135835]) +- Homee: fix cover if it has no up/down attribute ([@Taraman17] - [#135563]) +- Clarify action descriptions regarding Lost device sound and state ([@NoRi2909] - [#134277]) +- Plugwise test-code improvements ([@bouwew] - [#134193]) +- Add support for EvoHomeController in Overkiz ([@iMicknl] - [#133777]) +- Fix description of "x10_all_units_off" action ([@NoRi2909] - [#135000]) +- Log errors in opower ([@tronikos] - [#135497]) +- Add streaming to Teslemetry cover platform ([@Bre77] - [#135660]) +- Bump Weheat to 2025.1.15 ([@jesperraemaekers] - [#135626]) +- Update yolink "play on speaker hub" action to allow optional values (to match YoLink API) ([@mxr] - [#133099]) +- Add doorbell event to homematicip_cloud ([@hahn-th] - [#133269]) +- Fix several issues in a string of IHC integration ([@NoRi2909] - [#135618]) +- Add zeroconf dependency to devolo Home Network manifest ([@Shutgun] - [#135708]) +- Fix "set" / "sets" in action names and descriptions, spelling of "dB" ([@NoRi2909] - [#135659]) +- Add missing data_descriptions to strings.json for LCN ([@alengwenus] - [#135674]) +- Fix humidifier on off status update ([@iprak] - [#135743]) +- Fix flaky test in acmeda ([@epenet] - [#135846]) +- Remove call to get_serial_by_id in homeassistant_sky_connect ([@epenet] - [#135751]) +- Validate config entry when adding or updating entity registry entry ([@emontnemery] - [#135067]) +- Remove not needed name from config flow in SMHI ([@gjohansson-ST] - [#134841]) +- Add overload for async singleton call with HassKey ([@cdce8p] - [#134059]) +- Use new ServiceInfo location in devolo_home_network ([@epenet] - [#135690]) +- Bump aioesphomeapi to 28.0.1 ([@bdraco] - [#135869]) +- Use new ServiceInfo location in zha ([@epenet] - [#135703]) +- Bump fnv-hash-fast to 1.2.2 ([@bdraco] - [#135872]) +- Bump habluetooth to 3.9.0 ([@bdraco] - [#135877]) +- Bump bluetooth-data-tools to 1.22.0 ([@bdraco] - [#135879]) +- Bump ulid-transform to 1.2.0 ([@bdraco] - [#135882]) +- Bump dbus-fast to 2.30.2 ([@bdraco] - [#135874]) +- Add BThome hold press event ([@Ernst79] - [#135871]) +- Record IQS for Russound RNET ([@noahhusby] - [#134692]) +- Fix typo in Opower log message ([@tronikos] - [#135909]) +- Fix bmw_connected_drive tests ([@zweckj] - [#135911]) +- Use runtime_data in Opower ([@tronikos] - [#135910]) +- Set parallel-updates in Habitica quality scale record ([@tr4nt0r] - [#135901]) +- Bump Teslemetry Stream to 0.6.6 ([@Bre77] - [#135905]) +- Increase test coverage in Habitica integration ([@tr4nt0r] - [#135896]) +- Bump pylitterbot to 2024.0.0 ([@natekspencer] - [#135891]) +- Fix imgw_pib tests ([@zweckj] - [#135913]) +- Add reauth flow to LetPot integration ([@jpelgrom] - [#135734]) +- Increase test coverage for IMGW-PIB ([@bieniu] - [#135915]) +- Remove asserting name in tts test (no entity platform) ([@gjohansson-ST] - [#135726]) +- Set strict-typing in Habitica quality scale record ([@tr4nt0r] - [#135899]) +- Fix acmeda pytest usefixtures spelling ([@cdce8p] - [#135919]) +- Fix DeprecationWarnings in mcp_server ([@cdce8p] - [#135927]) +- Fix aiodns DeprecationWarning in tests ([@cdce8p] - [#135921]) +- Use HassKey for assist_pipeline singleton ([@cdce8p] - [#135875]) +- Fix inconsistently spelled occurrences of "ID" in telegram_bot integration ([@NoRi2909] - [#135928]) +- Bump bleak-retry-connector to 3.7.0 ([@bdraco] - [#135939]) +- Replace additional deprecated USBServiceInfo imports ([@cdce8p] - [#135953]) +- Fix unicode chars in zha tests ([@cdce8p] - [#135954]) +- Bump bluetooth-adapters to 0.21.0 ([@bdraco] - [#135957]) +- Fix duplicated "effect" in Speed field descriptions of flux_led ([@NoRi2909] - [#135948]) +- Add shared history for conversation agents ([@balloob] - [#135903]) +- Improve backup store in tests ([@emontnemery] - [#135974]) +- Vesync switch humidifier to property ([@cdnninja] - [#135949]) +- Improve remote Bluetooth scanner manufacturer data ([@bdraco] - [#135961]) +- Change 'device_id' to translatable 'device ID', fix typos in LCN ([@NoRi2909] - [#135978]) +- Add power switch only if it is available at Home Connect ([@Diegorro98] - [#135930]) +- Improve program related sensors at Home Connect ([@Diegorro98] - [#135929]) +- Fix grammar and plural handling in action descriptions ([@NoRi2909] - [#135654]) +- Set dependency-transparency and async-dependency in Habitica IQS ([@tr4nt0r] - [#135902]) +- Fix KNX default state updater option ([@farmio] - [#135611]) +- Add streaming to device tracker platform in Teslemetry ([@Bre77] - [#135962]) +- Further clarify the meaning of Sensibo's Climate React mode ([@NoRi2909] - [#135833]) +- Add type annotations to stiebel eltron component ([@ThyMYthOS] - [#135228]) +- Rework enigma2 tests ([@autinerd] - [#135475]) +- SMA add diagnostics ([@erwindouna] - [#135852]) +- Fix name and descriptions of actions in EZVIZ integration etc. ([@NoRi2909] - [#135858]) +- Move integration setup to coordinator `_async_setup` in Bring ([@tr4nt0r] - [#135711]) +- Remove unnecessary "title" keys to use default setup flow instead ([@NoRi2909] - [#135512]) +- Fix fan speed in auto mode in ViCare integration ([@CFenner] - [#134256]) +- Improve descriptions in list_notifications action, fix casing ([@NoRi2909] - [#135838]) +- Refactor SwitchBot Cloud make_device_data ([@mckbrmn] - [#135698]) +- Add re-authentication flow to incomfort integration ([@jbouwh] - [#135861]) +- Fix HEOS device information ([@andrewsayre] - [#135940]) +- Fix unset coordinator in Switchbot cloud ([@joostlek] - [#135985]) +- Add re-configure flow incomfort integration ([@jbouwh] - [#135887]) +- Cleanup incomfort translation strings ([@jbouwh] - [#135991]) +- Add diagnostics feature to incomfort integration ([@jbouwh] - [#136009]) +- Disable noisy diagnostic incomfort sensors by default ([@jbouwh] - [#135992]) +- Make strings of create_scene action UI- and translation-friendly ([@NoRi2909] - [#136004]) +- Add incomfort heater serialnr to device info ([@jbouwh] - [#136012]) +- Improve exception handling in Habitica integration ([@tr4nt0r] - [#135950]) +- Fix velbus via devices ([@cereal2nd] - [#135986]) +- Do not base power switch state on appliance's operation state at Home Connect ([@Diegorro98] - [#135932]) +- Bump pydrawise to 2025.1.0 ([@dknowles2] - [#135998]) +- Migrate tests from OpenAI to conversation integration ([@balloob] - [#135963]) +- Update numpy to 2.2.2 ([@cdce8p] - [#135982]) +- Correct translation key for data bits in rfxtrx ([@elupus] - [#135990]) +- Bumb python-homewizard-energy to 8.1.0 ([@DCSBL] - [#136016]) +- Set friendly name for PT2262 sensors to masked name ([@elupus] - [#135988]) +- Fix Slack file upload ([@jsuar] - [#135818]) +- Fix sentence-casing in PurpleAir integration strings ([@NoRi2909] - [#135981]) +- Implement cloudhooks for Overseerr ([@joostlek] - [#134680]) +- Ensure entity platform in camera tests ([@gjohansson-ST] - [#135918]) +- Ensure entity platform in cover tests ([@gjohansson-ST] - [#135917]) +- Add reconfigure flow to Trafikverket Train ([@gjohansson-ST] - [#136000]) +- Bump docker/build-push-action from 6.11.0 to 6.12.0 (@dependabot - [#135749]) +- Bump thermopro-ble to 0.10.1 ([@bdraco] - [#136041]) +- Bump habluetooth to 3.9.2 ([@bdraco] - [#136042]) +- Enable RUF032 ([@joostlek] - [#135836]) +- Use LLM fallback when local matching matches intent but not targets ([@balloob] - [#136045]) +- Add diagnostics platform to IronOS integration ([@tr4nt0r] - [#136040]) +- Add reconfiguration flow to Habitica ([@tr4nt0r] - [#136038]) +- Remove redundant device update code ([@arturpragacz] - [#134100]) +- Use new SsdpServiceInfo location in remaining components ([@epenet] - [#136053]) +- Fix casing of "client" and "ID" in transmission integration ([@NoRi2909] - [#136071]) +- Make the time for automated backups configurable ([@emontnemery] - [#135825]) +- Allow backup writer to update progress during restore ([@emontnemery] - [#135975]) +- Use new ServiceInfo location in component tests (part 1) ([@epenet] - [#136057]) +- Use new ServiceInfo location in component tests (part 2) ([@epenet] - [#136062]) +- Use new ServiceInfo location in component tests (part 3) ([@epenet] - [#136064]) +- Use new ServiceInfo location in component tests (part 4) ([@epenet] - [#136065]) +- Improve user interface strings in opentherm_gw ([@NoRi2909] - [#136078]) +- Use new ServiceInfo location in core tests ([@epenet] - [#136067]) +- Fix spelling of "ID" in hyperion user strings ([@NoRi2909] - [#136082]) +- Replace `targets` key with UI name 'Targets' in media_player.join action ([@NoRi2909] - [#136063]) +- Prevent pylint out-of-memory failures ([@PaulSD] - [#136020]) +- Use fixtures for Network component tests ([@abmantis] - [#135220]) +- Improve conversation typing ([@cdce8p] - [#136084]) +- Set configuration url to overseerr instance ([@joostlek] - [#136085]) +- Bump uv to 0.5.21 ([@edenhaus] - [#136086]) +- Update pylint to 3.3.3 and astroid to 3.3.8 ([@cdce8p] - [#136090]) +- Fix Overseerr event types translations ([@joostlek] - [#136096]) +- Add diagnostics to Overseerr ([@joostlek] - [#136094]) +- Enable Ruff B024 ([@autinerd] - [#136088]) +- Bump velbusaio to 2025.1.1 ([@cereal2nd] - [#136089]) +- Enable dynamic child devices for tplink module entities ([@sdb9696] - [#135822]) +- Bump aiowebostv to 0.5.0 ([@thecode] - [#136097]) +- Add integration_type to HEOS ([@andrewsayre] - [#136105]) +- Fix index in incomfort diagnostics generator ([@jbouwh] - [#136108]) +- Fix upload service response for google_photos ([@autinerd] - [#136106]) +- Add icon to overseerr ([@joostlek] - [#136110]) +- Bump ayla-iot-unofficial to 1.4.5 ([@thecode] - [#136099]) +- Bump python-overseerr to 0.6.0 ([@joostlek] - [#136104]) +- Raise exceptions in HEOS service actions ([@andrewsayre] - [#136049]) +- Enable Ruff B035 ([@autinerd] - [#135883]) +- Remove yaml config fixture from HEOS tests ([@andrewsayre] - [#136123]) +- Add additional entities for Shelly BLU TRV ([@bieniu] - [#135244]) +- Add scheduled envoy firmware checks to enphase_envoy coordinator ([@catsmanac] - [#136102]) +- Bump letpot to 0.3.0 ([@jpelgrom] - [#136133]) +- Add myself to Roborock codeowners ([@allenporter] - [#136134]) +- Add data descriptions for enphase_envoy config flows. ([@catsmanac] - [#136120]) +- Remove not needed warning in Z-Wave ([@cdnninja] - [#136006]) +- Bump actions/stale from 9.0.0 to 9.1.0 (@dependabot - [#136145]) +- Fix buttons in Teslemetry ([@Bre77] - [#136142]) +- Update HEOS tests to not patch internals ([@andrewsayre] - [#136136]) +- Add support for custom weekly backup schedule ([@emontnemery] - [#136079]) +- Bump Devialet to 1.5.7 ([@fwestenberg] - [#136114]) +- Prefer from...import...as over import...as in core tests ([@epenet] - [#136146]) +- Add value is not to Matter discovery schema logic ([@marcelveldt] - [#136157]) +- Clean up entity registry imports in Shelly tests ([@bieniu] - [#136159]) +- Adjust to recommended propcache.api import paths ([@scop] - [#136150]) +- Capitalize "Homematic" brand name and 2 more user string fixes ([@NoRi2909] - [#136113]) +- Fix typo in enphase_envoy data description ([@catsmanac] - [#136164]) +- Add support for Bot in SwitchBot Cloud ([@mckbrmn] - [#135606]) +- Add service backup.create_automatic ([@emontnemery] - [#136152]) +- Satellite announcement to track original media id ([@balloob] - [#136141]) +- Prepare backup store to read version 2 ([@emontnemery] - [#136149]) +- Gate update.install backup parameter by supported feature ([@emontnemery] - [#136169]) +- Homee sensor ([@Taraman17] - [#135447]) +- Add data_description to switchbot translations ([@huyuwei1996] - [#136148]) +- Bumb python-homewizard-energy to 8.1.1 ([@DCSBL] - [#136170]) +- Use HassKey for hassio component data ([@emontnemery] - [#136172]) +- Add more util aliases to import conventions ([@epenet] - [#136153]) +- Update HEOS tests to not interact directly with integration internals ([@andrewsayre] - [#136177]) +- Set PARALLEL_UPDATES for HEOS media_player ([@andrewsayre] - [#136178]) +- Voip migrate entities ([@balloob] - [#136140]) +- Fix casing and spelling in user-facing strings of homematicip_cloud ([@NoRi2909] - [#136188]) +- Add strings and state attrs for ZHA 3 Phase current ([@abmantis] - [#132871]) +- Fix sentence-casing in user-facing strings of nmap_tracker ([@NoRi2909] - [#136195]) +- Cleanup litterrobot switch entity ([@natekspencer] - [#136199]) +- Bump bleak-retry-connector to 3.8.0 ([@bdraco] - [#136203]) +- Add button to reset Litter-Robot 4 ([@natekspencer] - [#136191]) +- Remove excessive newlines from envisalink strings ([@NoRi2909] - [#136194]) +- Remove excessive newline codes from strings of nissan_leaf ([@NoRi2909] - [#136197]) +- Remove extra_state_attributes from Litter-Robot vacuum entities ([@natekspencer] - [#136196]) +- Bump habluetooth to 3.10.0 ([@bdraco] - [#136210]) +- Bump ollama to 0.4.7 ([@Diegorro98] - [#136212]) +- Bump bleak-esphome to 2.1.0 ([@bdraco] - [#136214]) +- Add Eve Thermo TRV Matter features ([@krakonos1602] - [#135635]) +- Fix recorder fixture typing ([@cdce8p] - [#136174]) +- Bump github/codeql-action from 3.28.1 to 3.28.2 (@dependabot - [#136225]) +- Add dhcp discovery to incomfort integration ([@jbouwh] - [#136027]) +- Use icon translations for enphase_envoy. ([@catsmanac] - [#136190]) +- Bump bluetooth-adapters to 0.21.1 ([@bdraco] - [#136220]) +- Bump habluetooth to 3.11.2 ([@bdraco] - [#136221]) +- Use kw_only attribute for remaining entity descriptions in litterrobot ([@natekspencer] - [#136202]) +- Make description of hdmi_cec.select_device action consistent ([@NoRi2909] - [#136228]) +- Add repeat feature to HEOS media player ([@andrewsayre] - [#136180]) +- Handle empty string `BatReplacementDescription` from Matter attribute value ([@lboue] - [#134457]) +- Fix passing value to pymodbus low level function ([@wlcrs] - [#135108]) +- Update LG webOS TV IQS ([@thecode] - [#135509]) +- Bump httpx to 0.28.1, httpcore to 1.0.7 along with required deps ([@bdraco] - [#133840]) +- Add quality_scale file to litterrobot ([@natekspencer] - [#135904]) +- Handle invalid auth in Overseerr ([@joostlek] - [#136243]) +- Replace field keys in descriptions with translatable friendly names ([@NoRi2909] - [#136230]) +- Bump PyViCare to 2.41.0 ([@CFenner] - [#136231]) +- Add reauth flow to Overseerr ([@joostlek] - [#136247]) +- Record IQS for Switchbot ([@huyuwei1996] - [#136058]) +- Add reconfigure flow to Overseerr ([@joostlek] - [#136248]) +- Clean up attributes of Overseerr event entity ([@joostlek] - [#136251]) +- Improve type hints in template helper ([@epenet] - [#136253]) +- Allow multiple Airzone entries with different System IDs ([@Noltari] - [#135397]) +- Indicate in WS API when scheduling additional automatic backup ([@emontnemery] - [#136155]) +- Bump ohmepy to 1.2.4 ([@dan-r] - [#136270]) +- Only add Overseerr event if we are push based ([@joostlek] - [#136258]) +- Set enphase_envoy CT Status flags entity_category to diagnostics. ([@catsmanac] - [#136241]) +- Provide beta release note for Shelly RPC devices ([@bieniu] - [#136154]) +- Bump python-linkplay to v0.1.3 ([@silamon] - [#136267]) +- Bump bleak-esphome to 2.1.1 ([@bdraco] - [#136277]) +- Remove myself from ibeacon codeowners ([@bdraco] - [#136280]) +- Move brightness icon map to icons.json ([@natekspencer] - [#136201]) +- Bump pyHomee to 1.2.3 ([@Taraman17] - [#136213]) +- Bump habluetooth to 3.12.0 ([@bdraco] - [#136281]) +- Cleanup litterrobot select entity ([@natekspencer] - [#136282]) +- Implement Coordinator for HEOS (initial plumbing) ([@andrewsayre] - [#136205]) +- Add number platform to ohme ([@dan-r] - [#136271]) +- Convert LitterRobotHub to a DataUpdateCoordinator ([@natekspencer] - [#136283]) +- Improve type hints in benchmark script ([@epenet] - [#136259]) +- ping: Suppress ProcessLookupError on timeout ([@tswsl1989] - [#134281]) +- Allow time triggers with offsets to use input_datetimes ([@Petro31] - [#131550]) +- Cleanup litterrobot sensor entity ([@natekspencer] - [#136287]) +- Bump incomfort-client to v0.6.7 ([@jbouwh] - [#136285]) +- Revert "Add Tuya based bluetooth lights" ([@rwalker777] - [#133386]) +- Add TP-Link Tapo pet detection to onvif parsers ([@jterrace] - [#136303]) +- Bump onvif-zeep-async to 3.2.5 ([@bdraco] - [#136299]) +- Avoid useless data conversion in sonos config flow ([@bdraco] - [#136294]) +- Bump zeroconf to 0.141.0 ([@bdraco] - [#136292]) +- Bump led-ble to 1.1.4 ([@bdraco] - [#136301]) +- Standardize DOMAIN usage in litterrobot tests ([@natekspencer] - [#136290]) +- Add time platform to ohme ([@dan-r] - [#136289]) +- Fix grammar of OSO auth and action descriptions ([@NoRi2909] - [#136312]) +- Bump github/codeql-action from 3.28.2 to 3.28.3 (@dependabot - [#136308]) +- Bump dawidd6/action-download-artifact from 7 to 8 (@dependabot - [#136309]) +- Bump actions/attest-build-provenance from 2.1.0 to 2.2.0 (@dependabot - [#136307]) +- Bump codecov/codecov-action from 5.1.2 to 5.2.0 (@dependabot - [#136306]) +- Fix handling of non-supported devices in led-ble ([@bdraco] - [#136300]) +- Add heat pump supply pressure sensor in ViCare integration ([@CFenner] - [#136265]) +- Auto select thermostat preset when selecting temperature ([@domingues] - [#134146]) +- Cleanup map references in lovelace ([@epenet] - [#136314]) +- Update Overseerr quality scale ([@joostlek] - [#136260]) +- Use HassKey in lovelace ([@epenet] - [#136313]) +- Add system_health the to Network component ([@abmantis] - [#135514]) +- Add parallel updates to Airgradient ([@joostlek] - [#136323]) +- Restructure the youless integration internals ([@gjong] - [#135842]) +- Add translated action exceptions to Airgradient ([@joostlek] - [#136322]) +- Bump aiowebostv to 0.6.0 ([@thecode] - [#136206]) +- Replace key names with translatable friendly names in zwave_js ([@NoRi2909] - [#136318]) +- Clean up remaining backup manager tests ([@MartinHjelmare] - [#136335]) +- Add reconfigure flow to Airgradient ([@joostlek] - [#136324]) +- Bump myuplink lib to 0.7.0 ([@astrandb] - [#136343]) +- Improve error handling for incomfort gateway ([@jbouwh] - [#136317]) +- Enable strict-typing in lovelace ([@epenet] - [#136327]) +- Fix sentence-casing in isy994 integration strings, reword "lock user code" ([@NoRi2909] - [#136316]) +- Move single-use lovelace function ([@epenet] - [#136336]) +- Use runtime_data in bosch_shc ([@epenet] - [#136356]) +- Use runtime_data in canary ([@epenet] - [#136357]) +- Several fixes in user-facing strings of Renson integration actions ([@NoRi2909] - [#136279]) +- Cleanup hass.data in cloudflare ([@epenet] - [#136358]) +- Bump pyenphase to 1.23.1 ([@catsmanac] - [#136200]) +- Properly parse AirNow API data in coordinator ([@firstof9] - [#136198]) +- Enable strict typing for incomfort integration ([@jbouwh] - [#136291]) +- Fix tplink deprecated entity cleanup ([@sdb9696] - [#136160]) +- Refactor modbus polling to prevent dupe updates and memory leak ([@bdraco] - [#136211]) +- Incorporate ControllerManager into HEOS Coordinator ([@andrewsayre] - [#136302]) +- Set Netgear device entities to unavailable when the device is not connected ([@lanthaler] - [#135362]) +- holiday: asynchronously generate the entity name ([@bors-ltd] - [#136354]) +- Migrate modbus to use HassKey ([@bdraco] - [#136379]) +- Don't translate state names in default agent responses ([@synesthesiam] - [#136382]) +- Allow LLMs to get calendar events from exposed calendars ([@balloob] - [#136304]) +- Use runtime_data in coinbase ([@epenet] - [#136381]) +- Use runtime_data in daikin ([@epenet] - [#136376]) +- Use runtime_data in comelit ([@epenet] - [#136384]) +- Use runtime_data in ccm15 ([@epenet] - [#136378]) +- Add translated action exceptions to LG webOS TV ([@thecode] - [#136397]) +- Bump github/codeql-action from 3.28.3 to 3.28.4 (@dependabot - [#136401]) +- Bump codecov/codecov-action from 5.2.0 to 5.3.0 (@dependabot - [#136402]) +- Remove deprecated 17track package sensor ([@gjohansson-ST] - [#136389]) +- Use runtime_data in coolmaster ([@epenet] - [#136405]) +- Bump aioharmony to 0.4.0 ([@bdraco] - [#136398]) +- Bump aioautomower to 2025.1.1 ([@Thomas55555] - [#136365]) +- Bump WSDiscovery to 2.1.2 ([@bdraco] - [#136363]) +- Move denonavr shared constants to central location ([@epenet] - [#136421]) +- Simplify update listener in denonavr ([@epenet] - [#136422]) +- Omit Peblar update entities for most white label devices ([@frenck] - [#136374]) +- Use runtime_data in denonavr ([@epenet] - [#136424]) +- Bump nhc to 0.3.9 ([@VandeurenGlenn] - [#136418]) +- Fix humidifier mode for Vesync ([@iprak] - [#135746]) +- Incorporate SourceManager into HEOS Coordinator ([@andrewsayre] - [#136377]) +- Rename incomfort exceptions classes to fix typo and assign correct translation domain ([@jbouwh] - [#136426]) +- Tado change to async and add Data Update Coordinator ([@erwindouna] - [#134175]) +- Add missing translations for LG webOS TV and fix names ([@thecode] - [#136438]) +- Refactor the Hydrawise config flow ([@dknowles2] - [#135886]) +- Move dormakaba_dkey coordinator to separate module ([@epenet] - [#136437]) +- Use runtime_data in directv ([@epenet] - [#136435]) +- Move dexcom coordinator to separate module ([@epenet] - [#136433]) +- Use runtime_data in dormakaba_dkey ([@epenet] - [#136440]) +- Use runtime_data in duotecno ([@epenet] - [#136444]) +- Use runtime_data in dexcom ([@epenet] - [#136441]) +- Bump aioharmony to 0.4.1 ([@bdraco] - [#136413]) +- Use runtime_data in dunehd ([@epenet] - [#136443]) +- Reorganize input sources in Onkyo options ([@arturpragacz] - [#133511]) +- Move dynalite service definitions to separate module ([@epenet] - [#136446]) +- Add more sensors to homee ([@Taraman17] - [#136445]) +- Bump aioacaia to 0.1.14 ([@zweckj] - [#136453]) +- Add PARALLEL_UPDATES constant to ring integration platforms ([@sdb9696] - [#136470]) +- Bump uiprotect to version 7.5.0 ([@RaHehl] - [#136475]) +- Fix sentence-casing in strings of Vizio integration ([@NoRi2909] - [#136465]) +- Make Spotify polling interval dynamic ([@joostlek] - [#136461]) +- Powerwall: Reuse authentication cookie ([@choumarin] - [#136147]) +- Bump async-upnp-client to 0.43.0 ([@StevenLooman] - [#136481]) +- Bump pydantic to 2.10.6 ([@bdraco] - [#136483]) +- Cleanup update_listener in deconz ([@epenet] - [#136416]) +- Move deconz function to util.py ([@epenet] - [#136414]) +- Fix httpx late import of trio doing blocking I/O in the event loop ([@bdraco] - [#136409]) +- Bump pysmlight to v0.1.6 ([@tl-sl] - [#136496]) +- Update tplink climate platform to use thermostat module ([@sdb9696] - [#136166]) +- Refactor EZVIZ config flow tests ([@joostlek] - [#136434]) +- Bump reolink_aio to 0.11.8 ([@starkillerOG] - [#136504]) +- Add TemperatureLevel feature from Matter TemperatureControl cluster ([@lboue] - [#134532]) +- Abort config flow is device is unsupported ([@tl-sl] - [#136505]) +- Fix Spotify flaky test ([@joostlek] - [#136529]) +- Incorporate GroupManager into HEOS Coordinator ([@andrewsayre] - [#136462]) +- Reduce boilerplate code to setup modbus platform entities ([@bdraco] - [#136491]) +- Bump AIOSomeComfort to 0.0.30 in Honeywell ([@mkmer] - [#136523]) +- Reuse fixtures in config flow tests for Whirlpool ([@abmantis] - [#136489]) +- Bump pyvesync to 2.1.16 ([@iprak] - [#136493]) +- Remove unneeded call active check in modbus ([@bdraco] - [#136487]) +- Updated igloohome-api dependency to 0.1.0 ([@keithle888] - [#136516]) +- Add heat pump heating rod sensors in ViCare integration ([@CFenner] - [#136467]) +- Add backup agent to Synology DSM ([@mib1185] - [#135227]) +- Add Darsstar as codeowner for solax integration ([@squishykid] - [#136528]) +- Fix wrong plural on tado.add_meter_reading action ([@NoRi2909] - [#136524]) +- Add restore backup tests ([@MartinHjelmare] - [#136538]) +- Bump ohmepy version to 1.2.6 ([@dan-r] - [#136547]) +- Move action implementation out of HEOS Coordinator ([@andrewsayre] - [#136539]) +- Bump opower to 0.8.8 ([@tronikos] - [#136555]) +- Homee cover-test ([@Taraman17] - [#136563]) +- Add select platform to Ohme ([@dan-r] - [#136536]) +- Bump pyHomee to 1.2.5 ([@Taraman17] - [#136567]) +- Make casing of "server" and action descriptions consistent ([@NoRi2909] - [#136561]) +- Use typed ConfigEntry throughout HEOS ([@andrewsayre] - [#136569]) +- Bump HEOS quality scale to silver ([@andrewsayre] - [#136533]) +- Don't cast type in HEOS services ([@andrewsayre] - [#136583]) +- Fix HEOS play media type playlist ([@andrewsayre] - [#136585]) +- Fix spelling of "Home Assistant" and "IDs" in xiaomi_aqara ([@NoRi2909] - [#136578]) +- Fix sentence-casing in action names, spelling of "IDs" ([@NoRi2909] - [#136576]) +- Fix optional argument in deconz test type definition ([@epenet] - [#136411]) +- Bump yt-dlp to 2025.01.26 ([@joostlek] - [#136581]) +- Fix LetPot reauthentication flow tests setting up config entry ([@jpelgrom] - [#136589]) +- Add Reolink privacy switch entity ([@starkillerOG] - [#136521]) +- Bump python-kasa to 0.10.0 ([@sdb9696] - [#136586]) +- Cleanup stale devices on incomfort integration startup ([@jbouwh] - [#136566]) +- Prevent errors when Reolink privacy mode is turned on ([@starkillerOG] - [#136506]) +- Bump SoCo to 0.30.8 - Sonos ([@PeteRager] - [#136601]) +- Optimize enphase_envoy test integration setup. ([@catsmanac] - [#136572]) +- Update mypy-dev to 1.16.0a1 ([@cdce8p] - [#136544]) +- Bump pyheos to v1.0.1 ([@andrewsayre] - [#136604]) +- Push more of the LLM conversation agent loop into ChatSession ([@allenporter] - [#136602]) +- Update hassio to use the backup integration to make backups before update ([@emontnemery] - [#136235]) +- Add diagnostic sensors for the active subscription of Cookidoo ([@miaucl] - [#136485]) +- Bump nest to python-nest-sdm to 7.1.0 ([@allenporter] - [#136611]) +- Use runtime_data in crownstone ([@epenet] - [#136406]) +- Add lovelace compatiblity code ([@epenet] - [#136617]) +- Use runtime_data in dynalite ([@epenet] - [#136448]) +- Use runtime_data in deconz ([@epenet] - [#136412]) +- Ask for permission to disable Reolink privacy mode during config flow ([@starkillerOG] - [#136511]) +- Add a Matter temperature sensor based on `Thermostat` device `LocalTemperature` attribute ([@lboue] - [#133888]) +- Add missing exclude_integrations in lovelace compatibility code ([@epenet] - [#136618]) +- Starlink's energy consumption & usage cumulation fix ([@davidrapan] - [#135889]) +- Add product IDs for new LIFX Ceiling lights ([@Djelibeybi] - [#136619]) +- Use runtime_data in ecobee ([@epenet] - [#136632]) +- Bump codecov/codecov-action from 5.3.0 to 5.3.1 (@dependabot - [#136614]) +- Bump docker/build-push-action from 6.12.0 to 6.13.0 (@dependabot - [#136612]) +- Bump github/codeql-action from 3.28.4 to 3.28.5 (@dependabot - [#136613]) +- Use typed coordinator and runtime_data in eafm ([@epenet] - [#136629]) +- Cleanup unnecessary type hint in assist_satellite ([@epenet] - [#136626]) +- Cleanup hass.data[DOMAIN] in application_credentials ([@epenet] - [#136625]) +- Use typed ConfigEntry in ring coordinator ([@sdb9696] - [#136457]) +- Fix test logic flaw in enphase_envoy test_select ([@catsmanac] - [#136570]) +- Change discovery schema for Matter Identify button to ignore type of None ([@marcelveldt] - [#136621]) +- Fix spelling of "Hub" and sentence-casing of "options" ([@NoRi2909] - [#136573]) +- Add config flow data descriptions to ring integration ([@sdb9696] - [#136464]) +- Twinkly RGBW color fixed ([@Splint77] - [#136593]) +- Replace "bosch_shc" with friendly name of integration ([@NoRi2909] - [#136410]) +- Bump securetar to 2025.1.4 ([@emontnemery] - [#136639]) +- Fix spelling of "Pi-hole" and "API" in user-facing strings ([@NoRi2909] - [#136645]) +- Bump aioshelly to 12.3.2 ([@bieniu] - [#136486]) +- Bump voip-utils to 0.3.0 ([@synesthesiam] - [#136648]) +- Catch and convert MatterError when sending device commands ([@marcelveldt] - [#136635]) +- Add single target constraint to async_match_targets ([@synesthesiam] - [#136643]) +- Add LLM ActionTool ([@Shulyaka] - [#136591]) +- Add the Model Context Protocol integration ([@allenporter] - [#135058]) +- Add HassClimateSetTemperature ([@synesthesiam] - [#136484]) +- Make static modbus entity values classvar defaults ([@bdraco] - [#136488]) +- Add support for tplink siren turn on parameters ([@sdb9696] - [#136642]) +- Log the error when the WebSocket receives a error message ([@bdraco] - [#136492]) +- Bump pyfritzhome to 0.6.14 ([@mib1185] - [#136661]) +- Update flux-led to 1.1.3 ([@cdce8p] - [#136666]) +- Add Bluetooth WebSocket API to subscribe to connection allocations ([@bdraco] - [#136215]) +- Merge Whirlpool tests into a parameterized test ([@abmantis] - [#136490]) +- Increase LaCrosse View polling interval to 60 seconds ([@IceBotYT] - [#136680]) +- Bump aioesphomeapi to 29.0.0 and bleak-esphome to 2.2.0 ([@bdraco] - [#136684]) +- ChatSession: Split native content out of message class ([@balloob] - [#136668]) +- Add power/energy sensor for Matter draft electrical measurement cluster ([@dext0r] - [#132920]) +- Standardize `helpers.xxx_registry` imports ([@epenet] - [#136688]) +- Use runtime_data in ecoforest ([@epenet] - [#136689]) +- Update roborock tests to patch client before test setup ([@allenporter] - [#136587]) +- Use runtime_data in electrasmart ([@epenet] - [#136696]) +- Update config flow tests for litterrobot ([@natekspencer] - [#136658]) +- Use runtime_data in econet ([@epenet] - [#136691]) +- Bump actions/setup-python from 5.3.0 to 5.4.0 (@dependabot - [#136685]) +- Use runtime_data in ezviz ([@epenet] - [#136702]) +- Add translations for youless sensors ([@gjong] - [#136349]) +- Use runtime_data in electric_kiwi ([@epenet] - [#136699]) +- Cleanup use of hass.data in edl21 ([@epenet] - [#136694]) +- Improve type hints in econet ([@epenet] - [#136693]) +- Use runtime_data in evil_genius_labs ([@epenet] - [#136704]) +- Correct labels in EnOcean config flow ([@CFenner] - [#136338]) +- Use runtime_data in eufylife_ble ([@epenet] - [#136705]) +- Update nest config flow to create pub/sub topics ([@allenporter] - [#136609]) +- Support integrated ventilation on heating devices in ViCare integration ([@CFenner] - [#130356]) +- Use runtime_data in epson ([@epenet] - [#136706]) +- Use runtime_data in epion ([@epenet] - [#136708]) +- Introduce `unique_id` to BackupAgent ([@mib1185] - [#136651]) +- Use runtime_data in epic_games_store ([@epenet] - [#136709]) +- Initial implementation for tplink tapo vacuums ([@rytilahti] - [#131965]) +- Bump github/codeql-action from 3.28.5 to 3.28.6 (@dependabot - [#136686]) +- Update tplink coordinators to update hub-attached children ([@sdb9696] - [#135586]) +- Bump bring-api to 1.0.0 ([@tr4nt0r] - [#136657]) +- Bump nice-go to 1.0.1 ([@IceBotYT] - [#136649]) +- Remove unused function in hassio/update ([@arturpragacz] - [#136701]) +- Tag backups created when updating addon with supervisor.addon_update ([@emontnemery] - [#136690]) +- Fix deadlock in WS command backup/can_decrypt_on_download ([@emontnemery] - [#136707]) +- Add test for myuplink DeviceInfo ([@astrandb] - [#136360]) +- Use HassKey in diagnostics ([@epenet] - [#136627]) +- Add HEOS diagnostics ([@andrewsayre] - [#136663]) +- Cleanup ecobee YAML configuration import ([@epenet] - [#136633]) +- Fix spelling of "Ring" and sentence-casing of "integration" ([@NoRi2909] - [#136652]) +- Fix spelling errors in user-facing strings of OctoPrint integration ([@NoRi2909] - [#136644]) +- Raise exceptions in HEOS custom actions ([@andrewsayre] - [#136546]) +- Fix total coffees sensor for lamarzocco ([@zweckj] - [#135283]) +- Use runtime_data in drop_connect ([@epenet] - [#136442]) +- Include error reason in backup events ([@emontnemery] - [#136697]) +- Bump ohmepy to 1.2.8 ([@dan-r] - [#136719]) +- Add support for KNX UI to create BinarySensor entities ([@farmio] - [#136703]) +- Fix LG webOS TV external arc volume set action ([@thecode] - [#136717]) +- Use runtime_data in devialet ([@epenet] - [#136432]) +- Adjust Matter discovery logic to disallow the primary value(s) to be None ([@marcelveldt] - [#136712]) +- Standardize util imports ([@epenet] - [#136723]) +- Migrate usb to use aiousbwatcher ([@bdraco] - [#136676]) +- Add OneDrive as backup provider ([@zweckj] - [#135121]) +- Add SPF sensor for heat pumps in ViCare integration ([@CFenner] - [#136233]) +- Add sensor for Matter OperationalState cluster / CurrentPhase attribute ([@lboue] - [#129757]) +- Add authentication support to MotionMount integration ([@RJPoelstra] - [#126487]) +- Fix Telegram webhook registration if deregistration previously failed ([@rsiv] - [#133398]) +- Parameterize enphase_envoy number tests. ([@catsmanac] - [#136631]) +- Fix all occurrences of "PIN" in MotionMount user strings ([@NoRi2909] - [#136734]) +- Bump python-roborock to 2.9.7 ([@allenporter] - [#136727]) +- Add SmartTowerFan to VeSync Integration ([@cdnninja] - [#136596]) +- Add climate platform to eheimdigital ([@autinerd] - [#135878]) +- Add more tests to vesync ([@iprak] - [#135681]) +- Add config entry load/unload tests for LetPot ([@jpelgrom] - [#136736]) +- Add streaming to Teslemetry number platform ([@Bre77] - [#136048]) +- Add streaming to Teslemetry lock platform ([@Bre77] - [#136037]) +- Mark tplink quality_scale platinum ([@sdb9696] - [#136456]) +- Register service actions in async_setup of AVM Fritz!Box tools ([@mib1185] - [#136380]) +- Add support for HomeWizard Plug-In Battery and v2 API ([@joostlek] - [#136733]) +- Standardize homeassistant imports in full-CI tests ([@epenet] - [#136735]) +- Standardize homeassistant imports in full-CI components ([@epenet] - [#136731]) +- Standardize homeassistant imports in core and base platforms ([@epenet] - [#136730]) +- Add pair/unpair buttons for tplink ([@rytilahti] - [#135847]) +- Let platforms decide entity creation in litterrobot ([@natekspencer] - [#136738]) +- Bump yeelight to 0.7.16 ([@bdraco] - [#136679]) +- Fix LG webOS TV actions not returning responses ([@thecode] - [#136743]) +- Capitalize "Velbus", replace "service calls" with "actions" ([@NoRi2909] - [#136744]) +- Bump habluetooth to 3.13.0 ([@bdraco] - [#136749]) +- Update xknx to 3.5.0 ([@richardpolzer] - [#136759]) +- Add volt/power/power_factor strings and state attrs for ZHA 3 phase meters ([@abmantis] - [#133969]) +- Bump AIOSomecomfort to 0.0.32 ([@mkmer] - [#136751]) +- Add swing support for KNX climate entities ([@richardpolzer] - [#136752]) +- Add translations for ZHA pilot wire mode and device mode ([@piitaya] - [#136753]) +- Abort Bluetooth options flow if local adapters do not support passive scans ([@bdraco] - [#136748]) +- Bump homematicip to 1.1.7 ([@hahn-th] - [#136767]) +- Add Bluetooth WebSocket API to subscribe to scanner details ([@bdraco] - [#136750]) +- Bump hassil to 2.2.0 ([@synesthesiam] - [#136787]) +- Bumb python-homewizard-energy to 8.3.0 ([@DCSBL] - [#136765]) +- Bump aiowebostv to 0.6.1 ([@thecode] - [#136784]) +- Bump ZHA to 0.0.46 ([@TheJulianJES] - [#136785]) +- Explicitly pass in the config_entry in Feedreader coordinator init ([@mib1185] - [#136777]) +- Explicitly pass in the config_entry in PEGELONLINE coordinator init ([@mib1185] - [#136773]) +- Explicitly pass in the config_entry in AVM Fritz!SmartHome coordinator init ([@mib1185] - [#136769]) +- Bump peco to 0.1.2 ([@IceBotYT] - [#136732]) +- Explicitly pass in the config_entry in Tankerkoenig coordinator init ([@mib1185] - [#136780]) +- Explicitly pass in the config_entry in Proximity coordinator init ([@mib1185] - [#136775]) +- Add more vacuum features for tplink ([@rytilahti] - [#136580]) +- Explicitly pass in the config_entry in Synology DSM coordinator init ([@mib1185] - [#136772]) +- Explicitly pass in the config_entry in Nextcloud coordinator init ([@mib1185] - [#136774]) +- Add VoIP announce ([@synesthesiam] - [#136781]) +- Bump habluetooth to 3.14.0 ([@bdraco] - [#136791]) +- Fix typing errors in HEOS tests ([@andrewsayre] - [#136795]) +- Add UI to create KNX BinarySensor entities ([@farmio] - [#136786]) +- Redact stored authentication token in HomeWizard diagnostics ([@DCSBL] - [#136766]) +- Reload template blueprints when reloading templates ([@Petro31] - [#136794]) +- Bump intents to 2025.1.28 ([@synesthesiam] - [#136782]) +- Add power protection entities for tplink ([@rytilahti] - [#132267]) +- Add Google Drive integration for backup ([@tronikos] - [#134576]) +- Enable strict typing for HEOS ([@andrewsayre] - [#136797]) +- Standardize homeassistant imports in component tests (m-z) ([@epenet] - [#136807]) +- Use runtime_data in environment_canada ([@epenet] - [#136805]) +- Use runtime_data in elmax ([@epenet] - [#136803]) +- Fix percentage_charged in Teslemetry ([@Bre77] - [#136798]) +- Add remaining Matter Operational State sensor discovery schemas ([@marcelveldt] - [#136741]) +- Use runtime_data in energenie_power_sockets ([@epenet] - [#136801]) +- Use ConfigEntry.runtime_data in AVM Fritz!Box tools ([@mib1185] - [#136386]) +- Standardize homeassistant imports in component tests (a-l) ([@epenet] - [#136806]) +- Rename environment_canada entities ([@epenet] - [#136817]) +- Add config flow to filter helper ([@gjohansson-ST] - [#121522]) +- Simplify device_info access in environment_canada ([@epenet] - [#136816]) +- Bump aiohasupervisor to version 0.2.2b6 ([@emontnemery] - [#136814]) +- Stop building wheels for 3.12 ([@edenhaus] - [#136811]) +- Add last restart sensor to HomeWizard ([@DCSBL] - [#136763]) +- Use translations for fan_speed in tplink vacuum entity ([@sdb9696] - [#136718]) +- Bump pyiskra to 0.1.15 ([@iskrakranj] - [#136810]) +- vesync: report current humidity ([@oandrew] - [#136799]) +- Add binary sensor platform to VeSync ([@cdnninja] - [#134221]) +- Add diagnostics for Cookidoo integration ([@miaucl] - [#136770]) +- Use the new hybrid Hydrawise client ([@dknowles2] - [#136522]) +- Bump deebot-client to 11.1.0b1 ([@edenhaus] - [#136818]) +- Improve type hints in environment_canada sensors ([@epenet] - [#136813]) +- Standardize homeassistant imports in component (e-f) ([@epenet] - [#136824]) +- Standardize homeassistant imports in component (c-d) ([@epenet] - [#136823]) +- Standardize homeassistant imports in component (a-b) ([@epenet] - [#136821]) +- Improve type hints in environment_canada camera and weather ([@epenet] - [#136819]) +- Correct the behavior of the Charge switch in Tessie/Teslemetry/Tesla Fleet ([@Bre77] - [#136562]) +- Standardize homeassistant imports in component (l-m) ([@epenet] - [#136827]) +- Standardize homeassistant imports in component (i-k) ([@epenet] - [#136826]) +- Standardize homeassistant imports in component (g-h) ([@epenet] - [#136825]) +- Update quality scale for litterrobot ([@natekspencer] - [#136764]) +- Standardize homeassistant imports in component (t-u) ([@epenet] - [#136833]) +- Add image entity for fyta ([@dontinelli] - [#135105]) +- Standardize homeassistant imports in component (n-p) ([@epenet] - [#136830]) +- Standardize homeassistant imports in component (q-r) ([@epenet] - [#136831]) +- Standardize homeassistant imports in component (s) ([@epenet] - [#136832]) +- Standardize homeassistant imports in component (v-z) ([@epenet] - [#136834]) +- Add backup endpoints to the onboarding integration ([@emontnemery] - [#136051]) +- Rename HomeWizard last restart sensor to Uptime ([@DCSBL] - [#136829]) +- Fix command latency in AVM Fritz!SmartHome ([@mib1185] - [#136739]) +- Bump qbusmqttapi to 1.2.4 ([@thomasddn] - [#136835]) +- Update photovoltaic related labels in ViCare ([@CFenner] - [#136430]) +- Standardize remaining homeassistant imports ([@epenet] - [#136836]) +- IQS completion of documentation for Plugwise ([@CoMPaTech] - [#134051]) +- Add support for per-backup agent encryption flag ([@emontnemery] - [#136622]) +- Add select platform discovery schemas for the Matter LaundryWasherControls cluster ([@lboue] - [#136261]) +- Take exclude vias in unique ids for nmbs ([@silamon] - [#136590]) +- Fix spelling of "API" for consistency in Home Assistant UI ([@NoRi2909] - [#136842]) +- Add consumables for tplink tapo vacuums ([@rytilahti] - [#136510]) +- Add cleaning statistics for tplink ([@rytilahti] - [#135784]) +- Adjust deprecation in water heater ([@epenet] - [#136577]) +- Migrate Google Gen AI to ChatSession ([@balloob] - [#136779]) +- Persist backup restore status after core restart ([@emontnemery] - [#136838]) +- Check for fullcolorsupport in fritzbox light ([@flabbamann] - [#136850]) +- Add DHCP discovery to balboa ([@natekspencer] - [#136762]) +- Fix spelling of "API" for consistency in Home Assistant UI ([@NoRi2909] - [#136843]) +- Update frontend to 20250129.0 ([@bramkragten] - [#136852]) +- Tweak Matter discovery to ignore empty lists ([@marcelveldt] - [#136854]) +- Ease understanding of integration failures ([@tomer-w] - [#134475]) +- Interrupt _CipherBackupStreamer workers ([@emontnemery] - [#136845]) +- Use runtime_data in control4 ([@epenet] - [#136403]) +- Simplify Whirlpool auth flows ([@abmantis] - [#136856]) +- Add ability to cache Roborock maps instead of always reloading ([@Lash-L] - [#112047]) +- Update whirlpool-sixth-sense to 0.18.12 ([@abmantis] - [#136851]) +- Add support for per-backup agent encryption flag to hassio ([@emontnemery] - [#136828]) +- Persist hassio backup restore status after core restart ([@emontnemery] - [#136857]) +- Cancel call if user does not pick up ([@synesthesiam] - [#136858]) +- Handle locked account error in Whirlpool ([@abmantis] - [#136861]) +- Fix incorrect Bluetooth source address when restoring data from D-Bus ([@bdraco] - [#136862]) +- Bump backup store to version 1.3 ([@emontnemery] - [#136870]) +- Add start_conversation service to Assist Satellite ([@balloob] - [#134921]) +- Fix loading of SMLIGHT integration when no internet is available ([@tl-sl] - [#136497]) +- Bump ZHA to 0.0.47 ([@TheJulianJES] - [#136883]) +- Bump nest to 7.1.1 ([@allenporter] - [#136888]) +- Poll supervisor job state when creating or restoring a backup ([@emontnemery] - [#136891]) +- Add missing discovery string from onewire ([@epenet] - [#136892]) +- Ignore dangling symlinks when restoring backup ([@emontnemery] - [#136893]) +- Fix handling of renamed backup files in the core writer ([@emontnemery] - [#136898]) +- Don't blow up when a backup doesn't exist on supervisor ([@emontnemery] - [#136907]) +- Fix onedrive does not fail on delete not found ([@zweckj] - [#136910]) +- Convert valve position to int for Shelly BLU TRV ([@bieniu] - [#136912]) +- Don't log errors when raising a backup exception in Google Drive ([@tronikos] - [#136916]) +- Show name of the backup agents in issue ([@joostlek] - [#136925]) +- Fix Sonos importing deprecating constant ([@joostlek] - [#136926]) +- Create Xbox signed session in executor ([@joostlek] - [#136927]) +- Pick onedrive owner from a more reliable source ([@zweckj] - [#136929]) +- Fix backup related translations in Synology DSM ([@mib1185] - [#136931]) +- Fix KeyError for Shelly virtual number component ([@bieniu] - [#136932]) +- Update frontend to 20250130.0 ([@bramkragten] - [#136937]) +- Ensure Reolink can start when privacy mode is enabled ([@starkillerOG] - [#136514]) +- Refactor eheimdigital platform async_setup_entry ([@autinerd] - [#136745]) +- Bump total-connect-client to 2025.1.4 ([@austinmroczek] - [#136793]) +- Fixes to the user-facing strings of energenie_power_sockets ([@NoRi2909] - [#136844]) +- Bump jellyfin-apiclient-python to 1.10.0 ([@RunC0deRun] - [#136872]) +- Suppress color_temp warning if color_temp_kelvin is provided ([@Djelibeybi] - [#136884]) +- Persist roborock maps to disk only on shutdown ([@allenporter] - [#136889]) +- Include the redirect URL in the Google Drive instructions ([@tronikos] - [#136906]) +- Bump opower to 0.8.9 ([@tronikos] - [#136911]) +- Make backup file names more user friendly ([@emontnemery] - [#136928]) +- Bump zeroconf to 0.142.0 ([@bdraco] - [#136940]) +- Bump aiohttp-asyncmdnsresolver to 0.0.2 ([@bdraco] - [#136942]) +- Update knx-frontend to 2025.1.30.194235 ([@farmio] - [#136954]) +- Consume extra system prompt in first pipeline ([@synesthesiam] - [#136958]) +- Bump habluetooth to 3.15.0 ([@bdraco] - [#136973]) +- Delete old addon update backups when updating addon ([@emontnemery] - [#136977]) +- Retry backup uploads in onedrive ([@zweckj] - [#136980]) +- Fix missing duration translation for Swiss public transport integration ([@miaucl] - [#136982]) +- Call backup listener during setup in onedrive ([@zweckj] - [#136990]) +- Bumb python-homewizard-energy to 8.3.2 ([@DCSBL] - [#136995]) +- Use device name as entity name in Eheim digital climate ([@joostlek] - [#136997]) +- Remove the unparsed config flow error from Swiss public transport ([@miaucl] - [#136998]) +- Make sure we load the backup integration before frontend ([@emontnemery] - [#137010]) +- Revert previous PR and remove URL from error message instead ([@NoRi2909] - [#137018]) +- Make supervisor backup file names more user friendly ([@emontnemery] - [#137020]) +- Bump habluetooth to 3.17.0 ([@bdraco] - [#137022]) +- Update frontend to 20250131.0 ([@bramkragten] - [#137024]) +- Bump bleak-esphome to 2.6.0 ([@bdraco] - [#137025]) +- Bump SQLAlchemy to 2.0.37 ([@bdraco] - [#137028]) +- Bump deebot-client to 11.1.0b2 ([@edenhaus] - [#137030]) +- Shorten the integration name for `incomfort` ([@jbouwh] - [#136930]) +- Update Overseerr string to mention CSRF ([@joostlek] - [#137001]) +- Use readable backup names for onedrive ([@zweckj] - [#137031]) +- Bump bthome-ble to 3.11.0 ([@Ernst79] - [#137032]) +- Bump zeroconf to 0.143.0 ([@bdraco] - [#137035]) +- Bump bthome-ble to 3.12.3 ([@bdraco] - [#137036]) +- Bump aiohttp-asyncmdnsresolver to 0.0.3 ([@bdraco] - [#137040]) +- Bump habluetooth to 3.17.1 ([@bdraco] - [#137045]) +- Bump aioimaplib to version 2.0.1 ([@jbouwh] - [#137049]) +- Raise HomeAssistantError from camera snapshot service ([@natekspencer] - [#137051]) +- Allow ignored govee-ble devices to be set up from the user flow ([@bdraco] - [#137052]) +- Allow ignored switchbot devices to be set up from the user flow ([@bdraco] - [#137056]) +- For consistency use suggested_filename in Google Drive ([@tronikos] - [#137061]) +- Bump habluetooth to 3.20.1 ([@bdraco] - [#137063]) +- Load `hassio` before `backup` at frontend stage ([@jpbede] - [#137067]) +- Bump lacrosse-view to 1.0.4 ([@IceBotYT] - [#137058]) +- Update RestrictedPython to 8.0 ([@cdce8p] - [#137075]) +- Set via_device for remote Bluetooth adapters to link to the parent device ([@bdraco] - [#137091]) +- Allow ignored airthings_ble devices to be set up from the user flow ([@bdraco] - [#137102]) +- Allow ignored yale_ble devices to be set up from the user flow ([@bdraco] - [#137103]) +- Allow ignored thermopro devices to be set up from the user flow ([@bdraco] - [#137104]) +- Allow ignored bthome devices to be set up from the user flow ([@bdraco] - [#137105]) +- Allow ignored inkbird devices to be set up from the user flow ([@bdraco] - [#137106]) +- Allow ignored mopeka devices to be set up from the user flow ([@bdraco] - [#137107]) +- Allow ignored oralb devices to be set up from the user flow ([@bdraco] - [#137109]) +- Fix Homekit camera profiles schema ([@shmuelzon] - [#137110]) +- Allow ignored qingping devices to be set up from the user flow ([@bdraco] - [#137111]) +- Allow ignored sensorpush devices to be set up from the user flow ([@bdraco] - [#137113]) +- Allow ignored xiaomi_ble devices to be set up from the user flow ([@bdraco] - [#137115]) +- Allow ignored Aranet devices to be set up from the user flow ([@thecode] - [#137121]) +- Allow ignored tilt_ble devices to be set up from user flow ([@apt-itude] - [#137123]) +- Remove entity state from mcp-server prompt ([@allenporter] - [#137126]) +- Bump habluetooth to 3.21.0 ([@bdraco] - [#137129]) +- Add missing brackets to ESPHome configuration URLs with IPv6 addresses ([@bdraco] - [#137132]) +- Bump deebot-client to 12.0.0b0 ([@edenhaus] - [#137137]) +- Allow manual smlight user setup to override discovery ([@tl-sl] - [#137136]) +- Bump dbus-fast to 2.30.4 ([@bdraco] - [#137151]) +- Bump bluetooth-data-tools to 1.23.3 ([@bdraco] - [#137147]) +- Bump habiticalib to v0.3.4 ([@tr4nt0r] - [#137148]) +- Bump monarchmoney to 0.4.4 ([@jeeftor] - [#137168]) +- Fix mqtt reconfigure does not use broker entry password when it is not changed ([@jbouwh] - [#137169]) +- Bump python-kasa to 0.10.1 ([@sdb9696] - [#137173]) +- Bump dbus-fast to 2.31.0 ([@bdraco] - [#137180]) +- Bump aiodhcpwatcher to 1.0.3 ([@bdraco] - [#137188]) +- Bump bleak-esphome to 2.7.0 ([@bdraco] - [#137199]) +- Switch to using IP Addresses for connecting to smlight devices ([@tl-sl] - [#137204]) +- Bump dbus-fast to 2.23.0 ([@bdraco] - [#137205]) +- Simplify config entry title for SMLIGHT ([@tl-sl] - [#137206]) +- Bump todist-api-python to 2.1.7 ([@boralyl] - [#136549]) +- Don't blow up when a backup doesn't exist on Synology DSM ([@mib1185] - [#136913]) +- Migrate OneDrive to onedrive_personal_sdk library ([@zweckj] - [#137064]) +- Humidifier turn display off for sleep mode ([@iprak] - [#137133]) +- Fixes in user-facing strings of Tado integration ([@NoRi2909] - [#137158]) +- Bump pypck to 0.8.5 ([@alengwenus] - [#137176]) +- Vesync bump pyvesync library ([@cdnninja] - [#137208]) +- Check for errors when restoring backups using supervisor ([@emontnemery] - [#137217]) +- Check for errors when creating backups using supervisor ([@emontnemery] - [#137220]) +- Fix retrieving PIN when no pin is set on mount in motionmount integration ([@RJPoelstra] - [#137230]) +- Fix minor issues in Homee ([@Taraman17] - [#137239]) +- Bump python-roborock to 2.11.1 ([@regevbr] - [#137244]) +- Bump onedrive-personal-sdk to 0.0.2 ([@zweckj] - [#137252]) +- Allow ignored idasen_desk devices to be set up from the user flow ([@abmantis] - [#137253]) +- Improve shutdown of _CipherBackupStreamer ([@emontnemery] - [#137257]) +- Remove v2 API support for HomeWizard P1 Meter ([@DCSBL] - [#137261]) +- Update frontend to 20250203.0 ([@bramkragten] - [#137263]) +- Bump pymill to 0.12.3 ([@Danielhiversen] - [#137264]) +- Bump tesla-fleet-api to 0.9.2 ([@Bre77] - [#137295]) +- Fix data update coordinator garbage collection ([@epenet] - [#137299]) +- Report progress while creating supervisor backup ([@emontnemery] - [#137301]) +- Bump onedrive-personal-sdk to 0.0.3 ([@zweckj] - [#137309]) +- Add view to download support package to Cloud component ([@abmantis] - [#135856]) +- Improve backup file naming in Synology DSM backup agent ([@mib1185] - [#137278]) +- Include extra metadata in backup WS API ([@emontnemery] - [#137296]) +- Bump tololib to 1.2.2 ([@MatthiasLohr] - [#137303]) +- Allow ignored screenlogic devices to be set up from the user flow ([@dieselrabbit] - [#137315]) +- Minor adjustments of hassio backup tests ([@emontnemery] - [#137324]) +- Bump onedrive-personal-sdk to 0.0.4 ([@zweckj] - [#137330]) +- Improve error handling when supervisor backups are deleted ([@emontnemery] - [#137331]) +- Don't show active user initiated data entry config flows ([@jbouwh] - [#137334]) +- Fix HomeWizard reconfigure flow throwing error for v2-API devices ([@DCSBL] - [#137337]) +- Copy area from remote parent device when creating Bluetooth devices ([@bdraco] - [#137340]) +- Update frontend to 20250204.0 ([@bramkragten] - [#137342]) +- Bump uiprotect to 7.5.1 ([@bdraco] - [#137343]) +- Fix incorrect UPB service entity type ([@gwww] - [#137346]) +- Polish tplink vacuum sensors ([@rytilahti] - [#137355]) +- Bump aranet4 to 2.5.1 ([@thecode] - [#137359]) +- Bump deebot-client to 12.0.0 ([@edenhaus] - [#137361]) +- Fix Tado missing await ([@thecode] - [#137364]) +- Bump pysmlight to v0.1.7 ([@tl-sl] - [#137390]) +- Report progress while restoring supervisor backup ([@emontnemery] - [#137313]) +- Fix memory leak when unloading DataUpdateCoordinator ([@bdraco] - [#137338]) +- Update led-ble to 1.1.5 ([@cdce8p] - [#137347]) +- Fix sqlalchemy deprecation warning that `declarative_base` has moved ([@jpbede] - [#137360]) +- Bump led-ble to 1.1.6 ([@bdraco] - [#137369]) +- Allow ignored Bluetooth adapters to be set up from the user flow ([@bdraco] - [#137373]) +- Bump Tesla Fleet API to v0.9.8 ([@Bre77] - [#137379]) +- Handle powerwall at zero percent in Tesla Fleet and Tessie ([@Bre77] - [#137393]) +- Simplify llm calendar tool ([@balloob] - [#137402]) +- Allow creating backup if at least one agent is available ([@emontnemery] - [#137409]) +- Adjust logic for per-backup agent encryption ([@emontnemery] - [#137420]) +- Adjust backup filename scheme ([@emontnemery] - [#137424]) +- Bump onedrive to 0.0.8 ([@zweckj] - [#137423]) +- Bump reolink_aio to 0.11.9 ([@starkillerOG] - [#137430]) +- Bump aiohasupervisor to version 0.3.0 ([@emontnemery] - [#137437]) +- Update frontend to 20250205.0 ([@bramkragten] - [#137441]) +- Update bluetooth dependencies ([@cdce8p] - [#137353]) +- Update bluetooth-data-tools to 1.23.4 ([@cdce8p] - [#137374]) +- Bump hassil and intents ([@synesthesiam] - [#137440]) +- Bump dbus-fast to 2.33.0 ([@bdraco] - [#137446]) + +## Release 2025.2.1 - February 7 + +- Fix hassio test using wrong fixture ([@emontnemery] - [#137516]) +- Change Electric Kiwi authentication ([@mikey0000] - [#135231]) +- Update govee-ble to 0.42.1 ([@cdce8p] - [#137371]) +- Bump holidays to 0.66 ([@gjohansson-ST] - [#137449]) +- Bump aiohttp-asyncmdnsresolver to 0.1.0 ([@bdraco] - [#137492]) +- Bump aiohttp to 3.11.12 ([@bdraco] - [#137494]) +- Bump govee-ble to 0.43.0 to fix compat with new H5179 firmware ([@bdraco] - [#137508]) +- Bump habiticalib to v0.3.5 ([@tr4nt0r] - [#137510]) +- Fix Mill issue, where no sensors were shown ([@Danielhiversen] - [#137521]) +- Don't overwrite setup state in async_set_domains_to_be_loaded ([@emontnemery] - [#137547]) +- Use separate metadata files for onedrive ([@zweckj] - [#137549]) +- Fix sending polls to Telegram threads ([@jwhb] - [#137553]) +- Skip building wheels for electrickiwi-api ([@cdce8p] - [#137556]) +- Add excluded domains to broadcast intent ([@synesthesiam] - [#137566]) +- Revert "Add `PaddleSwitchPico` (Pico Paddle Remote) device trigger to Lutron Caseta" ([@bdraco] - [#137571]) +- Fix Overseerr webhook configuration JSON ([@denniseffing] - [#137572]) +- Do not rely on pyserial for port scanning with the CM5 + ZHA ([@puddly] - [#137585]) +- Bump eheimdigital to 1.0.6 ([@autinerd] - [#137587]) +- Bump pyfireservicerota to 0.0.46 ([@cyberjunky] - [#137589]) +- Bump reolink-aio to 0.11.10 ([@starkillerOG] - [#137591]) +- Allow to omit the payload attribute to MQTT publish action to allow an empty payload to be sent by default ([@jbouwh] - [#137595]) +- Handle previously migrated HEOS device identifier ([@andrewsayre] - [#137596]) +- Bump `aioshelly` to version `12.4.1` ([@bieniu] - [#137598]) +- Bump electrickiwi-api to 0.9.13 ([@mikey0000] - [#137601]) +- Bump ZHA to 0.0.48 ([@TheJulianJES] - [#137610]) +- Bump Electrickiwi-api to 0.9.14 ([@mikey0000] - [#137614]) +- Update google-nest-sdm to 7.1.3 ([@allenporter] - [#137625]) +- Don't use the current temperature from Shelly BLU TRV as a state for External Temperature number entity ([@bieniu] - [#137658]) +- Fix LG webOS TV turn off when device is already off ([@thecode] - [#137675]) + +[#135231]: https://github.com/home-assistant/core/pull/135231 +[#137371]: https://github.com/home-assistant/core/pull/137371 +[#137448]: https://github.com/home-assistant/core/pull/137448 +[#137449]: https://github.com/home-assistant/core/pull/137449 +[#137492]: https://github.com/home-assistant/core/pull/137492 +[#137494]: https://github.com/home-assistant/core/pull/137494 +[#137508]: https://github.com/home-assistant/core/pull/137508 +[#137510]: https://github.com/home-assistant/core/pull/137510 +[#137516]: https://github.com/home-assistant/core/pull/137516 +[#137521]: https://github.com/home-assistant/core/pull/137521 +[#137547]: https://github.com/home-assistant/core/pull/137547 +[#137549]: https://github.com/home-assistant/core/pull/137549 +[#137553]: https://github.com/home-assistant/core/pull/137553 +[#137556]: https://github.com/home-assistant/core/pull/137556 +[#137566]: https://github.com/home-assistant/core/pull/137566 +[#137571]: https://github.com/home-assistant/core/pull/137571 +[#137572]: https://github.com/home-assistant/core/pull/137572 +[#137585]: https://github.com/home-assistant/core/pull/137585 +[#137587]: https://github.com/home-assistant/core/pull/137587 +[#137589]: https://github.com/home-assistant/core/pull/137589 +[#137591]: https://github.com/home-assistant/core/pull/137591 +[#137595]: https://github.com/home-assistant/core/pull/137595 +[#137596]: https://github.com/home-assistant/core/pull/137596 +[#137598]: https://github.com/home-assistant/core/pull/137598 +[#137601]: https://github.com/home-assistant/core/pull/137601 +[#137610]: https://github.com/home-assistant/core/pull/137610 +[#137614]: https://github.com/home-assistant/core/pull/137614 +[#137625]: https://github.com/home-assistant/core/pull/137625 +[#137658]: https://github.com/home-assistant/core/pull/137658 +[#137675]: https://github.com/home-assistant/core/pull/137675 +[@Danielhiversen]: https://github.com/Danielhiversen +[@TheJulianJES]: https://github.com/TheJulianJES +[@allenporter]: https://github.com/allenporter +[@andrewsayre]: https://github.com/andrewsayre +[@autinerd]: https://github.com/autinerd +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@cdce8p]: https://github.com/cdce8p +[@cyberjunky]: https://github.com/cyberjunky +[@denniseffing]: https://github.com/denniseffing +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@jbouwh]: https://github.com/jbouwh +[@jwhb]: https://github.com/jwhb +[@mikey0000]: https://github.com/mikey0000 +[@puddly]: https://github.com/puddly +[@starkillerOG]: https://github.com/starkillerOG +[@synesthesiam]: https://github.com/synesthesiam +[@thecode]: https://github.com/thecode +[@tr4nt0r]: https://github.com/tr4nt0r +[@zweckj]: https://github.com/zweckj + +## Release 2025.2.2 - February 10 + +- LaCrosse View new endpoint ([@IceBotYT] - [#137284]) +- Convert coinbase account amounts as floats to properly add them together ([@natekspencer] - [#137588]) +- Bump ohmepy to 1.2.9 ([@dan-r] - [#137695]) +- Bump onedrive_personal_sdk to 0.0.9 ([@zweckj] - [#137729]) +- Limit habitica ConfigEntrySelect to integration domain ([@cdce8p] - [#137767]) +- Limit nordpool ConfigEntrySelect to integration domain ([@cdce8p] - [#137768]) +- Limit transmission ConfigEntrySelect to integration domain ([@cdce8p] - [#137769]) +- Fix tplink child updates taking up to 60s ([@bdraco] - [#137782]) +- Call backup listener during setup in Google Drive ([@tronikos] - [#137789]) +- Use the external URL set in Settings > System > Network if my is disabled as redirect URL for Google Drive instructions ([@tronikos] - [#137791]) +- Fix manufacturer_id matching for 0 ([@patman15] - [#137802]) +- Fix DAB radio in Onkyo ([@arturpragacz] - [#137852]) +- Fix LG webOS TV fails to setup when device is off ([@thecode] - [#137870]) +- Fix heos migration ([@balloob] - [#137887]) +- Bump pydrawise to 2025.2.0 ([@dknowles2] - [#137961]) +- Bump aioshelly to version 12.4.2 ([@bieniu] - [#137986]) +- Prevent crash if telegram message failed and did not generate an ID ([@CloCkWeRX] - [#137989]) +- Bump habiticalib to v0.3.7 ([@tr4nt0r] - [#137993]) +- Refresh the nest authentication token on integration start before invoking the pub/sub subsciber ([@allenporter] - [#138003]) +- Use resumable uploads in Google Drive ([@tronikos] - [#138010]) +- Bump py-synologydsm-api to 2.6.2 ([@mib1185] - [#138060]) +- Handle generic agent exceptions when getting and deleting backups ([@abmantis] - [#138145]) +- Bump onedrive-personal-sdk to 0.0.10 ([@zweckj] - [#138186]) +- Keep one backup per backup agent when executing retention policy ([@emontnemery] - [#138189]) +- Improve inexogy logging when failed to update ([@jpbede] - [#138210]) +- Bump pyheos to v1.0.2 ([@andrewsayre] - [#138224]) +- Update frontend to 20250210.0 ([@bramkragten] - [#138227]) +- Bump lacrosse-view to 1.1.1 ([@IceBotYT] - [#137282]) + +[#137282]: https://github.com/home-assistant/core/pull/137282 +[#137284]: https://github.com/home-assistant/core/pull/137284 +[#137448]: https://github.com/home-assistant/core/pull/137448 +[#137588]: https://github.com/home-assistant/core/pull/137588 +[#137688]: https://github.com/home-assistant/core/pull/137688 +[#137695]: https://github.com/home-assistant/core/pull/137695 +[#137729]: https://github.com/home-assistant/core/pull/137729 +[#137767]: https://github.com/home-assistant/core/pull/137767 +[#137768]: https://github.com/home-assistant/core/pull/137768 +[#137769]: https://github.com/home-assistant/core/pull/137769 +[#137782]: https://github.com/home-assistant/core/pull/137782 +[#137789]: https://github.com/home-assistant/core/pull/137789 +[#137791]: https://github.com/home-assistant/core/pull/137791 +[#137802]: https://github.com/home-assistant/core/pull/137802 +[#137852]: https://github.com/home-assistant/core/pull/137852 +[#137870]: https://github.com/home-assistant/core/pull/137870 +[#137887]: https://github.com/home-assistant/core/pull/137887 +[#137961]: https://github.com/home-assistant/core/pull/137961 +[#137986]: https://github.com/home-assistant/core/pull/137986 +[#137989]: https://github.com/home-assistant/core/pull/137989 +[#137993]: https://github.com/home-assistant/core/pull/137993 +[#138003]: https://github.com/home-assistant/core/pull/138003 +[#138010]: https://github.com/home-assistant/core/pull/138010 +[#138060]: https://github.com/home-assistant/core/pull/138060 +[#138145]: https://github.com/home-assistant/core/pull/138145 +[#138186]: https://github.com/home-assistant/core/pull/138186 +[#138189]: https://github.com/home-assistant/core/pull/138189 +[#138210]: https://github.com/home-assistant/core/pull/138210 +[#138224]: https://github.com/home-assistant/core/pull/138224 +[#138227]: https://github.com/home-assistant/core/pull/138227 +[@CloCkWeRX]: https://github.com/CloCkWeRX +[@IceBotYT]: https://github.com/IceBotYT +[@abmantis]: https://github.com/abmantis +[@allenporter]: https://github.com/allenporter +[@andrewsayre]: https://github.com/andrewsayre +[@arturpragacz]: https://github.com/arturpragacz +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@bieniu]: https://github.com/bieniu +[@bramkragten]: https://github.com/bramkragten +[@cdce8p]: https://github.com/cdce8p +[@dan-r]: https://github.com/dan-r +[@dknowles2]: https://github.com/dknowles2 +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@jpbede]: https://github.com/jpbede +[@mib1185]: https://github.com/mib1185 +[@natekspencer]: https://github.com/natekspencer +[@patman15]: https://github.com/patman15 +[@thecode]: https://github.com/thecode +[@tr4nt0r]: https://github.com/tr4nt0r +[@tronikos]: https://github.com/tronikos +[@zweckj]: https://github.com/zweckj + +## Release 2025.2.3 - February 12 + +- Bump hass-nabucasa from 0.88.1 to 0.89.0 ([@ludeeus] - [#137321]) +- Move cloud backup upload/download handlers to lib ([@ludeeus] - [#137416]) +- Handle non-retryable errors when uploading cloud backup ([@ludeeus] - [#137517]) +- Add missing thermostat state EMERGENCY_HEAT to econet ([@jdanders] - [#137623]) +- Fix broken issue creation in econet ([@jdanders] - [#137773]) +- Fix version extraction for APsystems ([@alfwro13] - [#138023]) +- Refresh nest access token before before building subscriber Credentials ([@allenporter] - [#138259]) +- Fix BackupManager.async_delete_backup ([@emontnemery] - [#138286]) +- Fix next authentication token error handling ([@allenporter] - [#138299]) +- Bump pyenphase to 1.25.1 ([@catsmanac] - [#138327]) +- Bump sentry-sdk to 1.45.1 ([@edenhaus] - [#138349]) +- Bump zeroconf to 0.144.1 ([@bdraco] - [#138353]) +- Bump cryptography to 44.0.1 ([@edenhaus] - [#138371]) +- Fix tplink iot strip sensor refresh ([@sdb9696] - [#138375]) +- Bump deebot-client to 12.1.0 ([@edenhaus] - [#138382]) +- Bump hass-nabucasa from 0.89.0 to 0.90.0 ([@emontnemery] - [#138387]) +- Update cloud backup agent to use calculate_b64md5 from lib ([@emontnemery] - [#138391]) + +[#137321]: https://github.com/home-assistant/core/pull/137321 +[#137416]: https://github.com/home-assistant/core/pull/137416 +[#137448]: https://github.com/home-assistant/core/pull/137448 +[#137517]: https://github.com/home-assistant/core/pull/137517 +[#137623]: https://github.com/home-assistant/core/pull/137623 +[#137688]: https://github.com/home-assistant/core/pull/137688 +[#137773]: https://github.com/home-assistant/core/pull/137773 +[#138023]: https://github.com/home-assistant/core/pull/138023 +[#138231]: https://github.com/home-assistant/core/pull/138231 +[#138259]: https://github.com/home-assistant/core/pull/138259 +[#138286]: https://github.com/home-assistant/core/pull/138286 +[#138299]: https://github.com/home-assistant/core/pull/138299 +[#138327]: https://github.com/home-assistant/core/pull/138327 +[#138349]: https://github.com/home-assistant/core/pull/138349 +[#138353]: https://github.com/home-assistant/core/pull/138353 +[#138371]: https://github.com/home-assistant/core/pull/138371 +[#138375]: https://github.com/home-assistant/core/pull/138375 +[#138382]: https://github.com/home-assistant/core/pull/138382 +[#138387]: https://github.com/home-assistant/core/pull/138387 +[#138391]: https://github.com/home-assistant/core/pull/138391 +[@alfwro13]: https://github.com/alfwro13 +[@allenporter]: https://github.com/allenporter +[@bdraco]: https://github.com/bdraco +[@catsmanac]: https://github.com/catsmanac +[@edenhaus]: https://github.com/edenhaus +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@jdanders]: https://github.com/jdanders +[@ludeeus]: https://github.com/ludeeus +[@sdb9696]: https://github.com/sdb9696 + +## Release 2025.2.4 - February 14 + +- Bump python-kasa to 0.10.2 ([@sdb9696] - [#138381]) +- Bump hass-nabucasa from 0.90.0 to 0.91.0 ([@ludeeus] - [#138441]) +- Bump aiowebostv to 0.6.2 ([@thecode] - [#138488]) +- Bump ZHA to 0.0.49 to fix Tuya TRV issues ([@TheJulianJES] - [#138492]) +- Bump pyseventeentrack to 1.0.2 ([@shaiu] - [#138506]) +- Bump hass-nabucasa from 0.91.0 to 0.92.0 ([@emontnemery] - [#138510]) +- Bump py-synologydsm-api to 2.6.3 ([@mib1185] - [#138516]) +- Update frontend to 20250214.0 ([@bramkragten] - [#138521]) + +[#137448]: https://github.com/home-assistant/core/pull/137448 +[#137688]: https://github.com/home-assistant/core/pull/137688 +[#138231]: https://github.com/home-assistant/core/pull/138231 +[#138381]: https://github.com/home-assistant/core/pull/138381 +[#138408]: https://github.com/home-assistant/core/pull/138408 +[#138441]: https://github.com/home-assistant/core/pull/138441 +[#138488]: https://github.com/home-assistant/core/pull/138488 +[#138492]: https://github.com/home-assistant/core/pull/138492 +[#138506]: https://github.com/home-assistant/core/pull/138506 +[#138510]: https://github.com/home-assistant/core/pull/138510 +[#138516]: https://github.com/home-assistant/core/pull/138516 +[#138521]: https://github.com/home-assistant/core/pull/138521 +[@TheJulianJES]: https://github.com/TheJulianJES +[@bramkragten]: https://github.com/bramkragten +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@ludeeus]: https://github.com/ludeeus +[@mib1185]: https://github.com/mib1185 +[@sdb9696]: https://github.com/sdb9696 +[@shaiu]: https://github.com/shaiu +[@thecode]: https://github.com/thecode + +## Release 2025.2.5 - February 21 + +- Adjust Tuya Water Detector to support 1 as an alarm state ([@petacz] - [#135933]) +- Fix bug in set_preset_mode_with_end_datetime (wrong typo of frost_guard) ([@pectum83] - [#138402]) +- Bump pyhive-integration to 1.0.2 ([@KJonline] - [#138569]) +- Bump tesla-fleet-api to v0.9.10 ([@Bre77] - [#138575]) +- Bump pysmarty2 to 0.10.2 ([@lucab-91] - [#138625]) +- Rename "returned" state to "alert" ([@shaiu] - [#138676]) +- Bump pyvesync for vesync ([@cdnninja] - [#138681]) +- Opower: Fix unavailable "start date" and "end date" sensors ([@SaswatPadhi] - [#138694]) +- Correct backup filename on delete or download of cloud backup ([@emontnemery] - [#138704]) +- Correct invalid automatic backup settings when loading from store ([@emontnemery] - [#138716]) +- Bump airgradient to 0.9.2 ([@joostlek] - [#138725]) +- Clean up translations for mocked integrations inbetween tests ([@emontnemery] - [#138732]) +- Bump pyrympro from 0.0.8 to 0.0.9 ([@nivstein] - [#138753]) +- Don't allow setting backup retention to 0 days or copies ([@emontnemery] - [#138771]) +- Fix TV input source option for Sonos Arc Ultra ([@PeteRager] - [#138778]) +- Add assistant filter to expose entities list command ([@synesthesiam] - [#138817]) +- Fix playback for encrypted Reolink files ([@starkillerOG] - [#138852]) +- Correct backup date when reading a backup created by supervisor ([@emontnemery] - [#138860]) +- Bump pyfritzhome to 0.6.15 ([@mib1185] - [#138879]) +- Validate hassio backup settings ([@emontnemery] - [#138880]) +- Catch zeep fault as well on GetSystemDateAndTime call. ([@DmitryKuzmenko] - [#138916]) +- Fix Reolink callback id collision ([@starkillerOG] - [#138918]) +- Fix handling of min/max temperature presets in AVM Fritz!SmartHome ([@mib1185] - [#138954]) +- Bump pyprosegur to 0.0.13 ([@dgomes] - [#138960]) +- Bump reolink-aio to 0.12.0 ([@starkillerOG] - [#138985]) +- Bump deebot-client to 12.2.0 ([@edenhaus] - [#138986]) +- Omit unknown hue effects ([@joostlek] - [#138992]) +- Update frontend to 20250221.0 ([@bramkragten] - [#139006]) + +[#135933]: https://github.com/home-assistant/core/pull/135933 +[#137448]: https://github.com/home-assistant/core/pull/137448 +[#137688]: https://github.com/home-assistant/core/pull/137688 +[#138231]: https://github.com/home-assistant/core/pull/138231 +[#138402]: https://github.com/home-assistant/core/pull/138402 +[#138408]: https://github.com/home-assistant/core/pull/138408 +[#138530]: https://github.com/home-assistant/core/pull/138530 +[#138569]: https://github.com/home-assistant/core/pull/138569 +[#138575]: https://github.com/home-assistant/core/pull/138575 +[#138625]: https://github.com/home-assistant/core/pull/138625 +[#138676]: https://github.com/home-assistant/core/pull/138676 +[#138681]: https://github.com/home-assistant/core/pull/138681 +[#138694]: https://github.com/home-assistant/core/pull/138694 +[#138704]: https://github.com/home-assistant/core/pull/138704 +[#138716]: https://github.com/home-assistant/core/pull/138716 +[#138725]: https://github.com/home-assistant/core/pull/138725 +[#138732]: https://github.com/home-assistant/core/pull/138732 +[#138753]: https://github.com/home-assistant/core/pull/138753 +[#138771]: https://github.com/home-assistant/core/pull/138771 +[#138778]: https://github.com/home-assistant/core/pull/138778 +[#138817]: https://github.com/home-assistant/core/pull/138817 +[#138852]: https://github.com/home-assistant/core/pull/138852 +[#138860]: https://github.com/home-assistant/core/pull/138860 +[#138879]: https://github.com/home-assistant/core/pull/138879 +[#138880]: https://github.com/home-assistant/core/pull/138880 +[#138916]: https://github.com/home-assistant/core/pull/138916 +[#138918]: https://github.com/home-assistant/core/pull/138918 +[#138954]: https://github.com/home-assistant/core/pull/138954 +[#138960]: https://github.com/home-assistant/core/pull/138960 +[#138985]: https://github.com/home-assistant/core/pull/138985 +[#138986]: https://github.com/home-assistant/core/pull/138986 +[#138992]: https://github.com/home-assistant/core/pull/138992 +[#139006]: https://github.com/home-assistant/core/pull/139006 +[@Bre77]: https://github.com/Bre77 +[@DmitryKuzmenko]: https://github.com/DmitryKuzmenko +[@KJonline]: https://github.com/KJonline +[@PeteRager]: https://github.com/PeteRager +[@SaswatPadhi]: https://github.com/SaswatPadhi +[@bramkragten]: https://github.com/bramkragten +[@cdnninja]: https://github.com/cdnninja +[@dgomes]: https://github.com/dgomes +[@edenhaus]: https://github.com/edenhaus +[@emontnemery]: https://github.com/emontnemery +[@frenck]: https://github.com/frenck +[@joostlek]: https://github.com/joostlek +[@lucab-91]: https://github.com/lucab-91 +[@mib1185]: https://github.com/mib1185 +[@nivstein]: https://github.com/nivstein +[@pectum83]: https://github.com/pectum83 +[@petacz]: https://github.com/petacz +[@shaiu]: https://github.com/shaiu +[@starkillerOG]: https://github.com/starkillerOG +[@synesthesiam]: https://github.com/synesthesiam + +[#112047]: https://github.com/home-assistant/core/pull/112047 +[#121522]: https://github.com/home-assistant/core/pull/121522 +[#121548]: https://github.com/home-assistant/core/pull/121548 +[#124743]: https://github.com/home-assistant/core/pull/124743 +[#126064]: https://github.com/home-assistant/core/pull/126064 +[#126487]: https://github.com/home-assistant/core/pull/126487 +[#126878]: https://github.com/home-assistant/core/pull/126878 +[#127280]: https://github.com/home-assistant/core/pull/127280 +[#127550]: https://github.com/home-assistant/core/pull/127550 +[#127687]: https://github.com/home-assistant/core/pull/127687 +[#127957]: https://github.com/home-assistant/core/pull/127957 +[#128366]: https://github.com/home-assistant/core/pull/128366 +[#128439]: https://github.com/home-assistant/core/pull/128439 +[#129009]: https://github.com/home-assistant/core/pull/129009 +[#129352]: https://github.com/home-assistant/core/pull/129352 +[#129636]: https://github.com/home-assistant/core/pull/129636 +[#129757]: https://github.com/home-assistant/core/pull/129757 +[#130196]: https://github.com/home-assistant/core/pull/130196 +[#130356]: https://github.com/home-assistant/core/pull/130356 +[#130408]: https://github.com/home-assistant/core/pull/130408 +[#130513]: https://github.com/home-assistant/core/pull/130513 +[#130657]: https://github.com/home-assistant/core/pull/130657 +[#130717]: https://github.com/home-assistant/core/pull/130717 +[#130731]: https://github.com/home-assistant/core/pull/130731 +[#130738]: https://github.com/home-assistant/core/pull/130738 +[#130918]: https://github.com/home-assistant/core/pull/130918 +[#131032]: https://github.com/home-assistant/core/pull/131032 +[#131133]: https://github.com/home-assistant/core/pull/131133 +[#131224]: https://github.com/home-assistant/core/pull/131224 +[#131274]: https://github.com/home-assistant/core/pull/131274 +[#131371]: https://github.com/home-assistant/core/pull/131371 +[#131416]: https://github.com/home-assistant/core/pull/131416 +[#131433]: https://github.com/home-assistant/core/pull/131433 +[#131496]: https://github.com/home-assistant/core/pull/131496 +[#131550]: https://github.com/home-assistant/core/pull/131550 +[#131586]: https://github.com/home-assistant/core/pull/131586 +[#131676]: https://github.com/home-assistant/core/pull/131676 +[#131914]: https://github.com/home-assistant/core/pull/131914 +[#131965]: https://github.com/home-assistant/core/pull/131965 +[#132017]: https://github.com/home-assistant/core/pull/132017 +[#132117]: https://github.com/home-assistant/core/pull/132117 +[#132267]: https://github.com/home-assistant/core/pull/132267 +[#132502]: https://github.com/home-assistant/core/pull/132502 +[#132551]: https://github.com/home-assistant/core/pull/132551 +[#132754]: https://github.com/home-assistant/core/pull/132754 +[#132783]: https://github.com/home-assistant/core/pull/132783 +[#132871]: https://github.com/home-assistant/core/pull/132871 +[#132879]: https://github.com/home-assistant/core/pull/132879 +[#132920]: https://github.com/home-assistant/core/pull/132920 +[#133099]: https://github.com/home-assistant/core/pull/133099 +[#133227]: https://github.com/home-assistant/core/pull/133227 +[#133269]: https://github.com/home-assistant/core/pull/133269 +[#133270]: https://github.com/home-assistant/core/pull/133270 +[#133285]: https://github.com/home-assistant/core/pull/133285 +[#133318]: https://github.com/home-assistant/core/pull/133318 +[#133328]: https://github.com/home-assistant/core/pull/133328 +[#133342]: https://github.com/home-assistant/core/pull/133342 +[#133386]: https://github.com/home-assistant/core/pull/133386 +[#133398]: https://github.com/home-assistant/core/pull/133398 +[#133452]: https://github.com/home-assistant/core/pull/133452 +[#133511]: https://github.com/home-assistant/core/pull/133511 +[#133546]: https://github.com/home-assistant/core/pull/133546 +[#133583]: https://github.com/home-assistant/core/pull/133583 +[#133612]: https://github.com/home-assistant/core/pull/133612 +[#133615]: https://github.com/home-assistant/core/pull/133615 +[#133617]: https://github.com/home-assistant/core/pull/133617 +[#133663]: https://github.com/home-assistant/core/pull/133663 +[#133678]: https://github.com/home-assistant/core/pull/133678 +[#133691]: https://github.com/home-assistant/core/pull/133691 +[#133704]: https://github.com/home-assistant/core/pull/133704 +[#133732]: https://github.com/home-assistant/core/pull/133732 +[#133738]: https://github.com/home-assistant/core/pull/133738 +[#133777]: https://github.com/home-assistant/core/pull/133777 +[#133784]: https://github.com/home-assistant/core/pull/133784 +[#133810]: https://github.com/home-assistant/core/pull/133810 +[#133827]: https://github.com/home-assistant/core/pull/133827 +[#133833]: https://github.com/home-assistant/core/pull/133833 +[#133840]: https://github.com/home-assistant/core/pull/133840 +[#133844]: https://github.com/home-assistant/core/pull/133844 +[#133852]: https://github.com/home-assistant/core/pull/133852 +[#133866]: https://github.com/home-assistant/core/pull/133866 +[#133870]: https://github.com/home-assistant/core/pull/133870 +[#133888]: https://github.com/home-assistant/core/pull/133888 +[#133893]: https://github.com/home-assistant/core/pull/133893 +[#133895]: https://github.com/home-assistant/core/pull/133895 +[#133902]: https://github.com/home-assistant/core/pull/133902 +[#133910]: https://github.com/home-assistant/core/pull/133910 +[#133920]: https://github.com/home-assistant/core/pull/133920 +[#133921]: https://github.com/home-assistant/core/pull/133921 +[#133928]: https://github.com/home-assistant/core/pull/133928 +[#133937]: https://github.com/home-assistant/core/pull/133937 +[#133939]: https://github.com/home-assistant/core/pull/133939 +[#133953]: https://github.com/home-assistant/core/pull/133953 +[#133955]: https://github.com/home-assistant/core/pull/133955 +[#133957]: https://github.com/home-assistant/core/pull/133957 +[#133958]: https://github.com/home-assistant/core/pull/133958 +[#133959]: https://github.com/home-assistant/core/pull/133959 +[#133962]: https://github.com/home-assistant/core/pull/133962 +[#133969]: https://github.com/home-assistant/core/pull/133969 +[#133970]: https://github.com/home-assistant/core/pull/133970 +[#133981]: https://github.com/home-assistant/core/pull/133981 +[#133982]: https://github.com/home-assistant/core/pull/133982 +[#133987]: https://github.com/home-assistant/core/pull/133987 +[#133988]: https://github.com/home-assistant/core/pull/133988 +[#133994]: https://github.com/home-assistant/core/pull/133994 +[#133996]: https://github.com/home-assistant/core/pull/133996 +[#133997]: https://github.com/home-assistant/core/pull/133997 +[#134001]: https://github.com/home-assistant/core/pull/134001 +[#134004]: https://github.com/home-assistant/core/pull/134004 +[#134016]: https://github.com/home-assistant/core/pull/134016 +[#134019]: https://github.com/home-assistant/core/pull/134019 +[#134020]: https://github.com/home-assistant/core/pull/134020 +[#134021]: https://github.com/home-assistant/core/pull/134021 +[#134025]: https://github.com/home-assistant/core/pull/134025 +[#134026]: https://github.com/home-assistant/core/pull/134026 +[#134027]: https://github.com/home-assistant/core/pull/134027 +[#134028]: https://github.com/home-assistant/core/pull/134028 +[#134036]: https://github.com/home-assistant/core/pull/134036 +[#134040]: https://github.com/home-assistant/core/pull/134040 +[#134041]: https://github.com/home-assistant/core/pull/134041 +[#134044]: https://github.com/home-assistant/core/pull/134044 +[#134049]: https://github.com/home-assistant/core/pull/134049 +[#134051]: https://github.com/home-assistant/core/pull/134051 +[#134053]: https://github.com/home-assistant/core/pull/134053 +[#134054]: https://github.com/home-assistant/core/pull/134054 +[#134055]: https://github.com/home-assistant/core/pull/134055 +[#134056]: https://github.com/home-assistant/core/pull/134056 +[#134059]: https://github.com/home-assistant/core/pull/134059 +[#134060]: https://github.com/home-assistant/core/pull/134060 +[#134069]: https://github.com/home-assistant/core/pull/134069 +[#134072]: https://github.com/home-assistant/core/pull/134072 +[#134079]: https://github.com/home-assistant/core/pull/134079 +[#134087]: https://github.com/home-assistant/core/pull/134087 +[#134088]: https://github.com/home-assistant/core/pull/134088 +[#134093]: https://github.com/home-assistant/core/pull/134093 +[#134097]: https://github.com/home-assistant/core/pull/134097 +[#134100]: https://github.com/home-assistant/core/pull/134100 +[#134104]: https://github.com/home-assistant/core/pull/134104 +[#134105]: https://github.com/home-assistant/core/pull/134105 +[#134106]: https://github.com/home-assistant/core/pull/134106 +[#134107]: https://github.com/home-assistant/core/pull/134107 +[#134108]: https://github.com/home-assistant/core/pull/134108 +[#134109]: https://github.com/home-assistant/core/pull/134109 +[#134110]: https://github.com/home-assistant/core/pull/134110 +[#134115]: https://github.com/home-assistant/core/pull/134115 +[#134116]: https://github.com/home-assistant/core/pull/134116 +[#134117]: https://github.com/home-assistant/core/pull/134117 +[#134118]: https://github.com/home-assistant/core/pull/134118 +[#134120]: https://github.com/home-assistant/core/pull/134120 +[#134122]: https://github.com/home-assistant/core/pull/134122 +[#134124]: https://github.com/home-assistant/core/pull/134124 +[#134130]: https://github.com/home-assistant/core/pull/134130 +[#134132]: https://github.com/home-assistant/core/pull/134132 +[#134133]: https://github.com/home-assistant/core/pull/134133 +[#134135]: https://github.com/home-assistant/core/pull/134135 +[#134137]: https://github.com/home-assistant/core/pull/134137 +[#134138]: https://github.com/home-assistant/core/pull/134138 +[#134143]: https://github.com/home-assistant/core/pull/134143 +[#134146]: https://github.com/home-assistant/core/pull/134146 +[#134147]: https://github.com/home-assistant/core/pull/134147 +[#134150]: https://github.com/home-assistant/core/pull/134150 +[#134151]: https://github.com/home-assistant/core/pull/134151 +[#134153]: https://github.com/home-assistant/core/pull/134153 +[#134156]: https://github.com/home-assistant/core/pull/134156 +[#134170]: https://github.com/home-assistant/core/pull/134170 +[#134173]: https://github.com/home-assistant/core/pull/134173 +[#134174]: https://github.com/home-assistant/core/pull/134174 +[#134175]: https://github.com/home-assistant/core/pull/134175 +[#134179]: https://github.com/home-assistant/core/pull/134179 +[#134185]: https://github.com/home-assistant/core/pull/134185 +[#134186]: https://github.com/home-assistant/core/pull/134186 +[#134187]: https://github.com/home-assistant/core/pull/134187 +[#134192]: https://github.com/home-assistant/core/pull/134192 +[#134193]: https://github.com/home-assistant/core/pull/134193 +[#134196]: https://github.com/home-assistant/core/pull/134196 +[#134197]: https://github.com/home-assistant/core/pull/134197 +[#134198]: https://github.com/home-assistant/core/pull/134198 +[#134200]: https://github.com/home-assistant/core/pull/134200 +[#134207]: https://github.com/home-assistant/core/pull/134207 +[#134210]: https://github.com/home-assistant/core/pull/134210 +[#134211]: https://github.com/home-assistant/core/pull/134211 +[#134212]: https://github.com/home-assistant/core/pull/134212 +[#134213]: https://github.com/home-assistant/core/pull/134213 +[#134221]: https://github.com/home-assistant/core/pull/134221 +[#134222]: https://github.com/home-assistant/core/pull/134222 +[#134229]: https://github.com/home-assistant/core/pull/134229 +[#134242]: https://github.com/home-assistant/core/pull/134242 +[#134244]: https://github.com/home-assistant/core/pull/134244 +[#134245]: https://github.com/home-assistant/core/pull/134245 +[#134246]: https://github.com/home-assistant/core/pull/134246 +[#134256]: https://github.com/home-assistant/core/pull/134256 +[#134261]: https://github.com/home-assistant/core/pull/134261 +[#134275]: https://github.com/home-assistant/core/pull/134275 +[#134277]: https://github.com/home-assistant/core/pull/134277 +[#134278]: https://github.com/home-assistant/core/pull/134278 +[#134279]: https://github.com/home-assistant/core/pull/134279 +[#134281]: https://github.com/home-assistant/core/pull/134281 +[#134282]: https://github.com/home-assistant/core/pull/134282 +[#134285]: https://github.com/home-assistant/core/pull/134285 +[#134290]: https://github.com/home-assistant/core/pull/134290 +[#134291]: https://github.com/home-assistant/core/pull/134291 +[#134296]: https://github.com/home-assistant/core/pull/134296 +[#134298]: https://github.com/home-assistant/core/pull/134298 +[#134299]: https://github.com/home-assistant/core/pull/134299 +[#134300]: https://github.com/home-assistant/core/pull/134300 +[#134301]: https://github.com/home-assistant/core/pull/134301 +[#134302]: https://github.com/home-assistant/core/pull/134302 +[#134303]: https://github.com/home-assistant/core/pull/134303 +[#134304]: https://github.com/home-assistant/core/pull/134304 +[#134305]: https://github.com/home-assistant/core/pull/134305 +[#134307]: https://github.com/home-assistant/core/pull/134307 +[#134308]: https://github.com/home-assistant/core/pull/134308 +[#134309]: https://github.com/home-assistant/core/pull/134309 +[#134310]: https://github.com/home-assistant/core/pull/134310 +[#134314]: https://github.com/home-assistant/core/pull/134314 +[#134320]: https://github.com/home-assistant/core/pull/134320 +[#134328]: https://github.com/home-assistant/core/pull/134328 +[#134330]: https://github.com/home-assistant/core/pull/134330 +[#134331]: https://github.com/home-assistant/core/pull/134331 +[#134333]: https://github.com/home-assistant/core/pull/134333 +[#134334]: https://github.com/home-assistant/core/pull/134334 +[#134339]: https://github.com/home-assistant/core/pull/134339 +[#134342]: https://github.com/home-assistant/core/pull/134342 +[#134347]: https://github.com/home-assistant/core/pull/134347 +[#134348]: https://github.com/home-assistant/core/pull/134348 +[#134354]: https://github.com/home-assistant/core/pull/134354 +[#134366]: https://github.com/home-assistant/core/pull/134366 +[#134368]: https://github.com/home-assistant/core/pull/134368 +[#134372]: https://github.com/home-assistant/core/pull/134372 +[#134382]: https://github.com/home-assistant/core/pull/134382 +[#134383]: https://github.com/home-assistant/core/pull/134383 +[#134385]: https://github.com/home-assistant/core/pull/134385 +[#134387]: https://github.com/home-assistant/core/pull/134387 +[#134393]: https://github.com/home-assistant/core/pull/134393 +[#134394]: https://github.com/home-assistant/core/pull/134394 +[#134399]: https://github.com/home-assistant/core/pull/134399 +[#134402]: https://github.com/home-assistant/core/pull/134402 +[#134410]: https://github.com/home-assistant/core/pull/134410 +[#134415]: https://github.com/home-assistant/core/pull/134415 +[#134416]: https://github.com/home-assistant/core/pull/134416 +[#134419]: https://github.com/home-assistant/core/pull/134419 +[#134420]: https://github.com/home-assistant/core/pull/134420 +[#134422]: https://github.com/home-assistant/core/pull/134422 +[#134426]: https://github.com/home-assistant/core/pull/134426 +[#134433]: https://github.com/home-assistant/core/pull/134433 +[#134441]: https://github.com/home-assistant/core/pull/134441 +[#134444]: https://github.com/home-assistant/core/pull/134444 +[#134446]: https://github.com/home-assistant/core/pull/134446 +[#134447]: https://github.com/home-assistant/core/pull/134447 +[#134450]: https://github.com/home-assistant/core/pull/134450 +[#134457]: https://github.com/home-assistant/core/pull/134457 +[#134459]: https://github.com/home-assistant/core/pull/134459 +[#134461]: https://github.com/home-assistant/core/pull/134461 +[#134465]: https://github.com/home-assistant/core/pull/134465 +[#134466]: https://github.com/home-assistant/core/pull/134466 +[#134468]: https://github.com/home-assistant/core/pull/134468 +[#134469]: https://github.com/home-assistant/core/pull/134469 +[#134472]: https://github.com/home-assistant/core/pull/134472 +[#134473]: https://github.com/home-assistant/core/pull/134473 +[#134475]: https://github.com/home-assistant/core/pull/134475 +[#134477]: https://github.com/home-assistant/core/pull/134477 +[#134478]: https://github.com/home-assistant/core/pull/134478 +[#134479]: https://github.com/home-assistant/core/pull/134479 +[#134480]: https://github.com/home-assistant/core/pull/134480 +[#134482]: https://github.com/home-assistant/core/pull/134482 +[#134485]: https://github.com/home-assistant/core/pull/134485 +[#134487]: https://github.com/home-assistant/core/pull/134487 +[#134488]: https://github.com/home-assistant/core/pull/134488 +[#134491]: https://github.com/home-assistant/core/pull/134491 +[#134492]: https://github.com/home-assistant/core/pull/134492 +[#134493]: https://github.com/home-assistant/core/pull/134493 +[#134494]: https://github.com/home-assistant/core/pull/134494 +[#134499]: https://github.com/home-assistant/core/pull/134499 +[#134501]: https://github.com/home-assistant/core/pull/134501 +[#134503]: https://github.com/home-assistant/core/pull/134503 +[#134522]: https://github.com/home-assistant/core/pull/134522 +[#134532]: https://github.com/home-assistant/core/pull/134532 +[#134533]: https://github.com/home-assistant/core/pull/134533 +[#134535]: https://github.com/home-assistant/core/pull/134535 +[#134536]: https://github.com/home-assistant/core/pull/134536 +[#134537]: https://github.com/home-assistant/core/pull/134537 +[#134543]: https://github.com/home-assistant/core/pull/134543 +[#134551]: https://github.com/home-assistant/core/pull/134551 +[#134553]: https://github.com/home-assistant/core/pull/134553 +[#134563]: https://github.com/home-assistant/core/pull/134563 +[#134576]: https://github.com/home-assistant/core/pull/134576 +[#134591]: https://github.com/home-assistant/core/pull/134591 +[#134596]: https://github.com/home-assistant/core/pull/134596 +[#134616]: https://github.com/home-assistant/core/pull/134616 +[#134617]: https://github.com/home-assistant/core/pull/134617 +[#134619]: https://github.com/home-assistant/core/pull/134619 +[#134621]: https://github.com/home-assistant/core/pull/134621 +[#134625]: https://github.com/home-assistant/core/pull/134625 +[#134634]: https://github.com/home-assistant/core/pull/134634 +[#134646]: https://github.com/home-assistant/core/pull/134646 +[#134654]: https://github.com/home-assistant/core/pull/134654 +[#134667]: https://github.com/home-assistant/core/pull/134667 +[#134668]: https://github.com/home-assistant/core/pull/134668 +[#134671]: https://github.com/home-assistant/core/pull/134671 +[#134680]: https://github.com/home-assistant/core/pull/134680 +[#134682]: https://github.com/home-assistant/core/pull/134682 +[#134683]: https://github.com/home-assistant/core/pull/134683 +[#134687]: https://github.com/home-assistant/core/pull/134687 +[#134692]: https://github.com/home-assistant/core/pull/134692 +[#134694]: https://github.com/home-assistant/core/pull/134694 +[#134697]: https://github.com/home-assistant/core/pull/134697 +[#134700]: https://github.com/home-assistant/core/pull/134700 +[#134705]: https://github.com/home-assistant/core/pull/134705 +[#134721]: https://github.com/home-assistant/core/pull/134721 +[#134722]: https://github.com/home-assistant/core/pull/134722 +[#134724]: https://github.com/home-assistant/core/pull/134724 +[#134733]: https://github.com/home-assistant/core/pull/134733 +[#134745]: https://github.com/home-assistant/core/pull/134745 +[#134747]: https://github.com/home-assistant/core/pull/134747 +[#134748]: https://github.com/home-assistant/core/pull/134748 +[#134752]: https://github.com/home-assistant/core/pull/134752 +[#134765]: https://github.com/home-assistant/core/pull/134765 +[#134776]: https://github.com/home-assistant/core/pull/134776 +[#134778]: https://github.com/home-assistant/core/pull/134778 +[#134779]: https://github.com/home-assistant/core/pull/134779 +[#134780]: https://github.com/home-assistant/core/pull/134780 +[#134783]: https://github.com/home-assistant/core/pull/134783 +[#134799]: https://github.com/home-assistant/core/pull/134799 +[#134807]: https://github.com/home-assistant/core/pull/134807 +[#134809]: https://github.com/home-assistant/core/pull/134809 +[#134815]: https://github.com/home-assistant/core/pull/134815 +[#134816]: https://github.com/home-assistant/core/pull/134816 +[#134817]: https://github.com/home-assistant/core/pull/134817 +[#134822]: https://github.com/home-assistant/core/pull/134822 +[#134824]: https://github.com/home-assistant/core/pull/134824 +[#134830]: https://github.com/home-assistant/core/pull/134830 +[#134831]: https://github.com/home-assistant/core/pull/134831 +[#134837]: https://github.com/home-assistant/core/pull/134837 +[#134838]: https://github.com/home-assistant/core/pull/134838 +[#134841]: https://github.com/home-assistant/core/pull/134841 +[#134843]: https://github.com/home-assistant/core/pull/134843 +[#134844]: https://github.com/home-assistant/core/pull/134844 +[#134852]: https://github.com/home-assistant/core/pull/134852 +[#134858]: https://github.com/home-assistant/core/pull/134858 +[#134888]: https://github.com/home-assistant/core/pull/134888 +[#134894]: https://github.com/home-assistant/core/pull/134894 +[#134900]: https://github.com/home-assistant/core/pull/134900 +[#134901]: https://github.com/home-assistant/core/pull/134901 +[#134906]: https://github.com/home-assistant/core/pull/134906 +[#134914]: https://github.com/home-assistant/core/pull/134914 +[#134916]: https://github.com/home-assistant/core/pull/134916 +[#134917]: https://github.com/home-assistant/core/pull/134917 +[#134920]: https://github.com/home-assistant/core/pull/134920 +[#134921]: https://github.com/home-assistant/core/pull/134921 +[#134924]: https://github.com/home-assistant/core/pull/134924 +[#134925]: https://github.com/home-assistant/core/pull/134925 +[#134926]: https://github.com/home-assistant/core/pull/134926 +[#134931]: https://github.com/home-assistant/core/pull/134931 +[#134935]: https://github.com/home-assistant/core/pull/134935 +[#134942]: https://github.com/home-assistant/core/pull/134942 +[#134947]: https://github.com/home-assistant/core/pull/134947 +[#134950]: https://github.com/home-assistant/core/pull/134950 +[#134951]: https://github.com/home-assistant/core/pull/134951 +[#134952]: https://github.com/home-assistant/core/pull/134952 +[#134953]: https://github.com/home-assistant/core/pull/134953 +[#134954]: https://github.com/home-assistant/core/pull/134954 +[#134956]: https://github.com/home-assistant/core/pull/134956 +[#134962]: https://github.com/home-assistant/core/pull/134962 +[#134966]: https://github.com/home-assistant/core/pull/134966 +[#134971]: https://github.com/home-assistant/core/pull/134971 +[#134975]: https://github.com/home-assistant/core/pull/134975 +[#134978]: https://github.com/home-assistant/core/pull/134978 +[#134982]: https://github.com/home-assistant/core/pull/134982 +[#134985]: https://github.com/home-assistant/core/pull/134985 +[#134990]: https://github.com/home-assistant/core/pull/134990 +[#134991]: https://github.com/home-assistant/core/pull/134991 +[#134993]: https://github.com/home-assistant/core/pull/134993 +[#134996]: https://github.com/home-assistant/core/pull/134996 +[#134998]: https://github.com/home-assistant/core/pull/134998 +[#135000]: https://github.com/home-assistant/core/pull/135000 +[#135004]: https://github.com/home-assistant/core/pull/135004 +[#135006]: https://github.com/home-assistant/core/pull/135006 +[#135015]: https://github.com/home-assistant/core/pull/135015 +[#135017]: https://github.com/home-assistant/core/pull/135017 +[#135018]: https://github.com/home-assistant/core/pull/135018 +[#135021]: https://github.com/home-assistant/core/pull/135021 +[#135022]: https://github.com/home-assistant/core/pull/135022 +[#135028]: https://github.com/home-assistant/core/pull/135028 +[#135029]: https://github.com/home-assistant/core/pull/135029 +[#135030]: https://github.com/home-assistant/core/pull/135030 +[#135031]: https://github.com/home-assistant/core/pull/135031 +[#135032]: https://github.com/home-assistant/core/pull/135032 +[#135042]: https://github.com/home-assistant/core/pull/135042 +[#135046]: https://github.com/home-assistant/core/pull/135046 +[#135049]: https://github.com/home-assistant/core/pull/135049 +[#135052]: https://github.com/home-assistant/core/pull/135052 +[#135057]: https://github.com/home-assistant/core/pull/135057 +[#135058]: https://github.com/home-assistant/core/pull/135058 +[#135067]: https://github.com/home-assistant/core/pull/135067 +[#135068]: https://github.com/home-assistant/core/pull/135068 +[#135070]: https://github.com/home-assistant/core/pull/135070 +[#135071]: https://github.com/home-assistant/core/pull/135071 +[#135075]: https://github.com/home-assistant/core/pull/135075 +[#135081]: https://github.com/home-assistant/core/pull/135081 +[#135083]: https://github.com/home-assistant/core/pull/135083 +[#135095]: https://github.com/home-assistant/core/pull/135095 +[#135098]: https://github.com/home-assistant/core/pull/135098 +[#135102]: https://github.com/home-assistant/core/pull/135102 +[#135105]: https://github.com/home-assistant/core/pull/135105 +[#135108]: https://github.com/home-assistant/core/pull/135108 +[#135109]: https://github.com/home-assistant/core/pull/135109 +[#135120]: https://github.com/home-assistant/core/pull/135120 +[#135121]: https://github.com/home-assistant/core/pull/135121 +[#135125]: https://github.com/home-assistant/core/pull/135125 +[#135126]: https://github.com/home-assistant/core/pull/135126 +[#135130]: https://github.com/home-assistant/core/pull/135130 +[#135133]: https://github.com/home-assistant/core/pull/135133 +[#135135]: https://github.com/home-assistant/core/pull/135135 +[#135138]: https://github.com/home-assistant/core/pull/135138 +[#135143]: https://github.com/home-assistant/core/pull/135143 +[#135148]: https://github.com/home-assistant/core/pull/135148 +[#135153]: https://github.com/home-assistant/core/pull/135153 +[#135162]: https://github.com/home-assistant/core/pull/135162 +[#135171]: https://github.com/home-assistant/core/pull/135171 +[#135172]: https://github.com/home-assistant/core/pull/135172 +[#135176]: https://github.com/home-assistant/core/pull/135176 +[#135177]: https://github.com/home-assistant/core/pull/135177 +[#135178]: https://github.com/home-assistant/core/pull/135178 +[#135181]: https://github.com/home-assistant/core/pull/135181 +[#135182]: https://github.com/home-assistant/core/pull/135182 +[#135183]: https://github.com/home-assistant/core/pull/135183 +[#135186]: https://github.com/home-assistant/core/pull/135186 +[#135187]: https://github.com/home-assistant/core/pull/135187 +[#135194]: https://github.com/home-assistant/core/pull/135194 +[#135197]: https://github.com/home-assistant/core/pull/135197 +[#135199]: https://github.com/home-assistant/core/pull/135199 +[#135202]: https://github.com/home-assistant/core/pull/135202 +[#135205]: https://github.com/home-assistant/core/pull/135205 +[#135206]: https://github.com/home-assistant/core/pull/135206 +[#135209]: https://github.com/home-assistant/core/pull/135209 +[#135213]: https://github.com/home-assistant/core/pull/135213 +[#135214]: https://github.com/home-assistant/core/pull/135214 +[#135220]: https://github.com/home-assistant/core/pull/135220 +[#135224]: https://github.com/home-assistant/core/pull/135224 +[#135225]: https://github.com/home-assistant/core/pull/135225 +[#135227]: https://github.com/home-assistant/core/pull/135227 +[#135228]: https://github.com/home-assistant/core/pull/135228 +[#135229]: https://github.com/home-assistant/core/pull/135229 +[#135232]: https://github.com/home-assistant/core/pull/135232 +[#135234]: https://github.com/home-assistant/core/pull/135234 +[#135236]: https://github.com/home-assistant/core/pull/135236 +[#135237]: https://github.com/home-assistant/core/pull/135237 +[#135244]: https://github.com/home-assistant/core/pull/135244 +[#135248]: https://github.com/home-assistant/core/pull/135248 +[#135254]: https://github.com/home-assistant/core/pull/135254 +[#135255]: https://github.com/home-assistant/core/pull/135255 +[#135256]: https://github.com/home-assistant/core/pull/135256 +[#135257]: https://github.com/home-assistant/core/pull/135257 +[#135260]: https://github.com/home-assistant/core/pull/135260 +[#135261]: https://github.com/home-assistant/core/pull/135261 +[#135263]: https://github.com/home-assistant/core/pull/135263 +[#135264]: https://github.com/home-assistant/core/pull/135264 +[#135265]: https://github.com/home-assistant/core/pull/135265 +[#135267]: https://github.com/home-assistant/core/pull/135267 +[#135268]: https://github.com/home-assistant/core/pull/135268 +[#135269]: https://github.com/home-assistant/core/pull/135269 +[#135271]: https://github.com/home-assistant/core/pull/135271 +[#135277]: https://github.com/home-assistant/core/pull/135277 +[#135279]: https://github.com/home-assistant/core/pull/135279 +[#135281]: https://github.com/home-assistant/core/pull/135281 +[#135283]: https://github.com/home-assistant/core/pull/135283 +[#135285]: https://github.com/home-assistant/core/pull/135285 +[#135292]: https://github.com/home-assistant/core/pull/135292 +[#135294]: https://github.com/home-assistant/core/pull/135294 +[#135295]: https://github.com/home-assistant/core/pull/135295 +[#135299]: https://github.com/home-assistant/core/pull/135299 +[#135301]: https://github.com/home-assistant/core/pull/135301 +[#135303]: https://github.com/home-assistant/core/pull/135303 +[#135305]: https://github.com/home-assistant/core/pull/135305 +[#135306]: https://github.com/home-assistant/core/pull/135306 +[#135309]: https://github.com/home-assistant/core/pull/135309 +[#135312]: https://github.com/home-assistant/core/pull/135312 +[#135315]: https://github.com/home-assistant/core/pull/135315 +[#135320]: https://github.com/home-assistant/core/pull/135320 +[#135322]: https://github.com/home-assistant/core/pull/135322 +[#135323]: https://github.com/home-assistant/core/pull/135323 +[#135328]: https://github.com/home-assistant/core/pull/135328 +[#135331]: https://github.com/home-assistant/core/pull/135331 +[#135336]: https://github.com/home-assistant/core/pull/135336 +[#135337]: https://github.com/home-assistant/core/pull/135337 +[#135344]: https://github.com/home-assistant/core/pull/135344 +[#135347]: https://github.com/home-assistant/core/pull/135347 +[#135348]: https://github.com/home-assistant/core/pull/135348 +[#135349]: https://github.com/home-assistant/core/pull/135349 +[#135350]: https://github.com/home-assistant/core/pull/135350 +[#135353]: https://github.com/home-assistant/core/pull/135353 +[#135357]: https://github.com/home-assistant/core/pull/135357 +[#135359]: https://github.com/home-assistant/core/pull/135359 +[#135360]: https://github.com/home-assistant/core/pull/135360 +[#135362]: https://github.com/home-assistant/core/pull/135362 +[#135368]: https://github.com/home-assistant/core/pull/135368 +[#135370]: https://github.com/home-assistant/core/pull/135370 +[#135377]: https://github.com/home-assistant/core/pull/135377 +[#135382]: https://github.com/home-assistant/core/pull/135382 +[#135383]: https://github.com/home-assistant/core/pull/135383 +[#135384]: https://github.com/home-assistant/core/pull/135384 +[#135396]: https://github.com/home-assistant/core/pull/135396 +[#135397]: https://github.com/home-assistant/core/pull/135397 +[#135398]: https://github.com/home-assistant/core/pull/135398 +[#135399]: https://github.com/home-assistant/core/pull/135399 +[#135400]: https://github.com/home-assistant/core/pull/135400 +[#135408]: https://github.com/home-assistant/core/pull/135408 +[#135415]: https://github.com/home-assistant/core/pull/135415 +[#135419]: https://github.com/home-assistant/core/pull/135419 +[#135423]: https://github.com/home-assistant/core/pull/135423 +[#135426]: https://github.com/home-assistant/core/pull/135426 +[#135431]: https://github.com/home-assistant/core/pull/135431 +[#135433]: https://github.com/home-assistant/core/pull/135433 +[#135441]: https://github.com/home-assistant/core/pull/135441 +[#135445]: https://github.com/home-assistant/core/pull/135445 +[#135447]: https://github.com/home-assistant/core/pull/135447 +[#135448]: https://github.com/home-assistant/core/pull/135448 +[#135449]: https://github.com/home-assistant/core/pull/135449 +[#135454]: https://github.com/home-assistant/core/pull/135454 +[#135455]: https://github.com/home-assistant/core/pull/135455 +[#135457]: https://github.com/home-assistant/core/pull/135457 +[#135458]: https://github.com/home-assistant/core/pull/135458 +[#135465]: https://github.com/home-assistant/core/pull/135465 +[#135470]: https://github.com/home-assistant/core/pull/135470 +[#135472]: https://github.com/home-assistant/core/pull/135472 +[#135475]: https://github.com/home-assistant/core/pull/135475 +[#135492]: https://github.com/home-assistant/core/pull/135492 +[#135497]: https://github.com/home-assistant/core/pull/135497 +[#135500]: https://github.com/home-assistant/core/pull/135500 +[#135506]: https://github.com/home-assistant/core/pull/135506 +[#135509]: https://github.com/home-assistant/core/pull/135509 +[#135510]: https://github.com/home-assistant/core/pull/135510 +[#135512]: https://github.com/home-assistant/core/pull/135512 +[#135514]: https://github.com/home-assistant/core/pull/135514 +[#135518]: https://github.com/home-assistant/core/pull/135518 +[#135520]: https://github.com/home-assistant/core/pull/135520 +[#135521]: https://github.com/home-assistant/core/pull/135521 +[#135523]: https://github.com/home-assistant/core/pull/135523 +[#135524]: https://github.com/home-assistant/core/pull/135524 +[#135525]: https://github.com/home-assistant/core/pull/135525 +[#135530]: https://github.com/home-assistant/core/pull/135530 +[#135536]: https://github.com/home-assistant/core/pull/135536 +[#135537]: https://github.com/home-assistant/core/pull/135537 +[#135538]: https://github.com/home-assistant/core/pull/135538 +[#135543]: https://github.com/home-assistant/core/pull/135543 +[#135545]: https://github.com/home-assistant/core/pull/135545 +[#135546]: https://github.com/home-assistant/core/pull/135546 +[#135547]: https://github.com/home-assistant/core/pull/135547 +[#135548]: https://github.com/home-assistant/core/pull/135548 +[#135550]: https://github.com/home-assistant/core/pull/135550 +[#135551]: https://github.com/home-assistant/core/pull/135551 +[#135562]: https://github.com/home-assistant/core/pull/135562 +[#135563]: https://github.com/home-assistant/core/pull/135563 +[#135564]: https://github.com/home-assistant/core/pull/135564 +[#135571]: https://github.com/home-assistant/core/pull/135571 +[#135574]: https://github.com/home-assistant/core/pull/135574 +[#135575]: https://github.com/home-assistant/core/pull/135575 +[#135576]: https://github.com/home-assistant/core/pull/135576 +[#135577]: https://github.com/home-assistant/core/pull/135577 +[#135578]: https://github.com/home-assistant/core/pull/135578 +[#135579]: https://github.com/home-assistant/core/pull/135579 +[#135581]: https://github.com/home-assistant/core/pull/135581 +[#135582]: https://github.com/home-assistant/core/pull/135582 +[#135583]: https://github.com/home-assistant/core/pull/135583 +[#135585]: https://github.com/home-assistant/core/pull/135585 +[#135586]: https://github.com/home-assistant/core/pull/135586 +[#135588]: https://github.com/home-assistant/core/pull/135588 +[#135589]: https://github.com/home-assistant/core/pull/135589 +[#135591]: https://github.com/home-assistant/core/pull/135591 +[#135595]: https://github.com/home-assistant/core/pull/135595 +[#135601]: https://github.com/home-assistant/core/pull/135601 +[#135603]: https://github.com/home-assistant/core/pull/135603 +[#135606]: https://github.com/home-assistant/core/pull/135606 +[#135611]: https://github.com/home-assistant/core/pull/135611 +[#135612]: https://github.com/home-assistant/core/pull/135612 +[#135614]: https://github.com/home-assistant/core/pull/135614 +[#135615]: https://github.com/home-assistant/core/pull/135615 +[#135618]: https://github.com/home-assistant/core/pull/135618 +[#135620]: https://github.com/home-assistant/core/pull/135620 +[#135622]: https://github.com/home-assistant/core/pull/135622 +[#135625]: https://github.com/home-assistant/core/pull/135625 +[#135626]: https://github.com/home-assistant/core/pull/135626 +[#135628]: https://github.com/home-assistant/core/pull/135628 +[#135631]: https://github.com/home-assistant/core/pull/135631 +[#135633]: https://github.com/home-assistant/core/pull/135633 +[#135635]: https://github.com/home-assistant/core/pull/135635 +[#135636]: https://github.com/home-assistant/core/pull/135636 +[#135638]: https://github.com/home-assistant/core/pull/135638 +[#135645]: https://github.com/home-assistant/core/pull/135645 +[#135647]: https://github.com/home-assistant/core/pull/135647 +[#135649]: https://github.com/home-assistant/core/pull/135649 +[#135650]: https://github.com/home-assistant/core/pull/135650 +[#135653]: https://github.com/home-assistant/core/pull/135653 +[#135654]: https://github.com/home-assistant/core/pull/135654 +[#135658]: https://github.com/home-assistant/core/pull/135658 +[#135659]: https://github.com/home-assistant/core/pull/135659 +[#135660]: https://github.com/home-assistant/core/pull/135660 +[#135661]: https://github.com/home-assistant/core/pull/135661 +[#135662]: https://github.com/home-assistant/core/pull/135662 +[#135663]: https://github.com/home-assistant/core/pull/135663 +[#135667]: https://github.com/home-assistant/core/pull/135667 +[#135670]: https://github.com/home-assistant/core/pull/135670 +[#135672]: https://github.com/home-assistant/core/pull/135672 +[#135674]: https://github.com/home-assistant/core/pull/135674 +[#135676]: https://github.com/home-assistant/core/pull/135676 +[#135680]: https://github.com/home-assistant/core/pull/135680 +[#135681]: https://github.com/home-assistant/core/pull/135681 +[#135682]: https://github.com/home-assistant/core/pull/135682 +[#135685]: https://github.com/home-assistant/core/pull/135685 +[#135687]: https://github.com/home-assistant/core/pull/135687 +[#135688]: https://github.com/home-assistant/core/pull/135688 +[#135689]: https://github.com/home-assistant/core/pull/135689 +[#135690]: https://github.com/home-assistant/core/pull/135690 +[#135691]: https://github.com/home-assistant/core/pull/135691 +[#135692]: https://github.com/home-assistant/core/pull/135692 +[#135693]: https://github.com/home-assistant/core/pull/135693 +[#135694]: https://github.com/home-assistant/core/pull/135694 +[#135695]: https://github.com/home-assistant/core/pull/135695 +[#135696]: https://github.com/home-assistant/core/pull/135696 +[#135697]: https://github.com/home-assistant/core/pull/135697 +[#135698]: https://github.com/home-assistant/core/pull/135698 +[#135699]: https://github.com/home-assistant/core/pull/135699 +[#135700]: https://github.com/home-assistant/core/pull/135700 +[#135702]: https://github.com/home-assistant/core/pull/135702 +[#135703]: https://github.com/home-assistant/core/pull/135703 +[#135704]: https://github.com/home-assistant/core/pull/135704 +[#135705]: https://github.com/home-assistant/core/pull/135705 +[#135707]: https://github.com/home-assistant/core/pull/135707 +[#135708]: https://github.com/home-assistant/core/pull/135708 +[#135709]: https://github.com/home-assistant/core/pull/135709 +[#135711]: https://github.com/home-assistant/core/pull/135711 +[#135712]: https://github.com/home-assistant/core/pull/135712 +[#135714]: https://github.com/home-assistant/core/pull/135714 +[#135715]: https://github.com/home-assistant/core/pull/135715 +[#135716]: https://github.com/home-assistant/core/pull/135716 +[#135718]: https://github.com/home-assistant/core/pull/135718 +[#135719]: https://github.com/home-assistant/core/pull/135719 +[#135720]: https://github.com/home-assistant/core/pull/135720 +[#135721]: https://github.com/home-assistant/core/pull/135721 +[#135722]: https://github.com/home-assistant/core/pull/135722 +[#135723]: https://github.com/home-assistant/core/pull/135723 +[#135724]: https://github.com/home-assistant/core/pull/135724 +[#135725]: https://github.com/home-assistant/core/pull/135725 +[#135726]: https://github.com/home-assistant/core/pull/135726 +[#135727]: https://github.com/home-assistant/core/pull/135727 +[#135728]: https://github.com/home-assistant/core/pull/135728 +[#135729]: https://github.com/home-assistant/core/pull/135729 +[#135733]: https://github.com/home-assistant/core/pull/135733 +[#135734]: https://github.com/home-assistant/core/pull/135734 +[#135743]: https://github.com/home-assistant/core/pull/135743 +[#135746]: https://github.com/home-assistant/core/pull/135746 +[#135747]: https://github.com/home-assistant/core/pull/135747 +[#135749]: https://github.com/home-assistant/core/pull/135749 +[#135750]: https://github.com/home-assistant/core/pull/135750 +[#135751]: https://github.com/home-assistant/core/pull/135751 +[#135752]: https://github.com/home-assistant/core/pull/135752 +[#135757]: https://github.com/home-assistant/core/pull/135757 +[#135760]: https://github.com/home-assistant/core/pull/135760 +[#135762]: https://github.com/home-assistant/core/pull/135762 +[#135765]: https://github.com/home-assistant/core/pull/135765 +[#135767]: https://github.com/home-assistant/core/pull/135767 +[#135770]: https://github.com/home-assistant/core/pull/135770 +[#135773]: https://github.com/home-assistant/core/pull/135773 +[#135777]: https://github.com/home-assistant/core/pull/135777 +[#135778]: https://github.com/home-assistant/core/pull/135778 +[#135780]: https://github.com/home-assistant/core/pull/135780 +[#135781]: https://github.com/home-assistant/core/pull/135781 +[#135784]: https://github.com/home-assistant/core/pull/135784 +[#135786]: https://github.com/home-assistant/core/pull/135786 +[#135787]: https://github.com/home-assistant/core/pull/135787 +[#135788]: https://github.com/home-assistant/core/pull/135788 +[#135792]: https://github.com/home-assistant/core/pull/135792 +[#135795]: https://github.com/home-assistant/core/pull/135795 +[#135797]: https://github.com/home-assistant/core/pull/135797 +[#135798]: https://github.com/home-assistant/core/pull/135798 +[#135799]: https://github.com/home-assistant/core/pull/135799 +[#135800]: https://github.com/home-assistant/core/pull/135800 +[#135801]: https://github.com/home-assistant/core/pull/135801 +[#135802]: https://github.com/home-assistant/core/pull/135802 +[#135804]: https://github.com/home-assistant/core/pull/135804 +[#135805]: https://github.com/home-assistant/core/pull/135805 +[#135806]: https://github.com/home-assistant/core/pull/135806 +[#135807]: https://github.com/home-assistant/core/pull/135807 +[#135808]: https://github.com/home-assistant/core/pull/135808 +[#135809]: https://github.com/home-assistant/core/pull/135809 +[#135812]: https://github.com/home-assistant/core/pull/135812 +[#135815]: https://github.com/home-assistant/core/pull/135815 +[#135817]: https://github.com/home-assistant/core/pull/135817 +[#135818]: https://github.com/home-assistant/core/pull/135818 +[#135822]: https://github.com/home-assistant/core/pull/135822 +[#135825]: https://github.com/home-assistant/core/pull/135825 +[#135830]: https://github.com/home-assistant/core/pull/135830 +[#135832]: https://github.com/home-assistant/core/pull/135832 +[#135833]: https://github.com/home-assistant/core/pull/135833 +[#135835]: https://github.com/home-assistant/core/pull/135835 +[#135836]: https://github.com/home-assistant/core/pull/135836 +[#135838]: https://github.com/home-assistant/core/pull/135838 +[#135842]: https://github.com/home-assistant/core/pull/135842 +[#135846]: https://github.com/home-assistant/core/pull/135846 +[#135847]: https://github.com/home-assistant/core/pull/135847 +[#135852]: https://github.com/home-assistant/core/pull/135852 +[#135856]: https://github.com/home-assistant/core/pull/135856 +[#135858]: https://github.com/home-assistant/core/pull/135858 +[#135861]: https://github.com/home-assistant/core/pull/135861 +[#135869]: https://github.com/home-assistant/core/pull/135869 +[#135871]: https://github.com/home-assistant/core/pull/135871 +[#135872]: https://github.com/home-assistant/core/pull/135872 +[#135874]: https://github.com/home-assistant/core/pull/135874 +[#135875]: https://github.com/home-assistant/core/pull/135875 +[#135877]: https://github.com/home-assistant/core/pull/135877 +[#135878]: https://github.com/home-assistant/core/pull/135878 +[#135879]: https://github.com/home-assistant/core/pull/135879 +[#135882]: https://github.com/home-assistant/core/pull/135882 +[#135883]: https://github.com/home-assistant/core/pull/135883 +[#135886]: https://github.com/home-assistant/core/pull/135886 +[#135887]: https://github.com/home-assistant/core/pull/135887 +[#135889]: https://github.com/home-assistant/core/pull/135889 +[#135891]: https://github.com/home-assistant/core/pull/135891 +[#135896]: https://github.com/home-assistant/core/pull/135896 +[#135899]: https://github.com/home-assistant/core/pull/135899 +[#135901]: https://github.com/home-assistant/core/pull/135901 +[#135902]: https://github.com/home-assistant/core/pull/135902 +[#135903]: https://github.com/home-assistant/core/pull/135903 +[#135904]: https://github.com/home-assistant/core/pull/135904 +[#135905]: https://github.com/home-assistant/core/pull/135905 +[#135909]: https://github.com/home-assistant/core/pull/135909 +[#135910]: https://github.com/home-assistant/core/pull/135910 +[#135911]: https://github.com/home-assistant/core/pull/135911 +[#135913]: https://github.com/home-assistant/core/pull/135913 +[#135915]: https://github.com/home-assistant/core/pull/135915 +[#135917]: https://github.com/home-assistant/core/pull/135917 +[#135918]: https://github.com/home-assistant/core/pull/135918 +[#135919]: https://github.com/home-assistant/core/pull/135919 +[#135921]: https://github.com/home-assistant/core/pull/135921 +[#135927]: https://github.com/home-assistant/core/pull/135927 +[#135928]: https://github.com/home-assistant/core/pull/135928 +[#135929]: https://github.com/home-assistant/core/pull/135929 +[#135930]: https://github.com/home-assistant/core/pull/135930 +[#135932]: https://github.com/home-assistant/core/pull/135932 +[#135939]: https://github.com/home-assistant/core/pull/135939 +[#135940]: https://github.com/home-assistant/core/pull/135940 +[#135948]: https://github.com/home-assistant/core/pull/135948 +[#135949]: https://github.com/home-assistant/core/pull/135949 +[#135950]: https://github.com/home-assistant/core/pull/135950 +[#135953]: https://github.com/home-assistant/core/pull/135953 +[#135954]: https://github.com/home-assistant/core/pull/135954 +[#135957]: https://github.com/home-assistant/core/pull/135957 +[#135961]: https://github.com/home-assistant/core/pull/135961 +[#135962]: https://github.com/home-assistant/core/pull/135962 +[#135963]: https://github.com/home-assistant/core/pull/135963 +[#135974]: https://github.com/home-assistant/core/pull/135974 +[#135975]: https://github.com/home-assistant/core/pull/135975 +[#135978]: https://github.com/home-assistant/core/pull/135978 +[#135981]: https://github.com/home-assistant/core/pull/135981 +[#135982]: https://github.com/home-assistant/core/pull/135982 +[#135985]: https://github.com/home-assistant/core/pull/135985 +[#135986]: https://github.com/home-assistant/core/pull/135986 +[#135988]: https://github.com/home-assistant/core/pull/135988 +[#135990]: https://github.com/home-assistant/core/pull/135990 +[#135991]: https://github.com/home-assistant/core/pull/135991 +[#135992]: https://github.com/home-assistant/core/pull/135992 +[#135998]: https://github.com/home-assistant/core/pull/135998 +[#136000]: https://github.com/home-assistant/core/pull/136000 +[#136004]: https://github.com/home-assistant/core/pull/136004 +[#136006]: https://github.com/home-assistant/core/pull/136006 +[#136009]: https://github.com/home-assistant/core/pull/136009 +[#136012]: https://github.com/home-assistant/core/pull/136012 +[#136016]: https://github.com/home-assistant/core/pull/136016 +[#136020]: https://github.com/home-assistant/core/pull/136020 +[#136027]: https://github.com/home-assistant/core/pull/136027 +[#136037]: https://github.com/home-assistant/core/pull/136037 +[#136038]: https://github.com/home-assistant/core/pull/136038 +[#136040]: https://github.com/home-assistant/core/pull/136040 +[#136041]: https://github.com/home-assistant/core/pull/136041 +[#136042]: https://github.com/home-assistant/core/pull/136042 +[#136045]: https://github.com/home-assistant/core/pull/136045 +[#136048]: https://github.com/home-assistant/core/pull/136048 +[#136049]: https://github.com/home-assistant/core/pull/136049 +[#136051]: https://github.com/home-assistant/core/pull/136051 +[#136053]: https://github.com/home-assistant/core/pull/136053 +[#136057]: https://github.com/home-assistant/core/pull/136057 +[#136058]: https://github.com/home-assistant/core/pull/136058 +[#136062]: https://github.com/home-assistant/core/pull/136062 +[#136063]: https://github.com/home-assistant/core/pull/136063 +[#136064]: https://github.com/home-assistant/core/pull/136064 +[#136065]: https://github.com/home-assistant/core/pull/136065 +[#136067]: https://github.com/home-assistant/core/pull/136067 +[#136071]: https://github.com/home-assistant/core/pull/136071 +[#136078]: https://github.com/home-assistant/core/pull/136078 +[#136079]: https://github.com/home-assistant/core/pull/136079 +[#136082]: https://github.com/home-assistant/core/pull/136082 +[#136084]: https://github.com/home-assistant/core/pull/136084 +[#136085]: https://github.com/home-assistant/core/pull/136085 +[#136086]: https://github.com/home-assistant/core/pull/136086 +[#136088]: https://github.com/home-assistant/core/pull/136088 +[#136089]: https://github.com/home-assistant/core/pull/136089 +[#136090]: https://github.com/home-assistant/core/pull/136090 +[#136094]: https://github.com/home-assistant/core/pull/136094 +[#136096]: https://github.com/home-assistant/core/pull/136096 +[#136097]: https://github.com/home-assistant/core/pull/136097 +[#136099]: https://github.com/home-assistant/core/pull/136099 +[#136102]: https://github.com/home-assistant/core/pull/136102 +[#136104]: https://github.com/home-assistant/core/pull/136104 +[#136105]: https://github.com/home-assistant/core/pull/136105 +[#136106]: https://github.com/home-assistant/core/pull/136106 +[#136108]: https://github.com/home-assistant/core/pull/136108 +[#136110]: https://github.com/home-assistant/core/pull/136110 +[#136113]: https://github.com/home-assistant/core/pull/136113 +[#136114]: https://github.com/home-assistant/core/pull/136114 +[#136120]: https://github.com/home-assistant/core/pull/136120 +[#136123]: https://github.com/home-assistant/core/pull/136123 +[#136133]: https://github.com/home-assistant/core/pull/136133 +[#136134]: https://github.com/home-assistant/core/pull/136134 +[#136136]: https://github.com/home-assistant/core/pull/136136 +[#136140]: https://github.com/home-assistant/core/pull/136140 +[#136141]: https://github.com/home-assistant/core/pull/136141 +[#136142]: https://github.com/home-assistant/core/pull/136142 +[#136145]: https://github.com/home-assistant/core/pull/136145 +[#136146]: https://github.com/home-assistant/core/pull/136146 +[#136147]: https://github.com/home-assistant/core/pull/136147 +[#136148]: https://github.com/home-assistant/core/pull/136148 +[#136149]: https://github.com/home-assistant/core/pull/136149 +[#136150]: https://github.com/home-assistant/core/pull/136150 +[#136152]: https://github.com/home-assistant/core/pull/136152 +[#136153]: https://github.com/home-assistant/core/pull/136153 +[#136154]: https://github.com/home-assistant/core/pull/136154 +[#136155]: https://github.com/home-assistant/core/pull/136155 +[#136157]: https://github.com/home-assistant/core/pull/136157 +[#136159]: https://github.com/home-assistant/core/pull/136159 +[#136160]: https://github.com/home-assistant/core/pull/136160 +[#136164]: https://github.com/home-assistant/core/pull/136164 +[#136166]: https://github.com/home-assistant/core/pull/136166 +[#136169]: https://github.com/home-assistant/core/pull/136169 +[#136170]: https://github.com/home-assistant/core/pull/136170 +[#136172]: https://github.com/home-assistant/core/pull/136172 +[#136174]: https://github.com/home-assistant/core/pull/136174 +[#136177]: https://github.com/home-assistant/core/pull/136177 +[#136178]: https://github.com/home-assistant/core/pull/136178 +[#136180]: https://github.com/home-assistant/core/pull/136180 +[#136188]: https://github.com/home-assistant/core/pull/136188 +[#136190]: https://github.com/home-assistant/core/pull/136190 +[#136191]: https://github.com/home-assistant/core/pull/136191 +[#136194]: https://github.com/home-assistant/core/pull/136194 +[#136195]: https://github.com/home-assistant/core/pull/136195 +[#136196]: https://github.com/home-assistant/core/pull/136196 +[#136197]: https://github.com/home-assistant/core/pull/136197 +[#136198]: https://github.com/home-assistant/core/pull/136198 +[#136199]: https://github.com/home-assistant/core/pull/136199 +[#136200]: https://github.com/home-assistant/core/pull/136200 +[#136201]: https://github.com/home-assistant/core/pull/136201 +[#136202]: https://github.com/home-assistant/core/pull/136202 +[#136203]: https://github.com/home-assistant/core/pull/136203 +[#136205]: https://github.com/home-assistant/core/pull/136205 +[#136206]: https://github.com/home-assistant/core/pull/136206 +[#136210]: https://github.com/home-assistant/core/pull/136210 +[#136211]: https://github.com/home-assistant/core/pull/136211 +[#136212]: https://github.com/home-assistant/core/pull/136212 +[#136213]: https://github.com/home-assistant/core/pull/136213 +[#136214]: https://github.com/home-assistant/core/pull/136214 +[#136215]: https://github.com/home-assistant/core/pull/136215 +[#136220]: https://github.com/home-assistant/core/pull/136220 +[#136221]: https://github.com/home-assistant/core/pull/136221 +[#136225]: https://github.com/home-assistant/core/pull/136225 +[#136228]: https://github.com/home-assistant/core/pull/136228 +[#136230]: https://github.com/home-assistant/core/pull/136230 +[#136231]: https://github.com/home-assistant/core/pull/136231 +[#136233]: https://github.com/home-assistant/core/pull/136233 +[#136235]: https://github.com/home-assistant/core/pull/136235 +[#136241]: https://github.com/home-assistant/core/pull/136241 +[#136243]: https://github.com/home-assistant/core/pull/136243 +[#136247]: https://github.com/home-assistant/core/pull/136247 +[#136248]: https://github.com/home-assistant/core/pull/136248 +[#136251]: https://github.com/home-assistant/core/pull/136251 +[#136253]: https://github.com/home-assistant/core/pull/136253 +[#136258]: https://github.com/home-assistant/core/pull/136258 +[#136259]: https://github.com/home-assistant/core/pull/136259 +[#136260]: https://github.com/home-assistant/core/pull/136260 +[#136261]: https://github.com/home-assistant/core/pull/136261 +[#136265]: https://github.com/home-assistant/core/pull/136265 +[#136267]: https://github.com/home-assistant/core/pull/136267 +[#136270]: https://github.com/home-assistant/core/pull/136270 +[#136271]: https://github.com/home-assistant/core/pull/136271 +[#136277]: https://github.com/home-assistant/core/pull/136277 +[#136279]: https://github.com/home-assistant/core/pull/136279 +[#136280]: https://github.com/home-assistant/core/pull/136280 +[#136281]: https://github.com/home-assistant/core/pull/136281 +[#136282]: https://github.com/home-assistant/core/pull/136282 +[#136283]: https://github.com/home-assistant/core/pull/136283 +[#136285]: https://github.com/home-assistant/core/pull/136285 +[#136287]: https://github.com/home-assistant/core/pull/136287 +[#136289]: https://github.com/home-assistant/core/pull/136289 +[#136290]: https://github.com/home-assistant/core/pull/136290 +[#136291]: https://github.com/home-assistant/core/pull/136291 +[#136292]: https://github.com/home-assistant/core/pull/136292 +[#136294]: https://github.com/home-assistant/core/pull/136294 +[#136299]: https://github.com/home-assistant/core/pull/136299 +[#136300]: https://github.com/home-assistant/core/pull/136300 +[#136301]: https://github.com/home-assistant/core/pull/136301 +[#136302]: https://github.com/home-assistant/core/pull/136302 +[#136303]: https://github.com/home-assistant/core/pull/136303 +[#136304]: https://github.com/home-assistant/core/pull/136304 +[#136306]: https://github.com/home-assistant/core/pull/136306 +[#136307]: https://github.com/home-assistant/core/pull/136307 +[#136308]: https://github.com/home-assistant/core/pull/136308 +[#136309]: https://github.com/home-assistant/core/pull/136309 +[#136312]: https://github.com/home-assistant/core/pull/136312 +[#136313]: https://github.com/home-assistant/core/pull/136313 +[#136314]: https://github.com/home-assistant/core/pull/136314 +[#136316]: https://github.com/home-assistant/core/pull/136316 +[#136317]: https://github.com/home-assistant/core/pull/136317 +[#136318]: https://github.com/home-assistant/core/pull/136318 +[#136322]: https://github.com/home-assistant/core/pull/136322 +[#136323]: https://github.com/home-assistant/core/pull/136323 +[#136324]: https://github.com/home-assistant/core/pull/136324 +[#136327]: https://github.com/home-assistant/core/pull/136327 +[#136335]: https://github.com/home-assistant/core/pull/136335 +[#136336]: https://github.com/home-assistant/core/pull/136336 +[#136338]: https://github.com/home-assistant/core/pull/136338 +[#136343]: https://github.com/home-assistant/core/pull/136343 +[#136349]: https://github.com/home-assistant/core/pull/136349 +[#136354]: https://github.com/home-assistant/core/pull/136354 +[#136356]: https://github.com/home-assistant/core/pull/136356 +[#136357]: https://github.com/home-assistant/core/pull/136357 +[#136358]: https://github.com/home-assistant/core/pull/136358 +[#136360]: https://github.com/home-assistant/core/pull/136360 +[#136363]: https://github.com/home-assistant/core/pull/136363 +[#136365]: https://github.com/home-assistant/core/pull/136365 +[#136374]: https://github.com/home-assistant/core/pull/136374 +[#136376]: https://github.com/home-assistant/core/pull/136376 +[#136377]: https://github.com/home-assistant/core/pull/136377 +[#136378]: https://github.com/home-assistant/core/pull/136378 +[#136379]: https://github.com/home-assistant/core/pull/136379 +[#136380]: https://github.com/home-assistant/core/pull/136380 +[#136381]: https://github.com/home-assistant/core/pull/136381 +[#136382]: https://github.com/home-assistant/core/pull/136382 +[#136384]: https://github.com/home-assistant/core/pull/136384 +[#136386]: https://github.com/home-assistant/core/pull/136386 +[#136389]: https://github.com/home-assistant/core/pull/136389 +[#136397]: https://github.com/home-assistant/core/pull/136397 +[#136398]: https://github.com/home-assistant/core/pull/136398 +[#136401]: https://github.com/home-assistant/core/pull/136401 +[#136402]: https://github.com/home-assistant/core/pull/136402 +[#136403]: https://github.com/home-assistant/core/pull/136403 +[#136405]: https://github.com/home-assistant/core/pull/136405 +[#136406]: https://github.com/home-assistant/core/pull/136406 +[#136409]: https://github.com/home-assistant/core/pull/136409 +[#136410]: https://github.com/home-assistant/core/pull/136410 +[#136411]: https://github.com/home-assistant/core/pull/136411 +[#136412]: https://github.com/home-assistant/core/pull/136412 +[#136413]: https://github.com/home-assistant/core/pull/136413 +[#136414]: https://github.com/home-assistant/core/pull/136414 +[#136416]: https://github.com/home-assistant/core/pull/136416 +[#136418]: https://github.com/home-assistant/core/pull/136418 +[#136421]: https://github.com/home-assistant/core/pull/136421 +[#136422]: https://github.com/home-assistant/core/pull/136422 +[#136424]: https://github.com/home-assistant/core/pull/136424 +[#136426]: https://github.com/home-assistant/core/pull/136426 +[#136430]: https://github.com/home-assistant/core/pull/136430 +[#136432]: https://github.com/home-assistant/core/pull/136432 +[#136433]: https://github.com/home-assistant/core/pull/136433 +[#136434]: https://github.com/home-assistant/core/pull/136434 +[#136435]: https://github.com/home-assistant/core/pull/136435 +[#136437]: https://github.com/home-assistant/core/pull/136437 +[#136438]: https://github.com/home-assistant/core/pull/136438 +[#136440]: https://github.com/home-assistant/core/pull/136440 +[#136441]: https://github.com/home-assistant/core/pull/136441 +[#136442]: https://github.com/home-assistant/core/pull/136442 +[#136443]: https://github.com/home-assistant/core/pull/136443 +[#136444]: https://github.com/home-assistant/core/pull/136444 +[#136445]: https://github.com/home-assistant/core/pull/136445 +[#136446]: https://github.com/home-assistant/core/pull/136446 +[#136448]: https://github.com/home-assistant/core/pull/136448 +[#136453]: https://github.com/home-assistant/core/pull/136453 +[#136456]: https://github.com/home-assistant/core/pull/136456 +[#136457]: https://github.com/home-assistant/core/pull/136457 +[#136461]: https://github.com/home-assistant/core/pull/136461 +[#136462]: https://github.com/home-assistant/core/pull/136462 +[#136464]: https://github.com/home-assistant/core/pull/136464 +[#136465]: https://github.com/home-assistant/core/pull/136465 +[#136467]: https://github.com/home-assistant/core/pull/136467 +[#136470]: https://github.com/home-assistant/core/pull/136470 +[#136475]: https://github.com/home-assistant/core/pull/136475 +[#136481]: https://github.com/home-assistant/core/pull/136481 +[#136483]: https://github.com/home-assistant/core/pull/136483 +[#136484]: https://github.com/home-assistant/core/pull/136484 +[#136485]: https://github.com/home-assistant/core/pull/136485 +[#136486]: https://github.com/home-assistant/core/pull/136486 +[#136487]: https://github.com/home-assistant/core/pull/136487 +[#136488]: https://github.com/home-assistant/core/pull/136488 +[#136489]: https://github.com/home-assistant/core/pull/136489 +[#136490]: https://github.com/home-assistant/core/pull/136490 +[#136491]: https://github.com/home-assistant/core/pull/136491 +[#136492]: https://github.com/home-assistant/core/pull/136492 +[#136493]: https://github.com/home-assistant/core/pull/136493 +[#136496]: https://github.com/home-assistant/core/pull/136496 +[#136497]: https://github.com/home-assistant/core/pull/136497 +[#136504]: https://github.com/home-assistant/core/pull/136504 +[#136505]: https://github.com/home-assistant/core/pull/136505 +[#136506]: https://github.com/home-assistant/core/pull/136506 +[#136510]: https://github.com/home-assistant/core/pull/136510 +[#136511]: https://github.com/home-assistant/core/pull/136511 +[#136514]: https://github.com/home-assistant/core/pull/136514 +[#136516]: https://github.com/home-assistant/core/pull/136516 +[#136521]: https://github.com/home-assistant/core/pull/136521 +[#136522]: https://github.com/home-assistant/core/pull/136522 +[#136523]: https://github.com/home-assistant/core/pull/136523 +[#136524]: https://github.com/home-assistant/core/pull/136524 +[#136528]: https://github.com/home-assistant/core/pull/136528 +[#136529]: https://github.com/home-assistant/core/pull/136529 +[#136533]: https://github.com/home-assistant/core/pull/136533 +[#136536]: https://github.com/home-assistant/core/pull/136536 +[#136538]: https://github.com/home-assistant/core/pull/136538 +[#136539]: https://github.com/home-assistant/core/pull/136539 +[#136544]: https://github.com/home-assistant/core/pull/136544 +[#136546]: https://github.com/home-assistant/core/pull/136546 +[#136547]: https://github.com/home-assistant/core/pull/136547 +[#136549]: https://github.com/home-assistant/core/pull/136549 +[#136555]: https://github.com/home-assistant/core/pull/136555 +[#136561]: https://github.com/home-assistant/core/pull/136561 +[#136562]: https://github.com/home-assistant/core/pull/136562 +[#136563]: https://github.com/home-assistant/core/pull/136563 +[#136566]: https://github.com/home-assistant/core/pull/136566 +[#136567]: https://github.com/home-assistant/core/pull/136567 +[#136569]: https://github.com/home-assistant/core/pull/136569 +[#136570]: https://github.com/home-assistant/core/pull/136570 +[#136572]: https://github.com/home-assistant/core/pull/136572 +[#136573]: https://github.com/home-assistant/core/pull/136573 +[#136576]: https://github.com/home-assistant/core/pull/136576 +[#136577]: https://github.com/home-assistant/core/pull/136577 +[#136578]: https://github.com/home-assistant/core/pull/136578 +[#136580]: https://github.com/home-assistant/core/pull/136580 +[#136581]: https://github.com/home-assistant/core/pull/136581 +[#136583]: https://github.com/home-assistant/core/pull/136583 +[#136585]: https://github.com/home-assistant/core/pull/136585 +[#136586]: https://github.com/home-assistant/core/pull/136586 +[#136587]: https://github.com/home-assistant/core/pull/136587 +[#136589]: https://github.com/home-assistant/core/pull/136589 +[#136590]: https://github.com/home-assistant/core/pull/136590 +[#136591]: https://github.com/home-assistant/core/pull/136591 +[#136593]: https://github.com/home-assistant/core/pull/136593 +[#136596]: https://github.com/home-assistant/core/pull/136596 +[#136601]: https://github.com/home-assistant/core/pull/136601 +[#136602]: https://github.com/home-assistant/core/pull/136602 +[#136604]: https://github.com/home-assistant/core/pull/136604 +[#136609]: https://github.com/home-assistant/core/pull/136609 +[#136611]: https://github.com/home-assistant/core/pull/136611 +[#136612]: https://github.com/home-assistant/core/pull/136612 +[#136613]: https://github.com/home-assistant/core/pull/136613 +[#136614]: https://github.com/home-assistant/core/pull/136614 +[#136617]: https://github.com/home-assistant/core/pull/136617 +[#136618]: https://github.com/home-assistant/core/pull/136618 +[#136619]: https://github.com/home-assistant/core/pull/136619 +[#136621]: https://github.com/home-assistant/core/pull/136621 +[#136622]: https://github.com/home-assistant/core/pull/136622 +[#136625]: https://github.com/home-assistant/core/pull/136625 +[#136626]: https://github.com/home-assistant/core/pull/136626 +[#136627]: https://github.com/home-assistant/core/pull/136627 +[#136629]: https://github.com/home-assistant/core/pull/136629 +[#136631]: https://github.com/home-assistant/core/pull/136631 +[#136632]: https://github.com/home-assistant/core/pull/136632 +[#136633]: https://github.com/home-assistant/core/pull/136633 +[#136635]: https://github.com/home-assistant/core/pull/136635 +[#136639]: https://github.com/home-assistant/core/pull/136639 +[#136642]: https://github.com/home-assistant/core/pull/136642 +[#136643]: https://github.com/home-assistant/core/pull/136643 +[#136644]: https://github.com/home-assistant/core/pull/136644 +[#136645]: https://github.com/home-assistant/core/pull/136645 +[#136648]: https://github.com/home-assistant/core/pull/136648 +[#136649]: https://github.com/home-assistant/core/pull/136649 +[#136651]: https://github.com/home-assistant/core/pull/136651 +[#136652]: https://github.com/home-assistant/core/pull/136652 +[#136657]: https://github.com/home-assistant/core/pull/136657 +[#136658]: https://github.com/home-assistant/core/pull/136658 +[#136661]: https://github.com/home-assistant/core/pull/136661 +[#136663]: https://github.com/home-assistant/core/pull/136663 +[#136666]: https://github.com/home-assistant/core/pull/136666 +[#136668]: https://github.com/home-assistant/core/pull/136668 +[#136676]: https://github.com/home-assistant/core/pull/136676 +[#136679]: https://github.com/home-assistant/core/pull/136679 +[#136680]: https://github.com/home-assistant/core/pull/136680 +[#136684]: https://github.com/home-assistant/core/pull/136684 +[#136685]: https://github.com/home-assistant/core/pull/136685 +[#136686]: https://github.com/home-assistant/core/pull/136686 +[#136688]: https://github.com/home-assistant/core/pull/136688 +[#136689]: https://github.com/home-assistant/core/pull/136689 +[#136690]: https://github.com/home-assistant/core/pull/136690 +[#136691]: https://github.com/home-assistant/core/pull/136691 +[#136693]: https://github.com/home-assistant/core/pull/136693 +[#136694]: https://github.com/home-assistant/core/pull/136694 +[#136696]: https://github.com/home-assistant/core/pull/136696 +[#136697]: https://github.com/home-assistant/core/pull/136697 +[#136699]: https://github.com/home-assistant/core/pull/136699 +[#136701]: https://github.com/home-assistant/core/pull/136701 +[#136702]: https://github.com/home-assistant/core/pull/136702 +[#136703]: https://github.com/home-assistant/core/pull/136703 +[#136704]: https://github.com/home-assistant/core/pull/136704 +[#136705]: https://github.com/home-assistant/core/pull/136705 +[#136706]: https://github.com/home-assistant/core/pull/136706 +[#136707]: https://github.com/home-assistant/core/pull/136707 +[#136708]: https://github.com/home-assistant/core/pull/136708 +[#136709]: https://github.com/home-assistant/core/pull/136709 +[#136712]: https://github.com/home-assistant/core/pull/136712 +[#136717]: https://github.com/home-assistant/core/pull/136717 +[#136718]: https://github.com/home-assistant/core/pull/136718 +[#136719]: https://github.com/home-assistant/core/pull/136719 +[#136723]: https://github.com/home-assistant/core/pull/136723 +[#136727]: https://github.com/home-assistant/core/pull/136727 +[#136730]: https://github.com/home-assistant/core/pull/136730 +[#136731]: https://github.com/home-assistant/core/pull/136731 +[#136732]: https://github.com/home-assistant/core/pull/136732 +[#136733]: https://github.com/home-assistant/core/pull/136733 +[#136734]: https://github.com/home-assistant/core/pull/136734 +[#136735]: https://github.com/home-assistant/core/pull/136735 +[#136736]: https://github.com/home-assistant/core/pull/136736 +[#136738]: https://github.com/home-assistant/core/pull/136738 +[#136739]: https://github.com/home-assistant/core/pull/136739 +[#136741]: https://github.com/home-assistant/core/pull/136741 +[#136743]: https://github.com/home-assistant/core/pull/136743 +[#136744]: https://github.com/home-assistant/core/pull/136744 +[#136745]: https://github.com/home-assistant/core/pull/136745 +[#136748]: https://github.com/home-assistant/core/pull/136748 +[#136749]: https://github.com/home-assistant/core/pull/136749 +[#136750]: https://github.com/home-assistant/core/pull/136750 +[#136751]: https://github.com/home-assistant/core/pull/136751 +[#136752]: https://github.com/home-assistant/core/pull/136752 +[#136753]: https://github.com/home-assistant/core/pull/136753 +[#136759]: https://github.com/home-assistant/core/pull/136759 +[#136762]: https://github.com/home-assistant/core/pull/136762 +[#136763]: https://github.com/home-assistant/core/pull/136763 +[#136764]: https://github.com/home-assistant/core/pull/136764 +[#136765]: https://github.com/home-assistant/core/pull/136765 +[#136766]: https://github.com/home-assistant/core/pull/136766 +[#136767]: https://github.com/home-assistant/core/pull/136767 +[#136769]: https://github.com/home-assistant/core/pull/136769 +[#136770]: https://github.com/home-assistant/core/pull/136770 +[#136772]: https://github.com/home-assistant/core/pull/136772 +[#136773]: https://github.com/home-assistant/core/pull/136773 +[#136774]: https://github.com/home-assistant/core/pull/136774 +[#136775]: https://github.com/home-assistant/core/pull/136775 +[#136777]: https://github.com/home-assistant/core/pull/136777 +[#136779]: https://github.com/home-assistant/core/pull/136779 +[#136780]: https://github.com/home-assistant/core/pull/136780 +[#136781]: https://github.com/home-assistant/core/pull/136781 +[#136782]: https://github.com/home-assistant/core/pull/136782 +[#136784]: https://github.com/home-assistant/core/pull/136784 +[#136785]: https://github.com/home-assistant/core/pull/136785 +[#136786]: https://github.com/home-assistant/core/pull/136786 +[#136787]: https://github.com/home-assistant/core/pull/136787 +[#136791]: https://github.com/home-assistant/core/pull/136791 +[#136793]: https://github.com/home-assistant/core/pull/136793 +[#136794]: https://github.com/home-assistant/core/pull/136794 +[#136795]: https://github.com/home-assistant/core/pull/136795 +[#136797]: https://github.com/home-assistant/core/pull/136797 +[#136798]: https://github.com/home-assistant/core/pull/136798 +[#136799]: https://github.com/home-assistant/core/pull/136799 +[#136801]: https://github.com/home-assistant/core/pull/136801 +[#136803]: https://github.com/home-assistant/core/pull/136803 +[#136805]: https://github.com/home-assistant/core/pull/136805 +[#136806]: https://github.com/home-assistant/core/pull/136806 +[#136807]: https://github.com/home-assistant/core/pull/136807 +[#136810]: https://github.com/home-assistant/core/pull/136810 +[#136811]: https://github.com/home-assistant/core/pull/136811 +[#136813]: https://github.com/home-assistant/core/pull/136813 +[#136814]: https://github.com/home-assistant/core/pull/136814 +[#136816]: https://github.com/home-assistant/core/pull/136816 +[#136817]: https://github.com/home-assistant/core/pull/136817 +[#136818]: https://github.com/home-assistant/core/pull/136818 +[#136819]: https://github.com/home-assistant/core/pull/136819 +[#136821]: https://github.com/home-assistant/core/pull/136821 +[#136823]: https://github.com/home-assistant/core/pull/136823 +[#136824]: https://github.com/home-assistant/core/pull/136824 +[#136825]: https://github.com/home-assistant/core/pull/136825 +[#136826]: https://github.com/home-assistant/core/pull/136826 +[#136827]: https://github.com/home-assistant/core/pull/136827 +[#136828]: https://github.com/home-assistant/core/pull/136828 +[#136829]: https://github.com/home-assistant/core/pull/136829 +[#136830]: https://github.com/home-assistant/core/pull/136830 +[#136831]: https://github.com/home-assistant/core/pull/136831 +[#136832]: https://github.com/home-assistant/core/pull/136832 +[#136833]: https://github.com/home-assistant/core/pull/136833 +[#136834]: https://github.com/home-assistant/core/pull/136834 +[#136835]: https://github.com/home-assistant/core/pull/136835 +[#136836]: https://github.com/home-assistant/core/pull/136836 +[#136838]: https://github.com/home-assistant/core/pull/136838 +[#136842]: https://github.com/home-assistant/core/pull/136842 +[#136843]: https://github.com/home-assistant/core/pull/136843 +[#136844]: https://github.com/home-assistant/core/pull/136844 +[#136845]: https://github.com/home-assistant/core/pull/136845 +[#136850]: https://github.com/home-assistant/core/pull/136850 +[#136851]: https://github.com/home-assistant/core/pull/136851 +[#136852]: https://github.com/home-assistant/core/pull/136852 +[#136854]: https://github.com/home-assistant/core/pull/136854 +[#136856]: https://github.com/home-assistant/core/pull/136856 +[#136857]: https://github.com/home-assistant/core/pull/136857 +[#136858]: https://github.com/home-assistant/core/pull/136858 +[#136861]: https://github.com/home-assistant/core/pull/136861 +[#136862]: https://github.com/home-assistant/core/pull/136862 +[#136870]: https://github.com/home-assistant/core/pull/136870 +[#136872]: https://github.com/home-assistant/core/pull/136872 +[#136883]: https://github.com/home-assistant/core/pull/136883 +[#136884]: https://github.com/home-assistant/core/pull/136884 +[#136888]: https://github.com/home-assistant/core/pull/136888 +[#136889]: https://github.com/home-assistant/core/pull/136889 +[#136891]: https://github.com/home-assistant/core/pull/136891 +[#136892]: https://github.com/home-assistant/core/pull/136892 +[#136893]: https://github.com/home-assistant/core/pull/136893 +[#136898]: https://github.com/home-assistant/core/pull/136898 +[#136906]: https://github.com/home-assistant/core/pull/136906 +[#136907]: https://github.com/home-assistant/core/pull/136907 +[#136910]: https://github.com/home-assistant/core/pull/136910 +[#136911]: https://github.com/home-assistant/core/pull/136911 +[#136912]: https://github.com/home-assistant/core/pull/136912 +[#136913]: https://github.com/home-assistant/core/pull/136913 +[#136916]: https://github.com/home-assistant/core/pull/136916 +[#136925]: https://github.com/home-assistant/core/pull/136925 +[#136926]: https://github.com/home-assistant/core/pull/136926 +[#136927]: https://github.com/home-assistant/core/pull/136927 +[#136928]: https://github.com/home-assistant/core/pull/136928 +[#136929]: https://github.com/home-assistant/core/pull/136929 +[#136930]: https://github.com/home-assistant/core/pull/136930 +[#136931]: https://github.com/home-assistant/core/pull/136931 +[#136932]: https://github.com/home-assistant/core/pull/136932 +[#136937]: https://github.com/home-assistant/core/pull/136937 +[#136940]: https://github.com/home-assistant/core/pull/136940 +[#136942]: https://github.com/home-assistant/core/pull/136942 +[#136954]: https://github.com/home-assistant/core/pull/136954 +[#136958]: https://github.com/home-assistant/core/pull/136958 +[#136973]: https://github.com/home-assistant/core/pull/136973 +[#136977]: https://github.com/home-assistant/core/pull/136977 +[#136980]: https://github.com/home-assistant/core/pull/136980 +[#136982]: https://github.com/home-assistant/core/pull/136982 +[#136990]: https://github.com/home-assistant/core/pull/136990 +[#136995]: https://github.com/home-assistant/core/pull/136995 +[#136997]: https://github.com/home-assistant/core/pull/136997 +[#136998]: https://github.com/home-assistant/core/pull/136998 +[#137001]: https://github.com/home-assistant/core/pull/137001 +[#137010]: https://github.com/home-assistant/core/pull/137010 +[#137018]: https://github.com/home-assistant/core/pull/137018 +[#137020]: https://github.com/home-assistant/core/pull/137020 +[#137022]: https://github.com/home-assistant/core/pull/137022 +[#137024]: https://github.com/home-assistant/core/pull/137024 +[#137025]: https://github.com/home-assistant/core/pull/137025 +[#137028]: https://github.com/home-assistant/core/pull/137028 +[#137030]: https://github.com/home-assistant/core/pull/137030 +[#137031]: https://github.com/home-assistant/core/pull/137031 +[#137032]: https://github.com/home-assistant/core/pull/137032 +[#137035]: https://github.com/home-assistant/core/pull/137035 +[#137036]: https://github.com/home-assistant/core/pull/137036 +[#137040]: https://github.com/home-assistant/core/pull/137040 +[#137045]: https://github.com/home-assistant/core/pull/137045 +[#137049]: https://github.com/home-assistant/core/pull/137049 +[#137051]: https://github.com/home-assistant/core/pull/137051 +[#137052]: https://github.com/home-assistant/core/pull/137052 +[#137056]: https://github.com/home-assistant/core/pull/137056 +[#137058]: https://github.com/home-assistant/core/pull/137058 +[#137061]: https://github.com/home-assistant/core/pull/137061 +[#137063]: https://github.com/home-assistant/core/pull/137063 +[#137064]: https://github.com/home-assistant/core/pull/137064 +[#137067]: https://github.com/home-assistant/core/pull/137067 +[#137075]: https://github.com/home-assistant/core/pull/137075 +[#137091]: https://github.com/home-assistant/core/pull/137091 +[#137102]: https://github.com/home-assistant/core/pull/137102 +[#137103]: https://github.com/home-assistant/core/pull/137103 +[#137104]: https://github.com/home-assistant/core/pull/137104 +[#137105]: https://github.com/home-assistant/core/pull/137105 +[#137106]: https://github.com/home-assistant/core/pull/137106 +[#137107]: https://github.com/home-assistant/core/pull/137107 +[#137109]: https://github.com/home-assistant/core/pull/137109 +[#137110]: https://github.com/home-assistant/core/pull/137110 +[#137111]: https://github.com/home-assistant/core/pull/137111 +[#137113]: https://github.com/home-assistant/core/pull/137113 +[#137115]: https://github.com/home-assistant/core/pull/137115 +[#137121]: https://github.com/home-assistant/core/pull/137121 +[#137123]: https://github.com/home-assistant/core/pull/137123 +[#137126]: https://github.com/home-assistant/core/pull/137126 +[#137129]: https://github.com/home-assistant/core/pull/137129 +[#137132]: https://github.com/home-assistant/core/pull/137132 +[#137133]: https://github.com/home-assistant/core/pull/137133 +[#137136]: https://github.com/home-assistant/core/pull/137136 +[#137137]: https://github.com/home-assistant/core/pull/137137 +[#137147]: https://github.com/home-assistant/core/pull/137147 +[#137148]: https://github.com/home-assistant/core/pull/137148 +[#137151]: https://github.com/home-assistant/core/pull/137151 +[#137158]: https://github.com/home-assistant/core/pull/137158 +[#137168]: https://github.com/home-assistant/core/pull/137168 +[#137169]: https://github.com/home-assistant/core/pull/137169 +[#137173]: https://github.com/home-assistant/core/pull/137173 +[#137176]: https://github.com/home-assistant/core/pull/137176 +[#137180]: https://github.com/home-assistant/core/pull/137180 +[#137188]: https://github.com/home-assistant/core/pull/137188 +[#137199]: https://github.com/home-assistant/core/pull/137199 +[#137204]: https://github.com/home-assistant/core/pull/137204 +[#137205]: https://github.com/home-assistant/core/pull/137205 +[#137206]: https://github.com/home-assistant/core/pull/137206 +[#137208]: https://github.com/home-assistant/core/pull/137208 +[#137217]: https://github.com/home-assistant/core/pull/137217 +[#137220]: https://github.com/home-assistant/core/pull/137220 +[#137230]: https://github.com/home-assistant/core/pull/137230 +[#137239]: https://github.com/home-assistant/core/pull/137239 +[#137244]: https://github.com/home-assistant/core/pull/137244 +[#137252]: https://github.com/home-assistant/core/pull/137252 +[#137253]: https://github.com/home-assistant/core/pull/137253 +[#137257]: https://github.com/home-assistant/core/pull/137257 +[#137261]: https://github.com/home-assistant/core/pull/137261 +[#137263]: https://github.com/home-assistant/core/pull/137263 +[#137264]: https://github.com/home-assistant/core/pull/137264 +[#137278]: https://github.com/home-assistant/core/pull/137278 +[#137295]: https://github.com/home-assistant/core/pull/137295 +[#137296]: https://github.com/home-assistant/core/pull/137296 +[#137299]: https://github.com/home-assistant/core/pull/137299 +[#137301]: https://github.com/home-assistant/core/pull/137301 +[#137303]: https://github.com/home-assistant/core/pull/137303 +[#137309]: https://github.com/home-assistant/core/pull/137309 +[#137313]: https://github.com/home-assistant/core/pull/137313 +[#137315]: https://github.com/home-assistant/core/pull/137315 +[#137324]: https://github.com/home-assistant/core/pull/137324 +[#137330]: https://github.com/home-assistant/core/pull/137330 +[#137331]: https://github.com/home-assistant/core/pull/137331 +[#137334]: https://github.com/home-assistant/core/pull/137334 +[#137337]: https://github.com/home-assistant/core/pull/137337 +[#137338]: https://github.com/home-assistant/core/pull/137338 +[#137340]: https://github.com/home-assistant/core/pull/137340 +[#137342]: https://github.com/home-assistant/core/pull/137342 +[#137343]: https://github.com/home-assistant/core/pull/137343 +[#137346]: https://github.com/home-assistant/core/pull/137346 +[#137347]: https://github.com/home-assistant/core/pull/137347 +[#137353]: https://github.com/home-assistant/core/pull/137353 +[#137355]: https://github.com/home-assistant/core/pull/137355 +[#137359]: https://github.com/home-assistant/core/pull/137359 +[#137360]: https://github.com/home-assistant/core/pull/137360 +[#137361]: https://github.com/home-assistant/core/pull/137361 +[#137364]: https://github.com/home-assistant/core/pull/137364 +[#137369]: https://github.com/home-assistant/core/pull/137369 +[#137373]: https://github.com/home-assistant/core/pull/137373 +[#137374]: https://github.com/home-assistant/core/pull/137374 +[#137379]: https://github.com/home-assistant/core/pull/137379 +[#137390]: https://github.com/home-assistant/core/pull/137390 +[#137393]: https://github.com/home-assistant/core/pull/137393 +[#137402]: https://github.com/home-assistant/core/pull/137402 +[#137409]: https://github.com/home-assistant/core/pull/137409 +[#137420]: https://github.com/home-assistant/core/pull/137420 +[#137423]: https://github.com/home-assistant/core/pull/137423 +[#137424]: https://github.com/home-assistant/core/pull/137424 +[#137430]: https://github.com/home-assistant/core/pull/137430 +[#137437]: https://github.com/home-assistant/core/pull/137437 +[#137440]: https://github.com/home-assistant/core/pull/137440 +[#137441]: https://github.com/home-assistant/core/pull/137441 +[#137446]: https://github.com/home-assistant/core/pull/137446 +[@Anonym-tsk]: https://github.com/Anonym-tsk +[@Bre77]: https://github.com/Bre77 +[@CFenner]: https://github.com/CFenner +[@CoMPaTech]: https://github.com/CoMPaTech +[@DCSBL]: https://github.com/DCSBL +[@Danielhiversen]: https://github.com/Danielhiversen +[@Diegorro98]: https://github.com/Diegorro98 +[@Djelibeybi]: https://github.com/Djelibeybi +[@DrDonoso]: https://github.com/DrDonoso +[@EliSchleifer]: https://github.com/EliSchleifer +[@Ernst79]: https://github.com/Ernst79 +[@G-Two]: https://github.com/G-Two +[@GlennReilly]: https://github.com/GlennReilly +[@IceBotYT]: https://github.com/IceBotYT +[@IgnusG]: https://github.com/IgnusG +[@Ik-12]: https://github.com/Ik-12 +[@KapJI]: https://github.com/KapJI +[@LG-ThinQ-Integration]: https://github.com/LG-ThinQ-Integration +[@LaStrada]: https://github.com/LaStrada +[@Lash-L]: https://github.com/Lash-L +[@LouisChrist]: https://github.com/LouisChrist +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@Master-Guy]: https://github.com/Master-Guy +[@MatthiasLohr]: https://github.com/MatthiasLohr +[@N3rdix]: https://github.com/N3rdix +[@NoRi2909]: https://github.com/NoRi2909 +[@Noltari]: https://github.com/Noltari +[@PaulSD]: https://github.com/PaulSD +[@PeteRager]: https://github.com/PeteRager +[@Petro31]: https://github.com/Petro31 +[@PoppyPop]: https://github.com/PoppyPop +[@Qbus-iot]: https://github.com/Qbus-iot +[@RBaragona]: https://github.com/RBaragona +[@RJPoelstra]: https://github.com/RJPoelstra +[@RaHehl]: https://github.com/RaHehl +[@RunC0deRun]: https://github.com/RunC0deRun +[@SeraphicRav]: https://github.com/SeraphicRav +[@Shulyaka]: https://github.com/Shulyaka +[@Shutgun]: https://github.com/Shutgun +[@SparkyDan555]: https://github.com/SparkyDan555 +[@Splint77]: https://github.com/Splint77 +[@StevenLooman]: https://github.com/StevenLooman +[@Taraman17]: https://github.com/Taraman17 +[@TheJulianJES]: https://github.com/TheJulianJES +[@Thomas55555]: https://github.com/Thomas55555 +[@ThyMYthOS]: https://github.com/ThyMYthOS +[@VandeurenGlenn]: https://github.com/VandeurenGlenn +[@WaterInTheLake]: https://github.com/WaterInTheLake +[@YogevBokobza]: https://github.com/YogevBokobza +[@abmantis]: https://github.com/abmantis +[@alengwenus]: https://github.com/alengwenus +[@allenporter]: https://github.com/allenporter +[@andrew-codechimp]: https://github.com/andrew-codechimp +[@andrewsayre]: https://github.com/andrewsayre +[@apt-itude]: https://github.com/apt-itude +[@arturpragacz]: https://github.com/arturpragacz +[@ashionky]: https://github.com/ashionky +[@astrandb]: https://github.com/astrandb +[@austinmroczek]: https://github.com/austinmroczek +[@autinerd]: https://github.com/autinerd +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@beginner2047]: https://github.com/beginner2047 +[@bieniu]: https://github.com/bieniu +[@boralyl]: https://github.com/boralyl +[@bors-ltd]: https://github.com/bors-ltd +[@bouwew]: https://github.com/bouwew +[@bramkragten]: https://github.com/bramkragten +[@catsmanac]: https://github.com/catsmanac +[@cdce8p]: https://github.com/cdce8p +[@cdnninja]: https://github.com/cdnninja +[@cereal2nd]: https://github.com/cereal2nd +[@chemelli74]: https://github.com/chemelli74 +[@choumarin]: https://github.com/choumarin +[@crevetor]: https://github.com/crevetor +[@dan-r]: https://github.com/dan-r +[@davet2001]: https://github.com/davet2001 +[@david1024pl]: https://github.com/david1024pl +[@davidrapan]: https://github.com/davidrapan +[@dext0r]: https://github.com/dext0r +[@dgomes]: https://github.com/dgomes +[@dieselrabbit]: https://github.com/dieselrabbit +[@dknowles2]: https://github.com/dknowles2 +[@domingues]: https://github.com/domingues +[@dontinelli]: https://github.com/dontinelli +[@dotvav]: https://github.com/dotvav +[@dustMason]: https://github.com/dustMason +[@eclair4151]: https://github.com/eclair4151 +[@edenhaus]: https://github.com/edenhaus +[@elmurato]: https://github.com/elmurato +[@elupus]: https://github.com/elupus +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@erwindouna]: https://github.com/erwindouna +[@farkasdi]: https://github.com/farkasdi +[@farmio]: https://github.com/farmio +[@firstof9]: https://github.com/firstof9 +[@flabbamann]: https://github.com/flabbamann +[@frenck]: https://github.com/frenck +[@fwestenberg]: https://github.com/fwestenberg +[@gentoo-root]: https://github.com/gentoo-root +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@gjong]: https://github.com/gjong +[@gwww]: https://github.com/gwww +[@hahn-th]: https://github.com/hahn-th +[@huyuwei1996]: https://github.com/huyuwei1996 +[@iMicknl]: https://github.com/iMicknl +[@illia-piskurov]: https://github.com/illia-piskurov +[@iprak]: https://github.com/iprak +[@iskrakranj]: https://github.com/iskrakranj +[@jaminh]: https://github.com/jaminh +[@jb101010-2]: https://github.com/jb101010-2 +[@jbarreiros]: https://github.com/jbarreiros +[@jbouwh]: https://github.com/jbouwh +[@jeeftor]: https://github.com/jeeftor +[@jesperraemaekers]: https://github.com/jesperraemaekers +[@jiriappl]: https://github.com/jiriappl +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@jpelgrom]: https://github.com/jpelgrom +[@jsuar]: https://github.com/jsuar +[@jterrace]: https://github.com/jterrace +[@keithle888]: https://github.com/keithle888 +[@kelyaenn]: https://github.com/kelyaenn +[@kereyroper]: https://github.com/kereyroper +[@klaasnicolaas]: https://github.com/klaasnicolaas +[@klejejs]: https://github.com/klejejs +[@krakonos1602]: https://github.com/krakonos1602 +[@lanthaler]: https://github.com/lanthaler +[@lboue]: https://github.com/lboue +[@lschloetterer]: https://github.com/lschloetterer +[@luc-ass]: https://github.com/luc-ass +[@marcelveldt]: https://github.com/marcelveldt +[@maxcabrajac]: https://github.com/maxcabrajac +[@mckbrmn]: https://github.com/mckbrmn +[@miaucl]: https://github.com/miaucl +[@mib1185]: https://github.com/mib1185 +[@mj23000]: https://github.com/mj23000 +[@mkmer]: https://github.com/mkmer +[@mxr]: https://github.com/mxr +[@natekspencer]: https://github.com/natekspencer +[@noahhusby]: https://github.com/noahhusby +[@oandrew]: https://github.com/oandrew +[@pawlizio]: https://github.com/pawlizio +[@peteS-UK]: https://github.com/peteS-UK +[@piitaya]: https://github.com/piitaya +[@puddly]: https://github.com/puddly +[@rajlaud]: https://github.com/rajlaud +[@redge76]: https://github.com/redge76 +[@regevbr]: https://github.com/regevbr +[@richardpolzer]: https://github.com/richardpolzer +[@rikroe]: https://github.com/rikroe +[@rpavlik]: https://github.com/rpavlik +[@rrooggiieerr]: https://github.com/rrooggiieerr +[@rsiv]: https://github.com/rsiv +[@rwalker777]: https://github.com/rwalker777 +[@rytilahti]: https://github.com/rytilahti +[@sVnsation]: https://github.com/sVnsation +[@scop]: https://github.com/scop +[@sdb9696]: https://github.com/sdb9696 +[@shmuelzon]: https://github.com/shmuelzon +[@silamon]: https://github.com/silamon +[@sorgfresser]: https://github.com/sorgfresser +[@squishykid]: https://github.com/squishykid +[@srescio]: https://github.com/srescio +[@starkillerOG]: https://github.com/starkillerOG +[@synesthesiam]: https://github.com/synesthesiam +[@thecode]: https://github.com/thecode +[@thomasddn]: https://github.com/thomasddn +[@tkunzfeld]: https://github.com/tkunzfeld +[@tl-sl]: https://github.com/tl-sl +[@tomer-w]: https://github.com/tomer-w +[@tr4nt0r]: https://github.com/tr4nt0r +[@tronikos]: https://github.com/tronikos +[@tswsl1989]: https://github.com/tswsl1989 +[@tyron]: https://github.com/tyron +[@wlcrs]: https://github.com/wlcrs +[@zweckj]: https://github.com/zweckj \ No newline at end of file diff --git a/source/changelogs/core-2025.3.markdown b/source/changelogs/core-2025.3.markdown new file mode 100644 index 00000000000..d2877eefd52 --- /dev/null +++ b/source/changelogs/core-2025.3.markdown @@ -0,0 +1,2775 @@ +--- +title: Full changelog for Home Assistant Core 2025.3 +description: Detailed changelog for the Home Assistant Core 2025.3 release +replace_regex: \s\(\[?[a-z0-9\-\s_]+\]?\)$ +--- + +These are all the changes included in the Home Assistant Core 2025.3 release. + +For a summary in a more readable format: +[Release notes blog for this release](/blog/2025/03/05/release-20253/). + +- Bump version to 2025.3.0 ([@bramkragten] - [#136859]) +- Update quality scale in Onkyo ([@arturpragacz] - [#136710]) +- Migrate from homeconnect dependency to aiohomeconnect ([@Diegorro98] - [#136116]) +- Bump github/codeql-action from 3.28.6 to 3.28.8 (@dependabot - [#136890]) +- Add error handling to enphase_envoy switch platform action ([@catsmanac] - [#136837]) +- Bump Pysmlight to v0.2.0 ([@tl-sl] - [#136886]) +- Remove stale translation string in HomeWizard ([@DCSBL] - [#136917]) +- Add DS2450 to onewire integration ([@moritzthecat] - [#136882]) +- Add software version to onewire device info ([@epenet] - [#136934]) +- Make assist_satellite action descriptions consistent ([@NoRi2909] - [#136955]) +- Add serial number to LG webOS TV device info ([@thecode] - [#136968]) +- Fetch all programs instead of only the available ones at Home Connect ([@Diegorro98] - [#136949]) +- Fix error messaging for cascading service calls ([@abmantis] - [#136966]) +- Add more Homee cover tests ([@Taraman17] - [#136568]) +- Add tariff sensor and peak sensors ([@gjong] - [#136919]) +- Add post action to mastodon ([@andrew-codechimp] - [#134788]) +- Add support for standby quickmode to ViCare integration ([@CFenner] - [#133156]) +- Add sensors for drink stats per key to lamarzocco ([@zweckj] - [#136582]) +- Do not duplicate device class translations in ring integration ([@sdb9696] - [#136868]) +- Make Reolink reboot button always available ([@starkillerOG] - [#136667]) +- Use runtime_data in motionmount integration ([@RJPoelstra] - [#136999]) +- Create/delete lists at runtime in Bring integration ([@tr4nt0r] - [#130098]) +- Bump python-MotionMount to 2.3.0 ([@RJPoelstra] - [#136985]) +- Energy distance units ([@jschlyter] - [#136933]) +- Add data_description's to motionmount integration ([@RJPoelstra] - [#137014]) +- Bump letpot to 0.4.0 ([@jpelgrom] - [#137007]) +- Add pets to litterrobot integration ([@natekspencer] - [#136865]) +- Add codeowner to Home Connect ([@MartinHjelmare] - [#137029]) +- Add exception handling for updating LetPot time entities ([@jpelgrom] - [#137033]) +- Fix one occurrence of "api" to match all other in sensibo and HA ([@NoRi2909] - [#137037]) +- Add dev docs and frontend PR links to PR template ([@abmantis] - [#137034]) +- Bump pysmlight to v0.2.1 ([@tl-sl] - [#137053]) +- Add switch platform to LetPot integration ([@jpelgrom] - [#136383]) +- Fix Home Connect actions keys ([@Diegorro98] - [#137027]) +- Replace keys with translatable friendly names in Statistics helper ([@NoRi2909] - [#136936]) +- Filter programs by execution type at select program entities at Home Connect ([@Diegorro98] - [#136950]) +- Home Connect entities availability based on the connected state of the appliance ([@Diegorro98] - [#136951]) +- Test config_entry_oauth2_flow.async_get_redirect_uri ([@tronikos] - [#136976]) +- Improve sonos alarms typing ([@cdce8p] - [#137078]) +- Improve isy994 sensor typing ([@cdce8p] - [#137077]) +- Enable Modbus Climate / HVAC on/off to use the coil instead of the register(s) ([@illia-piskurov] - [#135657]) +- Bump aiohomeconnect to 0.12.3 ([@MartinHjelmare] - [#137085]) +- Improve fully_kiosk sensor typing ([@cdce8p] - [#137079]) +- Small additions for Homee ([@Taraman17] - [#137000]) +- Fetch current active and selected programs at Home Connect ([@Diegorro98] - [#136948]) +- Add and delete Home Connect devices on CONNECTED/PAIRED and DEPAIRED events ([@Diegorro98] - [#136952]) +- Extract conversation ID generation to helper ([@balloob] - [#137062]) +- Bump openai to 1.61.0 ([@Shulyaka] - [#137130]) +- Fix home connect manifest logger ([@MartinHjelmare] - [#137138]) +- Make get_chat_session a callback context manager ([@balloob] - [#137146]) +- fix: sort available modes ([@iprak] - [#137134]) +- Reolink styling using walrus operator ([@starkillerOG] - [#137069]) +- Bump teslemetry-stream to 0.6.10 ([@Bre77] - [#137159]) +- Add Linx virtual motionblinds integration ([@starkillerOG] - [#137184]) +- Add support for OpenAI reasoning models ([@Shulyaka] - [#137139]) +- Chat session rev2 ([@balloob] - [#137209]) +- Fix spelling of "SharkClean" and sentence-casing of some words ([@NoRi2909] - [#137183]) +- Add support for Shelly Flood gen4 ([@chemelli74] - [#136981]) +- Fix uppercase / lowercase setup strings in Generic Camera ([@NoRi2909] - [#137219]) +- Add parallel updates setting to Bang & Olufsen Event platform ([@mj23000] - [#135850]) +- Update license-expression to 30.4.1 ([@cdce8p] - [#137226]) +- Update pipdeptree to 2.25.0 ([@cdce8p] - [#137228]) +- Update pylint to 3.3.4 ([@cdce8p] - [#137227]) +- Update coverage to 7.6.10 ([@cdce8p] - [#137229]) +- Bump pysmlight to v0.2.2 ([@tl-sl] - [#137218]) +- Update pytest-freezer to 0.4.9 ([@cdce8p] - [#137232]) +- Update pytest-picked to 0.5.1 ([@cdce8p] - [#137233]) +- Add Starlink connectivity binary sensor ([@MrConorAE] - [#133184]) +- Update syrupy to 4.8.1 ([@cdce8p] - [#137235]) +- Update pyOpenSSL to 25.0.0 ([@cdce8p] - [#137236]) +- Update pytest-asyncio to 0.25.3 ([@cdce8p] - [#137231]) +- Update pytest-github-actions-annotate-failures to 0.3.0 ([@cdce8p] - [#137243]) +- Add service to retrieve schedule configuration ([@rikroe] - [#121904]) +- Update pylint-per-file-ignores to 1.4.0 ([@cdce8p] - [#137242]) +- Migrate unique ID in vesync switches ([@cdnninja] - [#137099]) +- Bump python-homeassistant-analytics to 0.9.0 ([@joostlek] - [#137240]) +- Assist Satellite to use ChatSession for conversation ID ([@balloob] - [#137142]) +- Assist Pipeline to use ChatSession for conversation ID ([@balloob] - [#137143]) +- Add tests for Shelly Flood gen4 ([@thecode] - [#137246]) +- Ensure random temp dir is used during MQTT CI tests ([@jbouwh] - [#137221]) +- Add Ublockout virtual integration of MotionBlinds ([@starkillerOG] - [#137179]) +- Add Heicko virtual motionblinds integration ([@starkillerOG] - [#137191]) +- Add Smart Rollos virtual motionblinds integration ([@starkillerOG] - [#137190]) +- Fix eheimdigital sw_version mock ([@MartinHjelmare] - [#137255]) +- Clear extra system prompt on start_conversation error ([@synesthesiam] - [#137254]) +- Update tqdm to 4.67.1 ([@cdce8p] - [#137241]) +- Add device cleanup to Vodafone Station ([@chemelli74] - [#116024]) +- Introduce async_add_assistant_content to conversation chat log ([@balloob] - [#137273]) +- Add Shelly script events entities ([@wjtje] - [#135979]) +- Pass config_entry as param to Shelly coordinator ([@chemelli74] - [#137276]) +- Add channel sensor to bthome ([@Ernst79] - [#137072]) +- Update Jellyfin codeowner ([@RunC0deRun] - [#137270]) +- Use runtime_data in fastdotcom ([@epenet] - [#137293]) +- Use HassKey in file_upload ([@epenet] - [#137294]) +- Use runtime_data in faa_delays ([@epenet] - [#137292]) +- Bump uv to 0.5.27 ([@edenhaus] - [#137297]) +- Allow integrations with digits in hassfest QS runtime_data ([@autinerd] - [#136479]) +- Cleanup runtime warnings in async unit tests ([@epenet] - [#137308]) +- Update pytest-aiohttp to 1.1.0 ([@cdce8p] - [#137311]) +- Update pyoverkiz to 1.16.0 ([@cdce8p] - [#137310]) +- Update codespell to 2.4.1 ([@cdce8p] - [#137312]) +- Improve descriptions of Bluesound actions ([@NoRi2909] - [#137156]) +- Improve frontier_silicon media_player typing ([@cdce8p] - [#137080]) +- Remove legacy color_mode support for legacy mqtt json light ([@jbouwh] - [#136996]) +- Update attrs to 25.1.0 ([@cdce8p] - [#137316]) +- Add default voice for languages in cloud TTS ([@ludeeus] - [#137300]) +- Update types packages ([@cdce8p] - [#137317]) +- Convert Niko home control to async ([@VandeurenGlenn] - [#137174]) +- Add exception translations to ring integration ([@sdb9696] - [#136468]) +- Added support for One Time Charge Status to Vicare ([@migrzyb] - [#135984]) +- Bump upb-lib to 0.6.0 ([@gwww] - [#137339]) +- Bump roombapy to 1.9.0 ([@jbouwh] - [#137336]) +- Update yalexs-ble to 2.5.7 ([@cdce8p] - [#137345]) +- Update home-assistant-bluetooth to 1.13.1 ([@cdce8p] - [#137350]) +- Make Sonos action descriptions more UI- and translation-friendly ([@NoRi2909] - [#137356]) +- Fix spelling of "ID" and sentence-casing in ovo_energy strings ([@NoRi2909] - [#137329]) +- Bump paho-mqtt client to version 2.1.0 ([@jbouwh] - [#136130]) +- Update bleak-esphome to 2.7.1 ([@cdce8p] - [#137354]) +- Add sensor and weather tests to meteo_france ([@epenet] - [#137318]) +- Update aiozoneinfo to 0.2.3 ([@cdce8p] - [#137370]) +- Add iometer integration ([@MaestroOnICe] - [#135513]) +- Bump thermopro-ble to 0.11.0 ([@stephan48] - [#137381]) +- Bump nexia to 2.0.9 ([@bdraco] - [#137383]) +- Update dhcp dependencies ([@cdce8p] - [#137384]) +- Update bthome-ble to 3.12.4 ([@cdce8p] - [#137385]) +- Update aiohttp-fast-zlib to 0.2.2 ([@cdce8p] - [#137387]) +- Update async-interrupt to 1.2.1 ([@cdce8p] - [#137388]) +- Update aionut to 4.3.4 ([@cdce8p] - [#137389]) +- Update aiosteamist to 1.0.1 ([@cdce8p] - [#137391]) +- Update aiooncue to 0.3.9 ([@cdce8p] - [#137392]) +- Add update entity for second Zigbee radio ([@tl-sl] - [#136918]) +- Update ismartgate to 5.0.2 ([@cdce8p] - [#137394]) +- Update discovergy30303 to 0.3.3 ([@cdce8p] - [#137396]) +- Fix spelling of "YoLink" and improve action descriptions ([@NoRi2909] - [#137412]) +- Bump pysmlight to v0.2.3 ([@tl-sl] - [#137386]) +- Bump sigstore/cosign-installer from 3.7.0 to 3.8.0 (@dependabot - [#137404]) +- Add coordinator unsubscribe listener test ([@epenet] - [#137422]) +- Improve action descriptions in rainmachine, fix casing ([@NoRi2909] - [#137428]) +- Fix sentence-casing and action names/descriptions in unifiprotect ([@NoRi2909] - [#137418]) +- Bump thinqconnect to 1.0.4 ([@LG-ThinQ-Integration] - [#137395]) +- Replace wrong name reference of binary jvc_power sensor in jvc_projector ([@NoRi2909] - [#137271]) +- Show new errors from the MotionMount ([@RJPoelstra] - [#137006]) +- Add tests for sensors in SwitchBot Cloud ([@mckbrmn] - [#137319]) +- Only clean up chat log if it was stored ([@balloob] - [#137399]) +- Replace "Ota" with "OTA update" in anova integration ([@NoRi2909] - [#137431]) +- Fix spelling of "PowerView Hub" in user-facing strings ([@NoRi2909] - [#137435]) +- Disable annotations for pytest warnings [ci] ([@cdce8p] - [#137434]) +- Update PySwitchbot to 0.56.0 ([@awahlig] - [#137432]) +- Add streaming select entities to Teslemetry ([@Bre77] - [#137210]) +- Add translation key for Matter Energy management mode ([@lboue] - [#137259]) +- Refactor switch for vesync ([@cdnninja] - [#134409]) +- Govee light local bump ([@Galorhallen] - [#137436]) +- Add support for Switchbot Remote ([@awahlig] - [#137443]) +- Move fireservicerota coordinator to own module ([@epenet] - [#137304]) +- Add GPSd satellites sensors ([@jrieger] - [#137320]) +- Explicitly pass in the config_entry in screenlogic coordinator init ([@mib1185] - [#137463]) +- Explicitly pass in the config_entry in omnilogic coordinator init ([@mib1185] - [#137466]) +- Explicitly pass in the config_entry in picnic coordinator init ([@mib1185] - [#137465]) +- Explicitly pass in the config_entry in webmin coordinator init ([@mib1185] - [#137462]) +- Explicitly pass in the config_entry in Bluesound coordinator init ([@mib1185] - [#137461]) +- Explicitly pass in the config_entry in rympro coordinator init ([@mib1185] - [#137464]) +- Explicitly pass in the config_entry in airgradient coordinator init ([@mib1185] - [#137469]) +- Explicitly pass in the config_entry in supervisor coordinator init ([@mib1185] - [#137472]) +- Bump aioairq version to 0.4.4 ([@Sibgatulin] - [#137454]) +- Update default Google model to Gemini Flash 2.0 ([@balloob] - [#137505]) +- Bump bring-api version to 1.0.1 ([@tr4nt0r] - [#137496]) +- Deprecate Linear Garage Door integration ([@IceBotYT] - [#137502]) +- Fix typo in keba and replace key references with UI-friendly descriptions ([@NoRi2909] - [#137527]) +- Add data_description to Bring! integration ([@tr4nt0r] - [#137513]) +- Enable strict-typing for Bring! integration ([@tr4nt0r] - [#137518]) +- Add switch to LG ThinQ for power control ([@LG-ThinQ-Integration] - [#137512]) +- Update mypy-dev to 1.16.0a2 ([@cdce8p] - [#137542]) +- Update govee-local-api to 2.0.1 ([@Galorhallen] - [#137546]) +- Fix translation key typo in coinbase options ([@natekspencer] - [#137543]) +- Prevent packages from accidentally installing poetry ([@cdce8p] - [#137560]) +- Fix spelling of "Roborock" and adapt action descriptions to HA standards ([@NoRi2909] - [#137570]) +- Several fixes in user-facing strings of the SQL integration ([@NoRi2909] - [#137438]) +- Explicitly pass in the config_entry in madvr coordinator init ([@mib1185] - [#137468]) +- Replace string literal with existing const in ZHA ([@abmantis] - [#137576]) +- Plugwise: remove user-config of port ([@bouwew] - [#137584]) +- Fix sentence-casing in user-facing strings of Coinbase integration ([@NoRi2909] - [#137586]) +- Correct state and icon if fan is in standby mode in ViCare integration ([@CFenner] - [#137565]) +- Explicitly pass in the config_entry in vesync ([@cdnninja] - [#137498]) +- Update library for smhi ([@gjohansson-ST] - [#136375]) +- Add exception translations to Bring! integration ([@tr4nt0r] - [#137515]) +- Bump python-overseerr to 0.7.0 ([@joostlek] - [#137590]) +- Fix sentence-casing in user-facing strings of here_travel_time ([@NoRi2909] - [#137593]) +- Keep track of addons and integrations when determining HA radio firmware type ([@puddly] - [#134598]) +- Remove deprecated state attributes from GPSd ([@jrieger] - [#137600]) +- KNX tests: Support loading different config store fixtures ([@farmio] - [#136961]) +- Add Wi-Fi RSSI sensor in HomeWizard ([@DCSBL] - [#136754]) +- Add remaining HEOS exception translations ([@andrewsayre] - [#136878]) +- Remove redundant dependency markers ([@cdce8p] - [#137608]) +- Add HNT wallet/rate to coinbase ([@natekspencer] - [#137592]) +- Add event platform to Bring! integration ([@tr4nt0r] - [#136935]) +- Pass in the config_entry in youless coordinator init ([@mib1185] - [#137471]) +- Use runtime_data in freedompro ([@epenet] - [#137635]) +- Fix fireservicerota unload ([@epenet] - [#137629]) +- Use runtime_data in fitbit ([@epenet] - [#137631]) +- Use runtime_data in foscam ([@epenet] - [#137646]) +- Add reconfiguration flow to Bring! integration ([@tr4nt0r] - [#137529]) +- Fix missing type annotation in bring ([@epenet] - [#137647]) +- Plugwise: fix double CONF_PASSWORD occurrence ([@bouwew] - [#137641]) +- Replace "HassOS" with "Home Assistant OS" in homeassistant_hardware ([@NoRi2909] - [#137637]) +- Improve type hints in fireservicerota ([@epenet] - [#137628]) +- Use runtime_data in frontier_silicon ([@epenet] - [#137633]) +- Use runtime_data in fivem ([@epenet] - [#137632]) +- Use runtime_data in firmata ([@epenet] - [#137630]) +- Use snapshots for ConfigEntry migration tests ([@alengwenus] - [#136093]) +- Remove unnecessary type casts ([@cdce8p] - [#137657]) +- Bump PyTado to version 0.18.6 ([@erwindouna] - [#137655]) +- Make all occurrences of "Home Guard" in lg_thinq consistent ([@NoRi2909] - [#137662]) +- Use runtime_data in flume ([@epenet] - [#137660]) +- Clean up colliding deleted devices when updating non-deleted devices ([@arturpragacz] - [#135592]) +- Replace key names with friendly names in todoist actions ([@NoRi2909] - [#137667]) +- Use config_entry.async_on_unload in forked_daapd ([@epenet] - [#137656]) +- Fix spelling of "SwitchBot", "ID" plus sentence-casing in switchbot ([@NoRi2909] - [#137684]) +- Set the device class for the Shelly virtual sensor ([@bieniu] - [#137068]) +- Fix spelling of "AccuWeather" and sentence-casing plus grammar ([@NoRi2909] - [#137696]) +- Pass in the config_entry in azure_devops coordinator init ([@mib1185] - [#137722]) +- Explicitly pass in the config_entry in autarco coordinator init ([@mib1185] - [#137718]) +- Explicitly pass in the config_entry in airnow coordinator init ([@mib1185] - [#137699]) +- Explicitly pass in the config_entry in airly coordinator init ([@mib1185] - [#137698]) +- Explicitly pass in the config entry in anova coordinator init ([@mib1185] - [#137701]) +- Explicitly pass in the config_entry in bsblan coordinator init ([@mib1185] - [#137725]) +- Pass in the config_entry in brother coordinator init ([@mib1185] - [#137726]) +- Explicitly pass in the config_entry in blink coordinator init ([@mib1185] - [#137727]) +- Bump SQLAlchemy to 2.0.38 ([@bdraco] - [#137693]) +- Explicitly pass in the config_entry in ambient_network coordinator init ([@mib1185] - [#137707]) +- Explicitly pass in the config entry in amberelectric coordinator init ([@mib1185] - [#137700]) +- Fix wrong reference for description of password field in bring ([@NoRi2909] - [#137720]) +- Explicitly pass in the config_entry in discovergy coordinator ([@mib1185] - [#137734]) +- Limit flume ConfigEntrySelect to integration domain ([@cdce8p] - [#137661]) +- Explicitly pass in the config_entry in aussie_broadband coordinator init ([@mib1185] - [#137719]) +- Explicitly pass in the config_entry in airzone coordinator init ([@mib1185] - [#137702]) +- Explicitly pass in the config_entry in aquacell coordinator init ([@mib1185] - [#137713]) +- Explicitly pass in the config_entry in braviatv coordinator init ([@mib1185] - [#137724]) +- Explicitly pass in the config_entry in aurora_abb_powerone coordinator init ([@mib1185] - [#137715]) +- Explicitly pass in the config_entry in arve coordinator init ([@mib1185] - [#137712]) +- Explicitly pass in the config_entry in android_ip_webcam coordinator … ([@mib1185] - [#137705]) +- Explicitly pass in the config_entry in analytics_insight coordinator init ([@mib1185] - [#137706]) +- Explicitly pass in the config_entry in apcupsd coordinator init ([@mib1185] - [#137709]) +- Explicitly pass in the config_entry in letpot coordinator ([@jpelgrom] - [#137759]) +- Explicitly pass in the config_entry in eheimdigital coordinator ([@mib1185] - [#137738]) +- Explicitly pass in the config_entry in dremel_3d_printer coordinator ([@mib1185] - [#137740]) +- Explicitly pass in the config_entry in emoncms coordinator ([@mib1185] - [#137743]) +- Explicitly pass in the config_entry in dwd weather warnings coordinator ([@mib1185] - [#137737]) +- Make sure we always have agent_id in ConversationInput ([@balloob] - [#137679]) +- Clear statistics when you unload the Opower integration ([@tronikos] - [#135908]) +- Conversation chat log cleanup and optimization ([@balloob] - [#137784]) +- Add discovery for Nanoleaf Blocks and 4D ([@milanmeu] - [#137792]) +- Info log when Android TV Remote is unavailable ([@tronikos] - [#137794]) +- Add quality_scale to motionmount ([@RJPoelstra] - [#137012]) +- Limit google_sheets ConfigEntrySelect to integration domain ([@cdce8p] - [#137766]) +- Group helpers of set_up_integrations in bootstrap ([@arturpragacz] - [#137673]) +- Explicitly pass in the config_entry in co2signal coordinator ([@mib1185] - [#137732]) +- Explicitly pass in the config_entry in airq coordinator init ([@mib1185] - [#137704]) +- Explicitly pass in the config_entry in airzone_cloud coordinator init ([@mib1185] - [#137703]) +- Explicitly pass in the config_entry in fjaraskupan coordinator ([@mib1185] - [#137825]) +- Explicitly pass in the config_entry in aosmith coordinator init ([@mib1185] - [#137710]) +- Explicitly pass in the config_entry in aseko_pool_live coordinator init ([@mib1185] - [#137711]) +- Explicitly pass in the config_entry in aurora coordinator init ([@mib1185] - [#137714]) +- Explicitly pass in the config_entry in gardena_bluetooth coordinator ([@mib1185] - [#137830]) +- Explicitly pass in the config_entry in gree coordinator ([@mib1185] - [#137844]) +- Explicitly pass in the config_entry in govee_light_local coordinator ([@mib1185] - [#137843]) +- Explicitly pass in the config_entry in flo coordinator ([@mib1185] - [#137819]) +- Explicitly pass in the config_entry in flume coordinator ([@mib1185] - [#137822]) +- Explicitly pass in the config_entry in forecast_solar coordinator ([@mib1185] - [#137824]) +- Explicitly pass in the config_entry in atag coordinator init ([@mib1185] - [#137716]) +- Explicitly pass in the config_entry in gogogate2 coordinator ([@mib1185] - [#137837]) +- Explicitly pass in the config_entry in goalzero coordinator ([@mib1185] - [#137836]) +- Explicitly pass in the config_entry in glances coordinator ([@mib1185] - [#137835]) +- Explicitly pass in the config_entry in github coordinator ([@mib1185] - [#137834]) +- Explicitly pass in the config_entry in garages_amsterdam coordinator ([@mib1185] - [#137829]) +- Explicitly pass in the config_entry in apsystems coordinator init ([@mib1185] - [#137708]) +- Explicitly pass in the config_entry in cert_expiry coordinator init ([@mib1185] - [#137728]) +- Explicitly pass in the config_entry in deluge coordinator ([@mib1185] - [#137733]) +- Explicitly pass in the config_entry in enigma2 coordinator ([@mib1185] - [#137739]) +- Add snapshot tests for setup of LetPot platforms ([@jpelgrom] - [#137756]) +- Explicitly pass in the config_entry in enphase flexit_bacnet coordinator ([@mib1185] - [#137814]) +- Explicitly pass in the config_entry in duke_energy coordinator ([@mib1185] - [#137741]) +- Bump PyViCare to 2.42.0 ([@CFenner] - [#137804]) +- Update fitbit quality scale for runtime-data ([@allenporter] - [#137785]) +- Explicitly pass in the config_entry in guardian coordinator ([@mib1185] - [#137848]) +- Explicitly pass in the config_entry in fitbit coordinator ([@mib1185] - [#137808]) +- Update flexit_bacnet dependecy 2.2.1 -> 2.2.3 ([@piotrbulinski] - [#137730]) +- Explicitly pass in the config_entry in awair coordinator init ([@mib1185] - [#137717]) +- Explicitly pass in the config_entry in enphase envoy coordinator ([@mib1185] - [#137806]) +- Explicitly pass in the config_entry in filesize coordinator ([@mib1185] - [#137807]) +- Explicitly pass in the config_entry in gios coordinator ([@mib1185] - [#137832]) +- Explicitly pass in the config_entry in flipr coordinator ([@mib1185] - [#137818]) +- Explicitly pass in the config_entry in google_tasks coordinator ([@mib1185] - [#137842]) +- Explicitly pass in the config_entry in flux_led coordinator ([@mib1185] - [#137823]) +- Explicitly pass in the config_entry in fyta coordinator ([@mib1185] - [#137828]) +- Explicitly pass in the config_entry in fujitsu_fglair coordinator ([@mib1185] - [#137826]) +- Explicitly pass in the config_entry in fully_kiosk coordinator ([@mib1185] - [#137827]) +- Explicitly pass in the config_entry in goodwe coordinator ([@mib1185] - [#137838]) +- Explicitly pass in the config_entry in geocaching coordinator ([@mib1185] - [#137831]) +- Explicitly pass in the config_entry in google coordinator ([@mib1185] - [#137839]) +- Explicitly pass in the config_entry in google_photos coordinator ([@mib1185] - [#137840]) +- Make action descriptions in adguard consistent, remove "true/false" ([@NoRi2909] - [#137799]) +- Explicitly pass in the config_entry in flick_electric coordinator ([@mib1185] - [#137816]) +- Refactor evohome for major bump of client to 1.0.2 ([@zxdavb] - [#135436]) +- Add Peblar charge switch ([@frenck] - [#137853]) +- Move ForkedDaapdUpdater to separate module ([@epenet] - [#137654]) +- Bump noaa-coops to version 0.4.0 ([@jdelaney72] - [#137777]) +- Bump plugwise to v1.7.1 and adapt ([@bouwew] - [#137599]) +- Only allow single Home Connect config entry ([@Diegorro98] - [#137088]) +- Explicitly pass in the config_entry in zamg coordinator ([@mib1185] - [#137858]) +- Explicitly pass in the config_entry in zeversolar coordinator ([@mib1185] - [#137857]) +- Explicitly pass in the config_entry in youtube coordinator ([@mib1185] - [#137859]) +- Explicitly pass in the config_entry in ws66i coordinator ([@mib1185] - [#137865]) +- Explicitly pass in the config_entry in waqi coordinator ([@mib1185] - [#137873]) +- Explicitly pass in the config_entry in watergate coordinator ([@mib1185] - [#137872]) +- Prolong ondilo ico update interval ([@MartinHjelmare] - [#137888]) +- Explicitly pass in the config_entry in v2c coordinator ([@mib1185] - [#137882]) +- Fix sentence-casing and description of homekit.reload action ([@NoRi2909] - [#137894]) +- Explicitly pass in the config_entry in steamist coordinator ([@mib1185] - [#137930]) +- Explicitly pass in the config_entry in uptimerobot coordinator ([@mib1185] - [#137883]) +- Explicitly pass in the config_entry in skybell coordinator ([@mib1185] - [#137947]) +- Bump bring-api to version 1.0.2 ([@tr4nt0r] - [#137925]) +- Fix three action descriptions in xiaomi_miio ([@NoRi2909] - [#137918]) +- Fix spelling of "Wi-Fi" in keenetic_ndms2 integration ([@NoRi2909] - [#137920]) +- Explicitly pass in the config_entry in simplefin coordinator ([@mib1185] - [#137948]) +- Explicitly pass in the config_entry in sleepiq coordinator ([@mib1185] - [#137946]) +- Add support for fireplace mode control for flexit_bacnet integration ([@piotrbulinski] - [#137594]) +- Bump nhc to 0.4.10 ([@VandeurenGlenn] - [#137903]) +- Explicitly pass in the config_entry in shelly coordinator ([@mib1185] - [#137951]) +- Explicitly pass in the config_entry in surepetcare coordinator ([@mib1185] - [#137926]) +- Explicitly pass in the config_entry in swiss_public_transport coordinator ([@mib1185] - [#137924]) +- Explicitly pass in the config_entry in switchbee coordinator ([@mib1185] - [#137923]) +- Explicitly pass in the config_entry in streamlabswater coordinator ([@mib1185] - [#137927]) +- Explicitly pass in the config_entry in yardian coordinator ([@mib1185] - [#137862]) +- Explicitly pass in the config_entry in xbox coordinator ([@mib1185] - [#137864]) +- Explicitly pass in the config_entry in slide_local coordinator ([@mib1185] - [#137945]) +- Explicitly pass in the config_entry in solaredge coordinator ([@mib1185] - [#137941]) +- Explicitly pass in the config_entry in samsungtv coordinator ([@mib1185] - [#137962]) +- Explicitly pass in the config_entry in sanix coordinator ([@mib1185] - [#137960]) +- Explicitly pass in the config_entry in steam_online coordinator ([@mib1185] - [#137929]) +- Explicitly pass in the config_entry in stookwijzer coordinator ([@mib1185] - [#137928]) +- Explicitly pass in the config_entry in smarty coordinator ([@mib1185] - [#137944]) +- Explicitly pass in the config_entry in seventeentrack coordinator ([@mib1185] - [#137956]) +- Explicitly pass in the config_entry in weheat coordinator ([@mib1185] - [#137868]) +- Explicitly pass in the config_entry in yolink coordinator ([@mib1185] - [#137861]) +- Explicitly pass in the config_entry in romy coordinator ([@mib1185] - [#137967]) +- Explicitly pass in the config_entry in tado coordinator ([@mib1185] - [#137916]) +- Explicitly pass in the config_entry in weatherkit coordinator ([@mib1185] - [#137869]) +- Explicitly pass in the config_entry in weatherflow_cloud coordinator ([@mib1185] - [#137871]) +- Explicitly pass in the config_entry in verisure coordinator ([@mib1185] - [#137879]) +- Explicitly pass in the config_entry in toon coordinator ([@mib1185] - [#137899]) +- Explicitly pass in the config_entry in upnp coordinator ([@mib1185] - [#137885]) +- Explicitly pass in the config_entry in rova coordinator ([@mib1185] - [#137966]) +- Improve emulated_hue logging to identify bad devices ([@stevesinchak] - [#137919]) +- Explicitly pass in the config_entry in ridwell coordinator ([@mib1185] - [#137973]) +- Explicitly pass in the config_entry in wallbox coordinator ([@mib1185] - [#137874]) +- Explicitly pass in the config_entry in volvooncall coordinator ([@mib1185] - [#137875]) +- Explicitly pass in the config_entry in vizio coordinator ([@mib1185] - [#137876]) +- Explicitly pass in the config_entry in rainbird coordinator ([@mib1185] - [#137982]) +- Small typing improvements ([@cdce8p] - [#137994]) +- Explicitly pass in the config_entry in roborock coordinator ([@mib1185] - [#137970]) +- Stream OpenAI messages into the chat log ([@balloob] - [#137400]) +- Fix sentence-casing in user-facing strings of screenlogic ([@NoRi2909] - [#138015]) +- Raise `ConfigEntryAuthFailed` at Home Connect update auth error ([@Diegorro98] - [#136953]) +- Explicitly pass in the config_entry in pvpc_hourly_pricing coordinator ([@mib1185] - [#138032]) +- Explicitly pass in the config_entry in openexchangerates coordinator ([@mib1185] - [#138053]) +- Explicitly pass in the config_entry in philips_js coordinator ([@mib1185] - [#138042]) +- Explicitly pass in the config_entry in withings coordinator ([@mib1185] - [#137866]) +- Explicitly pass in the config_entry in wemo coordinator ([@mib1185] - [#137867]) +- Explicitly pass in the config_entry in octoprint coordinator ([@mib1185] - [#138056]) +- Explicitly pass in the config_entry in yamaha_musiccast coordinator ([@mib1185] - [#137863]) +- Explicitly pass in the config_entry in version coordinator ([@mib1185] - [#137877]) +- Explicitly pass in the config_entry in vallox coordinator ([@mib1185] - [#137881]) +- Explicitly pass in the config_entry in ukraine_alarm coordinator ([@mib1185] - [#137886]) +- Explicitly pass in the config_entry in twinkly coordinator ([@mib1185] - [#137889]) +- Explicitly pass in the config_entry in transmission coordinator ([@mib1185] - [#137891]) +- Explicitly pass in the config_entry in tradfri coordinator ([@mib1185] - [#137892]) +- Explicitly pass in the config_entry in traccar_server coordinator ([@mib1185] - [#137893]) +- Explicitly pass in the config_entry in touchline_sl coordinator ([@mib1185] - [#137897]) +- Explicitly pass in the config_entry in tplink_omada coordinator ([@mib1185] - [#137895]) +- Explicitly pass in the config_entry in totalconnect coordinator ([@mib1185] - [#137898]) +- Explicitly pass in the config_entry in tomorrowio coordinator ([@mib1185] - [#137900]) +- Explicitly pass in the config_entry in tolo coordinator ([@mib1185] - [#137902]) +- Explicitly pass in the config_entry in tibber coordinator ([@mib1185] - [#137904]) +- Explicitly pass in the config_entry in thethingsnetwork coordinator ([@mib1185] - [#137905]) +- Explicitly pass in the config_entry in venstar coordinator ([@mib1185] - [#137880]) +- Explicitly pass in the config_entry in tessie coordinator ([@mib1185] - [#137906]) +- Explicitly pass in the config_entry in qnap_qsw coordinator ([@mib1185] - [#138027]) +- Explicitly pass in the config_entry in ping coordinator ([@mib1185] - [#138041]) +- Explicitly pass in the config_entry in technove coordinator ([@mib1185] - [#137910]) +- Explicitly pass in the config_entry in tautulli coordinator ([@mib1185] - [#137911]) +- Explicitly pass in the config_entry in tami4 coordinator ([@mib1185] - [#137912]) +- Explicitly pass in the config_entry in ohme coordinator ([@mib1185] - [#138055]) +- Explicitly pass in the config_entry in tailscale coordinator ([@mib1185] - [#137913]) +- Explicitly pass in the config_entry in system_bridge coordinator ([@mib1185] - [#137921]) +- Explicitly pass in the config_entry in switchbot_cloud coordinator ([@mib1185] - [#137922]) +- Explicitly pass in the config_entry in ondilo_ico coordinator ([@mib1185] - [#138054]) +- Explicitly pass in the config_entry in opengarage coordinator ([@mib1185] - [#138052]) +- Explicitly pass in the config_entry in starlink coordinator ([@mib1185] - [#137932]) +- Explicitly pass in the config_entry in openuv coordinator ([@mib1185] - [#138050]) +- Explicitly pass in the config_entry in purpleair coordinator ([@mib1185] - [#138034]) +- Explicitly pass in the config_entry in opensky coordinator ([@mib1185] - [#138051]) +- Explicitly pass in the config_entry in srp_energy coordinator ([@mib1185] - [#137933]) +- Explicitly pass in the config_entry in squeezebox coordinator ([@mib1185] - [#137934]) +- Explicitly pass in the config_entry in spotify coordinator ([@mib1185] - [#137935]) +- Explicitly pass in the config_entry in pyload coordinator ([@mib1185] - [#138031]) +- Explicitly pass in the config_entry in pvoutput coordinator ([@mib1185] - [#138033]) +- Explicitly pass in the config_entry in pure_energie coordinator ([@mib1185] - [#138035]) +- Explicitly pass in the config_entry in plaato coordinator ([@mib1185] - [#138040]) +- Explicitly pass in the config_entry in openweathermap coordinator ([@mib1185] - [#138049]) +- Explicitly pass in the config_entry in smlight coordinator ([@mib1185] - [#137943]) +- Explicitly pass in the config_entry in ourgroceries coordinator ([@mib1185] - [#138047]) +- Explicitly pass in the config_entry in sharkiq coordinator ([@mib1185] - [#137954]) +- Explicitly pass in the config_entry in sfr_box coordinator ([@mib1185] - [#137955]) +- Explicitly pass in the config_entry in sensoterra coordinator ([@mib1185] - [#137957]) +- Explicitly pass in the config_entry in sense coordinator ([@mib1185] - [#137958]) +- Explicitly pass in the config_entry in ruuvi_gateway coordinator ([@mib1185] - [#137964]) +- Explicitly pass in the config_entry in ruckus_unleashed coordinator ([@mib1185] - [#137965]) +- Explicitly pass in the config_entry in schlage coordinator ([@mib1185] - [#137959]) +- Explicitly pass in the config_entry in imap coordinator ([@jbouwh] - [#138068]) +- Explicitly pass in the config_entry in roku coordinator ([@mib1185] - [#137968]) +- Explicitly pass in the config_entry in rituals_perfume_genie coordinator ([@mib1185] - [#137971]) +- Explicitly pass in the config_entry in risco coordinator ([@mib1185] - [#137972]) +- Explicitly pass in the config_entry in renson coordinator ([@mib1185] - [#137974]) +- Explicitly pass in the config_entry in renault coordinator ([@mib1185] - [#137977]) +- Explicitly pass in the config_entry in refoss coordinator ([@mib1185] - [#137978]) +- Explicitly pass in the config_entry in snapcast coordinator ([@mib1185] - [#137942]) +- Explicitly pass in the config_entry in rainmachine coordinator ([@mib1185] - [#137979]) +- Explicitly pass in the config_entry in solarlog coordinator ([@mib1185] - [#137939]) +- Explicitly pass in the config_entry in tesla_fleet coordinator ([@mib1185] - [#137909]) +- Explicitly pass in the config_entry in sonarr coordinator ([@mib1185] - [#137938]) +- Explicitly pass in the config_entry in speedtestdotnet coordinator ([@mib1185] - [#137936]) +- Explicitly pass in the config_entry in teslemetry coordinator ([@mib1185] - [#137907]) +- Explicitly pass in the config_entry in rainforest_eagle coordinator ([@mib1185] - [#137981]) +- Explicitly pass in the config_entry in radiotherm coordinator ([@mib1185] - [#137983]) +- Explicitly pass in the config_entry in radarr coordinator ([@mib1185] - [#137984]) +- Explicitly pass in the config_entry in rabbitair coordinator ([@mib1185] - [#137985]) +- Explicitly pass in the config_entry in qnap coordinator ([@mib1185] - [#138028]) +- Explicitly pass in the config_entry in nexia coordinator ([@mib1185] - [#138073]) +- Explicitly pass in the config_entry in myuplink coordinator ([@mib1185] - [#138078]) +- Explicitly pass in the config_entry in nam coordinator ([@mib1185] - [#138076]) +- Explicitly pass in the config_entry in nanoleaf coordinator ([@mib1185] - [#138075]) +- Explicitly pass in the config_entry in netgear_lte coordinator ([@mib1185] - [#138074]) +- Explicitly pass in the config_entry in nextdns coordinator ([@mib1185] - [#138072]) +- Explicitly pass in the config_entry in nibe_heatpump coordinator ([@mib1185] - [#138071]) +- Explicitly pass in the config_entry in nice_go coordinator ([@mib1185] - [#138070]) +- Explicitly pass in the config_entry in palazzetti coordinator ([@mib1185] - [#138044]) +- Explicitly pass in the config_entry in notion coordinator ([@mib1185] - [#138066]) +- Explicitly pass in the config_entry in nuki coordinator ([@mib1185] - [#138064]) +- Explicitly pass in the config_entry in nws coordinator ([@mib1185] - [#138063]) +- Explicitly pass in the config_entry in nyt_games coordinator ([@mib1185] - [#138062]) +- Explicitly pass in the config_entry in nzbget coordinator ([@mib1185] - [#138061]) +- Explicitly pass in the config_entry in opower coordinator ([@mib1185] - [#138048]) +- Explicitly pass in the config_entry in moehlenhoff_alpha2 coordinator ([@mib1185] - [#138083]) +- Explicitly pass in the config_entry in monarch_money coordinator ([@mib1185] - [#138082]) +- Explicitly pass in the config_entry in monzo coordinator ([@mib1185] - [#138081]) +- Explicitly pass in the config_entry in plugwise coordinator ([@mib1185] - [#138039]) +- Explicitly pass in the config_entry in poolsense coordinator ([@mib1185] - [#138038]) +- Explicitly pass in the config_entry in powerfox coordinator ([@mib1185] - [#138037]) +- Explicitly pass in the config_entry in prusalink coordinator ([@mib1185] - [#138036]) +- Explicitly pass in the config_entry in qbittorrent coordinator ([@mib1185] - [#138029]) +- Explicitly pass in the config_entry in motion_blinds coordinator ([@mib1185] - [#138080]) +- Explicitly pass in the config_entry in modern_forms coordinator ([@mib1185] - [#138085]) +- Explicitly pass in the config_entry in minecraft_server coordinator ([@mib1185] - [#138086]) +- Explicitly pass in the config_entry in mill coordinator ([@mib1185] - [#138088]) +- Explicitly pass in the config_entry in mikrotik coordinator ([@mib1185] - [#138089]) +- Explicitly pass in the config_entry in microbees coordinator ([@mib1185] - [#138090]) +- Explicitly pass in the config_entry in met coordinator ([@mib1185] - [#138091]) +- Explicitly pass in the config_entry in melnor coordinator ([@mib1185] - [#138092]) +- Explicitly pass in the config_entry in mealie coordinator ([@mib1185] - [#138093]) +- Explicitly pass in the config_entry in mastodon coordinator ([@mib1185] - [#138094]) +- Explicitly pass in the config_entry in permobil coordinator ([@mib1185] - [#138043]) +- Explicitly pass in the config_entry in p1_monitor coordinator ([@mib1185] - [#138045]) +- Explicitly pass in the config_entry in overkiz coordinator ([@mib1185] - [#138046]) +- Explicitly pass in the config_entry in nina coordinator ([@mib1185] - [#138069]) +- Explicitly pass in the config_entry in teslemetry coordinator ([@mib1185] - [#138102]) +- Explicitly pass in the config_entry in starlink coordinator ([@mib1185] - [#138103]) +- Explicitly pass in the config_entry in loqed coordinator ([@mib1185] - [#138106]) +- Explicitly pass in the config_entry in linear_garage_door coordinator ([@mib1185] - [#138109]) +- Explicitly pass in the config_entry in squeezebox coordinator ([@mib1185] - [#138105]) +- Explicitly pass in the config_entry in lookin coordinator ([@mib1185] - [#138107]) +- Explicitly pass in the config_entry in livisi coordinator ([@mib1185] - [#138108]) +- Explicitly pass in the config_entry in lidarr coordinator ([@mib1185] - [#138111]) +- Explicitly pass in the config_entry in lg_thinq coordinator ([@mib1185] - [#138113]) +- Explicitly pass in the config_entry in lektrico coordinator ([@mib1185] - [#138114]) +- Explicitly pass in the config_entry in ld2410_ble coordinator ([@mib1185] - [#138115]) +- Explicitly pass in the config_entry in laundrify coordinator ([@mib1185] - [#138116]) +- Explicitly pass in the config_entry in lastfm coordinator ([@mib1185] - [#138117]) +- Explicitly pass in the config_entry in landisgyr_heat_meter coordinator ([@mib1185] - [#138119]) +- Explicitly pass in the config_entry in lametric coordinator ([@mib1185] - [#138120]) +- Explicitly pass in the config_entry in lifx coordinator ([@mib1185] - [#138110]) +- Explicitly pass in the config_entry in incomfort coordinator ([@jbouwh] - [#138131]) +- Explicitly pass in the config_entry in iskra coordinator ([@mib1185] - [#138134]) +- Explicitly pass in the config_entry in knocki coordinator ([@mib1185] - [#138125]) +- Explicitly pass in the config_entry in ista_ecotrend coordinator ([@mib1185] - [#138130]) +- Explicitly pass in the config_entry in jellyfin coordinator ([@mib1185] - [#138129]) +- Explicitly pass in the config_entry in imgw_pib coordinator ([@mib1185] - [#138144]) +- Explicitly pass in the config_entry in justnimbus coordinator ([@mib1185] - [#138128]) +- Explicitly pass in the config_entry in jvc_projector coordinator ([@mib1185] - [#138127]) +- Explicitly pass in the config_entry in kostal_plenticore coordinator ([@mib1185] - [#138124]) +- Explicitly pass in the config_entry in lacrosse_view coordinator ([@mib1185] - [#138122]) +- Explicitly pass in the config_entry in ialarm coordinator ([@mib1185] - [#138147]) +- Explicitly pass in the config_entry in israel_rail coordinator ([@mib1185] - [#138132]) +- Explicitly pass in the config_entry in iotty coordinator ([@mib1185] - [#138140]) +- Explicitly pass in the config_entry in islamic_prayer_times coordinator ([@mib1185] - [#138133]) +- Explicitly pass in the config_entry in iotawatt coordinator ([@mib1185] - [#138141]) +- Explicitly pass in the config_entry in idasen_desk coordinator ([@mib1185] - [#138146]) +- Explicitly pass in the config_entry in husqvarna_automower coordinator ([@mib1185] - [#138149]) +- Remove non-existing via_device in La Crosse View ([@IceBotYT] - [#137995]) +- Explicitly pass in the config_entry in husqvarna_automower_ble coordinator ([@mib1185] - [#138150]) +- Explicitly pass in the config_entry in homewizard coordinator ([@mib1185] - [#138152]) +- Explicitly pass in the config_entry in iometer coordinator ([@mib1185] - [#138142]) +- Explicitly pass in the config_entry in intellifire coordinator ([@mib1185] - [#138143]) +- Explicitly pass in the config_entry in here_travel_time coordinator ([@mib1185] - [#138155]) +- Explicitly pass in the config_entry in hko coordinator ([@mib1185] - [#138154]) +- Explicitly pass in the config_entry in hunterdouglas_powerview coordinator ([@mib1185] - [#138151]) +- Explicitly pass in the config_entry in habitica coordinator ([@mib1185] - [#138156]) +- Explicitly pass in the config_entry in hydrawise coordinator ([@mib1185] - [#138148]) +- Explicitly pass in the config_entry in iron_os coordinator ([@mib1185] - [#138137]) +- Explicitly pass in the config_entry in ipp coordinator ([@mib1185] - [#138138]) +- Explicitly pass in the config_entry in homeassistant_alerts coordinator ([@mib1185] - [#138153]) +- Revert "Clear statistics when you unload the Opower integration (#135908)" ([@jbouwh] - [#138163]) +- Add unique ID for NOAA Tides sensor ([@jdelaney72] - [#137988]) +- Add scene support to roborock ([@regevbr] - [#137203]) +- Update ollama to use the ChatLog/ChatSession APIs ([@allenporter] - [#138167]) +- Use generics for deprecation helpers ([@cdce8p] - [#138171]) +- Add extra tests to `flick_electric` ([@ZephireNZ] - [#138017]) +- Bump google-cloud-pubsub to 2.28.0 ([@bdraco] - [#137742]) +- Bump pyeconet to 0.1.27 ([@w1ll1am23] - [#136400]) +- Add battery level sensor for ViCare zigbee devices ([@CFenner] - [#137813]) +- Add optional media description to Mastodon post action ([@andrew-codechimp] - [#137224]) +- Replace duplicate keys with reference, improve field description ([@NoRi2909] - [#138123]) +- Fix user input not added to chat log from contextvar ([@balloob] - [#138173]) +- Make MockChatLog reusable for other integrations ([@balloob] - [#138112]) +- Add pipeline intent-progress events based on deltas ([@balloob] - [#138095]) +- Update anthropic to use the new chatlog API ([@allenporter] - [#138178]) +- Update Ollama to use streaming API ([@allenporter] - [#138177]) +- Add pglab integration ([@pglab-electronics] - [#109725]) +- Add authorities to london_air ([@kiranbhakre] - [#137349]) +- Improve blueprint importer typing ([@cdce8p] - [#138194]) +- Adjust 'Install all test requirements' task to include base requirements ([@epenet] - [#137642]) +- Bump pybalboa to 1.1.2 ([@natekspencer] - [#138139]) +- Merge config subentry feature branch to dev ([@emontnemery] - [#136121]) +- Improve description in Intergas entry setup form ([@jbouwh] - [#138225]) +- Add caching to onedrive ([@zweckj] - [#137950]) +- bump pyHomee to 1.2.7 ([@Taraman17] - [#138212]) +- Bump github/codeql-action from 3.28.8 to 3.28.9 (@dependabot - [#138184]) +- Allow ignored IronOS devices to be set up from the user flow ([@tr4nt0r] - [#138223]) +- Replace (wrong) xiaomi vacuum action key names with friendly names ([@NoRi2909] - [#138214]) +- Change light.turn_on and light.turn_off descriptions to match HA style ([@NoRi2909] - [#138213]) +- Rework ondilo ico coordinator ([@MartinHjelmare] - [#138204]) +- Update signature of platforms' async_setup_entry ([@emontnemery] - [#138201]) +- Add Wyoming satellite announce ([@synesthesiam] - [#138221]) +- Bump aiodiscover to 2.6.0 ([@bdraco] - [#138239]) +- Add test for trying to add an entity to an unknown config subentry ([@emontnemery] - [#138211]) +- Allow specifying SIP username for outgoing calls ([@jaminh] - [#137059]) +- Bump pyipma to 3.0.9 ([@dgomes] - [#138238]) +- Remove some unused tests from Google Generative AI ([@balloob] - [#138249]) +- Unify error reporting in onboarding backup API ([@emontnemery] - [#138200]) +- Remove question marks and "true/false" from action fields in zwave_js ([@NoRi2909] - [#138263]) +- Remove "true" / "false" from field descriptions in osoenergy ([@NoRi2909] - [#138267]) +- Make field descriptions in knx actions UI-friendly ([@NoRi2909] - [#138268]) +- Add user profile info to Habitica sensor and device URL ([@tr4nt0r] - [#137152]) +- Improve device naming for ViCare integration ([@CFenner] - [#138240]) +- Simplify the description of insteon.load_all_link_database action ([@NoRi2909] - [#138275]) +- Update signature of platforms' async_setup_entry in tests ([@emontnemery] - [#138271]) +- Improve config_entries tests ([@emontnemery] - [#138274]) +- Improve error reporting in onboarding backup API ([@emontnemery] - [#138203]) +- Flexit BACnet: Cooker hood mode support ([@piotrbulinski] - [#138229]) +- Add test helper for creating a mocked backup agent ([@emontnemery] - [#138294]) +- Fix scaffolding integration generation ([@stevenh] - [#138247]) +- Use runtime_data in fjaraskupan ([@epenet] - [#138281]) +- Use runtime_data in flexit_bacnet ([@epenet] - [#138280]) +- Use runtime_data in flux_led ([@epenet] - [#138279]) +- Keep responding state on wake word start ([@synesthesiam] - [#138244]) +- Set PARALLEL_UPDATES for MotionMount integration ([@RJPoelstra] - [#138264]) +- Dsmr eon hungary ([@balazs92117] - [#138162]) +- Do not test internals in flo tests ([@epenet] - [#138306]) +- Use runtime_data in flo ([@epenet] - [#138307]) +- Refactor SmartThings sensor platform ([@joostlek] - [#138313]) +- Fix data_entry_flow.UnknownStep error message ([@emontnemery] - [#138288]) +- Improve user-facing strings of denonavr for better translations ([@NoRi2909] - [#138322]) +- Improve type hints in forked_daapd coordinator ([@epenet] - [#138287]) +- Remove remaining occurrences of "true" / "false" in telegram_bot ([@NoRi2909] - [#138329]) +- Remove "true" / "false" and key name from yeelight.set_music_mode action ([@NoRi2909] - [#138334]) +- Allow timer.finish on paused timers ([@rrooggiieerr] - [#134552]) +- Improve test coverage of config subentries and fix related issues ([@emontnemery] - [#138321]) +- Fix timer.cancel action fires timer.cancelled event even on canceled timers ([@rrooggiieerr] - [#134507]) +- Add logs to Cloud component support package ([@abmantis] - [#138230]) +- Update anthropic to use the streaming API ([@allenporter] - [#138256]) +- Expose media_player async_browse_media as service ([@PeteRager] - [#116452]) +- Use test helper for creating a mocked backup agent in backup tests ([@emontnemery] - [#138312]) +- Use entry.async_on_unload in fireservicerota ([@epenet] - [#138360]) +- Use setup_backup_integration test helper in backup tests ([@emontnemery] - [#138362]) +- Fix authentication error when adding new devices to SMLIGHT ([@tl-sl] - [#138373]) +- Improve field names and descriptions of easyEnergy actions ([@NoRi2909] - [#138319]) +- Add Homee sensor tests ([@Taraman17] - [#137200]) +- Fix typos in user-facing strings of Bayesian integration ([@NoRi2909] - [#138364]) +- Use runtime_data in geo_json_events ([@epenet] - [#138366]) +- Use runtime_data in fireservicerota ([@epenet] - [#138361]) +- Add missing loggers to Cloud ([@abmantis] - [#138374]) +- Bump stookwijzer to 1.5.2 ([@fwestenberg] - [#138384]) +- Remove unused arguments in forked_daapd initialisation ([@epenet] - [#138289]) +- Bump ohmepy to 1.3.0 ([@dan-r] - [#138380]) +- Add sensor platform to OneDrive for drive usage ([@zweckj] - [#138232]) +- Improve test coverage for onedrive ([@zweckj] - [#138410]) +- OTBR firmware API for Home Assistant Hardware ([@puddly] - [#138330]) +- Set suggested display precision in La Crosse View ([@IceBotYT] - [#138355]) +- Improve test coverage for letpot ([@jpelgrom] - [#138420]) +- Handle no_readings in La Crosse View ([@IceBotYT] - [#138354]) +- Add error handling to enphase_envoy select platform action ([@catsmanac] - [#136698]) +- Make descriptions of `data` fields in notify actions UI-friendly ([@NoRi2909] - [#138431]) +- Add night light brightness level setting to VeSync ([@iprak] - [#137544]) +- Replace wrong description reference of isy994.send_node_command ([@NoRi2909] - [#138385]) +- Simplify stage 1 in bootstrap ([@arturpragacz] - [#137668]) +- Starlink migration to `StarlinkConfigEntry` ([@davidrapan] - [#137896]) +- Mark entity-device-class as done for motionmount integration ([@RJPoelstra] - [#138459]) +- Fix Tuya unsupported cameras ([@maghiel] - [#136960]) +- Add sonos_websocket to Sonos loggers ([@PeteRager] - [#138470]) +- Replace `config.yaml` with correct `configuration.yaml` in folder_watcher ([@NoRi2909] - [#138434]) +- Bump opower to 0.9.0 ([@tronikos] - [#138433]) +- Fix race configuring zeroconf ([@bdraco] - [#138425]) +- Upgrade paho-mqtt API to v2 ([@jbouwh] - [#137613]) +- Remove scan interval option from Synology DSM ([@mib1185] - [#138490]) +- Bump PyViCare to 2.42.1 ([@CFenner] - [#138494]) +- squeezebox bump pysqueezebox to 0.12.0 ([@pssc] - [#138205]) +- Improve descriptions of snooz.transition_xx actions ([@NoRi2909] - [#138403]) +- Add entity category to non primary entities for motionmount integration ([@RJPoelstra] - [#138436]) +- Update quality scale to platinum 🏆️ for Bring! integration ([@tr4nt0r] - [#138202]) +- Disable less used entities by default in MotionMount integration ([@RJPoelstra] - [#138509]) +- Improve tests of removing and unloading config entries ([@emontnemery] - [#138432]) +- Add icon translation to MotionMount integration ([@RJPoelstra] - [#138520]) +- Fix action descriptions in Xiaomi Miio integration ([@NoRi2909] - [#138476]) +- Add sensor platform to LetPot integration ([@jpelgrom] - [#138491]) +- Bump arcam-fmj to 1.8.0 ([@jgus] - [#138422]) +- Refactor and add tests to image platform of Habitica ([@tr4nt0r] - [#135897]) +- Bump aiohttp-asyncmdnsresolver to 0.1.1 ([@bdraco] - [#138534]) +- Update action descriptions of weather integration ([@NoRi2909] - [#138540]) +- Set quality scale to platinum 🏆️ for Habitica integration ([@tr4nt0r] - [#136076]) +- Improved auth failure handling in Nice G.O. ([@IceBotYT] - [#136607]) +- Add Home Connect action with recognized programs and options ([@Diegorro98] - [#130662]) +- Add binary sensor platform to LetPot integration ([@jpelgrom] - [#138554]) +- Add 6 new sensors to qBittorrent integration ([@Xitee1] - [#138446]) +- Add time entity to balboa ([@natekspencer] - [#138248]) +- Bump aioesphomeapi to 29.0.2 ([@bdraco] - [#138549]) +- Prevent voice wizard from crashing for wyoming/voip ([@synesthesiam] - [#138547]) +- Bump zeroconf to 0.144.3 ([@bdraco] - [#138553]) +- Use language util to match intent language ([@synesthesiam] - [#138560]) +- Fix and improve Home Connect strings ([@Diegorro98] - [#138583]) +- Bump pybalboa to 1.1.3 ([@natekspencer] - [#138557]) +- Bump PyViCare to 2.43.0 ([@CFenner] - [#138564]) +- Remove dynamic rate limits from Tesla Fleet ([@Bre77] - [#138576]) +- Add Event entity states to diagnostics for Bang & Olufsen ([@mj23000] - [#135859]) +- Provide part of uuid when requesting token for HomeWizard v2 API ([@DCSBL] - [#138586]) +- Fix home connect coffe-milk ratio option ([@Diegorro98] - [#138593]) +- Disable zwave_js testing resetting the controller ([@emontnemery] - [#138595]) +- Add switch to toggle filter cycle 2 on balboa spas ([@natekspencer] - [#138605]) +- Bump pyeconet to 0.1.28 ([@CodingSquirrel] - [#138610]) +- Bump plugwise to v1.7.2 ([@bouwew] - [#138613]) +- Add issues for data cap to onedrive ([@zweckj] - [#138411]) +- Replace alarm action descriptions with wording from online docs ([@NoRi2909] - [#138608]) +- Update integrations screenshot in README ([@IceBotYT] - [#138555]) +- Update action description in ecovacs integration to match HA style ([@NoRi2909] - [#138548]) +- Use correct inputs for relative time and duration options ([@Diegorro98] - [#138619]) +- Add missing unit for Withings snore sensor ([@teynar] - [#138517]) +- Fix sentence-casing in ZHA integration, capitalize names ([@NoRi2909] - [#138636]) +- Use gibibytes for onedrive ([@zweckj] - [#138637]) +- Replace opentherm_gw action key name with friendly name for UI ([@NoRi2909] - [#138634]) +- Fix sentence-casing and capitalization of "Zigbee" in smlight ([@NoRi2909] - [#138647]) +- Flexit bacnet/quality preparations ([@lellky] - [#138514]) +- Allow wifi switches for mesh repeaters in AVM Fritz!Box Tools ([@mib1185] - [#135456]) +- Add quality scale bronze for flexit_bacnet ([@lellky] - [#138309]) +- Bump sense_energy to 0.13.5 ([@kbickar] - [#138659]) +- Allow renaming of backup files in Synology DSM ([@mib1185] - [#138652]) +- Improve remember the milk storage ([@MartinHjelmare] - [#138618]) +- Add OptionsFlow to Squeezebox to allow setting Browse Limit and Volume Step ([@peteS-UK] - [#129578]) +- Add latest Nighthawk WiFi 7 routers to V2 models ([@lanthaler] - [#138675]) +- Bump stookwijzer==1.5.4 ([@fwestenberg] - [#138678]) +- Move some setups during onboarding to background ([@balloob] - [#138558]) +- Allow removal of stale HEOS devices ([@andrewsayre] - [#138677]) +- Comply with parallel updates quality rule ([@lellky] - [#138672]) +- Update foscam action descriptions to match HA style ([@NoRi2909] - [#138664]) +- Add preconditioning number entity to Ohme ([@dan-r] - [#138346]) +- Improve 17track action descriptions by using those from the online docs ([@NoRi2909] - [#138698]) +- Elmax - fix issue 136877 ([@albertogeniola] - [#138419]) +- Fix casing in Sensibo action descriptions ([@NoRi2909] - [#138701]) +- Bump yolink api 0.4.8 ([@matrixd2] - [#138703]) +- Bump uv to 0.6.0 ([@edenhaus] - [#138707]) +- Optimize Refoss state_class of Sensor ([@ashionky] - [#138266]) +- Add repair-issue that backup location setup is missing in Synology DSM ([@mib1185] - [#138233]) +- Use correct camel-case for OpenThread, reword error message ([@NoRi2909] - [#138651]) +- Improve type hints in base entities ([@epenet] - [#138708]) +- Add common entity module to pylint plugin ([@epenet] - [#138706]) +- Update mypy-dev to 1.16.0a3 ([@cdce8p] - [#138655]) +- Fix snapshots timezone in Cloud tests ([@abmantis] - [#138393]) +- Add translations for exceptions ([@lellky] - [#138669]) +- Create HEOS devices after integration setup ([@andrewsayre] - [#138721]) +- Add LV-RH131S-WM Air Purifier ([@CloCkWeRX] - [#138626]) +- Move ZHA debug logs handling out of event loop ([@abmantis] - [#138568]) +- Add sensors for washer and system boiler in LG ThinQ ([@LG-ThinQ-Integration] - [#137514]) +- Improve config entry state transitions when unloading and removing entries ([@emontnemery] - [#138522]) +- Fix typos in qBittorrent exceptions strings ([@NoRi2909] - [#138728]) +- Update HEOS repair issues quality scale item ([@andrewsayre] - [#138724]) +- Fix race condition on eheimdigital coordinator setup ([@autinerd] - [#138580]) +- Fix small typo in qbittorrent strings.json ([@Xitee1] - [#138734]) +- Fix user-facing strings of the NWS integration ([@NoRi2909] - [#138727]) +- Mark reauthentication-flow as exempt for flexit_bacnet ([@lellky] - [#138740]) +- Mark action-exceptions as exempt for flexit_bacnet ([@lellky] - [#138739]) +- Fix wrong description of teslemetry.set_scheduled_charging action ([@NoRi2909] - [#138723]) +- Bump PyViCare to 2.43.1 ([@CFenner] - [#138737]) +- Bump aioesphomeapi to 29.1.0 ([@bdraco] - [#138742]) +- Fix temp files of mqtt CI tests not cleaned up properly ([@jbouwh] - [#138741]) +- Update Diagnostics in Teslemetry ([@Bre77] - [#138759]) +- Allow playback of h265 encoded Reolink video ([@starkillerOG] - [#138667]) +- Bump zeroconf to 0.145.1 ([@bdraco] - [#138763]) +- Fixing casing mistakes in user-facing strings of renault ([@NoRi2909] - [#138729]) +- Make spelling of "BSB-Lan" consistent ([@NoRi2909] - [#138766]) +- Fix Z-WaveJS inclusion in the background ([@MindFreeze] - [#138717]) +- Fix grammar in evohome.reset_system action, consistently add "mode" ([@NoRi2909] - [#138777]) +- Add support for announce to Squeezebox media player ([@peteS-UK] - [#129460]) +- Add HEOS entity service to set group volume level ([@andrewsayre] - [#136885]) +- airq: add more verbose debug logging ([@Sibgatulin] - [#138192]) +- Add threshold sensor to Aranet ([@parkerbxyz] - [#137291]) +- Add switch flex button support. ([@matrixd2] - [#137524]) +- Add `_shelly._tcp` to Shelly zeroconf configuration ([@bieniu] - [#138782]) +- Ecobee: Report Humidifier Action ([@SLaks] - [#138756]) +- Bump uv to 0.6.1 ([@edenhaus] - [#138790]) +- Reorder Dockerfile to improve caching ([@edenhaus] - [#138789]) +- Fix shelly not being able to be setup from user flow when already discovered ([@bdraco] - [#138807]) +- Add Home Connect to .strict-typing ([@Diegorro98] - [#138799]) +- Add Home Connect entities that weren't added before ([@Diegorro98] - [#138796]) +- Set Home Connect beverages counters as diagnostics ([@Diegorro98] - [#138798]) +- Add connectivity binary sensor to Home Connect ([@Diegorro98] - [#138795]) +- Update Home Assistant base image to 2025.02.1 ([@frenck] - [#138746]) +- Fix typos in strings.json files ([@CFenner] - [#138601]) +- Add HEOS group volume down/up actions ([@andrewsayre] - [#138801]) +- Set clean_start=True on connect to MQTT broker ([@skobow] - [#136026]) +- Bump aioesphomeapi to 29.1.1 ([@bdraco] - [#138827]) +- Move blocking code to executor job in MQTT CI test helper ([@jbouwh] - [#138815]) +- Bump habluetooth to 3.22.0 ([@bdraco] - [#138812]) +- Add button for bond light temp toggle feature ([@HA-Roberto] - [#135379]) +- Electric Kiwi: Add quality scale ([@mikey0000] - [#138680]) +- add icon to select ([@mikey0000] - [#138834]) +- Add test for flexit_bacnet hvac mode ([@lellky] - [#138748]) +- Improve performance of calculating state ([@bdraco] - [#138832]) +- Add sensors for pellets boiler in ViCare integration ([@CFenner] - [#138563]) +- Electric Kiwi: Parallel updates ([@mikey0000] - [#138839]) +- Remove unused code in the climate entity of the flexit_bacnet integration ([@lellky] - [#138840]) +- Update xknx to 3.6.0 ([@farmio] - [#138838]) +- Modify string water_heater's off state ([@LG-ThinQ-Integration] - [#137627]) +- Add check_connection parameter to cloud login methods and handle AlreadyConnectedError ([@ludeeus] - [#138699]) +- Adds Tado Child Lock support ([@proohit] - [#135837]) +- Add WIND_DIRECTION to SensorDeviceClass and NumberDeviceClass ([@edenhaus] - [#138714]) +- Refactor eheimdigital setup_device_entities ([@autinerd] - [#138837]) +- Homee switch platform ([@Taraman17] - [#137457]) +- Update play_media parameter description in Media Player ([@PeteRager] - [#138855]) +- Revert "Add assistant filter to expose entities list command" ([@emontnemery] - [#138867]) +- Improve reading clarity of steps code in scripts helper part 1 ([@arturpragacz] - [#138628]) +- Add exception translation for async_set_temperature in integration flexit_bacnet ([@lellky] - [#138870]) +- Select preferred discovered HEOS host ([@andrewsayre] - [#138779]) +- Bump onedrive-personal-sdk to 0.0.11 ([@zweckj] - [#138861]) +- Improve reading clarity of steps code in scripts helper ([@arturpragacz] - [#134395]) +- Capitalize all occurrences of "Bond" brand name ([@NoRi2909] - [#138876]) +- Tuya camera rm duplication ([@maghiel] - [#138794]) +- Make field description of snips.say_action UI-friendly ([@NoRi2909] - [#138276]) +- Fix scaffolding generations ([@stevenh] - [#138820]) +- Make description of `input_select.select_next` action consistent ([@NoRi2909] - [#138877]) +- Filter out certain intents from being matched in local fallback ([@balloob] - [#137763]) +- Add LINAK virtual integration supported by Idasen Desk ([@abmantis] - [#138749]) +- Remove some dead code from the conversation integration ([@emontnemery] - [#138878]) +- Add initial basic GitHub Copilot instructions ([@frenck] - [#137754]) +- Environment Canada: Add a detailed forecast action ([@gwww] - [#138806]) +- Switch cleanup for Shelly (part 1) ([@chemelli74] - [#138791]) +- Use xmod model info for Shelly XMOD devices ([@chemelli74] - [#137013]) +- Bump pyloadapi to 1.4.1 ([@tr4nt0r] - [#138894]) +- Add light platform to qbus ([@thomasddn] - [#136168]) +- Move test before setup coordinator `_async_setup` in pyLoad integration ([@tr4nt0r] - [#138893]) +- Set parallel_updates in pyLoad integration ([@tr4nt0r] - [#138897]) +- Minor readability improvement of Spotify browse media ([@emontnemery] - [#138907]) +- Bump docker/build-push-action from 6.13.0 to 6.14.0 (@dependabot - [#138902]) +- Adjust config entry state checks in qbus ([@emontnemery] - [#138911]) +- Adjust config entry state checks in reolink ([@emontnemery] - [#138909]) +- Adjust config entry state check in yolink ([@emontnemery] - [#138904]) +- Bump actions/cache from 4.2.0 to 4.2.1 (@dependabot - [#138901]) +- Adjust config entry state checks in esphome ([@emontnemery] - [#138914]) +- Adjust config entry state checks in renault ([@emontnemery] - [#138910]) +- Adjust config entry state checks in mcp_server ([@emontnemery] - [#138913]) +- Adjust config entry state checks in nest ([@emontnemery] - [#138912]) +- Adjust cleanup of removed integration aladdin_connect ([@emontnemery] - [#138917]) +- Improve action descriptions of ness_alarm integration ([@NoRi2909] - [#138921]) +- Bump bluetooth-auto-recovery to 1.4.4 ([@bdraco] - [#138895]) +- Allow use of insecure ciphers in rest_command ([@jpbede] - [#138886]) +- Add button platform to Homee ([@Taraman17] - [#138923]) +- Adjust cleanup of removed integration eight_sleep ([@emontnemery] - [#138926]) +- Adjust cleanup of removed integration life360 ([@emontnemery] - [#138928]) +- Adjust cleanup of removed integration linear_garage_door ([@emontnemery] - [#138929]) +- Adjust cleanup of removed integration mazda ([@emontnemery] - [#138930]) +- Adjust cleanup of removed integration myq ([@emontnemery] - [#138931]) +- Adjust cleanup of removed integration spider ([@emontnemery] - [#138932]) +- Bump habluetooth to 3.22.1 and bleak-retry-connector to 3.9.0 ([@bdraco] - [#138898]) +- Fix ability to set HEOS options ([@andrewsayre] - [#138235]) +- Allow files to be directly deleted in onedrive ([@zweckj] - [#138908]) +- Remove helper.recorder.async_wait_recorder ([@emontnemery] - [#138935]) +- Add SensorPush Cloud integration ([@sstallion] - [#134223]) +- Adjust config entry state check in vizio ([@emontnemery] - [#138905]) +- Bump ruff to 0.9.7 ([@joostlek] - [#138939]) +- Add climate entity tests for flexit_bacnet and mark test coverage done (99%) ([@lellky] - [#138887]) +- Minor adjustment of recorder helper ([@emontnemery] - [#138941]) +- Improve names and descriptions of `media_player.xxx_set` actions ([@NoRi2909] - [#138773]) +- Add light platform to Homee ([@Taraman17] - [#138776]) +- Revert Python 3.13.2 requirement for now ([@frenck] - [#138948]) +- Add error handling to enphase_envoy number platform action ([@catsmanac] - [#136812]) +- Bump propcache to 0.3.0 ([@bdraco] - [#138949]) +- Use capitalized "Modbus" as name, replace "slave" with "server" ([@NoRi2909] - [#138945]) +- Restore `PaddleSwitchPico` (Pico Paddle Remote) device trigger to Lutron Caseta ([@bdraco] - [#137689]) +- Adjust DSL line status options in SFR Box integration ([@epenet] - [#136425]) +- Bump arcam-fmj to 1.8.1 ([@jgus] - [#138959]) +- Jellyfin - Improve media image quality ([@zackslash] - [#138958]) +- Add debug launch configuration for current open test file ([@proohit] - [#137177]) +- Bump inkbird-ble to 0.7.0 ([@bdraco] - [#138964]) +- Bump universal-silabs-flasher to v0.0.29 ([@puddly] - [#138970]) +- Add ability to get callback when a config entry state changes ([@zweckj] - [#138943]) +- Mark flexit_bacnet as silver on the quality scale 🥈 ([@lellky] - [#138951]) +- Remember inkbird device type in the config entry ([@bdraco] - [#138967]) +- Bump aiounifi to v82 ([@Samywamy10] - [#138975]) +- Media Player tests patch demo object ([@PeteRager] - [#138854]) +- Update HEOS host from discovery ([@andrewsayre] - [#138950]) +- Extend initial IQS state for ViCare ([@CFenner] - [#138952]) +- Homee: fix state_class of rain sensors. ([@Taraman17] - [#138310]) +- Bump sigstore/cosign-installer from 3.8.0 to 3.8.1 (@dependabot - [#138973]) +- Migrate `homeassistant_hardware` to use `FirmwareInfo` instead of just the application type ([@puddly] - [#138874]) +- Don't fail on successful relogin in pyLoad integration ([@tr4nt0r] - [#138936]) +- Fix off by one bug when sorting tasks in Habitica integration ([@tr4nt0r] - [#138993]) +- Add remember the milk entity tests ([@MartinHjelmare] - [#138991]) +- Fix Shelly model name for xmod devices ([@thecode] - [#138984]) +- Unifi zone based rules ([@Samywamy10] - [#138974]) +- Bump wolf-comm to 0.0.19 ([@mtielen] - [#138997]) +- Bump qbusmqttapi to 1.3.0 ([@thomasddn] - [#139000]) +- Fix Shelly mock initialization for sleepy RPC device in tests ([@thecode] - [#139003]) +- Bump HEOS quality scale to platinum ([@andrewsayre] - [#138995]) +- Add daily and monthly consumption sensors to the rympro integration ([@nivstein] - [#137953]) +- Allow ignored thermobeacon devices to be set up from the user flow ([@bdraco] - [#139009]) +- Bump pyfritzhome 0.6.16 ([@mib1185] - [#139011]) +- Add target_temp_step attribute to water_heater ([@LG-ThinQ-Integration] - [#138920]) +- Add button to set date and time for thermopro TP358/TP393 ([@stephan48] - [#135740]) +- Fix write_registers calling after the upgrade of pymodbus to 3.8.x ([@crug80] - [#139017]) +- Swap the Gemini SDK to the newly released Unified SDK ([@IvanLH] - [#138246]) +- Adjust config entry state check in unifi ([@emontnemery] - [#138906]) +- Bump habluetooth to 3.24.0 ([@bdraco] - [#139021]) +- Fix station parser problem in Trafikverket Train ([@gjohansson-ST] - [#139035]) +- Implement base entity for smhi ([@gjohansson-ST] - [#139042]) +- Bump holidays to 0.67 ([@gjohansson-ST] - [#139036]) +- Bump async-interrupt to 1.2.2 ([@bdraco] - [#139056]) +- Bump aiodhcpwatcher to 1.1.1 ([@bdraco] - [#139058]) +- Bump aiohttp-fast-zlib to 0.2.3 ([@bdraco] - [#139062]) +- Bump fnv-hash-fast to 1.2.3 ([@bdraco] - [#139059]) +- Improve descriptions in `nuki.lock_n_go` action ([@NoRi2909] - [#139067]) +- Bump Stookwijzer to 1.5.7 ([@fwestenberg] - [#139063]) +- Bump cached-ipaddress to 0.8.1 ([@bdraco] - [#139061]) +- Use ConfigEntry.runtime_data to store Minecraft Server runtime data ([@elmurato] - [#139039]) +- Bump ulid-transform to 1.2.1 ([@bdraco] - [#139054]) +- Bump pyrisco to 0.6.7 ([@FredericMa] - [#139065]) +- Bump pyfritzhome to 0.6.17 ([@mib1185] - [#139066]) +- Fix docstring parameter in entity platform ([@joostlek] - [#139070]) +- Add entities that represent program options to Home Connect ([@Diegorro98] - [#138674]) +- Add buttons to Home Connect ([@Diegorro98] - [#138792]) +- Fix minimum schema version to run event_id_post_migration ([@bdraco] - [#139014]) +- Fix dryer's remaining time issue ([@LG-ThinQ-Integration] - [#138764]) +- Bump aiodiscover to 2.6.1 ([@bdraco] - [#139055]) +- Remove unnecessary debug message from vesync ([@iprak] - [#139083]) +- Bump py-synologydsm-api to 2.7.0 ([@mib1185] - [#139082]) +- Add select setting entities to Home Connect ([@Diegorro98] - [#138884]) +- Fix typo in SSH connection string for cisco ios device_tracker ([@javers99] - [#138584]) +- Bump pyprosegur to 0.0.14 ([@dgomes] - [#139077]) +- OpenAI to report when running out of funds ([@balloob] - [#139088]) +- Add tests to Evohome for its native services ([@zxdavb] - [#139104]) +- Add Home Connect functional light color temperature percent setting ([@Diegorro98] - [#139096]) +- Backup location feature requires Synology DSM 6.0 and higher ([@mib1185] - [#139106]) +- Fetch allowed values for select entities at Home Connect ([@Diegorro98] - [#139103]) +- Bump aiohue to 4.7.4 ([@joostlek] - [#139108]) +- Waze action support entities ([@TomBrien] - [#139068]) +- Remove individual lcn devices for each entity ([@alengwenus] - [#136450]) +- Allow rename of the backup folder for OneDrive ([@zweckj] - [#138407]) +- Deprecate Home Connect command actions ([@Diegorro98] - [#139093]) +- Move remember the milk config storage to own module ([@MartinHjelmare] - [#138999]) +- Test remember the milk configurator ([@MartinHjelmare] - [#139122]) +- Change backup listener calls for existing backup integrations ([@zweckj] - [#138988]) +- Bump thermobeacon-ble to 0.8.0 ([@bdraco] - [#139119]) +- Complete remember the milk typing ([@MartinHjelmare] - [#139123]) +- Fix flakey onedrive tests ([@zweckj] - [#139129]) +- Allow arbitrary Gemini attachments ([@SLaks] - [#138751]) +- bump soco to 0.30.9 ([@PeteRager] - [#139143]) +- Bump github/codeql-action from 3.28.9 to 3.28.10 (@dependabot - [#139162]) +- Bump aiowebostv to 0.7.0 ([@thecode] - [#139145]) +- Bump androidtvremote2 to 0.2.0 ([@tronikos] - [#139141]) +- Bump actions/upload-artifact from 4.6.0 to 4.6.1 (@dependabot - [#139161]) +- Consider the zone radius in proximity distance calculation ([@Spcemarine] - [#138819]) +- Remove unnecessary min/max setting of WATER_HEATER ([@LG-ThinQ-Integration] - [#138969]) +- Remove setup of rpi_power from onboarding ([@emontnemery] - [#139168]) +- Better handle runtime recovery mode in bootstrap ([@arturpragacz] - [#138624]) +- Add Snoo integration ([@Lash-L] - [#134243]) +- Bump zwave-js-server-python to 0.60.1 ([@MartinHjelmare] - [#139185]) +- Fix description of `cycle` field in `input_select.select_previous` action ([@NoRi2909] - [#139032]) +- Add melcloud standard horizontal vane modes ([@antlarr] - [#136654]) +- Change code owner - MotionMount integration ([@laiho-vogels] - [#139187]) +- Bump Weheat to 2025.2.22 ([@SteveDiks] - [#139186]) +- Add ambient temperature and humidity status sensors to NUT ([@tdfountain] - [#124181]) +- Update LG webOS TV diagnostics to use tv_info and tv_state dictionaries ([@thecode] - [#139189]) +- Add flag to backup store to track backup wizard completion ([@emontnemery] - [#138368]) +- Add translations for exceptions and data descriptions to pyLoad integration ([@tr4nt0r] - [#138896]) +- Refactor to-do list order and reordering in Habitica ([@tr4nt0r] - [#138566]) +- Add WebDAV backup agent ([@jpbede] - [#137721]) +- Remove name in Minecraft Server config entry ([@elmurato] - [#139113]) +- Add vesync debug mode in library ([@cdnninja] - [#134571]) +- Fix return value for DataUpdateCoordinator._async setup ([@MartinHjelmare] - [#139181]) +- Fix race in WS command recorder/info ([@emontnemery] - [#139177]) +- Bump aiohttp to 3.11.13 ([@bdraco] - [#139197]) +- Update Linkplay constants for Arylic S10+ and Arylic Up2Stream Amp 2.1 ([@ozonejunkieau] - [#138198]) +- Add support for Apps and Radios to Squeezebox Media Browser ([@peteS-UK] - [#135009]) +- Add azure_storage as backup agent ([@zweckj] - [#134085]) +- Bump onedrive quality scale to platinum ([@zweckj] - [#137451]) +- Bump pyloadapi to v1.4.2 ([@tr4nt0r] - [#139140]) +- Add missing translations to switchbot ([@emontnemery] - [#139212]) +- Fix bug in check_translations fixture ([@emontnemery] - [#139206]) +- Add missing exception translation to Home Connect ([@Diegorro98] - [#139218]) +- Configure trusted publishing for PyPI file upload ([@cdce8p] - [#137607]) +- Bump aiostreammagic to 2.11.0 ([@noahhusby] - [#139213]) +- Add missing exception translation to Home Connect ([@Diegorro98] - [#139223]) +- Bump ohmepy to 1.3.2 ([@dan-r] - [#139013]) +- Fix kitchen_sink statistic issues ([@emontnemery] - [#139228]) +- Bump aiowebdav2 to 0.3.0 ([@jpbede] - [#139202]) +- Bump pylamarzocco to 1.4.7 ([@zweckj] - [#139231]) +- Add backup helper ([@emontnemery] - [#139199]) +- Reduce requests made by webdav ([@jpbede] - [#139238]) +- Add Homee valve platform ([@Taraman17] - [#139188]) +- Fix units for LCN sensor ([@alengwenus] - [#138940]) +- Add Ohme voltage and slot list sensor ([@dan-r] - [#139203]) +- Initiate source list as instance variable in Volumio ([@joostlek] - [#139243]) +- `logbook.log` action: Make description of `name` field UI-friendly ([@NoRi2909] - [#139200]) +- Treat "Twist Assist" & "Block to Block" as feature names and add descriptions in Z-Wave ([@NoRi2909] - [#139239]) +- Add climate's swing mode to LG ThinQ ([@LG-ThinQ-Integration] - [#137619]) +- Bump aiowithings to 3.1.6 ([@joostlek] - [#139242]) +- Add update reward action to Habitica integration ([@tr4nt0r] - [#139157]) +- Add Re-Auth Flow to vesync ([@cdnninja] - [#137398]) +- Rework the velbus configflow to make it more user-friendly ([@cereal2nd] - [#135609]) +- Add missing ATTR_HVAC_MODE of async_set_temperature to LG ThinQ ([@LG-ThinQ-Integration] - [#137621]) +- Make Radarr units translatable ([@danbishop] - [#139250]) +- Improve Minecraft Server config flow tests ([@elmurato] - [#139251]) +- Revert "Bump Stookwijzer to 1.5.7" ([@edenhaus] - [#139253]) +- Add parallel updates to Home Connect ([@Diegorro98] - [#139255]) +- Bump fnv-hash-fast to 1.2.6 ([@bdraco] - [#139246]) +- Make default dim level configurable in Lutron ([@cameronr] - [#137127]) +- Set PARALLEL_UPDATES in all Minecraft Server platforms ([@elmurato] - [#139259]) +- Bump aiowebostv to 0.7.1 ([@thecode] - [#139244]) +- Consistently capitalize "Velbus" brand name, camel-case "VelServ" ([@NoRi2909] - [#139257]) +- Bump cached-ipaddress to 0.9.2 ([@bdraco] - [#139245]) +- Make Sonarr component's units translatable ([@danbishop] - [#139254]) +- Bump stookwijzer to 1.5.8 ([@fwestenberg] - [#139258]) +- Bump Velbus to bronze quality scale ([@cereal2nd] - [#139256]) +- Add Homee number platform ([@Taraman17] - [#138962]) +- Fix yolink lock v2 state update ([@matrixd2] - [#138710]) +- Set Minecraft Server quality scale to silver ([@elmurato] - [#139265]) +- Add OpenWeatherMap Minute forecast action ([@10100011] - [#128799]) +- Fix Ezviz entity state for cameras that are offline ([@RenierM26] - [#136003]) +- Use proper camel-case for "VeSync", fix sentence-casing in title ([@NoRi2909] - [#139252]) +- Add request made by `rest_command` to debug log ([@jpbede] - [#139266]) +- Create repair for configured unavailable backup agents ([@MartinHjelmare] - [#137382]) +- Improve description of `openweathermap.get_minute_forecast` action ([@NoRi2909] - [#139267]) +- Use right import in ezviz ([@joostlek] - [#139272]) +- Change touchline dependency to pytouchline_extended ([@brondum] - [#136362]) +- Rename description field to notes in Habitica action ([@tr4nt0r] - [#139271]) +- Add support for effects in Govee lights ([@Galorhallen] - [#137846]) +- Add Burbank Water and Power (BWP) virtual integration ([@tronikos] - [#139027]) +- Update adext to 0.4.4 ([@pleasantone] - [#139151]) +- Add sound mode support to Onkyo ([@arturpragacz] - [#133531]) +- Use new python library for picnic component ([@codesalatdev] - [#139111]) +- Bump securetar to 2025.2.1 ([@emontnemery] - [#139273]) +- Fix race in async_get_integrations with multiple calls when an integration is not found ([@bdraco] - [#139270]) +- Bump python-overseerr to 0.7.1 ([@joostlek] - [#139263]) +- Add coordinator to SMHI ([@gjohansson-ST] - [#139052]) +- Make Radarr unit translation lowercase ([@danbishop] - [#139261]) +- Add common state translation string for charging and discharging ([@mib1185] - [#139074]) +- Add test fixture ignore_translations_for_mock_domains ([@emontnemery] - [#139235]) +- Fix grammar in loader comments ([@bdraco] - [#139276]) +- Bump aiohomeconnect to 0.15.0 ([@Diegorro98] - [#139277]) +- Add current cavity temperature sensor to Home Connect ([@Diegorro98] - [#139282]) +- Bump anthropic to 0.47.2 ([@Shulyaka] - [#139283]) +- Adjust recorder validate_statistics handler ([@emontnemery] - [#139229]) +- Fix re-connect logic in Apple TV integration ([@postlund] - [#139289]) +- Revert "Bump stookwijzer==1.5.8" ([@bdraco] - [#139287]) +- Add option to ESPHome to subscribe to logs ([@bdraco] - [#139073]) +- Remove not used constants in smhi ([@gjohansson-ST] - [#139298]) +- Bump `aioshelly` to version `13.0.0` ([@bieniu] - [#139294]) +- Remove timeout from vscode test launch configuration ([@abmantis] - [#139288]) +- Add missing Home Connect context at event listener registration for appliance options ([@Diegorro98] - [#139292]) +- Sort common translation strings ([@mib1185] - [#139300]) +- Add album artist media browser category to Squeezebox ([@peteS-UK] - [#139210]) +- Bump aioesphomeapi to 29.2.0 ([@bdraco] - [#139309]) +- Bump actions/download-artifact from 4.1.8 to 4.1.9 (@dependabot - [#139317]) +- Bump home-assistant/builder from 2024.08.2 to 2025.02.0 (@dependabot - [#139316]) +- Adjust remote ESPHome log subscription level on logging change ([@bdraco] - [#139308]) +- Fix homeassistant/expose_entity/list ([@emontnemery] - [#138872]) +- Bump `accuweather` to version `4.1.0` ([@bieniu] - [#139320]) +- Bump ZHA to 0.0.50 ([@TheJulianJES] - [#139318]) +- Bump pytechnove to 2.0.0 ([@Moustachauve] - [#139314]) +- Update python-smarttub dependency to 0.0.39 ([@mdz] - [#139313]) +- Fix anthropic blocking call ([@Shulyaka] - [#139299]) +- Bump pybotvac to 0.0.26 ([@benbridts] - [#139330]) +- Bump stookwijzer==1.6.0 ([@fwestenberg] - [#139332]) +- Improve error message when failing to create backups ([@emontnemery] - [#139262]) +- Add translations and icon for Twinkly select entity ([@piitaya] - [#139336]) +- Bump recommended ESPHome Bluetooth proxy version to 2025.2.1 ([@bdraco] - [#139196]) +- Add default_db_url flag to WS command recorder/info ([@emontnemery] - [#139333]) +- Improve action descriptions of LIFX integration ([@NoRi2909] - [#139329]) +- Bump Music Assistant client to 1.1.1 ([@marcelveldt] - [#139331]) +- Refactor SmartThings ([@joostlek] - [#137940]) +- Add keys initiate_flow and entry_type to data entry translations ([@emontnemery] - [#138882]) +- Add support for swing horizontal mode for mqtt climate ([@jbouwh] - [#139303]) +- Add entity translations to SmartThings ([@joostlek] - [#139342]) +- Improve logging for selected options in Onkyo ([@arturpragacz] - [#139279]) +- Change no fixtures comment in SmartThings ([@joostlek] - [#139344]) +- Set options for carbon monoxide detector sensor in SmartThings ([@joostlek] - [#139346]) +- Improve calculating supported features in template light ([@jbouwh] - [#139339]) +- Update frontend to 20250226.0 ([@bramkragten] - [#139340]) +- Use particulate matter device class in SmartThings ([@joostlek] - [#139351]) +- Set options for dishwasher job state sensor in SmartThings ([@joostlek] - [#139349]) +- Set options for dishwasher machine state sensor in SmartThings ([@joostlek] - [#139347]) +- Set options for alarm sensor in SmartThings ([@joostlek] - [#139345]) +- Fix variable scopes in scripts ([@arturpragacz] - [#138883]) +- Add translatable states to SmartThings media source input ([@joostlek] - [#139353]) +- Add translatable states to SmartThings media playback ([@joostlek] - [#139354]) +- Add translatable states to oven mode in SmartThings ([@joostlek] - [#139356]) +- Add translatable states to oven job state in SmartThings ([@joostlek] - [#139361]) +- Add translatable states to oven machine state ([@joostlek] - [#139358]) +- Add translatable states to robot cleaner movement in SmartThings ([@joostlek] - [#139363]) +- Add translatable states to robot cleaner cleaning mode in SmartThings ([@joostlek] - [#139362]) +- Add translatable states to washer machine state in SmartThings ([@joostlek] - [#139366]) +- Add translatable states to smoke detector in SmartThings ([@joostlek] - [#139365]) +- Add translatable states to robot cleaner turbo mode in SmartThings ([@joostlek] - [#139364]) +- Add translatable states to washer job state in SmartThings ([@joostlek] - [#139368]) +- Improve Home Connect oven cavity temperature sensor ([@Diegorro98] - [#139355]) +- Add translatable states to dryer machine state in Smartthings ([@joostlek] - [#139369]) +- Add translatable states to dryer job state in SmartThings ([@joostlek] - [#139370]) +- Don't create entities for disabled capabilities in SmartThings ([@joostlek] - [#139343]) +- Fix typo in SmartThing string ([@joostlek] - [#139373]) +- Bump stookwijzer==1.6.1 ([@fwestenberg] - [#139380]) +- Bump ZHA to 0.0.51 ([@puddly] - [#139383]) +- Bump intents to 2025.2.26 ([@synesthesiam] - [#139387]) +- Fix fetch options error for Home connect ([@Diegorro98] - [#139392]) +- Bump onedrive to 0.0.12 ([@zweckj] - [#139410]) +- Bump pysmartthings to 2.0.0 ([@joostlek] - [#139418]) +- Bump habluetooth to 3.24.1 ([@bdraco] - [#139420]) +- Fix conversation agent fallback ([@balloob] - [#139421]) +- Add diagnostics to SmartThings ([@joostlek] - [#139423]) +- Bump bleak-esphome to 2.8.0 ([@bdraco] - [#139426]) +- Bump reolink-aio to 0.12.1 ([@starkillerOG] - [#139427]) +- Fix Music Assistant media player entity features ([@marcelveldt] - [#139428]) +- Update frontend to 20250227.0 ([@bramkragten] - [#139437]) +- Bump weatherflow4py to 1.3.1 ([@jeeftor] - [#135529]) +- Add new mediatypes to Music Assistant integration ([@marcelveldt] - [#139338]) +- Move climate intent to homeassistant integration ([@synesthesiam] - [#139371]) +- Bump aiohomeconnect to 0.15.1 ([@Diegorro98] - [#139445]) +- Fix SmartThings diagnostics ([@joostlek] - [#139447]) +- Bump pysmartthings to 2.0.1 ([@joostlek] - [#139454]) +- Change webdav namespace to absolut URI ([@jpbede] - [#139456]) +- Improve onedrive migration ([@zweckj] - [#139458]) +- Bump pysmartthings to 2.1.0 ([@joostlek] - [#139460]) +- Only lowercase SmartThings media input source if we have it ([@joostlek] - [#139468]) +- Set SmartThings suggested display precision ([@joostlek] - [#139470]) +- Fix Gemini Schema validation for #139416 ([@IvanLH] - [#139478]) +- Fail recorder.backup.async_pre_backup if Home Assistant is not running ([@emontnemery] - [#139491]) +- Fix shift state in Teslemetry ([@Bre77] - [#139505]) +- Improve error handling in CoreBackupReaderWriter ([@emontnemery] - [#139508]) +- Add diagnostics to onedrive ([@zweckj] - [#139516]) +- Make the Tuya backend library compatible with the newer paho mqtt client. ([@jbouwh] - [#139518]) +- Suppress unsupported event 'EVT_USP_RpsPowerDeniedByPsuOverload' by bumping aiounifi to v83 ([@Kane610] - [#139519]) +- Don't split wheels builder anymore ([@edenhaus] - [#139522]) +- Bump yt-dlp to 2025.02.19 ([@joostlek] - [#139526]) +- Update frontend to 20250228.0 ([@bramkragten] - [#139531]) +- Add missing 'state_class' attribute for Growatt plant sensors ([@LaithBudairi] - [#132145]) +- Bump env_canada to 0.8.0 ([@maruel] - [#138237]) +- Fix Nederlandse Spoorwegen to ignore trains in the past ([@Martreides] - [#138331]) +- Use multiple indexed group-by queries to get start time states for MySQL ([@bdraco] - [#138786]) +- Specify recorder as after dependency in sql integration ([@gjohansson-ST] - [#139037]) +- Handle IPv6 URLs in devolo Home Network ([@Shutgun] - [#139191]) +- Fix bug in derivative sensor when source sensor's state is constant ([@jgrande] - [#139230]) +- Ensure Hue bridge is added first to the device registry ([@marcelveldt] - [#139438]) +- Fix update data for multiple Gree devices ([@filipagh] - [#139469]) +- Use last event as color mode in SmartThings ([@joostlek] - [#139473]) +- Set SmartThings delta energy to Total ([@joostlek] - [#139474]) +- Fix alert not respecting can_acknowledge setting ([@StaleLoafOfBread] - [#139483]) +- Bump pysmartthings to 2.2.0 ([@joostlek] - [#139539]) +- Remove orphan devices on startup in SmartThings ([@joostlek] - [#139541]) +- Bump PySwitchBot to 0.56.1 ([@bdraco] - [#139544]) +- Bump pysmartthings to 2.3.0 ([@joostlek] - [#139546]) +- Improve SmartThings OCF device info ([@joostlek] - [#139547]) +- Add SmartThings Viper device info ([@joostlek] - [#139548]) +- Revert polling changes to HomeKit Controller ([@bdraco] - [#139550]) +- Bump pysmartthings to 2.4.0 ([@joostlek] - [#139564]) +- Bump Tesla Fleet API to v0.9.12 ([@Bre77] - [#139565]) +- Bump aiowebdav2 to 0.3.1 ([@jpbede] - [#139567]) +- Validate scopes in SmartThings config flow ([@joostlek] - [#139569]) +- Only determine SmartThings swing modes if we support it ([@joostlek] - [#139571]) +- Don't require not needed scopes in SmartThings ([@joostlek] - [#139576]) +- Homee: fix watchdog icon ([@Taraman17] - [#139577]) +- Bump aiohomekit to 3.2.8 ([@bdraco] - [#139579]) +- Fix duplicate unique id issue in Sensibo ([@gjohansson-ST] - [#139582]) +- Improve field descriptions of `zha.permit` action ([@NoRi2909] - [#139584]) +- Fix - Allow brightness only light MQTT json light to be set up using the `brightness` flag or via `supported_color_modes` ([@jbouwh] - [#139585]) +- Fix Manufacturer naming for Squeezelite model name for Squeezebox ([@peteS-UK] - [#139586]) +- Bump deebot-client to 12.3.1 ([@edenhaus] - [#139598]) +- Fix handling of NaN float values for current humidity in ESPHome ([@bdraco] - [#139600]) +- Bump aioshelly to 13.1.0 ([@thecode] - [#139601]) +- Bump inkbird-ble to 0.7.1 ([@bdraco] - [#139603]) +- Fix body text of imap message not available in custom event data template ([@jbouwh] - [#139609]) +- Fix arm vacation mode showing as armed away in elkm1 ([@bdraco] - [#139613]) +- Still request scopes in SmartThings ([@joostlek] - [#139626]) +- Bump pysmartthings to 2.4.1 ([@joostlek] - [#139627]) +- Fix unique identifiers where multiple IKEA Tradfri gateways are in use ([@cs12ag] - [#136060]) +- Fix vicare exception for specific ventilation device type ([@CrEaK] - [#138343]) +- Prevent zero interval in Calendar get_events service ([@abmantis] - [#139378]) +- Fix Homee brightness sensors reporting in percent ([@Taraman17] - [#139409]) +- Fix ability to remove orphan device in Music Assistant integration ([@marcelveldt] - [#139431]) +- Fix broken link in ESPHome BLE repair ([@bdraco] - [#139639]) +- Fix scope comparison in SmartThings ([@joostlek] - [#139652]) +- Avoid duplicate chat log content ([@balloob] - [#139679]) +- Add additional roborock debug logging ([@allenporter] - [#139680]) +- Improve failure handling and logging for invalid map responses ([@allenporter] - [#139681]) +- Abort SmartThings flow if default_config is not enabled ([@joostlek] - [#139700]) +- Bump ESPHome stable BLE version to 2025.2.2 ([@bdraco] - [#139704]) +- Bump holidays to 0.68 ([@gjohansson-ST] - [#139711]) +- Bump aiowebostv to 0.7.2 ([@thecode] - [#139712]) +- Bump sense-energy to 0.13.6 ([@bdraco] - [#139714]) +- Add nest translation string for `already_in_progress` ([@allenporter] - [#139727]) +- Bump google-nest-sdm to 7.1.4 ([@allenporter] - [#139728]) +- Delete refresh after a non-breaking error at event stream at Home Connect ([@Diegorro98] - [#139740]) +- Bump aiohomeconnect to 0.16.2 ([@Diegorro98] - [#139750]) +- Add Apollo Automation virtual integration ([@joostlek] - [#139751]) +- Fix incorrect weather state returned by HKO ([@MisterCommand] - [#139757]) +- Bump pysmartthings to 2.5.0 ([@joostlek] - [#139758]) +- Fix home connect available ([@MartinHjelmare] - [#139760]) +- Bump nexia to 2.1.1 ([@bdraco] - [#139772]) +- Bump aiowebostv to 0.7.3 ([@thecode] - [#139788]) +- Drop BETA postfix from Matter integration's title ([@marcelveldt] - [#139816]) +- Split the energy and data retrieval in WeHeat ([@SteveDiks] - [#139211]) +- Update frontend to 20250305.0 ([@bramkragten] - [#139829]) +- Get temperature data appropriate for hass.config.unit in LG ThinQ ([@LG-ThinQ-Integration] - [#137626]) +- Bump nexia to 2.2.1 ([@bdraco] - [#139786]) +- Revert "Add scene support to roborock (#137203)" ([@allenporter] - [#139840]) +- Bump aioecowitt to 2025.3.1 ([@joostlek] - [#139841]) +- Bump onedrive-personal-sdk to 0.0.13 ([@zweckj] - [#139846]) +- Bump intents to 2025.3.5 ([@synesthesiam] - [#139851]) +- Fix no disabled capabilities in SmartThings ([@joostlek] - [#139860]) + +## Release 2025.3.1 - March 7 + +- Check support for demand load control in SmartThings AC ([@Ishima] - [#139616]) +- Fix Unit of Measurement for Squeezebox duration sensor entity on LMS service ([@peteS-UK] - [#139861]) +- Trim the Schema allowed keys to match the Public Gemini API docs. ([@IvanLH] - [#139876]) +- Bump thermobeacon-ble to 0.8.1 ([@bdraco] - [#139919]) +- Deduplicate climate modes in SmartThings ([@joostlek] - [#139930]) +- Check if the unit of measurement is valid before creating the entity ([@jbouwh] - [#139932]) +- Bump pysmartthings to 2.6.1 ([@joostlek] - [#139936]) +- Bump aiowebdav2 to 0.4.0 ([@jpbede] - [#139938]) +- Add config entry level diagnostics to SmartThings ([@joostlek] - [#139939]) +- Set content length when uploading files to WebDAV ([@jpbede] - [#139950]) +- Bump to python-snoo 0.6.1 ([@Lash-L] - [#139954]) +- Fix SmartThings fan ([@joostlek] - [#139962]) +- Update frontend to 20250306.0 ([@bramkragten] - [#139965]) +- Fix SmartThings dust sensor UoM ([@joostlek] - [#139977]) +- Bump nexia to 2.2.2 ([@bdraco] - [#139986]) +- Bump aiowebdav2 to 0.4.1 ([@jpbede] - [#139988]) +- Correctly retrieve only loaded Google Generative AI config_entries ([@IvanLH] - [#139999]) +- Fix regression to evohome debug logging ([@zxdavb] - [#140000]) +- Check operation state on Home Connect program sensor update ([@Diegorro98] - [#140011]) +- Bump aiohomeconnect to 0.16.3 ([@MartinHjelmare] - [#140014]) +- Fix powerwall 0% in Tessie and Tesla Fleet ([@Bre77] - [#140017]) +- Fix shift state default in Teslemetry and Tessie ([@Bre77] - [#140018]) +- Add description for HomematicIP HCU1 in homematicip_cloud setup config flow ([@hahn-th] - [#140025]) +- Fix evohome to gracefully handle null schedules ([@zxdavb] - [#140036]) +- Fix SmartThings disabling working capabilities ([@joostlek] - [#140039]) +- Fix SmartThings thermostat climate check ([@joostlek] - [#140046]) +- Bump pysmartthings to 2.7.0 ([@joostlek] - [#140047]) +- Only keep valid powerConsumptionReports in SmartThings ([@joostlek] - [#140049]) +- Bump py-synologydsm-api to 2.7.1 ([@mib1185] - [#140052]) +- Restore SmartThings button event ([@joostlek] - [#140044]) + +[#139616]: https://github.com/home-assistant/core/pull/139616 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#139861]: https://github.com/home-assistant/core/pull/139861 +[#139876]: https://github.com/home-assistant/core/pull/139876 +[#139919]: https://github.com/home-assistant/core/pull/139919 +[#139930]: https://github.com/home-assistant/core/pull/139930 +[#139932]: https://github.com/home-assistant/core/pull/139932 +[#139936]: https://github.com/home-assistant/core/pull/139936 +[#139938]: https://github.com/home-assistant/core/pull/139938 +[#139939]: https://github.com/home-assistant/core/pull/139939 +[#139950]: https://github.com/home-assistant/core/pull/139950 +[#139954]: https://github.com/home-assistant/core/pull/139954 +[#139962]: https://github.com/home-assistant/core/pull/139962 +[#139965]: https://github.com/home-assistant/core/pull/139965 +[#139977]: https://github.com/home-assistant/core/pull/139977 +[#139986]: https://github.com/home-assistant/core/pull/139986 +[#139988]: https://github.com/home-assistant/core/pull/139988 +[#139999]: https://github.com/home-assistant/core/pull/139999 +[#140000]: https://github.com/home-assistant/core/pull/140000 +[#140011]: https://github.com/home-assistant/core/pull/140011 +[#140014]: https://github.com/home-assistant/core/pull/140014 +[#140017]: https://github.com/home-assistant/core/pull/140017 +[#140018]: https://github.com/home-assistant/core/pull/140018 +[#140025]: https://github.com/home-assistant/core/pull/140025 +[#140036]: https://github.com/home-assistant/core/pull/140036 +[#140039]: https://github.com/home-assistant/core/pull/140039 +[#140044]: https://github.com/home-assistant/core/pull/140044 +[#140046]: https://github.com/home-assistant/core/pull/140046 +[#140047]: https://github.com/home-assistant/core/pull/140047 +[#140049]: https://github.com/home-assistant/core/pull/140049 +[#140052]: https://github.com/home-assistant/core/pull/140052 +[@Bre77]: https://github.com/Bre77 +[@Diegorro98]: https://github.com/Diegorro98 +[@Ishima]: https://github.com/Ishima +[@IvanLH]: https://github.com/IvanLH +[@Lash-L]: https://github.com/Lash-L +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@bdraco]: https://github.com/bdraco +[@bramkragten]: https://github.com/bramkragten +[@frenck]: https://github.com/frenck +[@hahn-th]: https://github.com/hahn-th +[@jbouwh]: https://github.com/jbouwh +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@mib1185]: https://github.com/mib1185 +[@peteS-UK]: https://github.com/peteS-UK +[@zxdavb]: https://github.com/zxdavb + +## Release 2025.3.2 - March 11 + +- Don't allow creating backups if Home Assistant is not running ([@emontnemery] - [#139499]) +- Bump govee_ble to 0.43.1 ([@moosilauke18] - [#139862]) +- Label emergency heat switch ([@jrhillery] - [#139872]) +- Bump sense-energy lib to 0.13.7 ([@kbickar] - [#140068]) +- Update jinja to 3.1.6 ([@frenck] - [#140069]) +- Update evohome-async to 1.0.3 ([@zxdavb] - [#140083]) +- Fix HEOS discovery error when previously ignored ([@andrewsayre] - [#140091]) +- Map prewash job state in SmartThings ([@joostlek] - [#140097]) +- Check support for thermostat operating state in SmartThings ([@joostlek] - [#140103]) +- Handle None options in SmartThings ([@joostlek] - [#140110]) +- Fix MQTT JSON light not reporting color temp status if color is not supported ([@jbouwh] - [#140113]) +- Fix HEOS user initiated setup when discovery is waiting confirmation ([@andrewsayre] - [#140119]) +- Support null supported Thermostat modes in SmartThings ([@joostlek] - [#140101]) +- Set device class for Oven Completion time in SmartThings ([@joostlek] - [#140139]) +- Revert "Check if the unit of measurement is valid before creating the entity" ([@jbouwh] - [#140155]) +- Fix the order of the group members attribute of the Music Assistant integration ([@msm595] - [#140204]) +- Fix events without user in Bring integration ([@tr4nt0r] - [#140213]) +- Log broad exception in Electricity Maps config flow ([@jpbede] - [#140219]) +- Bump evohome-async to 1.0.4 to fix #140194 ([@zxdavb] - [#140230]) +- Refresh Home Connect token during config entry setup ([@Diegorro98] - [#140233]) +- Add 900 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140234]) +- Fix todo tool broken with Gemini 2.0 models. ([@Lash-L] - [#140246]) +- Fix version not always available in onewire ([@epenet] - [#140260]) +- Fix `client_id` not generated when connecting to the MQTT broker ([@jbouwh] - [#140264]) +- Bump velbusaio to 2025.3.0 ([@cereal2nd] - [#140267]) +- Fix dryer operating state in SmartThings ([@joostlek] - [#140277]) +- FGLair : Upgrade to ayla-iot-unofficial 1.4.7 ([@crevetor] - [#140296]) +- Bump pyheos to v1.0.3 ([@andrewsayre] - [#140310]) +- Bump ZHA to 0.0.52 ([@puddly] - [#140325]) +- Bump pydrawise to 2025.3.0 ([@dknowles2] - [#140330]) +- Bump teslemetry-stream ([@Bre77] - [#140335]) +- Fix no temperature unit in SmartThings ([@joostlek] - [#140363]) +- Fix double space quoting in WebDAV ([@jpbede] - [#140364]) +- Bump python-roborock to 2.12.2 ([@Lash-L] - [#140368]) +- Handle incomplete power consumption reports in SmartThings ([@joostlek] - [#140370]) +- Fix browsing Audible Favorites in Sonos ([@PeteRager] - [#140378]) +- Make sure SmartThings light can deal with unknown states ([@joostlek] - [#140190]) +- Delete subscription on shutdown of SmartThings ([@joostlek] - [#140135]) + +[#139499]: https://github.com/home-assistant/core/pull/139499 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#139862]: https://github.com/home-assistant/core/pull/139862 +[#139872]: https://github.com/home-assistant/core/pull/139872 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140068]: https://github.com/home-assistant/core/pull/140068 +[#140069]: https://github.com/home-assistant/core/pull/140069 +[#140083]: https://github.com/home-assistant/core/pull/140083 +[#140091]: https://github.com/home-assistant/core/pull/140091 +[#140097]: https://github.com/home-assistant/core/pull/140097 +[#140101]: https://github.com/home-assistant/core/pull/140101 +[#140103]: https://github.com/home-assistant/core/pull/140103 +[#140110]: https://github.com/home-assistant/core/pull/140110 +[#140113]: https://github.com/home-assistant/core/pull/140113 +[#140119]: https://github.com/home-assistant/core/pull/140119 +[#140135]: https://github.com/home-assistant/core/pull/140135 +[#140139]: https://github.com/home-assistant/core/pull/140139 +[#140155]: https://github.com/home-assistant/core/pull/140155 +[#140190]: https://github.com/home-assistant/core/pull/140190 +[#140204]: https://github.com/home-assistant/core/pull/140204 +[#140213]: https://github.com/home-assistant/core/pull/140213 +[#140219]: https://github.com/home-assistant/core/pull/140219 +[#140230]: https://github.com/home-assistant/core/pull/140230 +[#140233]: https://github.com/home-assistant/core/pull/140233 +[#140234]: https://github.com/home-assistant/core/pull/140234 +[#140246]: https://github.com/home-assistant/core/pull/140246 +[#140260]: https://github.com/home-assistant/core/pull/140260 +[#140264]: https://github.com/home-assistant/core/pull/140264 +[#140267]: https://github.com/home-assistant/core/pull/140267 +[#140277]: https://github.com/home-assistant/core/pull/140277 +[#140296]: https://github.com/home-assistant/core/pull/140296 +[#140310]: https://github.com/home-assistant/core/pull/140310 +[#140325]: https://github.com/home-assistant/core/pull/140325 +[#140330]: https://github.com/home-assistant/core/pull/140330 +[#140335]: https://github.com/home-assistant/core/pull/140335 +[#140363]: https://github.com/home-assistant/core/pull/140363 +[#140364]: https://github.com/home-assistant/core/pull/140364 +[#140368]: https://github.com/home-assistant/core/pull/140368 +[#140370]: https://github.com/home-assistant/core/pull/140370 +[#140378]: https://github.com/home-assistant/core/pull/140378 +[@Bre77]: https://github.com/Bre77 +[@Diegorro98]: https://github.com/Diegorro98 +[@Lash-L]: https://github.com/Lash-L +[@PeteRager]: https://github.com/PeteRager +[@andrewsayre]: https://github.com/andrewsayre +[@cereal2nd]: https://github.com/cereal2nd +[@crevetor]: https://github.com/crevetor +[@dknowles2]: https://github.com/dknowles2 +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@frenck]: https://github.com/frenck +[@jbouwh]: https://github.com/jbouwh +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@jrhillery]: https://github.com/jrhillery +[@kbickar]: https://github.com/kbickar +[@moosilauke18]: https://github.com/moosilauke18 +[@msm595]: https://github.com/msm595 +[@puddly]: https://github.com/puddly +[@tr4nt0r]: https://github.com/tr4nt0r +[@zxdavb]: https://github.com/zxdavb + +## Release 2025.3.3 - March 14 + +- Fix bug with all Roborock maps being set to the wrong map when empty ([@Lash-L] - [#138493]) +- Bump pysuezV2 to 2.0.4 ([@jb101010-2] - [#139824]) +- Bump upb-lib to 0.6.1 ([@gwww] - [#140212]) +- Use only IPv4 for zeroconf in bluesound integration ([@LouisChrist] - [#140226]) +- Only do WebDAV path migration when path differs ([@jpbede] - [#140402]) +- Bump velbusaio to 2025.3.1 ([@cereal2nd] - [#140443]) +- Mark value in number.set_value action as required ([@joostlek] - [#140445]) +- Bump Tesla Fleet API to 0.9.13 ([@Bre77] - [#140485]) +- Update xknxproject to 3.8.2 ([@farmio] - [#140499]) +- Fix Shelly diagnostics for devices without WebSocket Outbound support ([@bieniu] - [#140501]) +- Fix windowShadeLevel capability in SmartThings ([@joostlek] - [#140552]) +- Set unit of measurement for SmartThings oven setpoint ([@joostlek] - [#140560]) +- Fix missing UnitOfPower.MILLIWATT in sensor and number allowed units ([@ashionky] - [#140567]) + +[#138493]: https://github.com/home-assistant/core/pull/138493 +[#139824]: https://github.com/home-assistant/core/pull/139824 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140212]: https://github.com/home-assistant/core/pull/140212 +[#140226]: https://github.com/home-assistant/core/pull/140226 +[#140392]: https://github.com/home-assistant/core/pull/140392 +[#140402]: https://github.com/home-assistant/core/pull/140402 +[#140443]: https://github.com/home-assistant/core/pull/140443 +[#140445]: https://github.com/home-assistant/core/pull/140445 +[#140485]: https://github.com/home-assistant/core/pull/140485 +[#140499]: https://github.com/home-assistant/core/pull/140499 +[#140501]: https://github.com/home-assistant/core/pull/140501 +[#140552]: https://github.com/home-assistant/core/pull/140552 +[#140560]: https://github.com/home-assistant/core/pull/140560 +[#140567]: https://github.com/home-assistant/core/pull/140567 +[@Bre77]: https://github.com/Bre77 +[@Lash-L]: https://github.com/Lash-L +[@LouisChrist]: https://github.com/LouisChrist +[@ashionky]: https://github.com/ashionky +[@bieniu]: https://github.com/bieniu +[@cereal2nd]: https://github.com/cereal2nd +[@farmio]: https://github.com/farmio +[@frenck]: https://github.com/frenck +[@gwww]: https://github.com/gwww +[@jb101010-2]: https://github.com/jb101010-2 +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede + +## Release 2025.3.4 - March 21 + +- Fix initial fetch of Home Connect appliance data to handle API rate limit errors ([@Diegorro98] - [#139379]) +- Handle API rate limit error on Home Connect entities fetch ([@Diegorro98] - [#139384]) +- Album art not available for Sonos media library favorites ([@PeteRager] - [#140557]) +- Change max ICP value to fixed value for Wallbox Integration ([@hesselonline] - [#140592]) +- Add 700 RPM option to washer spin speed options at Home Connect ([@Diegorro98] - [#140607]) +- Handle non documented options at Home Connect select entities ([@Diegorro98] - [#140608]) +- Fix optional password in Velbus config flow ([@cereal2nd] - [#140615]) +- Make Oven setpoint follow temperature UoM in SmartThings ([@joostlek] - [#140666]) +- Fix Elk-M1 missing TLS 1.2 check ([@gwww] - [#140672]) +- Bump PySwitchBot to 0.57.1 ([@bdraco] - [#140681]) +- Check Celsius in SmartThings oven setpoint ([@joostlek] - [#140687]) +- Fix broken core integration Smart Meter Texas by switching it to use HA's SSL Context ([@adamfeldman] - [#140694]) +- Don't reload onedrive on options flow ([@zweckj] - [#140712]) +- Bump pySmartThings to 2.7.4 ([@joostlek] - [#140720]) +- Fix SmartThings ACs without supported AC modes ([@joostlek] - [#140744]) +- Bump pylamarzocco to 1.4.9 ([@zweckj] - [#140916]) +- Log SmartThings subscription error on exception ([@joostlek] - [#140939]) +- Ensure file is correctly uploaded by the GenAI SDK ([@IvanLH] - [#140969]) +- Reolink fix playback headers ([@starkillerOG] - [#141015]) +- Fix some Home Connect options keys ([@Diegorro98] - [#141023]) +- Bump ZHA to 0.0.53 ([@puddly] - [#141025]) +- Bump Python-Snoo to 0.6.3 ([@Lash-L] - [#140628]) +- Bump python-snoo to 0.6.4 ([@Lash-L] - [#141030]) +- Improve Home Connect appliances test fixture ([@MartinHjelmare] - [#139787]) + +[#139379]: https://github.com/home-assistant/core/pull/139379 +[#139384]: https://github.com/home-assistant/core/pull/139384 +[#139787]: https://github.com/home-assistant/core/pull/139787 +[#139859]: https://github.com/home-assistant/core/pull/139859 +[#140061]: https://github.com/home-assistant/core/pull/140061 +[#140392]: https://github.com/home-assistant/core/pull/140392 +[#140557]: https://github.com/home-assistant/core/pull/140557 +[#140583]: https://github.com/home-assistant/core/pull/140583 +[#140592]: https://github.com/home-assistant/core/pull/140592 +[#140607]: https://github.com/home-assistant/core/pull/140607 +[#140608]: https://github.com/home-assistant/core/pull/140608 +[#140615]: https://github.com/home-assistant/core/pull/140615 +[#140628]: https://github.com/home-assistant/core/pull/140628 +[#140666]: https://github.com/home-assistant/core/pull/140666 +[#140672]: https://github.com/home-assistant/core/pull/140672 +[#140681]: https://github.com/home-assistant/core/pull/140681 +[#140687]: https://github.com/home-assistant/core/pull/140687 +[#140694]: https://github.com/home-assistant/core/pull/140694 +[#140712]: https://github.com/home-assistant/core/pull/140712 +[#140720]: https://github.com/home-assistant/core/pull/140720 +[#140744]: https://github.com/home-assistant/core/pull/140744 +[#140916]: https://github.com/home-assistant/core/pull/140916 +[#140939]: https://github.com/home-assistant/core/pull/140939 +[#140969]: https://github.com/home-assistant/core/pull/140969 +[#141015]: https://github.com/home-assistant/core/pull/141015 +[#141023]: https://github.com/home-assistant/core/pull/141023 +[#141025]: https://github.com/home-assistant/core/pull/141025 +[#141030]: https://github.com/home-assistant/core/pull/141030 +[@Diegorro98]: https://github.com/Diegorro98 +[@IvanLH]: https://github.com/IvanLH +[@Lash-L]: https://github.com/Lash-L +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@PeteRager]: https://github.com/PeteRager +[@adamfeldman]: https://github.com/adamfeldman +[@bdraco]: https://github.com/bdraco +[@cereal2nd]: https://github.com/cereal2nd +[@frenck]: https://github.com/frenck +[@gwww]: https://github.com/gwww +[@hesselonline]: https://github.com/hesselonline +[@joostlek]: https://github.com/joostlek +[@puddly]: https://github.com/puddly +[@starkillerOG]: https://github.com/starkillerOG +[@zweckj]: https://github.com/zweckj + +[#109725]: https://github.com/home-assistant/core/pull/109725 +[#116024]: https://github.com/home-assistant/core/pull/116024 +[#116452]: https://github.com/home-assistant/core/pull/116452 +[#121904]: https://github.com/home-assistant/core/pull/121904 +[#124181]: https://github.com/home-assistant/core/pull/124181 +[#128799]: https://github.com/home-assistant/core/pull/128799 +[#129460]: https://github.com/home-assistant/core/pull/129460 +[#129578]: https://github.com/home-assistant/core/pull/129578 +[#130098]: https://github.com/home-assistant/core/pull/130098 +[#130662]: https://github.com/home-assistant/core/pull/130662 +[#132145]: https://github.com/home-assistant/core/pull/132145 +[#133156]: https://github.com/home-assistant/core/pull/133156 +[#133184]: https://github.com/home-assistant/core/pull/133184 +[#133531]: https://github.com/home-assistant/core/pull/133531 +[#134085]: https://github.com/home-assistant/core/pull/134085 +[#134223]: https://github.com/home-assistant/core/pull/134223 +[#134243]: https://github.com/home-assistant/core/pull/134243 +[#134395]: https://github.com/home-assistant/core/pull/134395 +[#134409]: https://github.com/home-assistant/core/pull/134409 +[#134507]: https://github.com/home-assistant/core/pull/134507 +[#134552]: https://github.com/home-assistant/core/pull/134552 +[#134571]: https://github.com/home-assistant/core/pull/134571 +[#134598]: https://github.com/home-assistant/core/pull/134598 +[#134788]: https://github.com/home-assistant/core/pull/134788 +[#135009]: https://github.com/home-assistant/core/pull/135009 +[#135379]: https://github.com/home-assistant/core/pull/135379 +[#135436]: https://github.com/home-assistant/core/pull/135436 +[#135456]: https://github.com/home-assistant/core/pull/135456 +[#135513]: https://github.com/home-assistant/core/pull/135513 +[#135529]: https://github.com/home-assistant/core/pull/135529 +[#135592]: https://github.com/home-assistant/core/pull/135592 +[#135609]: https://github.com/home-assistant/core/pull/135609 +[#135657]: https://github.com/home-assistant/core/pull/135657 +[#135740]: https://github.com/home-assistant/core/pull/135740 +[#135837]: https://github.com/home-assistant/core/pull/135837 +[#135850]: https://github.com/home-assistant/core/pull/135850 +[#135859]: https://github.com/home-assistant/core/pull/135859 +[#135897]: https://github.com/home-assistant/core/pull/135897 +[#135908]: https://github.com/home-assistant/core/pull/135908 +[#135979]: https://github.com/home-assistant/core/pull/135979 +[#135984]: https://github.com/home-assistant/core/pull/135984 +[#136003]: https://github.com/home-assistant/core/pull/136003 +[#136026]: https://github.com/home-assistant/core/pull/136026 +[#136060]: https://github.com/home-assistant/core/pull/136060 +[#136076]: https://github.com/home-assistant/core/pull/136076 +[#136093]: https://github.com/home-assistant/core/pull/136093 +[#136116]: https://github.com/home-assistant/core/pull/136116 +[#136121]: https://github.com/home-assistant/core/pull/136121 +[#136130]: https://github.com/home-assistant/core/pull/136130 +[#136168]: https://github.com/home-assistant/core/pull/136168 +[#136362]: https://github.com/home-assistant/core/pull/136362 +[#136375]: https://github.com/home-assistant/core/pull/136375 +[#136383]: https://github.com/home-assistant/core/pull/136383 +[#136400]: https://github.com/home-assistant/core/pull/136400 +[#136425]: https://github.com/home-assistant/core/pull/136425 +[#136450]: https://github.com/home-assistant/core/pull/136450 +[#136468]: https://github.com/home-assistant/core/pull/136468 +[#136479]: https://github.com/home-assistant/core/pull/136479 +[#136568]: https://github.com/home-assistant/core/pull/136568 +[#136582]: https://github.com/home-assistant/core/pull/136582 +[#136607]: https://github.com/home-assistant/core/pull/136607 +[#136654]: https://github.com/home-assistant/core/pull/136654 +[#136667]: https://github.com/home-assistant/core/pull/136667 +[#136698]: https://github.com/home-assistant/core/pull/136698 +[#136710]: https://github.com/home-assistant/core/pull/136710 +[#136754]: https://github.com/home-assistant/core/pull/136754 +[#136812]: https://github.com/home-assistant/core/pull/136812 +[#136837]: https://github.com/home-assistant/core/pull/136837 +[#136859]: https://github.com/home-assistant/core/pull/136859 +[#136865]: https://github.com/home-assistant/core/pull/136865 +[#136868]: https://github.com/home-assistant/core/pull/136868 +[#136878]: https://github.com/home-assistant/core/pull/136878 +[#136882]: https://github.com/home-assistant/core/pull/136882 +[#136885]: https://github.com/home-assistant/core/pull/136885 +[#136886]: https://github.com/home-assistant/core/pull/136886 +[#136890]: https://github.com/home-assistant/core/pull/136890 +[#136917]: https://github.com/home-assistant/core/pull/136917 +[#136918]: https://github.com/home-assistant/core/pull/136918 +[#136919]: https://github.com/home-assistant/core/pull/136919 +[#136933]: https://github.com/home-assistant/core/pull/136933 +[#136934]: https://github.com/home-assistant/core/pull/136934 +[#136935]: https://github.com/home-assistant/core/pull/136935 +[#136936]: https://github.com/home-assistant/core/pull/136936 +[#136948]: https://github.com/home-assistant/core/pull/136948 +[#136949]: https://github.com/home-assistant/core/pull/136949 +[#136950]: https://github.com/home-assistant/core/pull/136950 +[#136951]: https://github.com/home-assistant/core/pull/136951 +[#136952]: https://github.com/home-assistant/core/pull/136952 +[#136953]: https://github.com/home-assistant/core/pull/136953 +[#136955]: https://github.com/home-assistant/core/pull/136955 +[#136960]: https://github.com/home-assistant/core/pull/136960 +[#136961]: https://github.com/home-assistant/core/pull/136961 +[#136966]: https://github.com/home-assistant/core/pull/136966 +[#136968]: https://github.com/home-assistant/core/pull/136968 +[#136976]: https://github.com/home-assistant/core/pull/136976 +[#136981]: https://github.com/home-assistant/core/pull/136981 +[#136985]: https://github.com/home-assistant/core/pull/136985 +[#136996]: https://github.com/home-assistant/core/pull/136996 +[#136999]: https://github.com/home-assistant/core/pull/136999 +[#137000]: https://github.com/home-assistant/core/pull/137000 +[#137006]: https://github.com/home-assistant/core/pull/137006 +[#137007]: https://github.com/home-assistant/core/pull/137007 +[#137012]: https://github.com/home-assistant/core/pull/137012 +[#137013]: https://github.com/home-assistant/core/pull/137013 +[#137014]: https://github.com/home-assistant/core/pull/137014 +[#137027]: https://github.com/home-assistant/core/pull/137027 +[#137029]: https://github.com/home-assistant/core/pull/137029 +[#137033]: https://github.com/home-assistant/core/pull/137033 +[#137034]: https://github.com/home-assistant/core/pull/137034 +[#137037]: https://github.com/home-assistant/core/pull/137037 +[#137053]: https://github.com/home-assistant/core/pull/137053 +[#137059]: https://github.com/home-assistant/core/pull/137059 +[#137062]: https://github.com/home-assistant/core/pull/137062 +[#137068]: https://github.com/home-assistant/core/pull/137068 +[#137069]: https://github.com/home-assistant/core/pull/137069 +[#137072]: https://github.com/home-assistant/core/pull/137072 +[#137077]: https://github.com/home-assistant/core/pull/137077 +[#137078]: https://github.com/home-assistant/core/pull/137078 +[#137079]: https://github.com/home-assistant/core/pull/137079 +[#137080]: https://github.com/home-assistant/core/pull/137080 +[#137085]: https://github.com/home-assistant/core/pull/137085 +[#137088]: https://github.com/home-assistant/core/pull/137088 +[#137099]: https://github.com/home-assistant/core/pull/137099 +[#137127]: https://github.com/home-assistant/core/pull/137127 +[#137130]: https://github.com/home-assistant/core/pull/137130 +[#137134]: https://github.com/home-assistant/core/pull/137134 +[#137138]: https://github.com/home-assistant/core/pull/137138 +[#137139]: https://github.com/home-assistant/core/pull/137139 +[#137142]: https://github.com/home-assistant/core/pull/137142 +[#137143]: https://github.com/home-assistant/core/pull/137143 +[#137146]: https://github.com/home-assistant/core/pull/137146 +[#137152]: https://github.com/home-assistant/core/pull/137152 +[#137156]: https://github.com/home-assistant/core/pull/137156 +[#137159]: https://github.com/home-assistant/core/pull/137159 +[#137174]: https://github.com/home-assistant/core/pull/137174 +[#137177]: https://github.com/home-assistant/core/pull/137177 +[#137179]: https://github.com/home-assistant/core/pull/137179 +[#137183]: https://github.com/home-assistant/core/pull/137183 +[#137184]: https://github.com/home-assistant/core/pull/137184 +[#137190]: https://github.com/home-assistant/core/pull/137190 +[#137191]: https://github.com/home-assistant/core/pull/137191 +[#137200]: https://github.com/home-assistant/core/pull/137200 +[#137203]: https://github.com/home-assistant/core/pull/137203 +[#137209]: https://github.com/home-assistant/core/pull/137209 +[#137210]: https://github.com/home-assistant/core/pull/137210 +[#137218]: https://github.com/home-assistant/core/pull/137218 +[#137219]: https://github.com/home-assistant/core/pull/137219 +[#137221]: https://github.com/home-assistant/core/pull/137221 +[#137224]: https://github.com/home-assistant/core/pull/137224 +[#137226]: https://github.com/home-assistant/core/pull/137226 +[#137227]: https://github.com/home-assistant/core/pull/137227 +[#137228]: https://github.com/home-assistant/core/pull/137228 +[#137229]: https://github.com/home-assistant/core/pull/137229 +[#137231]: https://github.com/home-assistant/core/pull/137231 +[#137232]: https://github.com/home-assistant/core/pull/137232 +[#137233]: https://github.com/home-assistant/core/pull/137233 +[#137235]: https://github.com/home-assistant/core/pull/137235 +[#137236]: https://github.com/home-assistant/core/pull/137236 +[#137240]: https://github.com/home-assistant/core/pull/137240 +[#137241]: https://github.com/home-assistant/core/pull/137241 +[#137242]: https://github.com/home-assistant/core/pull/137242 +[#137243]: https://github.com/home-assistant/core/pull/137243 +[#137246]: https://github.com/home-assistant/core/pull/137246 +[#137254]: https://github.com/home-assistant/core/pull/137254 +[#137255]: https://github.com/home-assistant/core/pull/137255 +[#137259]: https://github.com/home-assistant/core/pull/137259 +[#137270]: https://github.com/home-assistant/core/pull/137270 +[#137271]: https://github.com/home-assistant/core/pull/137271 +[#137273]: https://github.com/home-assistant/core/pull/137273 +[#137276]: https://github.com/home-assistant/core/pull/137276 +[#137291]: https://github.com/home-assistant/core/pull/137291 +[#137292]: https://github.com/home-assistant/core/pull/137292 +[#137293]: https://github.com/home-assistant/core/pull/137293 +[#137294]: https://github.com/home-assistant/core/pull/137294 +[#137297]: https://github.com/home-assistant/core/pull/137297 +[#137300]: https://github.com/home-assistant/core/pull/137300 +[#137304]: https://github.com/home-assistant/core/pull/137304 +[#137308]: https://github.com/home-assistant/core/pull/137308 +[#137310]: https://github.com/home-assistant/core/pull/137310 +[#137311]: https://github.com/home-assistant/core/pull/137311 +[#137312]: https://github.com/home-assistant/core/pull/137312 +[#137316]: https://github.com/home-assistant/core/pull/137316 +[#137317]: https://github.com/home-assistant/core/pull/137317 +[#137318]: https://github.com/home-assistant/core/pull/137318 +[#137319]: https://github.com/home-assistant/core/pull/137319 +[#137320]: https://github.com/home-assistant/core/pull/137320 +[#137329]: https://github.com/home-assistant/core/pull/137329 +[#137336]: https://github.com/home-assistant/core/pull/137336 +[#137339]: https://github.com/home-assistant/core/pull/137339 +[#137345]: https://github.com/home-assistant/core/pull/137345 +[#137349]: https://github.com/home-assistant/core/pull/137349 +[#137350]: https://github.com/home-assistant/core/pull/137350 +[#137354]: https://github.com/home-assistant/core/pull/137354 +[#137356]: https://github.com/home-assistant/core/pull/137356 +[#137370]: https://github.com/home-assistant/core/pull/137370 +[#137381]: https://github.com/home-assistant/core/pull/137381 +[#137382]: https://github.com/home-assistant/core/pull/137382 +[#137383]: https://github.com/home-assistant/core/pull/137383 +[#137384]: https://github.com/home-assistant/core/pull/137384 +[#137385]: https://github.com/home-assistant/core/pull/137385 +[#137386]: https://github.com/home-assistant/core/pull/137386 +[#137387]: https://github.com/home-assistant/core/pull/137387 +[#137388]: https://github.com/home-assistant/core/pull/137388 +[#137389]: https://github.com/home-assistant/core/pull/137389 +[#137391]: https://github.com/home-assistant/core/pull/137391 +[#137392]: https://github.com/home-assistant/core/pull/137392 +[#137394]: https://github.com/home-assistant/core/pull/137394 +[#137395]: https://github.com/home-assistant/core/pull/137395 +[#137396]: https://github.com/home-assistant/core/pull/137396 +[#137398]: https://github.com/home-assistant/core/pull/137398 +[#137399]: https://github.com/home-assistant/core/pull/137399 +[#137400]: https://github.com/home-assistant/core/pull/137400 +[#137404]: https://github.com/home-assistant/core/pull/137404 +[#137412]: https://github.com/home-assistant/core/pull/137412 +[#137418]: https://github.com/home-assistant/core/pull/137418 +[#137422]: https://github.com/home-assistant/core/pull/137422 +[#137428]: https://github.com/home-assistant/core/pull/137428 +[#137431]: https://github.com/home-assistant/core/pull/137431 +[#137432]: https://github.com/home-assistant/core/pull/137432 +[#137434]: https://github.com/home-assistant/core/pull/137434 +[#137435]: https://github.com/home-assistant/core/pull/137435 +[#137436]: https://github.com/home-assistant/core/pull/137436 +[#137438]: https://github.com/home-assistant/core/pull/137438 +[#137443]: https://github.com/home-assistant/core/pull/137443 +[#137451]: https://github.com/home-assistant/core/pull/137451 +[#137454]: https://github.com/home-assistant/core/pull/137454 +[#137457]: https://github.com/home-assistant/core/pull/137457 +[#137461]: https://github.com/home-assistant/core/pull/137461 +[#137462]: https://github.com/home-assistant/core/pull/137462 +[#137463]: https://github.com/home-assistant/core/pull/137463 +[#137464]: https://github.com/home-assistant/core/pull/137464 +[#137465]: https://github.com/home-assistant/core/pull/137465 +[#137466]: https://github.com/home-assistant/core/pull/137466 +[#137468]: https://github.com/home-assistant/core/pull/137468 +[#137469]: https://github.com/home-assistant/core/pull/137469 +[#137471]: https://github.com/home-assistant/core/pull/137471 +[#137472]: https://github.com/home-assistant/core/pull/137472 +[#137496]: https://github.com/home-assistant/core/pull/137496 +[#137498]: https://github.com/home-assistant/core/pull/137498 +[#137502]: https://github.com/home-assistant/core/pull/137502 +[#137505]: https://github.com/home-assistant/core/pull/137505 +[#137512]: https://github.com/home-assistant/core/pull/137512 +[#137513]: https://github.com/home-assistant/core/pull/137513 +[#137514]: https://github.com/home-assistant/core/pull/137514 +[#137515]: https://github.com/home-assistant/core/pull/137515 +[#137518]: https://github.com/home-assistant/core/pull/137518 +[#137524]: https://github.com/home-assistant/core/pull/137524 +[#137527]: https://github.com/home-assistant/core/pull/137527 +[#137529]: https://github.com/home-assistant/core/pull/137529 +[#137542]: https://github.com/home-assistant/core/pull/137542 +[#137543]: https://github.com/home-assistant/core/pull/137543 +[#137544]: https://github.com/home-assistant/core/pull/137544 +[#137546]: https://github.com/home-assistant/core/pull/137546 +[#137560]: https://github.com/home-assistant/core/pull/137560 +[#137565]: https://github.com/home-assistant/core/pull/137565 +[#137570]: https://github.com/home-assistant/core/pull/137570 +[#137576]: https://github.com/home-assistant/core/pull/137576 +[#137584]: https://github.com/home-assistant/core/pull/137584 +[#137586]: https://github.com/home-assistant/core/pull/137586 +[#137590]: https://github.com/home-assistant/core/pull/137590 +[#137592]: https://github.com/home-assistant/core/pull/137592 +[#137593]: https://github.com/home-assistant/core/pull/137593 +[#137594]: https://github.com/home-assistant/core/pull/137594 +[#137599]: https://github.com/home-assistant/core/pull/137599 +[#137600]: https://github.com/home-assistant/core/pull/137600 +[#137607]: https://github.com/home-assistant/core/pull/137607 +[#137608]: https://github.com/home-assistant/core/pull/137608 +[#137613]: https://github.com/home-assistant/core/pull/137613 +[#137619]: https://github.com/home-assistant/core/pull/137619 +[#137621]: https://github.com/home-assistant/core/pull/137621 +[#137626]: https://github.com/home-assistant/core/pull/137626 +[#137627]: https://github.com/home-assistant/core/pull/137627 +[#137628]: https://github.com/home-assistant/core/pull/137628 +[#137629]: https://github.com/home-assistant/core/pull/137629 +[#137630]: https://github.com/home-assistant/core/pull/137630 +[#137631]: https://github.com/home-assistant/core/pull/137631 +[#137632]: https://github.com/home-assistant/core/pull/137632 +[#137633]: https://github.com/home-assistant/core/pull/137633 +[#137635]: https://github.com/home-assistant/core/pull/137635 +[#137637]: https://github.com/home-assistant/core/pull/137637 +[#137641]: https://github.com/home-assistant/core/pull/137641 +[#137642]: https://github.com/home-assistant/core/pull/137642 +[#137646]: https://github.com/home-assistant/core/pull/137646 +[#137647]: https://github.com/home-assistant/core/pull/137647 +[#137654]: https://github.com/home-assistant/core/pull/137654 +[#137655]: https://github.com/home-assistant/core/pull/137655 +[#137656]: https://github.com/home-assistant/core/pull/137656 +[#137657]: https://github.com/home-assistant/core/pull/137657 +[#137660]: https://github.com/home-assistant/core/pull/137660 +[#137661]: https://github.com/home-assistant/core/pull/137661 +[#137662]: https://github.com/home-assistant/core/pull/137662 +[#137667]: https://github.com/home-assistant/core/pull/137667 +[#137668]: https://github.com/home-assistant/core/pull/137668 +[#137673]: https://github.com/home-assistant/core/pull/137673 +[#137679]: https://github.com/home-assistant/core/pull/137679 +[#137684]: https://github.com/home-assistant/core/pull/137684 +[#137689]: https://github.com/home-assistant/core/pull/137689 +[#137693]: https://github.com/home-assistant/core/pull/137693 +[#137696]: https://github.com/home-assistant/core/pull/137696 +[#137698]: https://github.com/home-assistant/core/pull/137698 +[#137699]: https://github.com/home-assistant/core/pull/137699 +[#137700]: https://github.com/home-assistant/core/pull/137700 +[#137701]: https://github.com/home-assistant/core/pull/137701 +[#137702]: https://github.com/home-assistant/core/pull/137702 +[#137703]: https://github.com/home-assistant/core/pull/137703 +[#137704]: https://github.com/home-assistant/core/pull/137704 +[#137705]: https://github.com/home-assistant/core/pull/137705 +[#137706]: https://github.com/home-assistant/core/pull/137706 +[#137707]: https://github.com/home-assistant/core/pull/137707 +[#137708]: https://github.com/home-assistant/core/pull/137708 +[#137709]: https://github.com/home-assistant/core/pull/137709 +[#137710]: https://github.com/home-assistant/core/pull/137710 +[#137711]: https://github.com/home-assistant/core/pull/137711 +[#137712]: https://github.com/home-assistant/core/pull/137712 +[#137713]: https://github.com/home-assistant/core/pull/137713 +[#137714]: https://github.com/home-assistant/core/pull/137714 +[#137715]: https://github.com/home-assistant/core/pull/137715 +[#137716]: https://github.com/home-assistant/core/pull/137716 +[#137717]: https://github.com/home-assistant/core/pull/137717 +[#137718]: https://github.com/home-assistant/core/pull/137718 +[#137719]: https://github.com/home-assistant/core/pull/137719 +[#137720]: https://github.com/home-assistant/core/pull/137720 +[#137721]: https://github.com/home-assistant/core/pull/137721 +[#137722]: https://github.com/home-assistant/core/pull/137722 +[#137724]: https://github.com/home-assistant/core/pull/137724 +[#137725]: https://github.com/home-assistant/core/pull/137725 +[#137726]: https://github.com/home-assistant/core/pull/137726 +[#137727]: https://github.com/home-assistant/core/pull/137727 +[#137728]: https://github.com/home-assistant/core/pull/137728 +[#137730]: https://github.com/home-assistant/core/pull/137730 +[#137732]: https://github.com/home-assistant/core/pull/137732 +[#137733]: https://github.com/home-assistant/core/pull/137733 +[#137734]: https://github.com/home-assistant/core/pull/137734 +[#137737]: https://github.com/home-assistant/core/pull/137737 +[#137738]: https://github.com/home-assistant/core/pull/137738 +[#137739]: https://github.com/home-assistant/core/pull/137739 +[#137740]: https://github.com/home-assistant/core/pull/137740 +[#137741]: https://github.com/home-assistant/core/pull/137741 +[#137742]: https://github.com/home-assistant/core/pull/137742 +[#137743]: https://github.com/home-assistant/core/pull/137743 +[#137754]: https://github.com/home-assistant/core/pull/137754 +[#137756]: https://github.com/home-assistant/core/pull/137756 +[#137759]: https://github.com/home-assistant/core/pull/137759 +[#137763]: https://github.com/home-assistant/core/pull/137763 +[#137766]: https://github.com/home-assistant/core/pull/137766 +[#137777]: https://github.com/home-assistant/core/pull/137777 +[#137784]: https://github.com/home-assistant/core/pull/137784 +[#137785]: https://github.com/home-assistant/core/pull/137785 +[#137792]: https://github.com/home-assistant/core/pull/137792 +[#137794]: https://github.com/home-assistant/core/pull/137794 +[#137799]: https://github.com/home-assistant/core/pull/137799 +[#137804]: https://github.com/home-assistant/core/pull/137804 +[#137806]: https://github.com/home-assistant/core/pull/137806 +[#137807]: https://github.com/home-assistant/core/pull/137807 +[#137808]: https://github.com/home-assistant/core/pull/137808 +[#137813]: https://github.com/home-assistant/core/pull/137813 +[#137814]: https://github.com/home-assistant/core/pull/137814 +[#137816]: https://github.com/home-assistant/core/pull/137816 +[#137818]: https://github.com/home-assistant/core/pull/137818 +[#137819]: https://github.com/home-assistant/core/pull/137819 +[#137822]: https://github.com/home-assistant/core/pull/137822 +[#137823]: https://github.com/home-assistant/core/pull/137823 +[#137824]: https://github.com/home-assistant/core/pull/137824 +[#137825]: https://github.com/home-assistant/core/pull/137825 +[#137826]: https://github.com/home-assistant/core/pull/137826 +[#137827]: https://github.com/home-assistant/core/pull/137827 +[#137828]: https://github.com/home-assistant/core/pull/137828 +[#137829]: https://github.com/home-assistant/core/pull/137829 +[#137830]: https://github.com/home-assistant/core/pull/137830 +[#137831]: https://github.com/home-assistant/core/pull/137831 +[#137832]: https://github.com/home-assistant/core/pull/137832 +[#137834]: https://github.com/home-assistant/core/pull/137834 +[#137835]: https://github.com/home-assistant/core/pull/137835 +[#137836]: https://github.com/home-assistant/core/pull/137836 +[#137837]: https://github.com/home-assistant/core/pull/137837 +[#137838]: https://github.com/home-assistant/core/pull/137838 +[#137839]: https://github.com/home-assistant/core/pull/137839 +[#137840]: https://github.com/home-assistant/core/pull/137840 +[#137842]: https://github.com/home-assistant/core/pull/137842 +[#137843]: https://github.com/home-assistant/core/pull/137843 +[#137844]: https://github.com/home-assistant/core/pull/137844 +[#137846]: https://github.com/home-assistant/core/pull/137846 +[#137848]: https://github.com/home-assistant/core/pull/137848 +[#137853]: https://github.com/home-assistant/core/pull/137853 +[#137857]: https://github.com/home-assistant/core/pull/137857 +[#137858]: https://github.com/home-assistant/core/pull/137858 +[#137859]: https://github.com/home-assistant/core/pull/137859 +[#137861]: https://github.com/home-assistant/core/pull/137861 +[#137862]: https://github.com/home-assistant/core/pull/137862 +[#137863]: https://github.com/home-assistant/core/pull/137863 +[#137864]: https://github.com/home-assistant/core/pull/137864 +[#137865]: https://github.com/home-assistant/core/pull/137865 +[#137866]: https://github.com/home-assistant/core/pull/137866 +[#137867]: https://github.com/home-assistant/core/pull/137867 +[#137868]: https://github.com/home-assistant/core/pull/137868 +[#137869]: https://github.com/home-assistant/core/pull/137869 +[#137871]: https://github.com/home-assistant/core/pull/137871 +[#137872]: https://github.com/home-assistant/core/pull/137872 +[#137873]: https://github.com/home-assistant/core/pull/137873 +[#137874]: https://github.com/home-assistant/core/pull/137874 +[#137875]: https://github.com/home-assistant/core/pull/137875 +[#137876]: https://github.com/home-assistant/core/pull/137876 +[#137877]: https://github.com/home-assistant/core/pull/137877 +[#137879]: https://github.com/home-assistant/core/pull/137879 +[#137880]: https://github.com/home-assistant/core/pull/137880 +[#137881]: https://github.com/home-assistant/core/pull/137881 +[#137882]: https://github.com/home-assistant/core/pull/137882 +[#137883]: https://github.com/home-assistant/core/pull/137883 +[#137885]: https://github.com/home-assistant/core/pull/137885 +[#137886]: https://github.com/home-assistant/core/pull/137886 +[#137888]: https://github.com/home-assistant/core/pull/137888 +[#137889]: https://github.com/home-assistant/core/pull/137889 +[#137891]: https://github.com/home-assistant/core/pull/137891 +[#137892]: https://github.com/home-assistant/core/pull/137892 +[#137893]: https://github.com/home-assistant/core/pull/137893 +[#137894]: https://github.com/home-assistant/core/pull/137894 +[#137895]: https://github.com/home-assistant/core/pull/137895 +[#137896]: https://github.com/home-assistant/core/pull/137896 +[#137897]: https://github.com/home-assistant/core/pull/137897 +[#137898]: https://github.com/home-assistant/core/pull/137898 +[#137899]: https://github.com/home-assistant/core/pull/137899 +[#137900]: https://github.com/home-assistant/core/pull/137900 +[#137902]: https://github.com/home-assistant/core/pull/137902 +[#137903]: https://github.com/home-assistant/core/pull/137903 +[#137904]: https://github.com/home-assistant/core/pull/137904 +[#137905]: https://github.com/home-assistant/core/pull/137905 +[#137906]: https://github.com/home-assistant/core/pull/137906 +[#137907]: https://github.com/home-assistant/core/pull/137907 +[#137909]: https://github.com/home-assistant/core/pull/137909 +[#137910]: https://github.com/home-assistant/core/pull/137910 +[#137911]: https://github.com/home-assistant/core/pull/137911 +[#137912]: https://github.com/home-assistant/core/pull/137912 +[#137913]: https://github.com/home-assistant/core/pull/137913 +[#137916]: https://github.com/home-assistant/core/pull/137916 +[#137918]: https://github.com/home-assistant/core/pull/137918 +[#137919]: https://github.com/home-assistant/core/pull/137919 +[#137920]: https://github.com/home-assistant/core/pull/137920 +[#137921]: https://github.com/home-assistant/core/pull/137921 +[#137922]: https://github.com/home-assistant/core/pull/137922 +[#137923]: https://github.com/home-assistant/core/pull/137923 +[#137924]: https://github.com/home-assistant/core/pull/137924 +[#137925]: https://github.com/home-assistant/core/pull/137925 +[#137926]: https://github.com/home-assistant/core/pull/137926 +[#137927]: https://github.com/home-assistant/core/pull/137927 +[#137928]: https://github.com/home-assistant/core/pull/137928 +[#137929]: https://github.com/home-assistant/core/pull/137929 +[#137930]: https://github.com/home-assistant/core/pull/137930 +[#137932]: https://github.com/home-assistant/core/pull/137932 +[#137933]: https://github.com/home-assistant/core/pull/137933 +[#137934]: https://github.com/home-assistant/core/pull/137934 +[#137935]: https://github.com/home-assistant/core/pull/137935 +[#137936]: https://github.com/home-assistant/core/pull/137936 +[#137938]: https://github.com/home-assistant/core/pull/137938 +[#137939]: https://github.com/home-assistant/core/pull/137939 +[#137940]: https://github.com/home-assistant/core/pull/137940 +[#137941]: https://github.com/home-assistant/core/pull/137941 +[#137942]: https://github.com/home-assistant/core/pull/137942 +[#137943]: https://github.com/home-assistant/core/pull/137943 +[#137944]: https://github.com/home-assistant/core/pull/137944 +[#137945]: https://github.com/home-assistant/core/pull/137945 +[#137946]: https://github.com/home-assistant/core/pull/137946 +[#137947]: https://github.com/home-assistant/core/pull/137947 +[#137948]: https://github.com/home-assistant/core/pull/137948 +[#137950]: https://github.com/home-assistant/core/pull/137950 +[#137951]: https://github.com/home-assistant/core/pull/137951 +[#137953]: https://github.com/home-assistant/core/pull/137953 +[#137954]: https://github.com/home-assistant/core/pull/137954 +[#137955]: https://github.com/home-assistant/core/pull/137955 +[#137956]: https://github.com/home-assistant/core/pull/137956 +[#137957]: https://github.com/home-assistant/core/pull/137957 +[#137958]: https://github.com/home-assistant/core/pull/137958 +[#137959]: https://github.com/home-assistant/core/pull/137959 +[#137960]: https://github.com/home-assistant/core/pull/137960 +[#137962]: https://github.com/home-assistant/core/pull/137962 +[#137964]: https://github.com/home-assistant/core/pull/137964 +[#137965]: https://github.com/home-assistant/core/pull/137965 +[#137966]: https://github.com/home-assistant/core/pull/137966 +[#137967]: https://github.com/home-assistant/core/pull/137967 +[#137968]: https://github.com/home-assistant/core/pull/137968 +[#137970]: https://github.com/home-assistant/core/pull/137970 +[#137971]: https://github.com/home-assistant/core/pull/137971 +[#137972]: https://github.com/home-assistant/core/pull/137972 +[#137973]: https://github.com/home-assistant/core/pull/137973 +[#137974]: https://github.com/home-assistant/core/pull/137974 +[#137977]: https://github.com/home-assistant/core/pull/137977 +[#137978]: https://github.com/home-assistant/core/pull/137978 +[#137979]: https://github.com/home-assistant/core/pull/137979 +[#137981]: https://github.com/home-assistant/core/pull/137981 +[#137982]: https://github.com/home-assistant/core/pull/137982 +[#137983]: https://github.com/home-assistant/core/pull/137983 +[#137984]: https://github.com/home-assistant/core/pull/137984 +[#137985]: https://github.com/home-assistant/core/pull/137985 +[#137988]: https://github.com/home-assistant/core/pull/137988 +[#137994]: https://github.com/home-assistant/core/pull/137994 +[#137995]: https://github.com/home-assistant/core/pull/137995 +[#138015]: https://github.com/home-assistant/core/pull/138015 +[#138017]: https://github.com/home-assistant/core/pull/138017 +[#138027]: https://github.com/home-assistant/core/pull/138027 +[#138028]: https://github.com/home-assistant/core/pull/138028 +[#138029]: https://github.com/home-assistant/core/pull/138029 +[#138031]: https://github.com/home-assistant/core/pull/138031 +[#138032]: https://github.com/home-assistant/core/pull/138032 +[#138033]: https://github.com/home-assistant/core/pull/138033 +[#138034]: https://github.com/home-assistant/core/pull/138034 +[#138035]: https://github.com/home-assistant/core/pull/138035 +[#138036]: https://github.com/home-assistant/core/pull/138036 +[#138037]: https://github.com/home-assistant/core/pull/138037 +[#138038]: https://github.com/home-assistant/core/pull/138038 +[#138039]: https://github.com/home-assistant/core/pull/138039 +[#138040]: https://github.com/home-assistant/core/pull/138040 +[#138041]: https://github.com/home-assistant/core/pull/138041 +[#138042]: https://github.com/home-assistant/core/pull/138042 +[#138043]: https://github.com/home-assistant/core/pull/138043 +[#138044]: https://github.com/home-assistant/core/pull/138044 +[#138045]: https://github.com/home-assistant/core/pull/138045 +[#138046]: https://github.com/home-assistant/core/pull/138046 +[#138047]: https://github.com/home-assistant/core/pull/138047 +[#138048]: https://github.com/home-assistant/core/pull/138048 +[#138049]: https://github.com/home-assistant/core/pull/138049 +[#138050]: https://github.com/home-assistant/core/pull/138050 +[#138051]: https://github.com/home-assistant/core/pull/138051 +[#138052]: https://github.com/home-assistant/core/pull/138052 +[#138053]: https://github.com/home-assistant/core/pull/138053 +[#138054]: https://github.com/home-assistant/core/pull/138054 +[#138055]: https://github.com/home-assistant/core/pull/138055 +[#138056]: https://github.com/home-assistant/core/pull/138056 +[#138061]: https://github.com/home-assistant/core/pull/138061 +[#138062]: https://github.com/home-assistant/core/pull/138062 +[#138063]: https://github.com/home-assistant/core/pull/138063 +[#138064]: https://github.com/home-assistant/core/pull/138064 +[#138066]: https://github.com/home-assistant/core/pull/138066 +[#138068]: https://github.com/home-assistant/core/pull/138068 +[#138069]: https://github.com/home-assistant/core/pull/138069 +[#138070]: https://github.com/home-assistant/core/pull/138070 +[#138071]: https://github.com/home-assistant/core/pull/138071 +[#138072]: https://github.com/home-assistant/core/pull/138072 +[#138073]: https://github.com/home-assistant/core/pull/138073 +[#138074]: https://github.com/home-assistant/core/pull/138074 +[#138075]: https://github.com/home-assistant/core/pull/138075 +[#138076]: https://github.com/home-assistant/core/pull/138076 +[#138078]: https://github.com/home-assistant/core/pull/138078 +[#138080]: https://github.com/home-assistant/core/pull/138080 +[#138081]: https://github.com/home-assistant/core/pull/138081 +[#138082]: https://github.com/home-assistant/core/pull/138082 +[#138083]: https://github.com/home-assistant/core/pull/138083 +[#138085]: https://github.com/home-assistant/core/pull/138085 +[#138086]: https://github.com/home-assistant/core/pull/138086 +[#138088]: https://github.com/home-assistant/core/pull/138088 +[#138089]: https://github.com/home-assistant/core/pull/138089 +[#138090]: https://github.com/home-assistant/core/pull/138090 +[#138091]: https://github.com/home-assistant/core/pull/138091 +[#138092]: https://github.com/home-assistant/core/pull/138092 +[#138093]: https://github.com/home-assistant/core/pull/138093 +[#138094]: https://github.com/home-assistant/core/pull/138094 +[#138095]: https://github.com/home-assistant/core/pull/138095 +[#138102]: https://github.com/home-assistant/core/pull/138102 +[#138103]: https://github.com/home-assistant/core/pull/138103 +[#138105]: https://github.com/home-assistant/core/pull/138105 +[#138106]: https://github.com/home-assistant/core/pull/138106 +[#138107]: https://github.com/home-assistant/core/pull/138107 +[#138108]: https://github.com/home-assistant/core/pull/138108 +[#138109]: https://github.com/home-assistant/core/pull/138109 +[#138110]: https://github.com/home-assistant/core/pull/138110 +[#138111]: https://github.com/home-assistant/core/pull/138111 +[#138112]: https://github.com/home-assistant/core/pull/138112 +[#138113]: https://github.com/home-assistant/core/pull/138113 +[#138114]: https://github.com/home-assistant/core/pull/138114 +[#138115]: https://github.com/home-assistant/core/pull/138115 +[#138116]: https://github.com/home-assistant/core/pull/138116 +[#138117]: https://github.com/home-assistant/core/pull/138117 +[#138119]: https://github.com/home-assistant/core/pull/138119 +[#138120]: https://github.com/home-assistant/core/pull/138120 +[#138122]: https://github.com/home-assistant/core/pull/138122 +[#138123]: https://github.com/home-assistant/core/pull/138123 +[#138124]: https://github.com/home-assistant/core/pull/138124 +[#138125]: https://github.com/home-assistant/core/pull/138125 +[#138127]: https://github.com/home-assistant/core/pull/138127 +[#138128]: https://github.com/home-assistant/core/pull/138128 +[#138129]: https://github.com/home-assistant/core/pull/138129 +[#138130]: https://github.com/home-assistant/core/pull/138130 +[#138131]: https://github.com/home-assistant/core/pull/138131 +[#138132]: https://github.com/home-assistant/core/pull/138132 +[#138133]: https://github.com/home-assistant/core/pull/138133 +[#138134]: https://github.com/home-assistant/core/pull/138134 +[#138137]: https://github.com/home-assistant/core/pull/138137 +[#138138]: https://github.com/home-assistant/core/pull/138138 +[#138139]: https://github.com/home-assistant/core/pull/138139 +[#138140]: https://github.com/home-assistant/core/pull/138140 +[#138141]: https://github.com/home-assistant/core/pull/138141 +[#138142]: https://github.com/home-assistant/core/pull/138142 +[#138143]: https://github.com/home-assistant/core/pull/138143 +[#138144]: https://github.com/home-assistant/core/pull/138144 +[#138146]: https://github.com/home-assistant/core/pull/138146 +[#138147]: https://github.com/home-assistant/core/pull/138147 +[#138148]: https://github.com/home-assistant/core/pull/138148 +[#138149]: https://github.com/home-assistant/core/pull/138149 +[#138150]: https://github.com/home-assistant/core/pull/138150 +[#138151]: https://github.com/home-assistant/core/pull/138151 +[#138152]: https://github.com/home-assistant/core/pull/138152 +[#138153]: https://github.com/home-assistant/core/pull/138153 +[#138154]: https://github.com/home-assistant/core/pull/138154 +[#138155]: https://github.com/home-assistant/core/pull/138155 +[#138156]: https://github.com/home-assistant/core/pull/138156 +[#138162]: https://github.com/home-assistant/core/pull/138162 +[#138163]: https://github.com/home-assistant/core/pull/138163 +[#138167]: https://github.com/home-assistant/core/pull/138167 +[#138171]: https://github.com/home-assistant/core/pull/138171 +[#138173]: https://github.com/home-assistant/core/pull/138173 +[#138177]: https://github.com/home-assistant/core/pull/138177 +[#138178]: https://github.com/home-assistant/core/pull/138178 +[#138184]: https://github.com/home-assistant/core/pull/138184 +[#138192]: https://github.com/home-assistant/core/pull/138192 +[#138194]: https://github.com/home-assistant/core/pull/138194 +[#138198]: https://github.com/home-assistant/core/pull/138198 +[#138200]: https://github.com/home-assistant/core/pull/138200 +[#138201]: https://github.com/home-assistant/core/pull/138201 +[#138202]: https://github.com/home-assistant/core/pull/138202 +[#138203]: https://github.com/home-assistant/core/pull/138203 +[#138204]: https://github.com/home-assistant/core/pull/138204 +[#138205]: https://github.com/home-assistant/core/pull/138205 +[#138211]: https://github.com/home-assistant/core/pull/138211 +[#138212]: https://github.com/home-assistant/core/pull/138212 +[#138213]: https://github.com/home-assistant/core/pull/138213 +[#138214]: https://github.com/home-assistant/core/pull/138214 +[#138221]: https://github.com/home-assistant/core/pull/138221 +[#138223]: https://github.com/home-assistant/core/pull/138223 +[#138225]: https://github.com/home-assistant/core/pull/138225 +[#138229]: https://github.com/home-assistant/core/pull/138229 +[#138230]: https://github.com/home-assistant/core/pull/138230 +[#138232]: https://github.com/home-assistant/core/pull/138232 +[#138233]: https://github.com/home-assistant/core/pull/138233 +[#138235]: https://github.com/home-assistant/core/pull/138235 +[#138237]: https://github.com/home-assistant/core/pull/138237 +[#138238]: https://github.com/home-assistant/core/pull/138238 +[#138239]: https://github.com/home-assistant/core/pull/138239 +[#138240]: https://github.com/home-assistant/core/pull/138240 +[#138244]: https://github.com/home-assistant/core/pull/138244 +[#138246]: https://github.com/home-assistant/core/pull/138246 +[#138247]: https://github.com/home-assistant/core/pull/138247 +[#138248]: https://github.com/home-assistant/core/pull/138248 +[#138249]: https://github.com/home-assistant/core/pull/138249 +[#138256]: https://github.com/home-assistant/core/pull/138256 +[#138263]: https://github.com/home-assistant/core/pull/138263 +[#138264]: https://github.com/home-assistant/core/pull/138264 +[#138266]: https://github.com/home-assistant/core/pull/138266 +[#138267]: https://github.com/home-assistant/core/pull/138267 +[#138268]: https://github.com/home-assistant/core/pull/138268 +[#138271]: https://github.com/home-assistant/core/pull/138271 +[#138274]: https://github.com/home-assistant/core/pull/138274 +[#138275]: https://github.com/home-assistant/core/pull/138275 +[#138276]: https://github.com/home-assistant/core/pull/138276 +[#138279]: https://github.com/home-assistant/core/pull/138279 +[#138280]: https://github.com/home-assistant/core/pull/138280 +[#138281]: https://github.com/home-assistant/core/pull/138281 +[#138287]: https://github.com/home-assistant/core/pull/138287 +[#138288]: https://github.com/home-assistant/core/pull/138288 +[#138289]: https://github.com/home-assistant/core/pull/138289 +[#138294]: https://github.com/home-assistant/core/pull/138294 +[#138306]: https://github.com/home-assistant/core/pull/138306 +[#138307]: https://github.com/home-assistant/core/pull/138307 +[#138309]: https://github.com/home-assistant/core/pull/138309 +[#138310]: https://github.com/home-assistant/core/pull/138310 +[#138312]: https://github.com/home-assistant/core/pull/138312 +[#138313]: https://github.com/home-assistant/core/pull/138313 +[#138319]: https://github.com/home-assistant/core/pull/138319 +[#138321]: https://github.com/home-assistant/core/pull/138321 +[#138322]: https://github.com/home-assistant/core/pull/138322 +[#138329]: https://github.com/home-assistant/core/pull/138329 +[#138330]: https://github.com/home-assistant/core/pull/138330 +[#138331]: https://github.com/home-assistant/core/pull/138331 +[#138334]: https://github.com/home-assistant/core/pull/138334 +[#138343]: https://github.com/home-assistant/core/pull/138343 +[#138346]: https://github.com/home-assistant/core/pull/138346 +[#138354]: https://github.com/home-assistant/core/pull/138354 +[#138355]: https://github.com/home-assistant/core/pull/138355 +[#138360]: https://github.com/home-assistant/core/pull/138360 +[#138361]: https://github.com/home-assistant/core/pull/138361 +[#138362]: https://github.com/home-assistant/core/pull/138362 +[#138364]: https://github.com/home-assistant/core/pull/138364 +[#138366]: https://github.com/home-assistant/core/pull/138366 +[#138368]: https://github.com/home-assistant/core/pull/138368 +[#138373]: https://github.com/home-assistant/core/pull/138373 +[#138374]: https://github.com/home-assistant/core/pull/138374 +[#138380]: https://github.com/home-assistant/core/pull/138380 +[#138384]: https://github.com/home-assistant/core/pull/138384 +[#138385]: https://github.com/home-assistant/core/pull/138385 +[#138393]: https://github.com/home-assistant/core/pull/138393 +[#138403]: https://github.com/home-assistant/core/pull/138403 +[#138407]: https://github.com/home-assistant/core/pull/138407 +[#138410]: https://github.com/home-assistant/core/pull/138410 +[#138411]: https://github.com/home-assistant/core/pull/138411 +[#138419]: https://github.com/home-assistant/core/pull/138419 +[#138420]: https://github.com/home-assistant/core/pull/138420 +[#138422]: https://github.com/home-assistant/core/pull/138422 +[#138425]: https://github.com/home-assistant/core/pull/138425 +[#138431]: https://github.com/home-assistant/core/pull/138431 +[#138432]: https://github.com/home-assistant/core/pull/138432 +[#138433]: https://github.com/home-assistant/core/pull/138433 +[#138434]: https://github.com/home-assistant/core/pull/138434 +[#138436]: https://github.com/home-assistant/core/pull/138436 +[#138446]: https://github.com/home-assistant/core/pull/138446 +[#138459]: https://github.com/home-assistant/core/pull/138459 +[#138470]: https://github.com/home-assistant/core/pull/138470 +[#138476]: https://github.com/home-assistant/core/pull/138476 +[#138490]: https://github.com/home-assistant/core/pull/138490 +[#138491]: https://github.com/home-assistant/core/pull/138491 +[#138494]: https://github.com/home-assistant/core/pull/138494 +[#138509]: https://github.com/home-assistant/core/pull/138509 +[#138514]: https://github.com/home-assistant/core/pull/138514 +[#138517]: https://github.com/home-assistant/core/pull/138517 +[#138520]: https://github.com/home-assistant/core/pull/138520 +[#138522]: https://github.com/home-assistant/core/pull/138522 +[#138534]: https://github.com/home-assistant/core/pull/138534 +[#138540]: https://github.com/home-assistant/core/pull/138540 +[#138547]: https://github.com/home-assistant/core/pull/138547 +[#138548]: https://github.com/home-assistant/core/pull/138548 +[#138549]: https://github.com/home-assistant/core/pull/138549 +[#138553]: https://github.com/home-assistant/core/pull/138553 +[#138554]: https://github.com/home-assistant/core/pull/138554 +[#138555]: https://github.com/home-assistant/core/pull/138555 +[#138557]: https://github.com/home-assistant/core/pull/138557 +[#138558]: https://github.com/home-assistant/core/pull/138558 +[#138560]: https://github.com/home-assistant/core/pull/138560 +[#138563]: https://github.com/home-assistant/core/pull/138563 +[#138564]: https://github.com/home-assistant/core/pull/138564 +[#138566]: https://github.com/home-assistant/core/pull/138566 +[#138568]: https://github.com/home-assistant/core/pull/138568 +[#138576]: https://github.com/home-assistant/core/pull/138576 +[#138580]: https://github.com/home-assistant/core/pull/138580 +[#138583]: https://github.com/home-assistant/core/pull/138583 +[#138584]: https://github.com/home-assistant/core/pull/138584 +[#138586]: https://github.com/home-assistant/core/pull/138586 +[#138593]: https://github.com/home-assistant/core/pull/138593 +[#138595]: https://github.com/home-assistant/core/pull/138595 +[#138601]: https://github.com/home-assistant/core/pull/138601 +[#138605]: https://github.com/home-assistant/core/pull/138605 +[#138608]: https://github.com/home-assistant/core/pull/138608 +[#138610]: https://github.com/home-assistant/core/pull/138610 +[#138613]: https://github.com/home-assistant/core/pull/138613 +[#138618]: https://github.com/home-assistant/core/pull/138618 +[#138619]: https://github.com/home-assistant/core/pull/138619 +[#138624]: https://github.com/home-assistant/core/pull/138624 +[#138626]: https://github.com/home-assistant/core/pull/138626 +[#138628]: https://github.com/home-assistant/core/pull/138628 +[#138634]: https://github.com/home-assistant/core/pull/138634 +[#138636]: https://github.com/home-assistant/core/pull/138636 +[#138637]: https://github.com/home-assistant/core/pull/138637 +[#138647]: https://github.com/home-assistant/core/pull/138647 +[#138651]: https://github.com/home-assistant/core/pull/138651 +[#138652]: https://github.com/home-assistant/core/pull/138652 +[#138655]: https://github.com/home-assistant/core/pull/138655 +[#138659]: https://github.com/home-assistant/core/pull/138659 +[#138664]: https://github.com/home-assistant/core/pull/138664 +[#138667]: https://github.com/home-assistant/core/pull/138667 +[#138669]: https://github.com/home-assistant/core/pull/138669 +[#138672]: https://github.com/home-assistant/core/pull/138672 +[#138674]: https://github.com/home-assistant/core/pull/138674 +[#138675]: https://github.com/home-assistant/core/pull/138675 +[#138677]: https://github.com/home-assistant/core/pull/138677 +[#138678]: https://github.com/home-assistant/core/pull/138678 +[#138680]: https://github.com/home-assistant/core/pull/138680 +[#138698]: https://github.com/home-assistant/core/pull/138698 +[#138699]: https://github.com/home-assistant/core/pull/138699 +[#138701]: https://github.com/home-assistant/core/pull/138701 +[#138703]: https://github.com/home-assistant/core/pull/138703 +[#138706]: https://github.com/home-assistant/core/pull/138706 +[#138707]: https://github.com/home-assistant/core/pull/138707 +[#138708]: https://github.com/home-assistant/core/pull/138708 +[#138710]: https://github.com/home-assistant/core/pull/138710 +[#138714]: https://github.com/home-assistant/core/pull/138714 +[#138717]: https://github.com/home-assistant/core/pull/138717 +[#138721]: https://github.com/home-assistant/core/pull/138721 +[#138723]: https://github.com/home-assistant/core/pull/138723 +[#138724]: https://github.com/home-assistant/core/pull/138724 +[#138727]: https://github.com/home-assistant/core/pull/138727 +[#138728]: https://github.com/home-assistant/core/pull/138728 +[#138729]: https://github.com/home-assistant/core/pull/138729 +[#138734]: https://github.com/home-assistant/core/pull/138734 +[#138737]: https://github.com/home-assistant/core/pull/138737 +[#138739]: https://github.com/home-assistant/core/pull/138739 +[#138740]: https://github.com/home-assistant/core/pull/138740 +[#138741]: https://github.com/home-assistant/core/pull/138741 +[#138742]: https://github.com/home-assistant/core/pull/138742 +[#138746]: https://github.com/home-assistant/core/pull/138746 +[#138748]: https://github.com/home-assistant/core/pull/138748 +[#138749]: https://github.com/home-assistant/core/pull/138749 +[#138751]: https://github.com/home-assistant/core/pull/138751 +[#138756]: https://github.com/home-assistant/core/pull/138756 +[#138759]: https://github.com/home-assistant/core/pull/138759 +[#138763]: https://github.com/home-assistant/core/pull/138763 +[#138764]: https://github.com/home-assistant/core/pull/138764 +[#138766]: https://github.com/home-assistant/core/pull/138766 +[#138773]: https://github.com/home-assistant/core/pull/138773 +[#138776]: https://github.com/home-assistant/core/pull/138776 +[#138777]: https://github.com/home-assistant/core/pull/138777 +[#138779]: https://github.com/home-assistant/core/pull/138779 +[#138782]: https://github.com/home-assistant/core/pull/138782 +[#138786]: https://github.com/home-assistant/core/pull/138786 +[#138789]: https://github.com/home-assistant/core/pull/138789 +[#138790]: https://github.com/home-assistant/core/pull/138790 +[#138791]: https://github.com/home-assistant/core/pull/138791 +[#138792]: https://github.com/home-assistant/core/pull/138792 +[#138794]: https://github.com/home-assistant/core/pull/138794 +[#138795]: https://github.com/home-assistant/core/pull/138795 +[#138796]: https://github.com/home-assistant/core/pull/138796 +[#138798]: https://github.com/home-assistant/core/pull/138798 +[#138799]: https://github.com/home-assistant/core/pull/138799 +[#138801]: https://github.com/home-assistant/core/pull/138801 +[#138806]: https://github.com/home-assistant/core/pull/138806 +[#138807]: https://github.com/home-assistant/core/pull/138807 +[#138812]: https://github.com/home-assistant/core/pull/138812 +[#138815]: https://github.com/home-assistant/core/pull/138815 +[#138819]: https://github.com/home-assistant/core/pull/138819 +[#138820]: https://github.com/home-assistant/core/pull/138820 +[#138827]: https://github.com/home-assistant/core/pull/138827 +[#138832]: https://github.com/home-assistant/core/pull/138832 +[#138834]: https://github.com/home-assistant/core/pull/138834 +[#138837]: https://github.com/home-assistant/core/pull/138837 +[#138838]: https://github.com/home-assistant/core/pull/138838 +[#138839]: https://github.com/home-assistant/core/pull/138839 +[#138840]: https://github.com/home-assistant/core/pull/138840 +[#138854]: https://github.com/home-assistant/core/pull/138854 +[#138855]: https://github.com/home-assistant/core/pull/138855 +[#138861]: https://github.com/home-assistant/core/pull/138861 +[#138867]: https://github.com/home-assistant/core/pull/138867 +[#138870]: https://github.com/home-assistant/core/pull/138870 +[#138872]: https://github.com/home-assistant/core/pull/138872 +[#138874]: https://github.com/home-assistant/core/pull/138874 +[#138876]: https://github.com/home-assistant/core/pull/138876 +[#138877]: https://github.com/home-assistant/core/pull/138877 +[#138878]: https://github.com/home-assistant/core/pull/138878 +[#138882]: https://github.com/home-assistant/core/pull/138882 +[#138883]: https://github.com/home-assistant/core/pull/138883 +[#138884]: https://github.com/home-assistant/core/pull/138884 +[#138886]: https://github.com/home-assistant/core/pull/138886 +[#138887]: https://github.com/home-assistant/core/pull/138887 +[#138893]: https://github.com/home-assistant/core/pull/138893 +[#138894]: https://github.com/home-assistant/core/pull/138894 +[#138895]: https://github.com/home-assistant/core/pull/138895 +[#138896]: https://github.com/home-assistant/core/pull/138896 +[#138897]: https://github.com/home-assistant/core/pull/138897 +[#138898]: https://github.com/home-assistant/core/pull/138898 +[#138901]: https://github.com/home-assistant/core/pull/138901 +[#138902]: https://github.com/home-assistant/core/pull/138902 +[#138904]: https://github.com/home-assistant/core/pull/138904 +[#138905]: https://github.com/home-assistant/core/pull/138905 +[#138906]: https://github.com/home-assistant/core/pull/138906 +[#138907]: https://github.com/home-assistant/core/pull/138907 +[#138908]: https://github.com/home-assistant/core/pull/138908 +[#138909]: https://github.com/home-assistant/core/pull/138909 +[#138910]: https://github.com/home-assistant/core/pull/138910 +[#138911]: https://github.com/home-assistant/core/pull/138911 +[#138912]: https://github.com/home-assistant/core/pull/138912 +[#138913]: https://github.com/home-assistant/core/pull/138913 +[#138914]: https://github.com/home-assistant/core/pull/138914 +[#138917]: https://github.com/home-assistant/core/pull/138917 +[#138920]: https://github.com/home-assistant/core/pull/138920 +[#138921]: https://github.com/home-assistant/core/pull/138921 +[#138923]: https://github.com/home-assistant/core/pull/138923 +[#138926]: https://github.com/home-assistant/core/pull/138926 +[#138928]: https://github.com/home-assistant/core/pull/138928 +[#138929]: https://github.com/home-assistant/core/pull/138929 +[#138930]: https://github.com/home-assistant/core/pull/138930 +[#138931]: https://github.com/home-assistant/core/pull/138931 +[#138932]: https://github.com/home-assistant/core/pull/138932 +[#138935]: https://github.com/home-assistant/core/pull/138935 +[#138936]: https://github.com/home-assistant/core/pull/138936 +[#138939]: https://github.com/home-assistant/core/pull/138939 +[#138940]: https://github.com/home-assistant/core/pull/138940 +[#138941]: https://github.com/home-assistant/core/pull/138941 +[#138943]: https://github.com/home-assistant/core/pull/138943 +[#138945]: https://github.com/home-assistant/core/pull/138945 +[#138948]: https://github.com/home-assistant/core/pull/138948 +[#138949]: https://github.com/home-assistant/core/pull/138949 +[#138950]: https://github.com/home-assistant/core/pull/138950 +[#138951]: https://github.com/home-assistant/core/pull/138951 +[#138952]: https://github.com/home-assistant/core/pull/138952 +[#138958]: https://github.com/home-assistant/core/pull/138958 +[#138959]: https://github.com/home-assistant/core/pull/138959 +[#138962]: https://github.com/home-assistant/core/pull/138962 +[#138964]: https://github.com/home-assistant/core/pull/138964 +[#138967]: https://github.com/home-assistant/core/pull/138967 +[#138969]: https://github.com/home-assistant/core/pull/138969 +[#138970]: https://github.com/home-assistant/core/pull/138970 +[#138973]: https://github.com/home-assistant/core/pull/138973 +[#138974]: https://github.com/home-assistant/core/pull/138974 +[#138975]: https://github.com/home-assistant/core/pull/138975 +[#138984]: https://github.com/home-assistant/core/pull/138984 +[#138988]: https://github.com/home-assistant/core/pull/138988 +[#138991]: https://github.com/home-assistant/core/pull/138991 +[#138993]: https://github.com/home-assistant/core/pull/138993 +[#138995]: https://github.com/home-assistant/core/pull/138995 +[#138997]: https://github.com/home-assistant/core/pull/138997 +[#138999]: https://github.com/home-assistant/core/pull/138999 +[#139000]: https://github.com/home-assistant/core/pull/139000 +[#139003]: https://github.com/home-assistant/core/pull/139003 +[#139009]: https://github.com/home-assistant/core/pull/139009 +[#139011]: https://github.com/home-assistant/core/pull/139011 +[#139013]: https://github.com/home-assistant/core/pull/139013 +[#139014]: https://github.com/home-assistant/core/pull/139014 +[#139017]: https://github.com/home-assistant/core/pull/139017 +[#139021]: https://github.com/home-assistant/core/pull/139021 +[#139027]: https://github.com/home-assistant/core/pull/139027 +[#139032]: https://github.com/home-assistant/core/pull/139032 +[#139035]: https://github.com/home-assistant/core/pull/139035 +[#139036]: https://github.com/home-assistant/core/pull/139036 +[#139037]: https://github.com/home-assistant/core/pull/139037 +[#139039]: https://github.com/home-assistant/core/pull/139039 +[#139042]: https://github.com/home-assistant/core/pull/139042 +[#139052]: https://github.com/home-assistant/core/pull/139052 +[#139054]: https://github.com/home-assistant/core/pull/139054 +[#139055]: https://github.com/home-assistant/core/pull/139055 +[#139056]: https://github.com/home-assistant/core/pull/139056 +[#139058]: https://github.com/home-assistant/core/pull/139058 +[#139059]: https://github.com/home-assistant/core/pull/139059 +[#139061]: https://github.com/home-assistant/core/pull/139061 +[#139062]: https://github.com/home-assistant/core/pull/139062 +[#139063]: https://github.com/home-assistant/core/pull/139063 +[#139065]: https://github.com/home-assistant/core/pull/139065 +[#139066]: https://github.com/home-assistant/core/pull/139066 +[#139067]: https://github.com/home-assistant/core/pull/139067 +[#139068]: https://github.com/home-assistant/core/pull/139068 +[#139070]: https://github.com/home-assistant/core/pull/139070 +[#139073]: https://github.com/home-assistant/core/pull/139073 +[#139074]: https://github.com/home-assistant/core/pull/139074 +[#139077]: https://github.com/home-assistant/core/pull/139077 +[#139082]: https://github.com/home-assistant/core/pull/139082 +[#139083]: https://github.com/home-assistant/core/pull/139083 +[#139088]: https://github.com/home-assistant/core/pull/139088 +[#139093]: https://github.com/home-assistant/core/pull/139093 +[#139096]: https://github.com/home-assistant/core/pull/139096 +[#139103]: https://github.com/home-assistant/core/pull/139103 +[#139104]: https://github.com/home-assistant/core/pull/139104 +[#139106]: https://github.com/home-assistant/core/pull/139106 +[#139108]: https://github.com/home-assistant/core/pull/139108 +[#139111]: https://github.com/home-assistant/core/pull/139111 +[#139113]: https://github.com/home-assistant/core/pull/139113 +[#139119]: https://github.com/home-assistant/core/pull/139119 +[#139122]: https://github.com/home-assistant/core/pull/139122 +[#139123]: https://github.com/home-assistant/core/pull/139123 +[#139129]: https://github.com/home-assistant/core/pull/139129 +[#139140]: https://github.com/home-assistant/core/pull/139140 +[#139141]: https://github.com/home-assistant/core/pull/139141 +[#139143]: https://github.com/home-assistant/core/pull/139143 +[#139145]: https://github.com/home-assistant/core/pull/139145 +[#139151]: https://github.com/home-assistant/core/pull/139151 +[#139157]: https://github.com/home-assistant/core/pull/139157 +[#139161]: https://github.com/home-assistant/core/pull/139161 +[#139162]: https://github.com/home-assistant/core/pull/139162 +[#139168]: https://github.com/home-assistant/core/pull/139168 +[#139177]: https://github.com/home-assistant/core/pull/139177 +[#139181]: https://github.com/home-assistant/core/pull/139181 +[#139185]: https://github.com/home-assistant/core/pull/139185 +[#139186]: https://github.com/home-assistant/core/pull/139186 +[#139187]: https://github.com/home-assistant/core/pull/139187 +[#139188]: https://github.com/home-assistant/core/pull/139188 +[#139189]: https://github.com/home-assistant/core/pull/139189 +[#139191]: https://github.com/home-assistant/core/pull/139191 +[#139196]: https://github.com/home-assistant/core/pull/139196 +[#139197]: https://github.com/home-assistant/core/pull/139197 +[#139199]: https://github.com/home-assistant/core/pull/139199 +[#139200]: https://github.com/home-assistant/core/pull/139200 +[#139202]: https://github.com/home-assistant/core/pull/139202 +[#139203]: https://github.com/home-assistant/core/pull/139203 +[#139206]: https://github.com/home-assistant/core/pull/139206 +[#139210]: https://github.com/home-assistant/core/pull/139210 +[#139211]: https://github.com/home-assistant/core/pull/139211 +[#139212]: https://github.com/home-assistant/core/pull/139212 +[#139213]: https://github.com/home-assistant/core/pull/139213 +[#139218]: https://github.com/home-assistant/core/pull/139218 +[#139223]: https://github.com/home-assistant/core/pull/139223 +[#139228]: https://github.com/home-assistant/core/pull/139228 +[#139229]: https://github.com/home-assistant/core/pull/139229 +[#139230]: https://github.com/home-assistant/core/pull/139230 +[#139231]: https://github.com/home-assistant/core/pull/139231 +[#139235]: https://github.com/home-assistant/core/pull/139235 +[#139238]: https://github.com/home-assistant/core/pull/139238 +[#139239]: https://github.com/home-assistant/core/pull/139239 +[#139242]: https://github.com/home-assistant/core/pull/139242 +[#139243]: https://github.com/home-assistant/core/pull/139243 +[#139244]: https://github.com/home-assistant/core/pull/139244 +[#139245]: https://github.com/home-assistant/core/pull/139245 +[#139246]: https://github.com/home-assistant/core/pull/139246 +[#139250]: https://github.com/home-assistant/core/pull/139250 +[#139251]: https://github.com/home-assistant/core/pull/139251 +[#139252]: https://github.com/home-assistant/core/pull/139252 +[#139253]: https://github.com/home-assistant/core/pull/139253 +[#139254]: https://github.com/home-assistant/core/pull/139254 +[#139255]: https://github.com/home-assistant/core/pull/139255 +[#139256]: https://github.com/home-assistant/core/pull/139256 +[#139257]: https://github.com/home-assistant/core/pull/139257 +[#139258]: https://github.com/home-assistant/core/pull/139258 +[#139259]: https://github.com/home-assistant/core/pull/139259 +[#139261]: https://github.com/home-assistant/core/pull/139261 +[#139262]: https://github.com/home-assistant/core/pull/139262 +[#139263]: https://github.com/home-assistant/core/pull/139263 +[#139265]: https://github.com/home-assistant/core/pull/139265 +[#139266]: https://github.com/home-assistant/core/pull/139266 +[#139267]: https://github.com/home-assistant/core/pull/139267 +[#139270]: https://github.com/home-assistant/core/pull/139270 +[#139271]: https://github.com/home-assistant/core/pull/139271 +[#139272]: https://github.com/home-assistant/core/pull/139272 +[#139273]: https://github.com/home-assistant/core/pull/139273 +[#139276]: https://github.com/home-assistant/core/pull/139276 +[#139277]: https://github.com/home-assistant/core/pull/139277 +[#139279]: https://github.com/home-assistant/core/pull/139279 +[#139282]: https://github.com/home-assistant/core/pull/139282 +[#139283]: https://github.com/home-assistant/core/pull/139283 +[#139287]: https://github.com/home-assistant/core/pull/139287 +[#139288]: https://github.com/home-assistant/core/pull/139288 +[#139289]: https://github.com/home-assistant/core/pull/139289 +[#139292]: https://github.com/home-assistant/core/pull/139292 +[#139294]: https://github.com/home-assistant/core/pull/139294 +[#139298]: https://github.com/home-assistant/core/pull/139298 +[#139299]: https://github.com/home-assistant/core/pull/139299 +[#139300]: https://github.com/home-assistant/core/pull/139300 +[#139303]: https://github.com/home-assistant/core/pull/139303 +[#139308]: https://github.com/home-assistant/core/pull/139308 +[#139309]: https://github.com/home-assistant/core/pull/139309 +[#139313]: https://github.com/home-assistant/core/pull/139313 +[#139314]: https://github.com/home-assistant/core/pull/139314 +[#139316]: https://github.com/home-assistant/core/pull/139316 +[#139317]: https://github.com/home-assistant/core/pull/139317 +[#139318]: https://github.com/home-assistant/core/pull/139318 +[#139320]: https://github.com/home-assistant/core/pull/139320 +[#139329]: https://github.com/home-assistant/core/pull/139329 +[#139330]: https://github.com/home-assistant/core/pull/139330 +[#139331]: https://github.com/home-assistant/core/pull/139331 +[#139332]: https://github.com/home-assistant/core/pull/139332 +[#139333]: https://github.com/home-assistant/core/pull/139333 +[#139336]: https://github.com/home-assistant/core/pull/139336 +[#139338]: https://github.com/home-assistant/core/pull/139338 +[#139339]: https://github.com/home-assistant/core/pull/139339 +[#139340]: https://github.com/home-assistant/core/pull/139340 +[#139342]: https://github.com/home-assistant/core/pull/139342 +[#139343]: https://github.com/home-assistant/core/pull/139343 +[#139344]: https://github.com/home-assistant/core/pull/139344 +[#139345]: https://github.com/home-assistant/core/pull/139345 +[#139346]: https://github.com/home-assistant/core/pull/139346 +[#139347]: https://github.com/home-assistant/core/pull/139347 +[#139349]: https://github.com/home-assistant/core/pull/139349 +[#139351]: https://github.com/home-assistant/core/pull/139351 +[#139353]: https://github.com/home-assistant/core/pull/139353 +[#139354]: https://github.com/home-assistant/core/pull/139354 +[#139355]: https://github.com/home-assistant/core/pull/139355 +[#139356]: https://github.com/home-assistant/core/pull/139356 +[#139358]: https://github.com/home-assistant/core/pull/139358 +[#139361]: https://github.com/home-assistant/core/pull/139361 +[#139362]: https://github.com/home-assistant/core/pull/139362 +[#139363]: https://github.com/home-assistant/core/pull/139363 +[#139364]: https://github.com/home-assistant/core/pull/139364 +[#139365]: https://github.com/home-assistant/core/pull/139365 +[#139366]: https://github.com/home-assistant/core/pull/139366 +[#139368]: https://github.com/home-assistant/core/pull/139368 +[#139369]: https://github.com/home-assistant/core/pull/139369 +[#139370]: https://github.com/home-assistant/core/pull/139370 +[#139371]: https://github.com/home-assistant/core/pull/139371 +[#139373]: https://github.com/home-assistant/core/pull/139373 +[#139378]: https://github.com/home-assistant/core/pull/139378 +[#139380]: https://github.com/home-assistant/core/pull/139380 +[#139383]: https://github.com/home-assistant/core/pull/139383 +[#139387]: https://github.com/home-assistant/core/pull/139387 +[#139392]: https://github.com/home-assistant/core/pull/139392 +[#139409]: https://github.com/home-assistant/core/pull/139409 +[#139410]: https://github.com/home-assistant/core/pull/139410 +[#139418]: https://github.com/home-assistant/core/pull/139418 +[#139420]: https://github.com/home-assistant/core/pull/139420 +[#139421]: https://github.com/home-assistant/core/pull/139421 +[#139423]: https://github.com/home-assistant/core/pull/139423 +[#139426]: https://github.com/home-assistant/core/pull/139426 +[#139427]: https://github.com/home-assistant/core/pull/139427 +[#139428]: https://github.com/home-assistant/core/pull/139428 +[#139431]: https://github.com/home-assistant/core/pull/139431 +[#139437]: https://github.com/home-assistant/core/pull/139437 +[#139438]: https://github.com/home-assistant/core/pull/139438 +[#139445]: https://github.com/home-assistant/core/pull/139445 +[#139447]: https://github.com/home-assistant/core/pull/139447 +[#139454]: https://github.com/home-assistant/core/pull/139454 +[#139456]: https://github.com/home-assistant/core/pull/139456 +[#139458]: https://github.com/home-assistant/core/pull/139458 +[#139460]: https://github.com/home-assistant/core/pull/139460 +[#139468]: https://github.com/home-assistant/core/pull/139468 +[#139469]: https://github.com/home-assistant/core/pull/139469 +[#139470]: https://github.com/home-assistant/core/pull/139470 +[#139473]: https://github.com/home-assistant/core/pull/139473 +[#139474]: https://github.com/home-assistant/core/pull/139474 +[#139478]: https://github.com/home-assistant/core/pull/139478 +[#139483]: https://github.com/home-assistant/core/pull/139483 +[#139491]: https://github.com/home-assistant/core/pull/139491 +[#139505]: https://github.com/home-assistant/core/pull/139505 +[#139508]: https://github.com/home-assistant/core/pull/139508 +[#139516]: https://github.com/home-assistant/core/pull/139516 +[#139518]: https://github.com/home-assistant/core/pull/139518 +[#139519]: https://github.com/home-assistant/core/pull/139519 +[#139522]: https://github.com/home-assistant/core/pull/139522 +[#139526]: https://github.com/home-assistant/core/pull/139526 +[#139531]: https://github.com/home-assistant/core/pull/139531 +[#139539]: https://github.com/home-assistant/core/pull/139539 +[#139541]: https://github.com/home-assistant/core/pull/139541 +[#139544]: https://github.com/home-assistant/core/pull/139544 +[#139546]: https://github.com/home-assistant/core/pull/139546 +[#139547]: https://github.com/home-assistant/core/pull/139547 +[#139548]: https://github.com/home-assistant/core/pull/139548 +[#139550]: https://github.com/home-assistant/core/pull/139550 +[#139564]: https://github.com/home-assistant/core/pull/139564 +[#139565]: https://github.com/home-assistant/core/pull/139565 +[#139567]: https://github.com/home-assistant/core/pull/139567 +[#139569]: https://github.com/home-assistant/core/pull/139569 +[#139571]: https://github.com/home-assistant/core/pull/139571 +[#139576]: https://github.com/home-assistant/core/pull/139576 +[#139577]: https://github.com/home-assistant/core/pull/139577 +[#139579]: https://github.com/home-assistant/core/pull/139579 +[#139582]: https://github.com/home-assistant/core/pull/139582 +[#139584]: https://github.com/home-assistant/core/pull/139584 +[#139585]: https://github.com/home-assistant/core/pull/139585 +[#139586]: https://github.com/home-assistant/core/pull/139586 +[#139598]: https://github.com/home-assistant/core/pull/139598 +[#139600]: https://github.com/home-assistant/core/pull/139600 +[#139601]: https://github.com/home-assistant/core/pull/139601 +[#139603]: https://github.com/home-assistant/core/pull/139603 +[#139609]: https://github.com/home-assistant/core/pull/139609 +[#139613]: https://github.com/home-assistant/core/pull/139613 +[#139626]: https://github.com/home-assistant/core/pull/139626 +[#139627]: https://github.com/home-assistant/core/pull/139627 +[#139639]: https://github.com/home-assistant/core/pull/139639 +[#139652]: https://github.com/home-assistant/core/pull/139652 +[#139679]: https://github.com/home-assistant/core/pull/139679 +[#139680]: https://github.com/home-assistant/core/pull/139680 +[#139681]: https://github.com/home-assistant/core/pull/139681 +[#139700]: https://github.com/home-assistant/core/pull/139700 +[#139704]: https://github.com/home-assistant/core/pull/139704 +[#139711]: https://github.com/home-assistant/core/pull/139711 +[#139712]: https://github.com/home-assistant/core/pull/139712 +[#139714]: https://github.com/home-assistant/core/pull/139714 +[#139727]: https://github.com/home-assistant/core/pull/139727 +[#139728]: https://github.com/home-assistant/core/pull/139728 +[#139740]: https://github.com/home-assistant/core/pull/139740 +[#139750]: https://github.com/home-assistant/core/pull/139750 +[#139751]: https://github.com/home-assistant/core/pull/139751 +[#139757]: https://github.com/home-assistant/core/pull/139757 +[#139758]: https://github.com/home-assistant/core/pull/139758 +[#139760]: https://github.com/home-assistant/core/pull/139760 +[#139772]: https://github.com/home-assistant/core/pull/139772 +[#139786]: https://github.com/home-assistant/core/pull/139786 +[#139788]: https://github.com/home-assistant/core/pull/139788 +[#139816]: https://github.com/home-assistant/core/pull/139816 +[#139829]: https://github.com/home-assistant/core/pull/139829 +[#139840]: https://github.com/home-assistant/core/pull/139840 +[#139841]: https://github.com/home-assistant/core/pull/139841 +[#139846]: https://github.com/home-assistant/core/pull/139846 +[#139851]: https://github.com/home-assistant/core/pull/139851 +[#139860]: https://github.com/home-assistant/core/pull/139860 +[@10100011]: https://github.com/10100011 +[@Bre77]: https://github.com/Bre77 +[@CFenner]: https://github.com/CFenner +[@CloCkWeRX]: https://github.com/CloCkWeRX +[@CodingSquirrel]: https://github.com/CodingSquirrel +[@CrEaK]: https://github.com/CrEaK +[@DCSBL]: https://github.com/DCSBL +[@Diegorro98]: https://github.com/Diegorro98 +[@Ernst79]: https://github.com/Ernst79 +[@FredericMa]: https://github.com/FredericMa +[@Galorhallen]: https://github.com/Galorhallen +[@HA-Roberto]: https://github.com/HA-Roberto +[@IceBotYT]: https://github.com/IceBotYT +[@IvanLH]: https://github.com/IvanLH +[@Kane610]: https://github.com/Kane610 +[@LG-ThinQ-Integration]: https://github.com/LG-ThinQ-Integration +[@LaithBudairi]: https://github.com/LaithBudairi +[@Lash-L]: https://github.com/Lash-L +[@MaestroOnICe]: https://github.com/MaestroOnICe +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@Martreides]: https://github.com/Martreides +[@MindFreeze]: https://github.com/MindFreeze +[@MisterCommand]: https://github.com/MisterCommand +[@Moustachauve]: https://github.com/Moustachauve +[@MrConorAE]: https://github.com/MrConorAE +[@NoRi2909]: https://github.com/NoRi2909 +[@PeteRager]: https://github.com/PeteRager +[@RJPoelstra]: https://github.com/RJPoelstra +[@RenierM26]: https://github.com/RenierM26 +[@RunC0deRun]: https://github.com/RunC0deRun +[@SLaks]: https://github.com/SLaks +[@Samywamy10]: https://github.com/Samywamy10 +[@Shulyaka]: https://github.com/Shulyaka +[@Shutgun]: https://github.com/Shutgun +[@Sibgatulin]: https://github.com/Sibgatulin +[@Spcemarine]: https://github.com/Spcemarine +[@StaleLoafOfBread]: https://github.com/StaleLoafOfBread +[@SteveDiks]: https://github.com/SteveDiks +[@Taraman17]: https://github.com/Taraman17 +[@TheJulianJES]: https://github.com/TheJulianJES +[@TomBrien]: https://github.com/TomBrien +[@VandeurenGlenn]: https://github.com/VandeurenGlenn +[@Xitee1]: https://github.com/Xitee1 +[@ZephireNZ]: https://github.com/ZephireNZ +[@abmantis]: https://github.com/abmantis +[@albertogeniola]: https://github.com/albertogeniola +[@alengwenus]: https://github.com/alengwenus +[@allenporter]: https://github.com/allenporter +[@andrew-codechimp]: https://github.com/andrew-codechimp +[@andrewsayre]: https://github.com/andrewsayre +[@antlarr]: https://github.com/antlarr +[@arturpragacz]: https://github.com/arturpragacz +[@ashionky]: https://github.com/ashionky +[@autinerd]: https://github.com/autinerd +[@awahlig]: https://github.com/awahlig +[@balazs92117]: https://github.com/balazs92117 +[@balloob]: https://github.com/balloob +[@bdraco]: https://github.com/bdraco +[@benbridts]: https://github.com/benbridts +[@bieniu]: https://github.com/bieniu +[@bouwew]: https://github.com/bouwew +[@bramkragten]: https://github.com/bramkragten +[@brondum]: https://github.com/brondum +[@cameronr]: https://github.com/cameronr +[@catsmanac]: https://github.com/catsmanac +[@cdce8p]: https://github.com/cdce8p +[@cdnninja]: https://github.com/cdnninja +[@cereal2nd]: https://github.com/cereal2nd +[@chemelli74]: https://github.com/chemelli74 +[@codesalatdev]: https://github.com/codesalatdev +[@crug80]: https://github.com/crug80 +[@cs12ag]: https://github.com/cs12ag +[@dan-r]: https://github.com/dan-r +[@danbishop]: https://github.com/danbishop +[@davidrapan]: https://github.com/davidrapan +[@dgomes]: https://github.com/dgomes +[@edenhaus]: https://github.com/edenhaus +[@elmurato]: https://github.com/elmurato +[@emontnemery]: https://github.com/emontnemery +[@epenet]: https://github.com/epenet +[@erwindouna]: https://github.com/erwindouna +[@farmio]: https://github.com/farmio +[@filipagh]: https://github.com/filipagh +[@frenck]: https://github.com/frenck +[@fwestenberg]: https://github.com/fwestenberg +[@gjohansson-ST]: https://github.com/gjohansson-ST +[@gjong]: https://github.com/gjong +[@gwww]: https://github.com/gwww +[@illia-piskurov]: https://github.com/illia-piskurov +[@iprak]: https://github.com/iprak +[@jaminh]: https://github.com/jaminh +[@javers99]: https://github.com/javers99 +[@jbouwh]: https://github.com/jbouwh +[@jdelaney72]: https://github.com/jdelaney72 +[@jeeftor]: https://github.com/jeeftor +[@jgrande]: https://github.com/jgrande +[@jgus]: https://github.com/jgus +[@joostlek]: https://github.com/joostlek +[@jpbede]: https://github.com/jpbede +[@jpelgrom]: https://github.com/jpelgrom +[@jrieger]: https://github.com/jrieger +[@jschlyter]: https://github.com/jschlyter +[@kbickar]: https://github.com/kbickar +[@kiranbhakre]: https://github.com/kiranbhakre +[@laiho-vogels]: https://github.com/laiho-vogels +[@lanthaler]: https://github.com/lanthaler +[@lboue]: https://github.com/lboue +[@lellky]: https://github.com/lellky +[@ludeeus]: https://github.com/ludeeus +[@maghiel]: https://github.com/maghiel +[@marcelveldt]: https://github.com/marcelveldt +[@maruel]: https://github.com/maruel +[@matrixd2]: https://github.com/matrixd2 +[@mckbrmn]: https://github.com/mckbrmn +[@mdz]: https://github.com/mdz +[@mib1185]: https://github.com/mib1185 +[@migrzyb]: https://github.com/migrzyb +[@mikey0000]: https://github.com/mikey0000 +[@milanmeu]: https://github.com/milanmeu +[@mj23000]: https://github.com/mj23000 +[@moritzthecat]: https://github.com/moritzthecat +[@mtielen]: https://github.com/mtielen +[@natekspencer]: https://github.com/natekspencer +[@nivstein]: https://github.com/nivstein +[@noahhusby]: https://github.com/noahhusby +[@ozonejunkieau]: https://github.com/ozonejunkieau +[@parkerbxyz]: https://github.com/parkerbxyz +[@peteS-UK]: https://github.com/peteS-UK +[@pglab-electronics]: https://github.com/pglab-electronics +[@piitaya]: https://github.com/piitaya +[@piotrbulinski]: https://github.com/piotrbulinski +[@pleasantone]: https://github.com/pleasantone +[@postlund]: https://github.com/postlund +[@proohit]: https://github.com/proohit +[@pssc]: https://github.com/pssc +[@puddly]: https://github.com/puddly +[@regevbr]: https://github.com/regevbr +[@rikroe]: https://github.com/rikroe +[@rrooggiieerr]: https://github.com/rrooggiieerr +[@sdb9696]: https://github.com/sdb9696 +[@skobow]: https://github.com/skobow +[@sstallion]: https://github.com/sstallion +[@starkillerOG]: https://github.com/starkillerOG +[@stephan48]: https://github.com/stephan48 +[@stevenh]: https://github.com/stevenh +[@stevesinchak]: https://github.com/stevesinchak +[@synesthesiam]: https://github.com/synesthesiam +[@tdfountain]: https://github.com/tdfountain +[@teynar]: https://github.com/teynar +[@thecode]: https://github.com/thecode +[@thomasddn]: https://github.com/thomasddn +[@tl-sl]: https://github.com/tl-sl +[@tr4nt0r]: https://github.com/tr4nt0r +[@tronikos]: https://github.com/tronikos +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wjtje]: https://github.com/wjtje +[@zackslash]: https://github.com/zackslash +[@zweckj]: https://github.com/zweckj +[@zxdavb]: https://github.com/zxdavb diff --git a/source/common-tasks/os.markdown b/source/common-tasks/os.markdown index 198637e4ef1..833a4e851ae 100644 --- a/source/common-tasks/os.markdown +++ b/source/common-tasks/os.markdown @@ -10,6 +10,20 @@ This section will provide guides to some common tasks and information which you {% include common-tasks/file_access.md %} +## Backup + +To learn how to back up the system or how to restore a system from a backup, refer to the backup documentation under [common tasks](/common-tasks/general/#backups). + +### Alternative: Creating a backup using the Home Assistant Command Line Interface + +In general, to create or restore from a backup, follow the steps described under [common tasks](/common-tasks/general/#backups). However, If you have the {% term "Home Assistant Operating System" %} installed, you can also create a backup from the command line. Follow these steps: + +1. `ha backups list` - lists backups and their slugnames +2. `ha backups restore slugname` - restores a specific backup +3. `ha backups new --name nameofbackup` - create a backup + +For additional information about command line usage, use the `ha help` command or refer to the [Home Assistant Command Line documentation](/common-tasks/os/#home-assistant-via-the-command-line). + ## Updating Home Assistant If you have the {% term "Home Assistant Operating System" %} installed, you receive update notifications from different components: @@ -27,7 +41,7 @@ Updates of the {% term "Home Assistant Operating System" %} are independent of o - [Backup](/common-tasks/general/#backups) your installation. - Make sure the backup is downloaded and stored outside of the system. - - So that you can restore from that backup in case there is an issue with the system. + - So that you can [restore from that backup](/common-tasks/general/#restoring-a-backup) in case there is an issue with the system. #### To update the Home Assistant Operating System diff --git a/source/common-tasks/supervised.markdown b/source/common-tasks/supervised.markdown index c4c6cbf4d31..f401528657e 100644 --- a/source/common-tasks/supervised.markdown +++ b/source/common-tasks/supervised.markdown @@ -10,6 +10,20 @@ related: {% include common-tasks/file_access.md %} +## Backup + +To learn how to back up the system or how to restore a system from a backup, refer to the backup documentation under [common tasks](/common-tasks/general/#backups). + +### Alternative: Creating a backup using the Home Assistant Command Line Interface + +In general, to create or restore from a backup, follow the steps described under [common tasks](/common-tasks/general/#backups). However, If you have the {% term "Home Assistant Supervised" %} installed, you can also create a backup from the command line. Follow these steps: + +1. `ha backups list` - lists backups and their slugnames +2. `ha backups restore slugname` - restores a specific backup +3. `ha backups new --name nameofbackup` - create a backup + +For additional information about command line usage, use the `ha help` command or refer to the [Home Assistant Command Line documentation](/common-tasks/supervised/#home-assistant-via-the-command-line). + ## Update {% include common-tasks/update.md %} diff --git a/source/connectzbt1/index.html b/source/connectzbt1/index.html index 970d60e3fa7..3c755d55c99 100644 --- a/source/connectzbt1/index.html +++ b/source/connectzbt1/index.html @@ -22,6 +22,10 @@ frontpage_image: /images/frontpage/feature-zbt1.jpg #landingpage #buy-dialog { overflow-y: auto; } + #landingpage .page-content .content .bullet-points .item span{ + letter-spacing: unset; + } + .multi-pan { max-width: 750px; margin: 100px auto; @@ -98,7 +102,7 @@ frontpage_image: /images/frontpage/feature-zbt1.jpg
    - @@ -233,470 +237,11 @@ frontpage_image: /images/frontpage/feature-zbt1.jpg -
    -
    -
    -
    - Home Assistant Connect ZBT-1 - - - - - -
    -
    -
    - Shipping to America - -
    -
    - Shipping to Asia - -
    -
    - Shipping to Australia - -
    -
    - Shipping to Europe -
    - - -
    -
    -
    🇨🇿
    -
    ALZA
    -
    Shipping from the Czech Republic
    -
    - - - -
    -
    - - -
    -
    -
    🇵🇱
    -
    Botland
    -
    Shipping from Poland
    -
    - - - -
    -
    - - -
    -
    -
    🇫🇷
    -
    Domadoo
    -
    Shipping from France
    -
    - - - -
    -
    - - -
    -
    -
    🇬🇧
    -
    Everything Smart Technology
    -
    Shipping from the United Kingdom
    -
    - - - -
    -
    - - -
    -
    -
    🇭🇺
    -
    eWeLink device store
    -
    Shipping from Hungary
    -
    - - - -
    -
    - - -
    -
    -
    🇳🇱
    -
    HAshop
    -
    Shipping from the Netherlands
    -
    - - - -
    -
    - - -
    -
    -
    🇳🇴
    -
    Kjell
    -
    Shipping from Norway
    -
    - - - -
    -
    - - -
    -
    -
    🇵🇹
    -
    Mauser
    -
    Shipping from Portugal
    -
    - - - -
    -
    - - -
    -
    -
    🇩🇪
    -
    mediarath
    -
    Shipping from Germany
    -
    - - - -
    -
    - - -
    -
    -
    🇸🇪
    -
    m.nu
    -
    Shipping from Sweden
    -
    - - - -
    -
    - - -
    -
    -
    🇭🇺
    -
    OkosOtthon Bolt
    -
    Shipping from Hungary
    -
    - - - -
    -
    - - -
    -
    -
    🇩🇰
    -
    RaspberryPi.dk
    -
    Shipping from Denmark
    -
    - - - -
    -
    - - -
    -
    -
    🇳🇱
    -
    Robbshop
    -
    Shipping from the Netherlands
    -
    - - - -
    -
    - - -
    -
    -
    🇨🇳
    -
    Seeed Studio
    -
    Shipping from China, US and Germany
    -
    - - - -
    -
    - - -
    -
    -
    🇸🇰
    -
    SmarterHOME
    -
    Shipping from Slovakia
    -
    - - - -
    -
    - - -
    -
    -
    🇨🇭
    -
    Swiss-Domotique
    -
    Shipping from Switzerland
    -
    - - - -
    -
    - - -
    -
    -
    🇬🇧
    -
    The Pi Hut
    -
    Shipping from the United Kingdom
    -
    - - - -
    -
    - - -
    -
    -
    🇸🇪
    -
    Webhallen
    -
    Shipping from Sweden
    -
    - - - -
    -
    - - -
    -
    -
    🇷🇴
    -
    WIFIShop
    -
    Shipping from Romania
    -
    - - - -
    -
    -
    -
    -
    -
    -
    +{% include custom/buy-dialog.html product="zbt-1" %}
    @@ -708,41 +253,6 @@ frontpage_image: /images/frontpage/feature-zbt1.jpg ORDER
    - diff --git a/source/green/script.js b/source/green/script.js index e880f83bbb9..2d5ab4850f3 100644 --- a/source/green/script.js +++ b/source/green/script.js @@ -86,32 +86,6 @@ window.addEventListener( false ); -const buyDialog = document.getElementById("buy-dialog"); -const buyFabs = document.querySelectorAll(".buy"); - -buyFabs.forEach(btn => btn.addEventListener("click", (e) => { - e.preventDefault(); - showBuyDialog(); -})); - -function showBuyDialog() { - buyDialog.style.display = "flex"; -} - -function closeDialog() { - buyDialog.style.display = "none"; -} - -window.onclick = function (event) { - if (event.target === buyDialog) { - closeDialog(); - } -}; - -if (document.location.search === "?order") { - showBuyDialog(); -} - const menuMobileBtn = document.getElementById("open-mobile-menu"); const mobileMenu = document.querySelector(".w-nav-overlay"); const mobileMenuLinks = document.querySelectorAll(".w-nav-overlay a"); diff --git a/source/images/assist/media-message.png b/source/images/assist/media-message.png new file mode 100644 index 00000000000..5a3ea157659 Binary files /dev/null and b/source/images/assist/media-message.png differ diff --git a/source/images/assist/select-entity.png b/source/images/assist/select-entity.png new file mode 100644 index 00000000000..a8d477ae40e Binary files /dev/null and b/source/images/assist/select-entity.png differ diff --git a/source/images/assist/speak-action.png b/source/images/assist/speak-action.png new file mode 100644 index 00000000000..4773a426f79 Binary files /dev/null and b/source/images/assist/speak-action.png differ diff --git a/source/images/assist/tts_action.png b/source/images/assist/tts_action.png deleted file mode 100644 index 3fbee5f8574..00000000000 Binary files a/source/images/assist/tts_action.png and /dev/null differ diff --git a/source/images/assist/tts_enter_text.png b/source/images/assist/tts_enter_text.png deleted file mode 100644 index b3710aae1eb..00000000000 Binary files a/source/images/assist/tts_enter_text.png and /dev/null differ diff --git a/source/images/assist/tts_select_media_player.png b/source/images/assist/tts_select_media_player.png deleted file mode 100644 index 7e6fe819e02..00000000000 Binary files a/source/images/assist/tts_select_media_player.png and /dev/null differ diff --git a/source/images/assist/tts_select_media_source.png b/source/images/assist/tts_select_media_source.png deleted file mode 100644 index 80b4486e234..00000000000 Binary files a/source/images/assist/tts_select_media_source.png and /dev/null differ diff --git a/source/images/assist/tts_select_piper.png b/source/images/assist/tts_select_piper.png deleted file mode 100644 index 528ce128ad5..00000000000 Binary files a/source/images/assist/tts_select_piper.png and /dev/null differ diff --git a/source/images/blog/2025-01-backups/art.jpg b/source/images/blog/2025-01-backups/art.jpg new file mode 100644 index 00000000000..906f9786bda Binary files /dev/null and b/source/images/blog/2025-01-backups/art.jpg differ diff --git a/source/images/blog/2025-01-backups/backups.png b/source/images/blog/2025-01-backups/backups.png new file mode 100644 index 00000000000..921920792de Binary files /dev/null and b/source/images/blog/2025-01-backups/backups.png differ diff --git a/source/images/blog/2025-01-backups/encrypt.png b/source/images/blog/2025-01-backups/encrypt.png new file mode 100644 index 00000000000..3f415173a9f Binary files /dev/null and b/source/images/blog/2025-01-backups/encrypt.png differ diff --git a/source/images/blog/2025-01-backups/locations.png b/source/images/blog/2025-01-backups/locations.png new file mode 100644 index 00000000000..43cb79ff194 Binary files /dev/null and b/source/images/blog/2025-01-backups/locations.png differ diff --git a/source/images/blog/2025-01-backups/wizard.png b/source/images/blog/2025-01-backups/wizard.png new file mode 100644 index 00000000000..13cd56b144d Binary files /dev/null and b/source/images/blog/2025-01-backups/wizard.png differ diff --git a/source/images/blog/2025-01/backups-backup-now.png b/source/images/blog/2025-01/backups-backup-now.png new file mode 100644 index 00000000000..5c0bfb304c5 Binary files /dev/null and b/source/images/blog/2025-01/backups-backup-now.png differ diff --git a/source/images/blog/2025-01/backups-encryption.png b/source/images/blog/2025-01/backups-encryption.png new file mode 100644 index 00000000000..49f3f512000 Binary files /dev/null and b/source/images/blog/2025-01/backups-encryption.png differ diff --git a/source/images/blog/2025-01/backups-home-assistant-cloud.png b/source/images/blog/2025-01/backups-home-assistant-cloud.png new file mode 100644 index 00000000000..3c588256bab Binary files /dev/null and b/source/images/blog/2025-01/backups-home-assistant-cloud.png differ diff --git a/source/images/blog/2025-01/backups-integration-location.png b/source/images/blog/2025-01/backups-integration-location.png new file mode 100644 index 00000000000..80126230363 Binary files /dev/null and b/source/images/blog/2025-01/backups-integration-location.png differ diff --git a/source/images/blog/2025-01/backups-retention.png b/source/images/blog/2025-01/backups-retention.png new file mode 100644 index 00000000000..5a0f9a3461c Binary files /dev/null and b/source/images/blog/2025-01/backups-retention.png differ diff --git a/source/images/blog/2025-01/backups-status.png b/source/images/blog/2025-01/backups-status.png new file mode 100644 index 00000000000..2f3980dcdeb Binary files /dev/null and b/source/images/blog/2025-01/backups-status.png differ diff --git a/source/images/blog/2025-01/backups-wizard.png b/source/images/blog/2025-01/backups-wizard.png new file mode 100644 index 00000000000..7014a537821 Binary files /dev/null and b/source/images/blog/2025-01/backups-wizard.png differ diff --git a/source/images/blog/2025-01/dashboards-background-settings.png b/source/images/blog/2025-01/dashboards-background-settings.png new file mode 100644 index 00000000000..88e910ecee3 Binary files /dev/null and b/source/images/blog/2025-01/dashboards-background-settings.png differ diff --git a/source/images/blog/2025-01/social.jpg b/source/images/blog/2025-01/social.jpg new file mode 100644 index 00000000000..b9eabe52c7d Binary files /dev/null and b/source/images/blog/2025-01/social.jpg differ diff --git a/source/images/blog/2025-01/tile-card-feature-volume-slider.png b/source/images/blog/2025-01/tile-card-feature-volume-slider.png new file mode 100644 index 00000000000..72a326eec23 Binary files /dev/null and b/source/images/blog/2025-01/tile-card-feature-volume-slider.png differ diff --git a/source/images/blog/2025-01/wth-category-labels-new-automation.png b/source/images/blog/2025-01/wth-category-labels-new-automation.png new file mode 100644 index 00000000000..4692ee05e36 Binary files /dev/null and b/source/images/blog/2025-01/wth-category-labels-new-automation.png differ diff --git a/source/images/blog/2025-01/wth-default-expose-to-assist.png b/source/images/blog/2025-01/wth-default-expose-to-assist.png new file mode 100644 index 00000000000..f744fe7a216 Binary files /dev/null and b/source/images/blog/2025-01/wth-default-expose-to-assist.png differ diff --git a/source/images/blog/2025-01/wth-quickbar-devices.png b/source/images/blog/2025-01/wth-quickbar-devices.png new file mode 100644 index 00000000000..199792a9eff Binary files /dev/null and b/source/images/blog/2025-01/wth-quickbar-devices.png differ diff --git a/source/images/blog/2025-01/wth-zoom-graphs.gif b/source/images/blog/2025-01/wth-zoom-graphs.gif new file mode 100644 index 00000000000..ef18edc3d70 Binary files /dev/null and b/source/images/blog/2025-01/wth-zoom-graphs.gif differ diff --git a/source/images/blog/2025-02-apollo/art.jpg b/source/images/blog/2025-02-apollo/art.jpg new file mode 100644 index 00000000000..fcfd0408d8b Binary files /dev/null and b/source/images/blog/2025-02-apollo/art.jpg differ diff --git a/source/images/blog/2025-02-apollo/multisensor.jpg b/source/images/blog/2025-02-apollo/multisensor.jpg new file mode 100644 index 00000000000..aa2fe0d6249 Binary files /dev/null and b/source/images/blog/2025-02-apollo/multisensor.jpg differ diff --git a/source/images/blog/2025-02-voice-chapter-9/art.jpg b/source/images/blog/2025-02-voice-chapter-9/art.jpg new file mode 100644 index 00000000000..02897333d19 Binary files /dev/null and b/source/images/blog/2025-02-voice-chapter-9/art.jpg differ diff --git a/source/images/blog/2025-02-voice-chapter-9/green-pe.png b/source/images/blog/2025-02-voice-chapter-9/green-pe.png new file mode 100644 index 00000000000..440c6ccc5fa Binary files /dev/null and b/source/images/blog/2025-02-voice-chapter-9/green-pe.png differ diff --git a/source/images/blog/2025-02-voice-chapter-9/shared-history.png b/source/images/blog/2025-02-voice-chapter-9/shared-history.png new file mode 100644 index 00000000000..097ad046de8 Binary files /dev/null and b/source/images/blog/2025-02-voice-chapter-9/shared-history.png differ diff --git a/source/images/blog/2025-02-voice-chapter-9/stp-logo.jpg b/source/images/blog/2025-02-voice-chapter-9/stp-logo.jpg new file mode 100644 index 00000000000..84fa1ea077e Binary files /dev/null and b/source/images/blog/2025-02-voice-chapter-9/stp-logo.jpg differ diff --git a/source/images/blog/2025-02/backups-action.png b/source/images/blog/2025-02/backups-action.png new file mode 100644 index 00000000000..d106d8dd289 Binary files /dev/null and b/source/images/blog/2025-02/backups-action.png differ diff --git a/source/images/blog/2025-02/backups-addons-before-update.png b/source/images/blog/2025-02/backups-addons-before-update.png new file mode 100644 index 00000000000..ca4780d12e8 Binary files /dev/null and b/source/images/blog/2025-02/backups-addons-before-update.png differ diff --git a/source/images/blog/2025-02/backups-before-update-core.png b/source/images/blog/2025-02/backups-before-update-core.png new file mode 100644 index 00000000000..94213672187 Binary files /dev/null and b/source/images/blog/2025-02/backups-before-update-core.png differ diff --git a/source/images/blog/2025-02/backups-customize-backups-change.png b/source/images/blog/2025-02/backups-customize-backups-change.png new file mode 100644 index 00000000000..35abd37846f Binary files /dev/null and b/source/images/blog/2025-02/backups-customize-backups-change.png differ diff --git a/source/images/blog/2025-02/backups-encryption-turned-off.png b/source/images/blog/2025-02/backups-encryption-turned-off.png new file mode 100644 index 00000000000..85875aabf06 Binary files /dev/null and b/source/images/blog/2025-02/backups-encryption-turned-off.png differ diff --git a/source/images/blog/2025-02/backups-new-locations.png b/source/images/blog/2025-02/backups-new-locations.png new file mode 100644 index 00000000000..2cf85535471 Binary files /dev/null and b/source/images/blog/2025-02/backups-new-locations.png differ diff --git a/source/images/blog/2025-02/backups-turn-off-encryption.png b/source/images/blog/2025-02/backups-turn-off-encryption.png new file mode 100644 index 00000000000..c667c831cbd Binary files /dev/null and b/source/images/blog/2025-02/backups-turn-off-encryption.png differ diff --git a/source/images/blog/2025-02/bluetooth-panel.png b/source/images/blog/2025-02/bluetooth-panel.png new file mode 100644 index 00000000000..98f0b7029f2 Binary files /dev/null and b/source/images/blog/2025-02/bluetooth-panel.png differ diff --git a/source/images/blog/2025-02/conversation-history-after.png b/source/images/blog/2025-02/conversation-history-after.png new file mode 100644 index 00000000000..d65fae4db06 Binary files /dev/null and b/source/images/blog/2025-02/conversation-history-after.png differ diff --git a/source/images/blog/2025-02/conversation-history-before.png b/source/images/blog/2025-02/conversation-history-before.png new file mode 100644 index 00000000000..d74a68112c1 Binary files /dev/null and b/source/images/blog/2025-02/conversation-history-before.png differ diff --git a/source/images/blog/2025-02/social.jpg b/source/images/blog/2025-02/social.jpg new file mode 100644 index 00000000000..597fcacef27 Binary files /dev/null and b/source/images/blog/2025-02/social.jpg differ diff --git a/source/images/blog/2025-03-matter-certification/art.jpg b/source/images/blog/2025-03-matter-certification/art.jpg new file mode 100644 index 00000000000..7af69ed65f2 Binary files /dev/null and b/source/images/blog/2025-03-matter-certification/art.jpg differ diff --git a/source/images/blog/2025-03-matter-certification/ha-matter.png b/source/images/blog/2025-03-matter-certification/ha-matter.png new file mode 100644 index 00000000000..18540ad5a49 Binary files /dev/null and b/source/images/blog/2025-03-matter-certification/ha-matter.png differ diff --git a/source/images/blog/2025-03-matter-certification/lab.jpg b/source/images/blog/2025-03-matter-certification/lab.jpg new file mode 100644 index 00000000000..9baa7c30155 Binary files /dev/null and b/source/images/blog/2025-03-matter-certification/lab.jpg differ diff --git a/source/images/blog/2025-03-matter-certification/ohf-matter.png b/source/images/blog/2025-03-matter-certification/ohf-matter.png new file mode 100644 index 00000000000..788be3d5dd9 Binary files /dev/null and b/source/images/blog/2025-03-matter-certification/ohf-matter.png differ diff --git a/source/images/blog/2025-03-music-assistant/art.jpg b/source/images/blog/2025-03-music-assistant/art.jpg new file mode 100644 index 00000000000..57cdbf5b43e Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/art.jpg differ diff --git a/source/images/blog/2025-03-music-assistant/audio_path.png b/source/images/blog/2025-03-music-assistant/audio_path.png new file mode 100644 index 00000000000..ed92474c79b Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/audio_path.png differ diff --git a/source/images/blog/2025-03-music-assistant/audiobooks.png b/source/images/blog/2025-03-music-assistant/audiobooks.png new file mode 100644 index 00000000000..0dd206490cb Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/audiobooks.png differ diff --git a/source/images/blog/2025-03-music-assistant/continue.png b/source/images/blog/2025-03-music-assistant/continue.png new file mode 100644 index 00000000000..99ea4c93152 Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/continue.png differ diff --git a/source/images/blog/2025-03-music-assistant/eq.png b/source/images/blog/2025-03-music-assistant/eq.png new file mode 100644 index 00000000000..b3f18093fa1 Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/eq.png differ diff --git a/source/images/blog/2025-03-music-assistant/spotify_connect.jpg b/source/images/blog/2025-03-music-assistant/spotify_connect.jpg new file mode 100644 index 00000000000..728e04089bf Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/spotify_connect.jpg differ diff --git a/source/images/blog/2025-03-music-assistant/voice_ma.jpg b/source/images/blog/2025-03-music-assistant/voice_ma.jpg new file mode 100644 index 00000000000..61bd18106cb Binary files /dev/null and b/source/images/blog/2025-03-music-assistant/voice_ma.jpg differ diff --git a/source/images/blog/2025-03/card-editor-improvements.png b/source/images/blog/2025-03/card-editor-improvements.png new file mode 100644 index 00000000000..06871a9d5a4 Binary files /dev/null and b/source/images/blog/2025-03/card-editor-improvements.png differ diff --git a/source/images/blog/2025-03/dashboard-view-header.png b/source/images/blog/2025-03/dashboard-view-header.png new file mode 100644 index 00000000000..eca145b3a90 Binary files /dev/null and b/source/images/blog/2025-03/dashboard-view-header.png differ diff --git a/source/images/blog/2025-03/graph-legend.gif b/source/images/blog/2025-03/graph-legend.gif new file mode 100644 index 00000000000..1486ab90457 Binary files /dev/null and b/source/images/blog/2025-03/graph-legend.gif differ diff --git a/source/images/blog/2025-03/map-marker-clustering.gif b/source/images/blog/2025-03/map-marker-clustering.gif new file mode 100644 index 00000000000..8db8b741266 Binary files /dev/null and b/source/images/blog/2025-03/map-marker-clustering.gif differ diff --git a/source/images/blog/2025-03/social.jpg b/source/images/blog/2025-03/social.jpg new file mode 100644 index 00000000000..0ac04407788 Binary files /dev/null and b/source/images/blog/2025-03/social.jpg differ diff --git a/source/images/blog/2025-03/tile-card-clear-interactions.png b/source/images/blog/2025-03/tile-card-clear-interactions.png new file mode 100644 index 00000000000..24274eeffad Binary files /dev/null and b/source/images/blog/2025-03/tile-card-clear-interactions.png differ diff --git a/source/images/blog/2025-03/tile-card-counter-actions.png b/source/images/blog/2025-03/tile-card-counter-actions.png new file mode 100644 index 00000000000..2c3273174ea Binary files /dev/null and b/source/images/blog/2025-03/tile-card-counter-actions.png differ diff --git a/source/images/blog/2025-03/tile-card-inline-features.png b/source/images/blog/2025-03/tile-card-inline-features.png new file mode 100644 index 00000000000..589b76c047c Binary files /dev/null and b/source/images/blog/2025-03/tile-card-inline-features.png differ diff --git a/source/images/blog/2025-03/tile-card-interactions.gif b/source/images/blog/2025-03/tile-card-interactions.gif new file mode 100644 index 00000000000..ba31351dcca Binary files /dev/null and b/source/images/blog/2025-03/tile-card-interactions.gif differ diff --git a/source/images/blog/2025-03/tile-card-switch-toggle.png b/source/images/blog/2025-03/tile-card-switch-toggle.png new file mode 100644 index 00000000000..380d913ad0f Binary files /dev/null and b/source/images/blog/2025-03/tile-card-switch-toggle.png differ diff --git a/source/images/dashboards/energy/devices-detail-graph.png b/source/images/dashboards/energy/devices-detail-graph.png index 7c1341d1c05..9719d8f5e57 100644 Binary files a/source/images/dashboards/energy/devices-detail-graph.png and b/source/images/dashboards/energy/devices-detail-graph.png differ diff --git a/source/images/dashboards/energy/devices-graph.png b/source/images/dashboards/energy/devices-graph.png index e28495ddbc6..e8d0e472fd5 100644 Binary files a/source/images/dashboards/energy/devices-graph.png and b/source/images/dashboards/energy/devices-graph.png differ diff --git a/source/images/dashboards/energy/gas-graph.png b/source/images/dashboards/energy/gas-graph.png index c4ab3fbcaed..47b97ad95c9 100644 Binary files a/source/images/dashboards/energy/gas-graph.png and b/source/images/dashboards/energy/gas-graph.png differ diff --git a/source/images/dashboards/energy/sankey.png b/source/images/dashboards/energy/sankey.png new file mode 100644 index 00000000000..d6d43f81bae Binary files /dev/null and b/source/images/dashboards/energy/sankey.png differ diff --git a/source/images/dashboards/energy/solar-graph.png b/source/images/dashboards/energy/solar-graph.png index 1e71c1da446..daeab131888 100644 Binary files a/source/images/dashboards/energy/solar-graph.png and b/source/images/dashboards/energy/solar-graph.png differ diff --git a/source/images/dashboards/energy/usage-graph.png b/source/images/dashboards/energy/usage-graph.png index 0b7c244c0ed..7fe5a7fd21b 100644 Binary files a/source/images/dashboards/energy/usage-graph.png and b/source/images/dashboards/energy/usage-graph.png differ diff --git a/source/images/dashboards/features/counter_actions.png b/source/images/dashboards/features/counter_actions.png new file mode 100644 index 00000000000..273adcdc641 Binary files /dev/null and b/source/images/dashboards/features/counter_actions.png differ diff --git a/source/images/dashboards/features/tile-card-feature-position.png b/source/images/dashboards/features/tile-card-feature-position.png new file mode 100644 index 00000000000..1b9bf4b4204 Binary files /dev/null and b/source/images/dashboards/features/tile-card-feature-position.png differ diff --git a/source/images/dashboards/features/toggle.png b/source/images/dashboards/features/toggle.png new file mode 100644 index 00000000000..29a1f68fd63 Binary files /dev/null and b/source/images/dashboards/features/toggle.png differ diff --git a/source/images/dashboards/history_graph.png b/source/images/dashboards/history_graph.png index aa97bb9536c..d34ead9f891 100644 Binary files a/source/images/dashboards/history_graph.png and b/source/images/dashboards/history_graph.png differ diff --git a/source/images/dashboards/history_graph_lines.png b/source/images/dashboards/history_graph_lines.png index 7e0313c4626..0b80f182357 100644 Binary files a/source/images/dashboards/history_graph_lines.png and b/source/images/dashboards/history_graph_lines.png differ diff --git a/source/images/dashboards/map_card.png b/source/images/dashboards/map_card.png deleted file mode 100644 index db160757ded..00000000000 Binary files a/source/images/dashboards/map_card.png and /dev/null differ diff --git a/source/images/dashboards/map_card.webp b/source/images/dashboards/map_card.webp new file mode 100644 index 00000000000..e5096fa7f2c Binary files /dev/null and b/source/images/dashboards/map_card.webp differ diff --git a/source/images/dashboards/map_card_config.png b/source/images/dashboards/map_card_config.png index 8fd38382cc2..3ffd2102319 100644 Binary files a/source/images/dashboards/map_card_config.png and b/source/images/dashboards/map_card_config.png differ diff --git a/source/images/dashboards/sections_view_header_edit.png b/source/images/dashboards/sections_view_header_edit.png new file mode 100644 index 00000000000..b0d158be37e Binary files /dev/null and b/source/images/dashboards/sections_view_header_edit.png differ diff --git a/source/images/dashboards/sections_view_header_editor.png b/source/images/dashboards/sections_view_header_editor.png new file mode 100644 index 00000000000..efb9cbd856a Binary files /dev/null and b/source/images/dashboards/sections_view_header_editor.png differ diff --git a/source/images/dashboards/statistics_graph_bar.png b/source/images/dashboards/statistics_graph_bar.png index bd5db706253..6f636515dfc 100644 Binary files a/source/images/dashboards/statistics_graph_bar.png and b/source/images/dashboards/statistics_graph_bar.png differ diff --git a/source/images/dashboards/statistics_graph_line.png b/source/images/dashboards/statistics_graph_line.png index b3a90185405..6097d42563f 100644 Binary files a/source/images/dashboards/statistics_graph_line.png and b/source/images/dashboards/statistics_graph_line.png differ diff --git a/source/images/dashboards/tile_card.png b/source/images/dashboards/tile_card.png deleted file mode 100644 index 3657c2c1686..00000000000 Binary files a/source/images/dashboards/tile_card.png and /dev/null differ diff --git a/source/images/dashboards/tile_card_tap_action.webp b/source/images/dashboards/tile_card_tap_action.webp new file mode 100644 index 00000000000..5f494708616 Binary files /dev/null and b/source/images/dashboards/tile_card_tap_action.webp differ diff --git a/source/images/distributors/RaspberryPi-dk.webp b/source/images/distributors/RaspberryPi-dk.webp new file mode 100644 index 00000000000..0d578517815 Binary files /dev/null and b/source/images/distributors/RaspberryPi-dk.webp differ diff --git a/source/images/distributors/alza-cz.webp b/source/images/distributors/alza-cz.webp new file mode 100644 index 00000000000..ebfc789ab2f Binary files /dev/null and b/source/images/distributors/alza-cz.webp differ diff --git a/source/images/distributors/amazon.webp b/source/images/distributors/amazon.webp new file mode 100644 index 00000000000..1a691df7d77 Binary files /dev/null and b/source/images/distributors/amazon.webp differ diff --git a/source/images/distributors/ameridroid.webp b/source/images/distributors/ameridroid.webp new file mode 100644 index 00000000000..29bca225176 Binary files /dev/null and b/source/images/distributors/ameridroid.webp differ diff --git a/source/images/distributors/botland.webp b/source/images/distributors/botland.webp new file mode 100644 index 00000000000..b51b60f8b90 Binary files /dev/null and b/source/images/distributors/botland.webp differ diff --git a/source/images/distributors/cloudfree.webp b/source/images/distributors/cloudfree.webp new file mode 100644 index 00000000000..9d47e987bfa Binary files /dev/null and b/source/images/distributors/cloudfree.webp differ diff --git a/source/images/distributors/dinamo-tech.webp b/source/images/distributors/dinamo-tech.webp new file mode 100644 index 00000000000..a1401638b89 Binary files /dev/null and b/source/images/distributors/dinamo-tech.webp differ diff --git a/source/images/distributors/domadoo.jpg b/source/images/distributors/domadoo.jpg new file mode 100644 index 00000000000..fc9e6830854 Binary files /dev/null and b/source/images/distributors/domadoo.jpg differ diff --git a/source/images/distributors/est.webp b/source/images/distributors/est.webp new file mode 100644 index 00000000000..22a5be49883 Binary files /dev/null and b/source/images/distributors/est.webp differ diff --git a/source/images/distributors/ewelink.png b/source/images/distributors/ewelink.png new file mode 100644 index 00000000000..e251650615a Binary files /dev/null and b/source/images/distributors/ewelink.png differ diff --git a/source/images/distributors/ha-shop.webp b/source/images/distributors/ha-shop.webp new file mode 100644 index 00000000000..ed1659cba91 Binary files /dev/null and b/source/images/distributors/ha-shop.webp differ diff --git a/source/images/distributors/inet.webp b/source/images/distributors/inet.webp new file mode 100644 index 00000000000..106f75dce60 Binary files /dev/null and b/source/images/distributors/inet.webp differ diff --git a/source/images/distributors/kjell-company.webp b/source/images/distributors/kjell-company.webp new file mode 100644 index 00000000000..e4bc8c63277 Binary files /dev/null and b/source/images/distributors/kjell-company.webp differ diff --git a/source/images/distributors/m-nu.webp b/source/images/distributors/m-nu.webp new file mode 100644 index 00000000000..5b815ee9a68 Binary files /dev/null and b/source/images/distributors/m-nu.webp differ diff --git a/source/images/distributors/mauser.png b/source/images/distributors/mauser.png new file mode 100644 index 00000000000..41a969bb434 Binary files /dev/null and b/source/images/distributors/mauser.png differ diff --git a/source/images/distributors/mediarath.de.webp b/source/images/distributors/mediarath.de.webp new file mode 100644 index 00000000000..2355c38c6fa Binary files /dev/null and b/source/images/distributors/mediarath.de.webp differ diff --git a/source/images/distributors/okosotthon.png b/source/images/distributors/okosotthon.png new file mode 100644 index 00000000000..77c3bd97226 Binary files /dev/null and b/source/images/distributors/okosotthon.png differ diff --git a/source/images/distributors/oz-smart-things.webp b/source/images/distributors/oz-smart-things.webp new file mode 100644 index 00000000000..3dd1eda9031 Binary files /dev/null and b/source/images/distributors/oz-smart-things.webp differ diff --git a/source/images/distributors/pi-hut.webp b/source/images/distributors/pi-hut.webp new file mode 100644 index 00000000000..bf74dea4f2c Binary files /dev/null and b/source/images/distributors/pi-hut.webp differ diff --git a/source/images/distributors/pi-shop.webp b/source/images/distributors/pi-shop.webp new file mode 100644 index 00000000000..1019d7ddc50 Binary files /dev/null and b/source/images/distributors/pi-shop.webp differ diff --git a/source/images/distributors/pimoroni.webp b/source/images/distributors/pimoroni.webp new file mode 100644 index 00000000000..b03e9c62814 Binary files /dev/null and b/source/images/distributors/pimoroni.webp differ diff --git a/source/images/distributors/robb.webp b/source/images/distributors/robb.webp new file mode 100644 index 00000000000..07515f48495 Binary files /dev/null and b/source/images/distributors/robb.webp differ diff --git a/source/images/distributors/seeed-studio.webp b/source/images/distributors/seeed-studio.webp new file mode 100644 index 00000000000..ff7322993f3 Binary files /dev/null and b/source/images/distributors/seeed-studio.webp differ diff --git a/source/images/distributors/smart-guys.webp b/source/images/distributors/smart-guys.webp new file mode 100644 index 00000000000..cde531378de Binary files /dev/null and b/source/images/distributors/smart-guys.webp differ diff --git a/source/images/distributors/smarter-home.png b/source/images/distributors/smarter-home.png new file mode 100644 index 00000000000..a122f3675f5 Binary files /dev/null and b/source/images/distributors/smarter-home.png differ diff --git a/source/images/distributors/smarthome.webp b/source/images/distributors/smarthome.webp new file mode 100644 index 00000000000..40d804292bc Binary files /dev/null and b/source/images/distributors/smarthome.webp differ diff --git a/source/images/distributors/swiss-domotique.webp b/source/images/distributors/swiss-domotique.webp new file mode 100644 index 00000000000..962c07faf22 Binary files /dev/null and b/source/images/distributors/swiss-domotique.webp differ diff --git a/source/images/distributors/webhallen.webp b/source/images/distributors/webhallen.webp new file mode 100644 index 00000000000..f73124d7afe Binary files /dev/null and b/source/images/distributors/webhallen.webp differ diff --git a/source/images/distributors/wifishop.webp b/source/images/distributors/wifishop.webp new file mode 100644 index 00000000000..5cf36ed8da4 Binary files /dev/null and b/source/images/distributors/wifishop.webp differ diff --git a/source/images/docs/developer-tools/Assist.png b/source/images/docs/developer-tools/Assist.png index 61bd212c468..8533ae3ad71 100644 Binary files a/source/images/docs/developer-tools/Assist.png and b/source/images/docs/developer-tools/Assist.png differ diff --git a/source/images/docs/developer-tools/adjust-statistics.png b/source/images/docs/developer-tools/adjust-statistics.png new file mode 100644 index 00000000000..8473ab053e5 Binary files /dev/null and b/source/images/docs/developer-tools/adjust-statistics.png differ diff --git a/source/images/docs/developer-tools/statistics_issue.png b/source/images/docs/developer-tools/statistics_issue.png index 653c14a7a6d..34f46d85266 100644 Binary files a/source/images/docs/developer-tools/statistics_issue.png and b/source/images/docs/developer-tools/statistics_issue.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_acb_battery.png b/source/images/integrations/enphase_envoy/enphase_envoy_acb_battery.png new file mode 100644 index 00000000000..b197b4ae1ea Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_acb_battery.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_aggr_acb_iq_battery.png b/source/images/integrations/enphase_envoy/enphase_envoy_aggr_acb_iq_battery.png new file mode 100644 index 00000000000..5ba08690360 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_aggr_acb_iq_battery.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_aggr_iq_battery.png b/source/images/integrations/enphase_envoy/enphase_envoy_aggr_iq_battery.png new file mode 100644 index 00000000000..9fb1f0ea7d3 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_aggr_iq_battery.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_consumption.png b/source/images/integrations/enphase_envoy/enphase_envoy_consumption.png new file mode 100644 index 00000000000..e304dff60c1 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_consumption.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_ct_model.png b/source/images/integrations/enphase_envoy/enphase_envoy_ct_model.png new file mode 100644 index 00000000000..5797f13c3d6 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_ct_model.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_dry_contact.png b/source/images/integrations/enphase_envoy/enphase_envoy_dry_contact.png new file mode 100644 index 00000000000..863874c8469 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_dry_contact.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_encharge.png b/source/images/integrations/enphase_envoy/enphase_envoy_encharge.png new file mode 100644 index 00000000000..f0ead224c37 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_encharge.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_enpower.png b/source/images/integrations/enphase_envoy/enphase_envoy_enpower.png new file mode 100644 index 00000000000..3d62b2e5d97 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_enpower.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_inverter_device.png b/source/images/integrations/enphase_envoy/enphase_envoy_inverter_device.png new file mode 100644 index 00000000000..a0a018ee236 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_inverter_device.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset.png b/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset.png new file mode 100644 index 00000000000..65685329bbd Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset_step_change.png b/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset_step_change.png new file mode 100644 index 00000000000..7f882f11c76 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_production_non_zero_reset_step_change.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_production_reset.png b/source/images/integrations/enphase_envoy/enphase_envoy_production_reset.png new file mode 100644 index 00000000000..a9fb03036f1 Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_production_reset.png differ diff --git a/source/images/integrations/enphase_envoy/enphase_envoy_solar_production.png b/source/images/integrations/enphase_envoy/enphase_envoy_solar_production.png new file mode 100644 index 00000000000..481006b93dd Binary files /dev/null and b/source/images/integrations/enphase_envoy/enphase_envoy_solar_production.png differ diff --git a/source/images/integrations/knx/device_authentication_password.png b/source/images/integrations/knx/device_authentication_password.png deleted file mode 100644 index 558281c253b..00000000000 Binary files a/source/images/integrations/knx/device_authentication_password.png and /dev/null differ diff --git a/source/images/integrations/knx/export_keyring_ets.png b/source/images/integrations/knx/export_keyring_ets.png deleted file mode 100644 index 26f5ef6a918..00000000000 Binary files a/source/images/integrations/knx/export_keyring_ets.png and /dev/null differ diff --git a/source/images/integrations/knx/knx_ets_authentication_code.png b/source/images/integrations/knx/knx_ets_authentication_code.png new file mode 100644 index 00000000000..0f5a7e2b8cb Binary files /dev/null and b/source/images/integrations/knx/knx_ets_authentication_code.png differ diff --git a/source/images/integrations/knx/knx_ets_backbone_key.png b/source/images/integrations/knx/knx_ets_backbone_key.png new file mode 100644 index 00000000000..d1fe1cfb5ee Binary files /dev/null and b/source/images/integrations/knx/knx_ets_backbone_key.png differ diff --git a/source/images/integrations/knx/knx_ets_dummy.png b/source/images/integrations/knx/knx_ets_dummy.png new file mode 100644 index 00000000000..8d6238467fe Binary files /dev/null and b/source/images/integrations/knx/knx_ets_dummy.png differ diff --git a/source/images/integrations/knx/knx_ets_tunnel.png b/source/images/integrations/knx/knx_ets_tunnel.png new file mode 100644 index 00000000000..3a849d99907 Binary files /dev/null and b/source/images/integrations/knx/knx_ets_tunnel.png differ diff --git a/source/images/integrations/knx/knx_ets_tunnel_password.png b/source/images/integrations/knx/knx_ets_tunnel_password.png new file mode 100644 index 00000000000..00c8124474b Binary files /dev/null and b/source/images/integrations/knx/knx_ets_tunnel_password.png differ diff --git a/source/images/integrations/knx/user_password.png b/source/images/integrations/knx/user_password.png deleted file mode 100644 index 6fee20d9591..00000000000 Binary files a/source/images/integrations/knx/user_password.png and /dev/null differ diff --git a/source/images/integrations/nest/cloud_pubsub_add_principal.png b/source/images/integrations/nest/cloud_pubsub_add_principal.png new file mode 100644 index 00000000000..ab9ab7c8e80 Binary files /dev/null and b/source/images/integrations/nest/cloud_pubsub_add_principal.png differ diff --git a/source/images/integrations/nest/cloud_pubsub_add_principal_role.png b/source/images/integrations/nest/cloud_pubsub_add_principal_role.png new file mode 100644 index 00000000000..689f562b7a1 Binary files /dev/null and b/source/images/integrations/nest/cloud_pubsub_add_principal_role.png differ diff --git a/source/images/integrations/nest/cloud_pubsub_create_topic.png b/source/images/integrations/nest/cloud_pubsub_create_topic.png new file mode 100644 index 00000000000..9bbf7e18b22 Binary files /dev/null and b/source/images/integrations/nest/cloud_pubsub_create_topic.png differ diff --git a/source/images/integrations/nest/config_flow_no_topic.png b/source/images/integrations/nest/config_flow_no_topic.png new file mode 100644 index 00000000000..a4837d1486b Binary files /dev/null and b/source/images/integrations/nest/config_flow_no_topic.png differ diff --git a/source/images/integrations/nest/config_flow_subscription.png b/source/images/integrations/nest/config_flow_subscription.png new file mode 100644 index 00000000000..238ea7e6a26 Binary files /dev/null and b/source/images/integrations/nest/config_flow_subscription.png differ diff --git a/source/images/integrations/nest/config_flow_with_topic.png b/source/images/integrations/nest/config_flow_with_topic.png new file mode 100644 index 00000000000..57d6b36bcb8 Binary files /dev/null and b/source/images/integrations/nest/config_flow_with_topic.png differ diff --git a/source/images/integrations/nest/device_access_complete.png b/source/images/integrations/nest/device_access_complete.png new file mode 100644 index 00000000000..c7f55b0f9fc Binary files /dev/null and b/source/images/integrations/nest/device_access_complete.png differ diff --git a/source/images/integrations/nest/device_access_topic_disabled.png b/source/images/integrations/nest/device_access_topic_disabled.png new file mode 100644 index 00000000000..cae52b0235d Binary files /dev/null and b/source/images/integrations/nest/device_access_topic_disabled.png differ diff --git a/source/images/integrations/nest/device_access_validate_pubsub.png b/source/images/integrations/nest/device_access_validate_pubsub.png new file mode 100644 index 00000000000..de027eec258 Binary files /dev/null and b/source/images/integrations/nest/device_access_validate_pubsub.png differ diff --git a/source/images/integrations/nest/finished.png b/source/images/integrations/nest/finished.png deleted file mode 100644 index f6380374c70..00000000000 Binary files a/source/images/integrations/nest/finished.png and /dev/null differ diff --git a/source/images/integrations/onedrive/onedrive-app-registration.png b/source/images/integrations/onedrive/onedrive-app-registration.png new file mode 100644 index 00000000000..2f0427dda07 Binary files /dev/null and b/source/images/integrations/onedrive/onedrive-app-registration.png differ diff --git a/source/images/integrations/onedrive/onedrive-permissions.png b/source/images/integrations/onedrive/onedrive-permissions.png new file mode 100644 index 00000000000..abcc4625380 Binary files /dev/null and b/source/images/integrations/onedrive/onedrive-permissions.png differ diff --git a/source/images/integrations/reolink/auto_pause__automation_choose.png b/source/images/integrations/reolink/auto_pause__automation_choose.png new file mode 100644 index 00000000000..736a211eb97 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__automation_choose.png differ diff --git a/source/images/integrations/reolink/auto_pause__automation_select_first.png b/source/images/integrations/reolink/auto_pause__automation_select_first.png new file mode 100644 index 00000000000..ad3c2b7f9a6 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__automation_select_first.png differ diff --git a/source/images/integrations/reolink/auto_pause__automation_start_timer.png b/source/images/integrations/reolink/auto_pause__automation_start_timer.png new file mode 100644 index 00000000000..c9f30872121 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__automation_start_timer.png differ diff --git a/source/images/integrations/reolink/auto_pause__automation_triggered_by.png b/source/images/integrations/reolink/auto_pause__automation_triggered_by.png new file mode 100644 index 00000000000..9cac3cd8ba5 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__automation_triggered_by.png differ diff --git a/source/images/integrations/reolink/auto_pause__automation_wait_for_trigger.png b/source/images/integrations/reolink/auto_pause__automation_wait_for_trigger.png new file mode 100644 index 00000000000..8925bb31235 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__automation_wait_for_trigger.png differ diff --git a/source/images/integrations/reolink/auto_pause__automation_when.png b/source/images/integrations/reolink/auto_pause__automation_when.png new file mode 100644 index 00000000000..5886364de49 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__automation_when.png differ diff --git a/source/images/integrations/reolink/auto_pause__automation_when_timer.png b/source/images/integrations/reolink/auto_pause__automation_when_timer.png new file mode 100644 index 00000000000..ec4d0b536c9 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__automation_when_timer.png differ diff --git a/source/images/integrations/reolink/auto_pause__condition.png b/source/images/integrations/reolink/auto_pause__condition.png new file mode 100644 index 00000000000..ed7f96097f7 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__condition.png differ diff --git a/source/images/integrations/reolink/auto_pause__dropdown.png b/source/images/integrations/reolink/auto_pause__dropdown.png new file mode 100644 index 00000000000..7ae9be852f1 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__dropdown.png differ diff --git a/source/images/integrations/reolink/auto_pause__overview.png b/source/images/integrations/reolink/auto_pause__overview.png new file mode 100644 index 00000000000..0684e78bef1 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__overview.png differ diff --git a/source/images/integrations/reolink/auto_pause__result_when_running.png b/source/images/integrations/reolink/auto_pause__result_when_running.png new file mode 100644 index 00000000000..1118eb3def4 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__result_when_running.png differ diff --git a/source/images/integrations/reolink/auto_pause__timer.png b/source/images/integrations/reolink/auto_pause__timer.png new file mode 100644 index 00000000000..b6eedc5e1a1 Binary files /dev/null and b/source/images/integrations/reolink/auto_pause__timer.png differ diff --git a/source/images/integrations/reolink/rich_notification__add_action.png b/source/images/integrations/reolink/rich_notification__add_action.png new file mode 100644 index 00000000000..c29b467259a Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__add_action.png differ diff --git a/source/images/integrations/reolink/rich_notification__add_trigger.png b/source/images/integrations/reolink/rich_notification__add_trigger.png new file mode 100644 index 00000000000..8c99095bc42 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__add_trigger.png differ diff --git a/source/images/integrations/reolink/rich_notification__automations_and_scenes.png b/source/images/integrations/reolink/rich_notification__automations_and_scenes.png new file mode 100644 index 00000000000..0c5979648b1 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__automations_and_scenes.png differ diff --git a/source/images/integrations/reolink/rich_notification__big_notification.jpg b/source/images/integrations/reolink/rich_notification__big_notification.jpg new file mode 100644 index 00000000000..606020517ee Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__big_notification.jpg differ diff --git a/source/images/integrations/reolink/rich_notification__camera.png b/source/images/integrations/reolink/rich_notification__camera.png new file mode 100644 index 00000000000..cddcaa4f25a Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__camera.png differ diff --git a/source/images/integrations/reolink/rich_notification__chose_entity.png b/source/images/integrations/reolink/rich_notification__chose_entity.png new file mode 100644 index 00000000000..3004403bcf0 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__chose_entity.png differ diff --git a/source/images/integrations/reolink/rich_notification__cooldown_time_condition.png b/source/images/integrations/reolink/rich_notification__cooldown_time_condition.png new file mode 100644 index 00000000000..6494a236de3 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__cooldown_time_condition.png differ diff --git a/source/images/integrations/reolink/rich_notification__create_automation.png b/source/images/integrations/reolink/rich_notification__create_automation.png new file mode 100644 index 00000000000..74230ca01d0 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__create_automation.png differ diff --git a/source/images/integrations/reolink/rich_notification__device_tracker_condition.png b/source/images/integrations/reolink/rich_notification__device_tracker_condition.png new file mode 100644 index 00000000000..6ff6aec9e94 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__device_tracker_condition.png differ diff --git a/source/images/integrations/reolink/rich_notification__entity.png b/source/images/integrations/reolink/rich_notification__entity.png new file mode 100644 index 00000000000..d354e70dc58 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__entity.png differ diff --git a/source/images/integrations/reolink/rich_notification__entity_select.png b/source/images/integrations/reolink/rich_notification__entity_select.png new file mode 100644 index 00000000000..8c3c3ab32c9 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__entity_select.png differ diff --git a/source/images/integrations/reolink/rich_notification__new_automation.png b/source/images/integrations/reolink/rich_notification__new_automation.png new file mode 100644 index 00000000000..105a35a2a0b Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__new_automation.png differ diff --git a/source/images/integrations/reolink/rich_notification__new_trigger.png b/source/images/integrations/reolink/rich_notification__new_trigger.png new file mode 100644 index 00000000000..7a57223726d Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__new_trigger.png differ diff --git a/source/images/integrations/reolink/rich_notification__notifications.png b/source/images/integrations/reolink/rich_notification__notifications.png new file mode 100644 index 00000000000..5a0c5d25050 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__notifications.png differ diff --git a/source/images/integrations/reolink/rich_notification__save.png b/source/images/integrations/reolink/rich_notification__save.png new file mode 100644 index 00000000000..988f5617f0c Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__save.png differ diff --git a/source/images/integrations/reolink/rich_notification__screenshot_take_snapshot.png b/source/images/integrations/reolink/rich_notification__screenshot_take_snapshot.png new file mode 100644 index 00000000000..a94e9200877 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__screenshot_take_snapshot.png differ diff --git a/source/images/integrations/reolink/rich_notification__select_fluent_camera.png b/source/images/integrations/reolink/rich_notification__select_fluent_camera.png new file mode 100644 index 00000000000..2d273d0dc99 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__select_fluent_camera.png differ diff --git a/source/images/integrations/reolink/rich_notification__send_to_mobile.png b/source/images/integrations/reolink/rich_notification__send_to_mobile.png new file mode 100644 index 00000000000..b146565c23f Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__send_to_mobile.png differ diff --git a/source/images/integrations/reolink/rich_notification__send_to_mobile_button.png b/source/images/integrations/reolink/rich_notification__send_to_mobile_button.png new file mode 100644 index 00000000000..8581aaa3b64 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__send_to_mobile_button.png differ diff --git a/source/images/integrations/reolink/rich_notification__settings.png b/source/images/integrations/reolink/rich_notification__settings.png new file mode 100644 index 00000000000..2ab387d6129 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__settings.png differ diff --git a/source/images/integrations/reolink/rich_notification__small_notification.jpg b/source/images/integrations/reolink/rich_notification__small_notification.jpg new file mode 100644 index 00000000000..8fb9eb06d6d Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__small_notification.jpg differ diff --git a/source/images/integrations/reolink/rich_notification__state.png b/source/images/integrations/reolink/rich_notification__state.png new file mode 100644 index 00000000000..78db12bf2a8 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__state.png differ diff --git a/source/images/integrations/reolink/rich_notification__state_select.png b/source/images/integrations/reolink/rich_notification__state_select.png new file mode 100644 index 00000000000..27de496efc1 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__state_select.png differ diff --git a/source/images/integrations/reolink/rich_notification__take_snapshot.png b/source/images/integrations/reolink/rich_notification__take_snapshot.png new file mode 100644 index 00000000000..ce9c3b0d1c6 Binary files /dev/null and b/source/images/integrations/reolink/rich_notification__take_snapshot.png differ diff --git a/source/images/integrations/synology_dsm/synology_file_station.png b/source/images/integrations/synology_dsm/synology_file_station.png new file mode 100644 index 00000000000..a7107914c7d Binary files /dev/null and b/source/images/integrations/synology_dsm/synology_file_station.png differ diff --git a/source/images/pi-day/2025-raspberry-pi-recipe.pdf b/source/images/pi-day/2025-raspberry-pi-recipe.pdf new file mode 100644 index 00000000000..d8a0df9a6f5 Binary files /dev/null and b/source/images/pi-day/2025-raspberry-pi-recipe.pdf differ diff --git a/source/images/screenshots/move-datadisk.png b/source/images/screenshots/move-datadisk.png deleted file mode 100644 index b581bbdfdf0..00000000000 Binary files a/source/images/screenshots/move-datadisk.png and /dev/null differ diff --git a/source/images/screenshots/network-storage/backup_locations_all.png b/source/images/screenshots/network-storage/backup_locations_all.png deleted file mode 100644 index 2c1f87e0b52..00000000000 Binary files a/source/images/screenshots/network-storage/backup_locations_all.png and /dev/null differ diff --git a/source/images/screenshots/network-storage/backup_locations_encryption.png b/source/images/screenshots/network-storage/backup_locations_encryption.png new file mode 100644 index 00000000000..990be7fbf64 Binary files /dev/null and b/source/images/screenshots/network-storage/backup_locations_encryption.png differ diff --git a/source/installation/index.html b/source/installation/index.html index f3bf6668838..5881fd977ca 100644 --- a/source/installation/index.html +++ b/source/installation/index.html @@ -334,8 +334,8 @@ toc: true Backups {% icon "openmoji:check-mark" %} - {% icon "noto-v1:check-mark" %}3 - {% icon "noto-v1:check-mark" %}3 + {% icon "openmoji:check-mark" %} + {% icon "openmoji:check-mark" %} {% icon "openmoji:check-mark" %} @@ -355,17 +355,6 @@ toc: true >2: Home Assistant Supervised requires users to maintain their own operating system.

    -

    - 3: Home Assistant Core and Home Assistant Container can create backups via the user interface but they need to be manually restored. -

    -

    - 3: Backups for Home Assistant Core and Home Assistant Container are either - a tool to migrate to HAOS or a completely manual restore of the backup. -

    diff --git a/source/installation/raspberrypi.markdown b/source/installation/raspberrypi.markdown index 15f64a8990f..51408e31c81 100644 --- a/source/installation/raspberrypi.markdown +++ b/source/installation/raspberrypi.markdown @@ -29,11 +29,10 @@ Remember to ensure you're using an [appropriate power supply](https://www.raspbe This guide shows how to install the {% term "Home Assistant Operating System" %} onto your Raspberry Pi using Raspberry Pi Imager. -If Raspberry Pi Imager is not supported by your platform, you can [download the Home Assistant image](#downloading-the-home-assistant-image) and use another imaging tool. - ### Write the image to your SD card 1. Download and install the Raspberry Pi Imager on your computer as described under [https://www.raspberrypi.com/software/](https://www.raspberrypi.com/software/). + - **Troubleshooting**: If Raspberry Pi Imager is not supported by your platform, you can [download the Home Assistant image](#downloading-the-home-assistant-image) and use another imaging tool, such as Balena Etcher. 2. Open the Raspberry Pi Imager and select your Raspberry Pi device. ![Open Raspberry Pi Imager](/images/installation/rpi_imager_start.png) 3. Choose the operating system: diff --git a/source/integrations/index.html b/source/integrations/index.html index 24ffeaeccbe..0f47a65fe1d 100644 --- a/source/integrations/index.html +++ b/source/integrations/index.html @@ -23,68 +23,38 @@ regenerate: false {%- assign components = site.integrations | sort: 'title' -%} {%- assign components_by_version = site.integrations | group_components_by_release -%} {%- assign categories = components | map: 'ha_category' | join: ',' | downcase | split: ',' | uniq | sort -%} +{%- assign iot_classes = "Local Push,Local Polling,Cloud Push,Cloud Polling,Assumed State,Calculated,Configurable" | +join: ',' | split: ',' -%} +{% assign quality_scales = +"icon:🏆,name:platinum|icon:🥇,name:gold|icon:🥈,name:silver|icon:🥉,name:bronze|icon:🏠,name:internal|icon:💾,name:legacy" +| split: "|" +%}
    -
    -
    -
    - All {{tot}} +
    +
    +
    + +
    - -
    +
    -
    - - {%- for category in categories -%} - {%- assign category_name = "" -%} - {%- assign components_count = 0 -%} - {%- for comp in components -%} - {%- assign comp_categories = comp.ha_category | join: ',' | downcase -%} - {%- if comp_categories contains category -%} - {%- if category_name == "" -%} - {%- for cat in comp.ha_category -%} - {%- assign lower_cat = cat | downcase -%} - {%- if lower_cat == category -%} - {%- assign category_name = cat -%} - {%- endif -%} - {%- endfor -%} - {%- endif -%} - {%- assign components_count = components_count | plus: 1 -%} - {%- endif -%} - {%- endfor -%} - {%- if category != 'other' and components_count != 0 -%} - {%- if category_name == "" -%} - {%- assign category_name = category | capitalize -%} - {%- endif -%} - {{ category_name }} {{ components_count }} - {%- endif -%} - {%- endfor -%} - Other {{ components | where: 'ha_category', 'Other' | size }} -
    - -
    - - + {%- for category in categories -%} {%- assign category_name = "" -%} {%- assign components_count = 0 -%} @@ -98,7 +68,7 @@ regenerate: false {%- assign category_name = cat -%} {%- endif -%} {%- endfor -%} - {%- endif -%} + {%- endif -%} {%- assign components_count = components_count | plus: 1 -%} {%- endif -%} {%- endfor -%} @@ -106,154 +76,341 @@ regenerate: false {%- if category_name == "" -%} {%- assign category_name = category | capitalize -%} {%- endif -%} - + {%- endif -%} {%- endfor -%} - + + +
    +
    +
    +
    +

    Version

    + +
    +
    + +
    +
    +

    IoT Class

    + +
    +
    + +
    +
    +

    Quality Scale

    + +
    -
    + +
    +
    + + +
    diff --git a/source/more-info/backup-emergency-kit.markdown b/source/more-info/backup-emergency-kit.markdown index ece0a3a665a..4a78659a55f 100644 --- a/source/more-info/backup-emergency-kit.markdown +++ b/source/more-info/backup-emergency-kit.markdown @@ -4,9 +4,11 @@ description: "Information about backup emergency kit" related: - docs: /common-tasks/general/#backups title: Backups + - docs: /common-tasks/general/#restoring-a-backup + title: Restoring a backup --- -[Backups](/common-tasks/general/#backups) are encrypted (using [AES-128](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)). The backup emergency kit contains information needed to recover your backup, such as the encryption key and metadata about the related backup. +[Backups](/common-tasks/general/#backups) stored on Home Assistant Cloud are always encrypted using [AES-128](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard). For backups stored on other [backup locations](/common-tasks/general/#defining-backup-locations), you can choose whether or not to encrypt the backup. The backup emergency kit contains information needed to [restore the backup](/common-tasks/general/#restoring-a-backup), such as the encryption key and metadata about the related backup. ## What is encryption, and why are backups encrypted? @@ -14,14 +16,16 @@ Encryption is a method of converting data into a coded format so that it can onl ## Storing the backup emergency kit somewhere safe -1. To download the backup emergency kit, go to {% my backup title="**Settings** > **System** > **Backups**" %} +1. To download the backup emergency kit, go to {% my backup title="**Settings** > **System** > **Backups**" %}. 2. If it is your first time defining backup settings, select **Setup automatic backup** and download the backup emergency kit. - You can also download the encryption key again later from the backup configuration page. ![Screenshot showing the encryption key in the download dialog for the backup emergency kit](/images/more-info/backup_emergency_kit_01.png) 3. Store the kit somewhere safe, outside the Home Assistant system. - - Without the encryption key, there is no way to restore the [backup](/common-tasks/general/#backups). + - Home Assistant keeps track of the current encryption key. If you download from Home Assistant, it can decrypt your backup. + - But if you have changed the encryption key in the meantime, you still need the old key that matches old backups. + Without the encryption key, there is no way to [restore an encrypted backup](/common-tasks/general/#restoring-a-backup). ## Changing your encryption key @@ -31,9 +35,12 @@ When you set up your [backups](/common-tasks/general/#backups), an encryption ke 2. Select **Configure automatic backups** and under **Encryption key**, select **Change**. 3. If you haven't downloaded the old emergency kit yet, do it now. - As the new encryption key won't work for the backups you've taken until now, keep it somewhere safe and make a note of which backups it applies to. -4. To generate a new encryption key, select **Change encryption key**. +4. To generate a new encryption key, select **Next**, then select **Change encryption key**. 5. Download the new encryption key and store it in a safe place. ## I lost my backup encryption key - how can I retrieve it? -If you still have access to your Home Assistant instance you can download the encryption key again from the backup settings. If you have lost the encryption key, and have no access to your Home Assistant instance, there is no way to restore the backup. +If you still have access to your Home Assistant instance you can download the encryption key again from the backup settings. + +- **If you have not changed the encryption key**: Home Assistant still has it. If you download the backup from the Home Assistant Backup page, it decrypts the backup on the fly. +- **If you have changed the encryption key**: Home Assistant can not decrypt it on the fly. You need the encryption key that is related to that backup. If you have lost the encryption key, and have no access to your Home Assistant instance, there is no way to restore the backup. diff --git a/source/more-info/unsupported/cgroup_version.markdown b/source/more-info/unsupported/cgroup_version.markdown index ad49b3c3faf..19b9bb4f3e2 100644 --- a/source/more-info/unsupported/cgroup_version.markdown +++ b/source/more-info/unsupported/cgroup_version.markdown @@ -16,6 +16,8 @@ before we publish a version that will require you to upgrade CGroups. ## The solution +If your host uses CGroup v2, add this to the Linux kernel boot parameters: `systemd.unified_cgroup_hierarchy=0` and then reboot your operating system. + In a supervised installation if you have switched to CGroup v2 you will need to revert what you did. Or you can re-run the [supervised installer](https://github.com/home-assistant/supervised-installer) to fix it. Please be sure to reboot the system after the installation is done. diff --git a/source/security/index.markdown b/source/security/index.markdown index bbf351a07d8..ec00ba65c02 100644 --- a/source/security/index.markdown +++ b/source/security/index.markdown @@ -62,6 +62,13 @@ As an open source project, Home Assistant cannot offer bounties for security vul The following is a list of past security advisories that have been published by the Home Assistant project. +**2025-02-18: SSL validation for outgoing requests in core and used libs not correct** +Severity: _High (CVSS: 7.0)_ +Detailed information: _[Security advisory](https://github.com/home-assistant/core/security/advisories/GHSA-m3pm-rpgg-5wj6)_ +Assigned CVE: _[CVE-2025-25305](https://nvd.nist.gov/vuln/detail/CVE-2025-25305)_ +Discovered by: _[ReneNulschDE](https://github.com/ReneNulschDE)_ +Fixed in: _Home Assistant Core 2024.1.6_ + **2023-12-14: User accounts disclosed to unauthenticated actors on the LAN** Severity: _Moderate (CVSS: 4.2)_ Detailed information: _[Security advisory](https://github.com/home-assistant/core/security/advisories/GHSA-jqpc-rc7g-vf83)_ diff --git a/source/voice-pe/index.html b/source/voice-pe/index.html index 603c6c0022b..de4d3ff0ac5 100644 --- a/source/voice-pe/index.html +++ b/source/voice-pe/index.html @@ -28,7 +28,7 @@ frontpage_image: /images/frontpage/voice-pe-frontpage.jpg Specs FAQ Docs - Buy now + Buy now
    @@ -41,7 +41,7 @@ frontpage_image: /images/frontpage/voice-pe-frontpage.jpg Specs FAQ Docs - Buy now + Buy now
    @@ -112,7 +112,7 @@ frontpage_image: /images/frontpage/voice-pe-frontpage.jpg
    -
    Now
    +
    December 2024
    Voice Preview Edition launches
    @@ -216,7 +216,7 @@ frontpage_image: /images/frontpage/voice-pe-frontpage.jpg Front view of the Voice Preview Edition showing the speaker holes
    - Buy now + Buy now * Recommended MSRP. Pricing subject to individual retailers.
    @@ -942,7 +942,7 @@ frontpage_image: /images/frontpage/voice-pe-frontpage.jpg
    @@ -1381,277 +1381,6 @@ frontpage_image: /images/frontpage/voice-pe-frontpage.jpg -
    - -
    - \ No newline at end of file +{% include custom/buy-dialog.html product="voice-pe" %} + + diff --git a/source/voice-pe/script.js b/source/voice-pe/script.js index ebae6372163..2d27d25f03e 100644 --- a/source/voice-pe/script.js +++ b/source/voice-pe/script.js @@ -19,7 +19,6 @@ document.addEventListener('DOMContentLoaded', function () { registerLanguageSelectChange(); registerFeatureCycle(); registerFaqItems(); - registerBuyDialog(); registerLazySections(); }); @@ -697,23 +696,6 @@ function registerFaqItems() { } -const buyDialog = document.getElementById("buy-dialog"); -function registerBuyDialog() { - const buyButtons = document.querySelectorAll('a[href="#buy"]'); - if (!buyButtons) return; - - buyButtons.forEach(button => { - button.addEventListener('click', function () { - showBuyDialog(); - }); - }); - - // if the url contains #buy, show the dialog - if (window.location.hash === '#buy') { - showBuyDialog(); - } -} - function showBuyDialog() { buyDialog.style.display = "flex"; document.documentElement.style.overflow = "hidden"; diff --git a/source/voice-pe/styles.css b/source/voice-pe/styles.css index e47f13c335d..4f7e836a838 100644 --- a/source/voice-pe/styles.css +++ b/source/voice-pe/styles.css @@ -1590,25 +1590,10 @@ section#hero .bg-gradient { -.vpe-main #timeline[data-event="0"] .timeline .track .icon { - --top: calc(var(--grid-m) * -5); -} - -.vpe-main #timeline[data-event="1"] .timeline .track .icon { - --top: calc(var(--grid-m) * var(--event-height)); -} - .vpe-main #timeline[data-event="2"] .timeline .track .icon { - --top: calc(var(--grid-m) * (var(--event-height) * 2)); + --top: calc(var(--grid-m) * (var(--event-height) * 2.333)); } -.vpe-main #timeline[data-event="3"] .timeline .track .icon { - --top: calc(var(--grid-m) * (var(--event-height) * 3)); -} - -.vpe-main #timeline[data-event="4"] .timeline .track .icon { - --top: calc(var(--grid-m) * (var(--event-height) * 4)); -} .vpe-main #timeline[data-event="0"] .event:nth-child(1) .content { opacity: 1; diff --git a/source/voice_control/android.markdown b/source/voice_control/android.markdown index dfc8b3699dd..f7b06c1b5e9 100644 --- a/source/voice_control/android.markdown +++ b/source/voice_control/android.markdown @@ -7,6 +7,8 @@ related: title: Best practices with Assist - url: https://companion.home-assistant.io/docs/getting_started/ title: Home Assistant Companion App + - url: https://voice-pe.home-assistant.io/ + title: Voice Preview Edition --- ## Assist on Android phones diff --git a/source/voice_control/apple.markdown b/source/voice_control/apple.markdown index 65fbe00da53..87f28cfde9f 100644 --- a/source/voice_control/apple.markdown +++ b/source/voice_control/apple.markdown @@ -7,6 +7,8 @@ related: title: Best practices with Assist - url: https://companion.home-assistant.io/docs/getting_started/ title: Home Assistant Companion App + - url: https://voice-pe.home-assistant.io/ + title: Voice Preview Edition --- ## Assist on iPhones diff --git a/source/voice_control/assist_create_open_ai_personality.markdown b/source/voice_control/assist_create_open_ai_personality.markdown index 2eb5314415e..63c983b9d1f 100644 --- a/source/voice_control/assist_create_open_ai_personality.markdown +++ b/source/voice_control/assist_create_open_ai_personality.markdown @@ -44,14 +44,12 @@ There are cloud agents provided by [Open AI](/integrations/openai_conversation/) ### Creating a voice assistant personality with an LLM-based conversation agent 1. Go to {% my integrations title="**Settings** > **Devices & Services**" %} **Add Integration**, find your LLM provider and set it up with your API key. - - In case of a provider of local agents like Ollama, you need to configure the local URL where the agent is installed. Follow the specific [integration recommendations](/integrations/ollama) in this case. - + - In case of a provider of local agents like Ollama, you need to configure the local URL where the agent is installed. Follow the specific [integration recommendations](/integrations/ollama) in this case. 2. Go to **Settings > Voice Assistants > Add Assistant**. Give it a name and pick a conversation agent from your AI's option. In this example we are using Antropic and the agent picked is Claude. ![Add Claude agent to Assist](/images/assist/add-claude-to-assist.png) -3. Be mindful of your Text-to-speech and Speech-to-text configurations. These are not handled by the IA and should stay as you want them configured for Assist. - +3. Be mindful of your Text-to-speech and Speech-to-text configurations. These are not handled by the AI and should stay as you want them configured for Assist. 4. Configure the agent (gear icon next to the agent's name). - In the **Prompt template** field, enter a text that will prompt the AI to become the character. For example:: @@ -65,14 +63,12 @@ There are cloud agents provided by [Open AI](/integrations/openai_conversation/) - Once your Assist agent has been created, you can go to **Voice assistants** and the three dots menu of your personality, and define if you want Home Assistant's model to be the priority response, and therefore Assist would prefer to handling commands locally . ![Fallback toggle](/images/assist/fallback-assist-toggle.png) - - If you keep this option selected, if the intent can be answered by Home Assistant it will. It will not have the personality, but the response will be fast and efficient (since it doesn't require to go through the LLM). This is recommended in cases where you can accept not having the IA character reply sometimes and would rather your lights are turned on faster. + - If you keep this option selected, if the intent can be answered by Home Assistant it will. It will not have the personality, but the response will be fast and efficient (since it doesn't require to go through the LLM). This is recommended in cases where you can accept not having the AI character reply sometimes and would rather your lights are turned on faster. - If you deselect the option, all the intents will go through the agent. This is recommended when efficiency is not an issue and you need the agent never to break character (for example if your Assist personality is Santa Claus). - - 5. You can uncheck Recommended model settings, hit Submit and it will unblock extra customization. In the specific example of OpenAI, [here](/integrations/openai_conversation/#model) a brief summary of the other settings. 6. You can test the agent directly from the Voice assistants panel, selecting Start a conversation from the agent's menu. It will control your Home Assistant and reply exactly as it will do with any voice hardware. -7. In case you need troubleshooting with your LLM provider, check any specifics from your IA in our [integrations documentation](/integrations) +7. In case you need troubleshooting with your LLM provider, check any specifics from your AI in our [integrations documentation](/integrations) ## Tutorial: Setting up Assist with OpenAI diff --git a/source/voice_control/best_practices.markdown b/source/voice_control/best_practices.markdown index 88ea016fb2c..d3efbedbd2a 100644 --- a/source/voice_control/best_practices.markdown +++ b/source/voice_control/best_practices.markdown @@ -11,6 +11,8 @@ related: title: Sentences starter kit - url: https://www.nabucasa.com/config/ title: Home Assistant Cloud + - url: https://voice-pe.home-assistant.io/ + title: Voice Preview Edition --- There are a few things you should do to get the most out of the voice assistant experience. @@ -58,7 +60,7 @@ English has pretty simple grammar rules, but there are languages where definite Assist leverages domains to define the proper verbs for the action being taken (for example, turning on/off a `light`, or a `fan`, opening/closing a `cover` with a `door` `device_class`, opening/closing a `valve` or locking/unlocking a `lock`.). -It might not bother anyone to have a `switch.main`_valve in the UI instead of a valve, but you can’t ask Assist to open the main valve if the main valve is a switch. If it was a `valve.main_valve`, then the former sentence would have worked without a hitch. +It might not bother anyone to have a `switch.main_valve` in the UI instead of a valve, but you can’t ask Assist to open the main valve if the main valve is a switch. If it was a `valve.main_valve`, then the former sentence would have worked without a hitch. To prevent this, you can use either the [Change device type of a switch integration](/integrations/switch_as_x/) or create virtual entities using [template](/integrations/template/) entities or Generic X (e.g. [generic thermostat](/integrations/generic_thermostat/)). @@ -81,4 +83,4 @@ There are a few example commands to help you get started in [our Sentences start If you don't get the right response, we recommend you check the Aliases. Sometimes, different household members may call an entity differently. You may say "TV", whereas someone else may say "Television" -You can create aliases for exposed entities so that you can target them using different names with Assist. Aliases are available at entity, area, and floor level. Learn how in the [Alias tutorial](/voice_control/aliases/). \ No newline at end of file +You can create aliases for exposed entities so that you can target them using different names with Assist. Aliases are available at entity, area, and floor level. Learn how in the [Alias tutorial](/voice_control/aliases/). diff --git a/source/voice_control/builtin_sentences.markdown b/source/voice_control/builtin_sentences.markdown index 67e06d91fb4..c73ff8191fd 100644 --- a/source/voice_control/builtin_sentences.markdown +++ b/source/voice_control/builtin_sentences.markdown @@ -147,27 +147,6 @@ Unlike regular voice timers, delayed commands cannot be canceled or modified. - *Pause TV in 10 minutes* - *Open the blinds in 5 minutes* -## Questions - -### Get information about a state - -- *What is the amount of energy from solar production?* -- *what is the heat pump co2 sensor's co2 level?* -- *what is the battery level of my phone?* - -### Ask about the weather - -- *What is the weather* -- Struggling with this one? Check the [troubleshooting section](/voice_control/troubleshooting/). - -### Ask about people - -(that have device tracking activated in Home Assistant) - -- *How many people are in the kitchen* -- *Who is in the garage* -- *Where is Anne* - ## Aborting - *Nevermind*: If you triggered the wake word by mistake and want to stop Home Assistant from listening diff --git a/source/voice_control/create_wake_word.markdown b/source/voice_control/create_wake_word.markdown index ba44fb124d0..326ab52201e 100644 --- a/source/voice_control/create_wake_word.markdown +++ b/source/voice_control/create_wake_word.markdown @@ -41,9 +41,9 @@ Enabling a wake word consists of 2 steps: 1. Go to {% my supervisor_addon addon="core_openwakeword" title="**Settings** > **Add-ons** > **openWakeWord**" %} and select **Install**. 2. **Start** the add-on. 3. Go to {% my integrations title="**Settings** > **Devices & Services**" %}. - - Under **Discovered**, you should now see the **openWakeWord** integration. + - Under **Discovered**, you should now see the **openWakeWord** component of the **Wyoming** integration. - Select **Configure** and **Submit**. - - **Result**: You have successfully installed the **openWakeWord** add-on and Wyoming integration. + - **Result**: You have successfully installed the **openWakeWord** add-on and **Wyoming** integration. ### To enable wake word for your voice assistant @@ -56,8 +56,10 @@ Enabling a wake word consists of 2 steps: - If the **Text-to-speech** and **Speech-to-text** sections do not provide language selectors, this means you do not have an Assist pipeline set up. - Set up [Home Assistant Cloud](https://www.nabucasa.com) or a manually configured [Assist pipeline](/voice_control/voice_remote_local_assistant). 5. Under **Text-to-speech**, select the language and voice you want Home Assistant to use when speaking to you. -6. To define the wake word engine, under **Wake word**, select **openwakeword**. - - Then, select **ok nabu**. +6. To define the wake word engine, in the top-right corner of the dialog, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Add streaming wake word**. + - **Troubleshooting**: If you don't see the three dots {% icon "mdi:dots-vertical" %} menu, go to {% my integrations title="**Settings** > **Devices & Services**" %} and make sure the **openWakeWord** component of the **Wyoming** integration is added. + - **Result**: on the bottom of the page, you now see a new section **Streaming wake word engine**. + - Select **openwakeword**, then select **ok nabu**. - If you created a new assistant, select **Create**. - If you edited an existing assistant, select **Update**. - **Result**: You now have a voice assistant that listens to a wake word. diff --git a/source/voice_control/custom_sentences.markdown b/source/voice_control/custom_sentences.markdown index 3a0bf1875c8..8fab713ccd5 100644 --- a/source/voice_control/custom_sentences.markdown +++ b/source/voice_control/custom_sentences.markdown @@ -9,11 +9,13 @@ related: title: Sentence triggers - docs: /docs/automation/trigger/#sentence-wildcards title: Sentence wildcards + - docs: voice_control/custom_sentences_yaml + title: Customize responses - url: https://developers.home-assistant.io/docs/intent_builtin/ title: View existing intents --- -You may add your own sentences to the intent recognizer by either extending an [existing intent](https://developers.home-assistant.io/docs/intent_builtin/) or creating a new one. You may also [customize responses](#customizing-responses) for existing intents. +You may add your own sentences to the intent recognizer by either extending an [existing intent](https://developers.home-assistant.io/docs/intent_builtin/) or creating a new one. You may also [customize responses](/voice_control/custom_sentences_yaml#customizing-responses) for existing intents. ## Prerequisites diff --git a/source/voice_control/expanding_assist.markdown b/source/voice_control/expanding_assist.markdown index a1e715e1d22..9793b29becc 100644 --- a/source/voice_control/expanding_assist.markdown +++ b/source/voice_control/expanding_assist.markdown @@ -7,6 +7,8 @@ related: title: Custom sentences with Assist - url: https://www.nabucasa.com/config/ title: Home Assistant Cloud + - url: https://voice-pe.home-assistant.io/ + title: Voice Preview Edition --- Once you have completed the steps in the [Best practices](/voice_control/best_practices/), you have your bases covered and are ready to use Assist. This section provides some ideas on how to expand your setup for more advanced use cases. diff --git a/source/voice_control/index.markdown b/source/voice_control/index.markdown index 56295f137cb..1c407dd6f8e 100644 --- a/source/voice_control/index.markdown +++ b/source/voice_control/index.markdown @@ -11,30 +11,39 @@ related: title: Best practices with Assist - url: https://www.nabucasa.com/config/assist/ title: Home Assistant Cloud + - url: https://voice-pe.home-assistant.io/ + title: Voice Preview Edition --- This section will help you set up Assist, which is Home Assistant voice assistant. Assist allows you to control Home Assistant using natural language. It is built on top of an open voice foundation and powered by knowledge provided by our community. -Assist is available to use on most platforms that can interface with Home Assistant. Look for the Assist icon Assist icon: +The simplest way to try out Assist is inside our companion app. Look for the Assist icon Assist icon at the top right of your dashboard. + +The simplest way to get started with Assist is with our recommended voice assistant hardware, the [Home Assistant Voice Preview Edition](/voice-pe/). As for the rest of Home Assistant core functionalities, Assist can be personalized and extended to fit your needs. + - It can work locally or leverage the greatest LLMs of the moment. - It can work on your phone or tablet or other custom voice devices. -Although adding voice to your smart home configuration is exciting, it will require you to check your existing setup of Home Assistant, especially if you made a lot of customization. But we have prepared a guide of steps and best practices to help you out, as well as our [Troubleshooting](/voice_control/troubleshooting/) guides. +## Getting Started -Ready? Now let's get started +When you configure voice assistant hardware made for Home Assistant, it will use a wizard to help you configure your system and get started to use voice. -- [I plan to use a local speech-to-text/text-to-speech setup](/voice_control/voice_remote_local_assistant/) +Our recommended voice assistant hardware is the [Home Assistant Voice Preview Edition](/voice-pe/). + +In case your hardware does not support our wizard, do not worry. Here are two detailed guides based on how you plan to process your voice (Locally, or using Home Assistant Cloud voice services) + +- [I plan to process my voice locally](/voice_control/voice_remote_local_assistant/) - [I plan to use Home Assistant Cloud](/voice_control/voice_remote_cloud_assistant/) (recommended as it is the simplest) ## Expand and Experiment -Once your setup is up and running and you follow the [best practices](/voice_control/best_practices), check all the possibilities we found for [Expanding your Assist setup](/voice_control/expanding_assist), and further experiment with different setups like [wake words](/voice_control/about_wake_word/). Do you want to talk to Super Mario? Or another figure? If you want Assist to respond in a fun way, you can create an assistant with an [OpenAI personality](/voice_control/assist_create_open_ai_personality/). +Once your setup is up and running and you follow the [best practices](/voice_control/best_practices), check all the possibilities we found for [Expanding your Assist setup](/voice_control/expanding_assist), and further experiment with different setups like [wake words](/voice_control/about_wake_word/). Do you want to talk to Super Mario? Or another figure? If you want Assist to respond in a fun way, you can create an assistant with an [AI personality](/voice_control/assist_create_open_ai_personality/). Another things you can do to further push your setup: @@ -57,87 +66,86 @@ Assist aims to support more languages than other voice assistants, but this is s
    @@ -402,87 +410,86 @@ function registerLanguageSelectChange() { function updateLanguageSupports(locale = null) { let data = { + "af-ZA": [0, 0], + "am-ET": [0, 0], + "ar-JO": [0, 2], + "az-AZ": [0, 0], + "bg-BG": [0, 2], + "bn-IN": [0, 0], + "bs-BA": [0, 0], + "ca-ES": [0, 3], + "cs-CZ": [0, 1], + "cy-GB": [0, 0], + "da-DK": [0, 2], + "de-DE": [3, 3], + "el-GR": [0, 1], "en-US": [3, 3], "es-ES": [3, 3], - "pt-BR": [3, 3], - "de-DE": [3, 3], - "it-IT": [2, 2], - "ru-RU": [2, 2], - "ja-JP": [0, 0], - "tr-TR": [0, 1], - "ko-KR": [0, 1], - "fr-FR": [0, 3], - "ca-ES": [0, 3], - "pl-PL": [0, 3], - "nl-BE": [0, 3], - "id-ID": [0, 1], - "zh-HK": [0, 2], - "zh-CN": [0, 1], - "ms-MY": [0, 1], - "sv-SE": [0, 2], - "uk-UA": [0, 2], - "th-TH": [0, 1], - "vi-VN": [0, 1], - "fi-FI": [0, 3], - "no-NO": [0, 0], - "gl-ES": [0, 2], - "ar-JO": [0, 2], - "ur-IN": [0, 0], - "el-GR": [0, 1], - "ro-RO": [0, 3], - "da-DK": [0, 2], - "ta-IN": [0, 0], - "hr-HR": [0, 3], - "mk-MK": [0, 0], - "sk-SK": [0, 1], - "he-IL": [0, 2], - "sr-RS": [0, 1], - "hu-HU": [0, 3], - "bg-BG": [0, 2], - "cs-CZ": [0, 1], - "bs-BA": [0, 0], - "sl-SI": [0, 2], - "az-AZ": [0, 0], "et-EE": [0, 1], - "lv-LV": [0, 1], - "af-ZA": [0, 0], - "cy-GB": [0, 0], + "eu-ES": [0, 1], "fa-IR": [0, 1], - "lt-LT": [0, 1], + "fi-FI": [0, 3], + "fil-PH": [0, 0], + "fr-FR": [0, 3], + "ga-IE": [0, 0], + "gl-ES": [0, 2], + "gu-IN": [0, 0], + "he-IL": [0, 2], + "hi-IN": [0, 0], + "hr-HR": [0, 3], + "hu-HU": [0, 3], + "hy-AM": [0, 0], + "id-ID": [0, 1], + "is-IS": [0, 1], + "it-IT": [2, 2], + "ja-JP": [0, 0], "jv-ID": [0, 0], + "ka-GE": [0, 1], + "kk-KZ": [0, 0], + "km-KH": [0, 0], + "kn-IN": [0, 0], + "ko-KR": [0, 1], + "lb-LU": [0, 0], + "lo-LA": [0, 0], + "lt-LT": [0, 1], + "lv-LV": [0, 1], + "mk-MK": [0, 0], + "ml-IN": [0, 1], + "mn-MN": [0, 0], + "mr-IN": [0, 0], + "ms-MY": [0, 1], + "mt-MT": [0, 0], + "my-MM": [0, 0], + "nb-NO": [0, 3], + "ne-NP": [0, 0], + "nl-BE": [0, 3], + "pl-PL": [0, 3], + "ps-AF": [0, 0], + "pt-BR": [3, 3], + "ro-RO": [0, 3], + "ru-RU": [2, 2], + "si-LK": [0, 0], + "sk-SK": [0, 1], + "sl-SI": [0, 2], + "so-SO": [0, 0], + "sq-AL": [0, 0], + "sr-RS": [0, 1], + "su-ID": [0, 0], + "sv-SE": [0, 2], "sw-KE": [0, 0], "sw-TZ": [0, 0], - "is-IS": [0, 1], - "mt-MT": [0, 0], - "ps-AF": [0, 0], - "mr-IN": [0, 0], - "bn-IN": [0, 0], - "lb-LU": [0, 0], - "hi-IN": [0, 0], - "gu-IN": [0, 0], - "km-KH": [0, 0], - "ne-NP": [0, 0], - "lo-LA": [0, 0], + "ta-IN": [0, 0], "te-IN": [0, 1], - "kn-IN": [0, 0], - "ml-IN": [0, 1], - "kk-KZ": [0, 0], - "so-SO": [0, 0], + "th-TH": [0, 1], + "tr-TR": [0, 1], + "uk-UA": [0, 2], + "ur-IN": [0, 0], "uz-UZ": [0, 0], - "ka-GE": [0, 1], - "my-MM": [0, 0], - "mn-MN": [0, 0], - "hy-AM": [0, 0], - "am-ET": [0, 0], - "nb-NO": [0, 3], - "eu-ES": [0, 1], - "fil-PH": [0, 0], - "ga-IE": [0, 0], - "si-LK": [0, 0], - "sq-AL": [0, 0], - "su-ID": [0, 0], + "vi-VN": [0, 1], "wuu-CN": [0, 0], "yue-CN": [0, 0], + "zh-CN": [0, 1], + "zh-HK": [0, 2], "zu-ZA": [0, 0] }; diff --git a/source/voice_control/install_wake_word_add_on.markdown b/source/voice_control/install_wake_word_add_on.markdown index fe8b3a327c7..593e0a083c9 100644 --- a/source/voice_control/install_wake_word_add_on.markdown +++ b/source/voice_control/install_wake_word_add_on.markdown @@ -23,7 +23,7 @@ Enabling a wake word consists of 2 steps: 1. Go to {% my supervisor_addon addon="core_openwakeword" title="**Settings** > **Add-ons** > **openWakeWord**" %} and select **Install**. 2. **Start** the add-on. 3. Go to {% my integrations title="**Settings** > **Devices & Services**" %}. - - Under **Discovered**, you should now see the **openWakeWord** integration. + - Under **Discovered**, you should now see the **openWakeWord** component of the **Wyoming** integration. - Select **Configure** and **Submit**. - **Result**: You have successfully installed the openWakeWord add-on and Wyoming integration. @@ -38,8 +38,10 @@ Enabling a wake word consists of 2 steps: - If the **Text-to-speech** and **Speech-to-text** sections do not provide language selectors, this means you do not have an Assist pipeline set up. - Set up [Home Assistant Cloud](https://www.nabucasa.com) or a manually configured [Assist pipeline](/voice_control/voice_remote_local_assistant). 5. Under **Text-to-speech**, select the language and voice you want Home Assistant to use when speaking to you. -6. To define the wake word engine, under **Wake word**, select **openwakeword**. - - Then, select **ok nabu**. +6. To define the wake word engine, in the top-right corner of the dialog, select the three dots {% icon "mdi:dots-vertical" %} menu and select **Add streaming wake word**. + - **Troubleshooting**: If you don't see the three dots {% icon "mdi:dots-vertical" %} menu, go to {% my integrations title="**Settings** > **Devices & Services**" %} and make sure the **openWakeWord** component of the **Wyoming** integration is added. + - **Result**: on the bottom of the page, you now see a new section **Streaming wake word engine**. + - Select **openwakeword**, then select **ok nabu**. - If you created a new assistant, select **Create**. - If you edited an existing assistant, select **Update**. - **Result**: You now have a voice assistant that listens to a wake word. diff --git a/source/voice_control/troubleshooting.markdown b/source/voice_control/troubleshooting.markdown index 7d316d56117..d87dbbf42ea 100644 --- a/source/voice_control/troubleshooting.markdown +++ b/source/voice_control/troubleshooting.markdown @@ -92,6 +92,7 @@ My voice assistant understands me and processes the command, but I don't get a v The voice response is generated in Home Assistant by one of our supported text-to-speech (or {% term TTS %}) engines. The voice assistant device then fetches the audio file from Home Assistant and plays it back. +### Local Network Settings For this fetching process to work, Home Assistant must communicate its own URL to the device. If you have a complex network setup, or if you changed this setting in the past, the URL communicated could be wrong. @@ -103,6 +104,8 @@ To fix the URL, follow these steps: - For most users, the **Automatic** option works and is recommended. ![Create alias for entity name](/images/assist/local_url.png) +### Missing Media Source +If you are using YAML configuration and do not have `default_config:` make sure `media_source:` is present. ## Tweaking the Assist audio configuration for your device diff --git a/source/voice_control/using_tts_in_automation.markdown b/source/voice_control/using_tts_in_automation.markdown index 302eb6c4c63..561720f9f10 100644 --- a/source/voice_control/using_tts_in_automation.markdown +++ b/source/voice_control/using_tts_in_automation.markdown @@ -6,14 +6,12 @@ This procedure shows you how to create a text-to-speech {% term action %}. For t 1. Go to **{% my automations title="Settings > Automations & Scenes" %}**, and select **Create automation**. 2. Select **Create new automation**, then **Add action**. -3. From the drop-down menu, select **Play media** and select the media player you want to use for this automation. - ![Select your media player](/images/assist/tts_select_media_player.png) -4. Select **Pick media**, then, select **Text-to-speech**. - ![Select your media source](/images/assist/tts_select_media_source.png) -5. To use fully local text-to-speech processing, select **Piper**. - ![Select Piper](/images/assist/tts_select_piper.png) +3. From the drop-down menu, search for or select **TTS: Speak**. + ![Select the TTS action](/images/assist/speak-action.png) +4. To use fully local text-to-speech processing, select **piper** from the **Choose entity** control. + ![Select Piper](/images/assist/select-entity.png) +5. Select the media player you want the automation to use. 6. Enter the text you want to hear for this automation. - ![Enter text to be spoken](/images/assist/tts_enter_text.png) + ![Enter text to be spoken](/images/assist/media-message.png) 7. Your text-to-speech action is now ready to be used in your script or automation. - ![Enter text to be spoken](/images/assist/tts_action.png) 8. Save your action. diff --git a/source/voice_control/voice_remote_cloud_assistant.markdown b/source/voice_control/voice_remote_cloud_assistant.markdown index a5c9d65a64f..5bc193a2467 100644 --- a/source/voice_control/voice_remote_cloud_assistant.markdown +++ b/source/voice_control/voice_remote_cloud_assistant.markdown @@ -1,16 +1,16 @@ --- title: "Getting Started - Home Assistant Cloud" related: - - docs: /voice_control/install_wake_word_add_on/ - title: Enabling a wake word - - docs: /voice_control/create_wake_word/ - title: Create your own wake word + - docs: /voice_control/best_practices/ + title: Best practices with Assist + - docs: /voice_control/expanding_assist/ + title: Expanding Assist - docs: /voice_control/voice_remote_local_assistant/ title: Creating a local assistant - docs: /voice_control/voice_remote_expose_devices/ title: Exposing devices to Assist - - docs: /voice_control/best_practices/ - title: Best practices with Assist + - url: https://voice-pe.home-assistant.io/documentation/ + title: Voice Preview Edition - Documentation --- Before being able to use Assist, you need to configure it. @@ -48,4 +48,8 @@ To have the fastest processing voice assistant experience, follow these steps: 6. That's it. You can now speak to your device, and the device can answer in the language you defined. -Once Assist is configured, now can now start using it. Check this page to learn how: + +## Next steps +Once Assist is configured, now can now start using it. You can now talk through your device ([Android](/voice_control/android/), [iOS](/voice_control/apple/) or [Voice Preview edition](https://voice-pe.home-assistant.io/getting-started/)). + +To get the best out of the voice interaction, don't forget to check the [best practices](/voice_control/best_practices/). diff --git a/source/voice_control/voice_remote_local_assistant.markdown b/source/voice_control/voice_remote_local_assistant.markdown index 188e8cb5dd8..8861e4a7157 100644 --- a/source/voice_control/voice_remote_local_assistant.markdown +++ b/source/voice_control/voice_remote_local_assistant.markdown @@ -1,16 +1,16 @@ --- title: "Getting started - Local" related: - - docs: /voice_control/voice_remote_expose_devices/#exposing-your-devices - title: Expose your devices to Assist - - docs: /voice_control/create_wake_word/ - title: Create your own wake words - - url: https://github.com/openai/whisper - title: Whisper for speech-to-text - - url: https://github.com/rhasspy/piper - title: Piper for text-to-speech - docs: /voice_control/best_practices/ title: Best practices with Assist + - docs: /voice_control/expanding_assist/ + title: Expanding Assist + - docs: /voice_control/voice_remote_local_assistant/ + title: Creating a local assistant + - docs: /voice_control/voice_remote_expose_devices/ + title: Exposing devices to Assist + - url: https://voice-pe.home-assistant.io/documentation/ + title: Voice Preview Edition - Documentation --- The simplest and most effective way to use Assist is to leverage the voice providers (for speech-to-text and text-to-speech) included in [Home Assistant Cloud](/voice_control/voice_remote_cloud_assistant/) @@ -30,9 +30,37 @@ In Home Assistant, the Assist pipelines are made up of various components that t ## Some options for speech-to-text and text-to-speech -There is a speech-to-text and text-to-speech option that runs entirely local. No data is sent to external servers for processing. +There are speech-to-text and text-to-speech options that run entirely local. No data is sent to external servers for processing. + +### Speech-to-text engines + +There are currently two options to run speech-to-text locally: **Speech-to-Phrase** and **Whisper**. + +#### Speech-to-Phrase +[Speech-to-Phrase](https://github.com/OHF-voice/speech-to-phrase) is a close-ended speech model. + +- It transcribes what it knows. +- Extremely fast transcription even on a Home Assistant Green or Raspberry Pi 4 (under one second). +- Only supports a subset of Assist’s voice commands. + - More open-ended items such as shopping lists, naming a timer, and broadcasts are *not* usable out of the box. +- Speech-to-Phrase supports [various languages](https://github.com/OHF-voice/speech-to-phrase?tab=readme-ov-file#supported-languages). +- These qualities make it a great option for Home control! + +#### Whisper + +[Whisper](https://github.com/openai/whisper) is an open-ended speech model. + +- It will try to transcribe everything. +- The cost is slower processing speed: + - On a Raspberry Pi 4, it takes around 8 seconds to process incoming voice commands. + - On an Intel NUC, it is done in under a second. +- Supports [various languages](https://github.com/openai/whisper#available-models-and-languages). +- Whisper is only a great option in the following case: + 1. You have powerful hardware at home. + 2. You plan to extend your voice set-up beyond simple home control. For example, by pairing your assistant with an LLM-based agent. + +### Text-to-speech engine -The speech-to-text option is [Whisper](https://github.com/openai/whisper). It’s an open source AI model that supports [various languages](https://github.com/openai/whisper#available-models-and-languages). We use a forked version called [faster-whisper](https://github.com/SYSTRAN/faster-whisper). On a Raspberry Pi 4, it takes around 8 seconds to process incoming voice commands. On an Intel NUC, it is done in under a second. For text-to-speech, we have developed [Piper](https://github.com/rhasspy/piper). Piper is a fast, local neural text-to-speech system that sounds great and is optimized for the Raspberry Pi 4. It supports [many languages](https://rhasspy.github.io/piper-samples/). On a Raspberry Pi, using medium quality models, it can generate 1.6s of voice in a second. Please be sure to check how either option will work in your language, since quality can change quite a bit. @@ -42,20 +70,15 @@ Please be sure to check how either option will work in your language, since qual For the quickest way to get your local Assist pipeline started, follow these steps: 1. Install the add-ons to convert text into speech and vice versa. - - Install the {% my supervisor_addon addon="core_whisper" title="**Whisper**" %} and the {% my supervisor_addon addon="core_piper" title="**Piper**" %} add-ons. - ![Install the Whisper and Piper add-ons](/images/assist/piper-whisper-install-01.png) - - If you want to use a wake word, also install the {% my supervisor_addon addon="core_openwakeword" title="**openWakeWord**" %} add-on. + - Install the speech-to-text add-on of your choice, either {% my supervisor_addon addon="core_speech-to-phrase" title="**Speech-to-Phrase**" %} or {% my supervisor_addon addon="core_whisper" title="**Whisper**" %}. + - Install {% my supervisor_addon addon="core_piper" title="**Piper**" %} for text-to-speech. - Start the add-ons. - Once the add-ons are started, head over to the integrations under {% my integrations title="**Settings** > **Devices & Services**" %}. - - You should now see Piper and Whisper being discovered by the [Wyoming integration](/integrations/wyoming/). + - You should now see both services being discovered by the [Wyoming integration](/integrations/wyoming/). ![Whisper and Piper integrations](/images/assist/piper-whisper-install-new-02.png) - For each integration, select **Add**. - - Once the setup is complete, you should see both Piper and Whisper (and, optionally, also openWakeword) in one integration. - - ![Whisper and Piper integration](/images/assist/piper-whisper-install-new-03.png) - - **Whisper** converts speech into text. - - **Piper** converts text into speech. - - **Wyoming** is the protocol they are both using to communicate. + - You now have integrated a local speech-to-text engine of your choice (either {% my supervisor_addon addon="core_speech-to-phrase" title="**Speech-to-Phrase**" %} or {% my supervisor_addon addon="core_whisper" title="**Whisper**" %}) and a text-to-speech engine ({% my supervisor_addon addon="core_piper" title="**Piper**" %}). + 2. Setup your assistant. - Go to {% my voice_assistants title="**Settings** > **Voice assistants**" %} and select **Add assistant**. @@ -71,13 +94,9 @@ For the quickest way to get your local Assist pipeline started, follow these ste - Enter a name. You can pick any name that is meaningful to you. - Select the language that you want to speak. - Under **Conversation agent**, select **Home Assistant**. - - Under **Speech-to-text**, select **faster-whisper**. Select the language. - - Under **Text-to-speech**, select **piper**. Select the language. + - Under **Speech-to-text**, select the speech-to-text engine you choose in the previous step (either **Whisper** or **Speech-to-Phrase**). Select the language. + - Under **Text-to-speech**, select **Piper**. Select the language. - Depending on your language, you may be able to select different language variants. - - If you like, pick one of the predefined wake words. - ![Select wake word](/images/assist/assist_predefined_wakeword.png) - - You can even [define your own wake word](/voice_control/create_wake_word/). This is not difficult to do, but you will need to set aside a bit of time for this. - - Once you defined your own wake word, it will show in this pick list. 3. That's it. You ensured your voice commands can be processed locally on your device. 4. If you haven't done so yet, [expose your devices to Assist](/voice_control/voice_remote_expose_devices/#exposing-your-devices). @@ -94,5 +113,13 @@ The options are also documented in the add-on itself. Go to the {% my supervisor Also be sure to check the specific tutorial for [using Piper in Automations](voice_control/using_tts_in_automation/) +## Learning more about Speech-to-Phrase + +You can check out [Voice Chapter 9](/blog/2025/02/13/voice-chapter-9-speech-to-phrase/) to learn more about why we introduced Speech-to-Phrase, and why it's a great option for home control. + + + ## Next steps -Once the pipeline is configured, you are ready to jump into the basic conversation setup in Best Practices +Once Assist is configured, now can now start using it. You can now talk through your device ([Android](/voice_control/android/), [iOS](/voice_control/apple/) or [Voice Preview edition](https://voice-pe.home-assistant.io/getting-started/)). + +To get the best out of the voice interaction, don't forget to check the [best practices](/voice_control/best_practices/). diff --git a/source/yellow/index.html b/source/yellow/index.html index e3f73fb341b..b1f1718df46 100644 --- a/source/yellow/index.html +++ b/source/yellow/index.html @@ -48,6 +48,9 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg max-width: initial; width: 100px; } + #landingpage .page-content .content .bullet-points .item span{ + letter-spacing: unset; + } .banner-overlay-button, #landingpage .fab { background-color: #ffc900 !important; color: black !important; @@ -132,7 +135,7 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg - @@ -335,236 +338,10 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg -
    - -
    +{% include custom/buy-dialog.html product="yellow" %}
    @@ -574,40 +351,4 @@ frontpage_image: /images/frontpage/yellow-frontpage.jpg /> ORDER -
    - - \ No newline at end of file + \ No newline at end of file