Merge branch 'next' into karwosts-patch-1

This commit is contained in:
karwosts 2025-07-22 15:58:11 -07:00 committed by GitHub
commit 68152e9025
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
289 changed files with 13326 additions and 5045 deletions

View File

@ -7,8 +7,8 @@ contact_links:
url: https://www.home-assistant.io/help
about: We use GitHub for tracking bugs, check our website for resources on getting help.
- name: Feature Request
url: https://community.home-assistant.io/c/feature-requests
about: Please use our Community Forum for doing feature requests.
url: https://github.com/orgs/home-assistant/discussions
about: Please use this link to request new features or enhancements to existing features.
- name: I'm unsure where to go
url: https://www.home-assistant.io/join-chat
about: If you are unsure where to go, then joining our chat is recommended; Just ask!

View File

@ -14,6 +14,16 @@ jobs:
with:
node-version: 20
cache: "npm"
- name: Check for .md files and suggest renaming
run: |
echo "Checking for .md files in source/_integrations..."
MD_FILES=$(find source/_integrations -type f -name "*.md")
if [ -n "$MD_FILES" ]; then
echo "Found the following .md files:"
echo "$MD_FILES"
echo "⚠️ Please rename these files from .md to .markdown"
exit 1
fi
- name: Install dependencies
run: npm install
env:

View File

@ -1,6 +1,20 @@
{
"filters": {
"comments": true
"comments": true,
"allowlist": {
"allow": [
"2fa:",
"alexa:",
"homeassistant:",
"homekit:",
"led:",
"sms:",
"sql:",
"ssl:",
"twitter:",
"url:"
]
}
},
"rules": {
"common-misspellings": {
@ -150,7 +164,6 @@
"iTunes",
"JSON-RPC",
"JSON",
"JuiceNet",
"Kafka",
"KEF",
"KNX",

View File

@ -15,7 +15,7 @@ source/_integrations/acaia.markdown @zweckj
source/_integrations/accuweather.markdown @bieniu
source/_integrations/acmeda.markdown @atmurray
source/_integrations/acomax.markdown @starkillerOG
source/_integrations/adax.markdown @danielhiversen
source/_integrations/adax.markdown @danielhiversen @lazytarget
source/_integrations/adguard.markdown @frenck
source/_integrations/ads.markdown @mrpasztoradam
source/_integrations/advantage_air.markdown @Bre77
@ -37,10 +37,11 @@ source/_integrations/airvisual_pro.markdown @bachya
source/_integrations/airzone.markdown @Noltari
source/_integrations/airzone_cloud.markdown @Noltari
source/_integrations/alarm_control_panel.markdown @home-assistant/core
source/_integrations/alarm_control_panel.template.markdown @home-assistant/core
source/_integrations/alert.markdown @home-assistant/core @frenck
source/_integrations/alexa.markdown @home-assistant/cloud @ochlocracy @jbouwh
source/_integrations/alexa.smart_home.markdown @home-assistant/cloud @ochlocracy @jbouwh
source/_integrations/alexa_devices.markdown @chemelli74
source/_integrations/altruist.markdown @airalab @LoSk-p
source/_integrations/amazon_polly.markdown @jschlyter
source/_integrations/amberelectric.markdown @madpilot
source/_integrations/ambient_network.markdown @thomaskistler
@ -92,6 +93,7 @@ source/_integrations/auth.markdown @home-assistant/core
source/_integrations/automation.markdown @home-assistant/core
source/_integrations/avea.markdown @pattyland
source/_integrations/awair.markdown @ahayworth @danielsjf
source/_integrations/aws_s3.markdown @tomasbedrich
source/_integrations/axis.markdown @Kane610
source/_integrations/azure_data_explorer.markdown @kaareseras
source/_integrations/azure_devops.markdown @timmo001
@ -112,7 +114,7 @@ source/_integrations/blebox.markdown @bbx-a @swistakm
source/_integrations/blink.markdown @fronzbot @mkmer
source/_integrations/bliss_automation.markdown @starkillerOG
source/_integrations/bloc_blinds.markdown @starkillerOG
source/_integrations/blue_current.markdown @Floris272 @gleeuwen
source/_integrations/blue_current.markdown @gleeuwen @NickKoepr @jtodorova23
source/_integrations/bluemaestro.markdown @bdraco
source/_integrations/blueprint.markdown @home-assistant/core
source/_integrations/bluesound.markdown @thrawnarn @LouisChrist
@ -172,12 +174,10 @@ 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
source/_integrations/cpuspeed.markdown @fabaff
source/_integrations/cribl.markdown @Bre77
source/_integrations/crownstone.markdown @Crownstone @RicArch97
source/_integrations/cups.markdown @fabaff
source/_integrations/dacia.markdown @epenet
source/_integrations/daikin.markdown @fredrike
source/_integrations/date.markdown @home-assistant/core
@ -192,7 +192,7 @@ source/_integrations/delmarva.markdown @tronikos
source/_integrations/deluge.markdown @tkdrob
source/_integrations/demo.markdown @home-assistant/core
source/_integrations/denonavr.markdown @ol-iver @starkillerOG
source/_integrations/derivative.markdown @afaucogney
source/_integrations/derivative.markdown @afaucogney @karwosts
source/_integrations/devialet.markdown @fwestenberg
source/_integrations/device_automation.markdown @home-assistant/core
source/_integrations/device_tracker.markdown @home-assistant/core
@ -224,6 +224,7 @@ source/_integrations/duotecno.markdown @cereal2nd
source/_integrations/duquesne_light.markdown @tronikos
source/_integrations/dwd_weather_warnings.markdown @runningman84 @stephan192 @andarotajo
source/_integrations/dynalite.markdown @ziv1234
source/_integrations/eafm.markdown @Jc2k
source/_integrations/eastron.markdown @DCSBL
source/_integrations/easyenergy.markdown @klaasnicolaas
source/_integrations/ecoforest.markdown @pjanuario
@ -269,10 +270,9 @@ source/_integrations/event.markdown @home-assistant/core
source/_integrations/evergy.markdown @tronikos
source/_integrations/evil_genius_labs.markdown @balloob
source/_integrations/evohome.markdown @zxdavb
source/_integrations/ezviz.markdown @RenierM26 @baqs
source/_integrations/ezviz.markdown @RenierM26
source/_integrations/faa_delays.markdown @ntilley905
source/_integrations/fan.markdown @home-assistant/core
source/_integrations/fan.template.markdown @home-assistant/core
source/_integrations/fastdotcom.markdown @rohankapoorcom @erwindouna
source/_integrations/feedreader.markdown @mib1185
source/_integrations/fibaro.markdown @rappenze
@ -414,6 +414,7 @@ source/_integrations/image_upload.markdown @home-assistant/core
source/_integrations/imap.markdown @jbouwh
source/_integrations/imeon_inverter.markdown @Imeon-Energy
source/_integrations/imgw_pib.markdown @bieniu
source/_integrations/immich.markdown @mib1185
source/_integrations/improv_ble.markdown @emontnemery
source/_integrations/incomfort.markdown @jbouwh
source/_integrations/indianamichiganpower.markdown @tronikos
@ -436,6 +437,7 @@ source/_integrations/iotawatt.markdown @gtdiehl @jyavenard
source/_integrations/iotty.markdown @shapournemati-iotty
source/_integrations/iperf3.markdown @rohankapoorcom
source/_integrations/ipma.markdown @dgomes
source/_integrations/ipp.markdown @ctalkington
source/_integrations/iqvia.markdown @bachya
source/_integrations/irish_rail_transport.markdown @ttroy50
source/_integrations/iron_os.markdown @tr4nt0r
@ -451,9 +453,9 @@ source/_integrations/ituran.markdown @shmuelzon
source/_integrations/izone.markdown @Swamp-Ig
source/_integrations/jellyfin.markdown @RunC0deRun @ctalkington
source/_integrations/jewish_calendar.markdown @tsvi
source/_integrations/juicenet.markdown @jesserockz
source/_integrations/justnimbus.markdown @kvanzuijlen
source/_integrations/jvc_projector.markdown @SteveEasley @msavazzi
source/_integrations/kaiser_nienhaus.markdown @starkillerOG
source/_integrations/kaiterra.markdown @Michsior14
source/_integrations/kaleidescape.markdown @SteveEasley
source/_integrations/keba.markdown @dannerph
@ -494,10 +496,10 @@ source/_integrations/lg_thinq.markdown @LG-ThinQ-Integration
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/linkedgo.markdown @balloob @bieniu @thecode @chemelli74 @bdraco
source/_integrations/linkplay.markdown @Velleman
source/_integrations/linux_battery.markdown @fabaff
source/_integrations/linx.markdown @starkillerOG
source/_integrations/litejet.markdown @joncar
@ -507,7 +509,6 @@ source/_integrations/local_calendar.markdown @allenporter
source/_integrations/local_ip.markdown @issacg
source/_integrations/local_todo.markdown @allenporter
source/_integrations/lock.markdown @home-assistant/core
source/_integrations/lock.template.markdown @home-assistant/core
source/_integrations/logbook.markdown @home-assistant/core
source/_integrations/logger.markdown @home-assistant/core
source/_integrations/london_underground.markdown @jpbede
@ -571,6 +572,7 @@ 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/motionmount.markdown @laiho-vogels
source/_integrations/mqtt.markdown @emontnemery @jbouwh @bdraco
source/_integrations/msteams.markdown @peroyvind
source/_integrations/mullvad.markdown @meichthys
@ -647,7 +649,7 @@ source/_integrations/openhome.markdown @bazwilliams
source/_integrations/opensky.markdown @joostlek
source/_integrations/opentherm_gw.markdown @mvn23
source/_integrations/openuv.markdown @bachya
source/_integrations/openweathermap.markdown @fabaff @freekode @nzapponi
source/_integrations/openweathermap.markdown @fabaff @freekode @nzapponi @wittypluck
source/_integrations/opnsense.markdown @mtreinish
source/_integrations/opower.markdown @tronikos
source/_integrations/oralb.markdown @bdraco @Lash-L
@ -662,6 +664,7 @@ 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/paperless_ngx.markdown @fvgarrel
source/_integrations/pcs_lighting.markdown @gwww
source/_integrations/peblar.markdown @frenck
source/_integrations/peco.markdown @IceBotYT
@ -680,6 +683,7 @@ source/_integrations/ping.markdown @jpbede
source/_integrations/piper.markdown @balloob @synesthesiam
source/_integrations/pitsos.markdown @DavidMStraub @Diegorro98 @MartinHjelmare
source/_integrations/plaato.markdown @JohNan
source/_integrations/playstation_network.markdown @jackjpowell @tr4nt0r
source/_integrations/plex.markdown @jjlawren
source/_integrations/plugwise.markdown @CoMPaTech @bouwew
source/_integrations/plum_lightpad.markdown @ColinHarrington @prystupa
@ -689,6 +693,7 @@ 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/probe_plus.markdown @pantherale0
source/_integrations/profiler.markdown @bdraco
source/_integrations/profilo.markdown @DavidMStraub @Diegorro98 @MartinHjelmare
source/_integrations/progettihwsw.markdown @ardaseremet
@ -739,7 +744,7 @@ source/_integrations/recovery_mode.markdown @home-assistant/core
source/_integrations/refoss.markdown @ashionky
source/_integrations/rehlko.markdown @bdraco @peterager
source/_integrations/remote.markdown @home-assistant/core
source/_integrations/remote_calendar.markdown @Thomas55555
source/_integrations/remote_calendar.markdown @Thomas55555 @allenporter
source/_integrations/renault.markdown @epenet
source/_integrations/renson.markdown @jimmyd-be
source/_integrations/reolink.markdown @starkillerOG
@ -768,7 +773,6 @@ 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
source/_integrations/s3.markdown @tomasbedrich
source/_integrations/sabnzbd.markdown @shaiu @jpbede
source/_integrations/saj.markdown @fredericvl
source/_integrations/samsam.markdown @klaasnicolaas
@ -804,7 +808,6 @@ source/_integrations/sfr_box.markdown @epenet
source/_integrations/sharkiq.markdown @JeffResc @funkybunch
source/_integrations/shell_command.markdown @home-assistant/core
source/_integrations/shelly.markdown @balloob @bieniu @thecode @chemelli74 @bdraco
source/_integrations/shelly_zwave.markdown @home-assistant/z-wave
source/_integrations/shodan.markdown @fabaff
source/_integrations/sia.markdown @eavanvalkenburg
source/_integrations/siemens.markdown @DavidMStraub @Diegorro98 @MartinHjelmare
@ -827,6 +830,7 @@ source/_integrations/slide_local.markdown @dontinelli
source/_integrations/slimproto.markdown @marcelveldt
source/_integrations/sma.markdown @kellerza @rklomp @erwindouna
source/_integrations/smappee.markdown @bsmappee
source/_integrations/smarla.markdown @explicatis @rlint-explicatis
source/_integrations/smart_blinds.markdown @starkillerOG
source/_integrations/smart_home.markdown @starkillerOG
source/_integrations/smart_meter_texas.markdown @grahamwetzler
@ -837,7 +841,6 @@ source/_integrations/smarttub.markdown @mdz
source/_integrations/smarty.markdown @z0mbieprocess
source/_integrations/smhi.markdown @gjohansson-ST
source/_integrations/smlight.markdown @tl-sl
source/_integrations/sms.markdown @ocalvo
source/_integrations/smud.markdown @tronikos
source/_integrations/snapcast.markdown @luar123
source/_integrations/snmp.markdown @nmaggioni
@ -871,17 +874,16 @@ source/_integrations/stream.markdown @hunterjm @uvjustin @allenporter
source/_integrations/stt.markdown @home-assistant/core
source/_integrations/subaru.markdown @G-Two
source/_integrations/suez_water.markdown @ooii @jb101010-2
source/_integrations/sun.markdown @Swamp-Ig
source/_integrations/sun.markdown @home-assistant/core
source/_integrations/supla.markdown @mwegrzynek
source/_integrations/surepetcare.markdown @benleb @danielhiversen
source/_integrations/swepco.markdown @tronikos
source/_integrations/swiss_hydrological_data.markdown @fabaff
source/_integrations/swiss_public_transport.markdown @fabaff @miaucl
source/_integrations/switch.markdown @home-assistant/core
source/_integrations/switch.template.markdown @home-assistant/core
source/_integrations/switch_as_x.markdown @home-assistant/core
source/_integrations/switchbee.markdown @jafar-atili
source/_integrations/switchbot.markdown @danielhiversen @RenierM26 @murtas @Eloston @dsypniewski
source/_integrations/switchbot.markdown @danielhiversen @RenierM26 @murtas @Eloston @dsypniewski @zerzhang
source/_integrations/switchbot_cloud.markdown @SeraphicRav @laurence-presland @Gigatrappeur
source/_integrations/switcher_kis.markdown @thecode @YogevBokobza
source/_integrations/switchmate.markdown @danielhiversen @qiz-li
@ -903,8 +905,9 @@ source/_integrations/tasmota.markdown @emontnemery
source/_integrations/tautulli.markdown @ludeeus @tkdrob
source/_integrations/technove.markdown @Moustachauve
source/_integrations/tedee.markdown @patrickhilker @zweckj
source/_integrations/telegram_bot.markdown @hanwg
source/_integrations/tellduslive.markdown @fredrike
source/_integrations/template.markdown @Petro31 @PhracturedBlue @home-assistant/core
source/_integrations/template.markdown @Petro31 @home-assistant/core
source/_integrations/tesla_fleet.markdown @Bre77
source/_integrations/tesla_wall_connector.markdown @einarhauks
source/_integrations/teslemetry.markdown @Bre77
@ -920,6 +923,7 @@ source/_integrations/thread.markdown @home-assistant/core
source/_integrations/tibber.markdown @danielhiversen
source/_integrations/tile.markdown @bachya
source/_integrations/tilt_ble.markdown @apt-itude
source/_integrations/tilt_pi.markdown @michaelheyman
source/_integrations/time.markdown @home-assistant/core
source/_integrations/time_date.markdown @fabaff
source/_integrations/tmb.markdown @alemuro
@ -967,9 +971,9 @@ source/_integrations/usgs_earthquakes_feed.markdown @exxamalte
source/_integrations/utility_meter.markdown @dgomes
source/_integrations/v2c.markdown @dgomes
source/_integrations/vacuum.markdown @home-assistant/core
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/vegehub.markdown @ghowevege
source/_integrations/velbus.markdown @Cereal2nd @brefra
source/_integrations/velux.markdown @Julius2342 @DeerMaximum @pawlizio
source/_integrations/venstar.markdown @garbled1 @jhollowe
@ -984,7 +988,7 @@ source/_integrations/vizio.markdown @raman325
source/_integrations/vlc_telnet.markdown @rodripf @MartinHjelmare
source/_integrations/vodafone_station.markdown @paoloantinori @chemelli74
source/_integrations/voice_assistant.markdown @balloob @synesthesiam
source/_integrations/voip.markdown @balloob @synesthesiam
source/_integrations/voip.markdown @balloob @synesthesiam @jaminh
source/_integrations/volumio.markdown @OnFreund
source/_integrations/volvooncall.markdown @molobrakos
source/_integrations/vulcan.markdown @Antoni-Czaplicki
@ -998,7 +1002,6 @@ source/_integrations/watson_tts.markdown @rutkai
source/_integrations/watttime.markdown @bachya
source/_integrations/waze_travel_time.markdown @eifinger
source/_integrations/weather.markdown @home-assistant/core
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
@ -1049,6 +1052,7 @@ source/_integrations/zeroconf.markdown @bdraco
source/_integrations/zerproc.markdown @emlove
source/_integrations/zeversolar.markdown @kvanzuijlen
source/_integrations/zha.markdown @dmulcahey @adminiuga @puddly @TheJulianJES
source/_integrations/zimi.markdown @markhannon
source/_integrations/zodiac.markdown @JulienTant
source/_integrations/zondergas.markdown @klaasnicolaas
source/_integrations/zone.markdown @home-assistant/core

View File

@ -3,16 +3,16 @@ source 'https://rubygems.org'
ruby '> 2.5.0'
group :development do
gem 'rake', '13.2.1'
gem 'rake', '13.3.0'
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.89.0'
gem 'rubocop', '1.75.7'
gem 'ruby-lsp', '0.23.23'
gem 'sass-embedded', '1.89.2'
gem 'rubocop', '1.77.0'
gem 'ruby-lsp', '0.24.2'
gem 'rackup', '2.2.1'
end

View File

@ -4,8 +4,8 @@ GEM
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
ast (2.4.3)
base64 (0.2.0)
bigdecimal (3.1.9)
base64 (0.3.0)
bigdecimal (3.2.2)
chunky_png (1.4.0)
colorator (1.1.0)
commonmarker (0.23.11)
@ -22,7 +22,7 @@ GEM
compass-import-once (1.0.5)
sass (>= 3.2, < 3.5)
concurrent-ruby (1.3.5)
csv (3.3.4)
csv (3.3.5)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
@ -30,10 +30,10 @@ GEM
ffi (1.17.2-arm64-darwin)
ffi (1.17.2-x86_64-linux-gnu)
forwardable-extended (2.6.0)
google-protobuf (4.31.0-arm64-darwin)
google-protobuf (4.31.1-arm64-darwin)
bigdecimal
rake (>= 13)
google-protobuf (4.31.0-x86_64-linux-gnu)
google-protobuf (4.31.1-x86_64-linux-gnu)
bigdecimal
rake (>= 13)
http_parser.rb (0.8.0)
@ -99,7 +99,7 @@ GEM
prism (1.4.0)
public_suffix (6.0.2)
racc (1.8.1)
rack (3.1.15)
rack (3.1.16)
rack-protection (4.1.1)
base64 (>= 0.1.0)
logger (>= 1.6.0)
@ -110,7 +110,7 @@ GEM
rackup (2.2.1)
rack (>= 3)
rainbow (3.1.1)
rake (13.2.1)
rake (13.3.0)
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
@ -119,7 +119,7 @@ GEM
regexp_parser (2.10.0)
rexml (3.4.1)
rouge (4.5.2)
rubocop (1.75.7)
rubocop (1.77.0)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
@ -127,13 +127,13 @@ GEM
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.44.0, < 2.0)
rubocop-ast (>= 1.45.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.44.1)
rubocop-ast (1.45.1)
parser (>= 3.3.7.2)
prism (~> 1.4)
ruby-lsp (0.23.23)
ruby-lsp (0.24.2)
language_server-protocol (~> 3.17.0)
prism (>= 1.2, < 2.0)
rbs (>= 3, < 5)
@ -142,9 +142,9 @@ GEM
ruby2_keywords (0.0.5)
safe_yaml (1.0.5)
sass (3.4.25)
sass-embedded (1.89.0-arm64-darwin)
sass-embedded (1.89.2-arm64-darwin)
google-protobuf (~> 4.31)
sass-embedded (1.89.0-x86_64-linux-gnu)
sass-embedded (1.89.2-x86_64-linux-gnu)
google-protobuf (~> 4.31)
sass-globbing (1.1.5)
sass (>= 3.1)
@ -159,7 +159,7 @@ GEM
rack-protection (= 4.1.1)
rack-session (>= 2.0.0, < 3)
tilt (~> 2.0)
sorbet-runtime (0.5.12130)
sorbet-runtime (0.5.12216)
stringex (2.8.6)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
@ -184,10 +184,10 @@ DEPENDENCIES
jekyll-toc (= 0.19.0)
nokogiri (= 1.18.8)
rackup (= 2.2.1)
rake (= 13.2.1)
rubocop (= 1.75.7)
ruby-lsp (= 0.23.23)
sass-embedded (= 1.89.0)
rake (= 13.3.0)
rubocop (= 1.77.0)
ruby-lsp (= 0.24.2)
sass-embedded (= 1.89.2)
sass-globbing (= 1.1.5)
sassc (= 2.1.0)
sinatra (= 4.1.1)

View File

@ -107,9 +107,9 @@ social:
# Home Assistant release details
current_major_version: 2025
current_minor_version: 5
current_patch_version: 3
date_released: 2025-05-23
current_minor_version: 7
current_patch_version: 0
date_released: 2025-07-02
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.

2564
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -15,10 +15,11 @@
"remark-lint-prohibited-strings": "^4.0.0",
"remark-lint-unordered-list-marker-style": "^4.0.1",
"remark-stringify": "^11.0.0",
"textlint": "^14.7.2",
"textlint": "^15.1.0",
"textlint-filter-rule-allowlist": "^4.0.0",
"textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^5.0.13"
"textlint-rule-terminology": "^5.2.13"
},
"resolutions": {
"minimist": ">=1.2.5"

View File

@ -4,8 +4,6 @@ title: "Area card"
sidebar_label: Area
description: "The area card gives control of your entities in a specified area."
related:
- docs: /integrations/frontend/
title: Themes
- docs: /dashboards/cards/
title: Dashboard cards
- docs: /dashboards/dashboards/#areas-dashboard
@ -17,8 +15,8 @@ related:
The area card lets you control and monitor an individual {% term area %}.
<p class='img'>
<img src='/images/dashboards/area-card.png' alt='Screenshot of the area card'>
Screenshot of the area card.
<img src='/images/dashboards/area-cards.png' alt='Screenshot of the area cards'>
Screenshot of the area cards.
</p>
{% include dashboard/edit_dashboard.md %}
@ -42,14 +40,18 @@ area:
required: true
description: ID of the `area`.
type: string
show_camera:
color:
required: false
description: Changes the area picture to a live feed of the camera set for the area.
type: boolean
default: false
description: Set the color for the icon and the hover/focus state. It accepts [color token](/dashboards/area/#available-colors) or hex color code.
type: string
display_type:
required: false
description: Defines the card's display style. Options include `compact` (a minimal layout), `icon` (shows an area icon), `picture` (displays an image of the area), or `camera` (shows the live camera feed).
type: string
default: "picture"
camera_view:
required: false
description: 'If showing a camera, "live" will show the live view if `stream` is enabled.'
description: 'If showing a camera, `live` will show the live view if `stream` is enabled.'
default: auto
type: string
aspect_ratio:
@ -61,20 +63,29 @@ navigation_path:
required: false
description: link to view. For more information about views, see the [view documentation](/dashboards/views/)
type: string
theme:
required: false
description: Override the used theme for this card with any loaded theme. For more information about themes, see the [frontend documentation](/integrations/frontend/).
type: string
alert_classes:
required: false
type: list
default: "moisture, motion"
description: A list of binary sensor device classes which will populate alert icons in the card when the state is on.
description: A list of binary sensor device classes which will populate alert icons in the card when the state is on. If the display type is set to `compact`, only the first alert icon will be displayed.
sensor_classes:
required: false
type: list
default: "temperature, humidity"
description: A list of sensor device classes which will display their averaged sensor readings for the area.
features:
required: false
description: Additional widgets to control entities in the area. See [available features](/dashboards/features).
type: list
features_position:
required: false
description: Position of the features on the area card. Can be `bottom` or `inline`. Only the first feature will be displayed when the option is set to `inline`.
type: string
default: bottom
exclude_entities:
required: false
description: A list of entities that will be excluded from the card. It will affect sensor_classes, alert_classes, and features.
type: list
{% endconfiguration %}
### Example
@ -91,7 +102,18 @@ Complex example
```yaml
type: area
area: bedroom
display_type: picture
navigation_path: my_bedroom
show_camera: true
theme: green
sensor_classes:
- temperature
- humidity
alert_classes:
- moisture
- motion
features:
- type: area-controls
```
## Available colors
You want to colorize the area 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`.

View File

@ -2,7 +2,7 @@
type: card
title: "Light card"
sidebar_label: Light
description: "The light card allows you to change the brightness of the light."
description: "The light card allows you to change the brightness of a light."
related:
- docs: /dashboards/actions/
title: Card actions
@ -12,7 +12,7 @@ related:
title: Dashboard cards
---
The light card allows you to change the brightness of the light.
The light card allows you to change the brightness of a light.
<p class='img'>
<img src='/images/dashboards/light_card.png' alt='Screenshot of the Light card'>

View File

@ -2,7 +2,7 @@
type: card
title: "Sensor card"
sidebar_label: Sensor
description: "The sensor card gives you a quick overview of your sensors state with an optional graph to visualize change over time."
description: "The sensor card gives you a quick overview of a sensor's state with an optional graph to visualize change over time."
related:
- docs: /integrations/frontend/
title: Themes
@ -10,7 +10,7 @@ related:
title: Dashboard cards
---
The sensor card gives you a quick overview of your sensors state with an optional graph to visualize change over time.
The sensor card gives you a quick overview of a sensor's state with an optional graph to visualize change over time.
<p class='img'>
<img src='/images/dashboards/sensor.png' alt='Screenshot of the sensor card'>

View File

@ -2,7 +2,7 @@
type: card
title: "Tile card"
sidebar_label: Tile
description: "The tile card gives you a quick overview of your entity. The card allows you to toggle the entity, show the more-info dialog, or custom actions."
description: "The tile card gives you a quick overview of an entity. The card allows you to toggle the entity, show the more-info dialog, or custom actions."
related:
- docs: /dashboards/actions/
title: Card actions
@ -12,7 +12,7 @@ related:
title: Dashboard cards
---
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 %}.
The tile card gives you a quick overview of an {% 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 %}.
<p class='img'>
<img src='/images/dashboards/tile_card_tap_action.webp' alt='Screenshot of tile cards'>

View File

@ -61,6 +61,11 @@ name:
description: Overwrites the friendly name.
type: string
default: Entity name
show_current:
required: false
description: Show the current weather conditions above the forecast.
type: boolean
default: true
show_forecast:
required: false
description: Show next hours/days forecast.
@ -70,7 +75,6 @@ forecast_type:
required: true
description: Type of forecast to display, one of `daily`, `hourly` or `twice_daily`.
type: string
default: Automatically selects in order of `daily`, `hourly` and `twice_daily`.
secondary_info_attribute:
required: false
description: Which attribute to display under the temperature.

View File

@ -161,7 +161,7 @@ Assuming you have only the owner created though onboarding process, no other use
The command line auth provider executes a configurable shell command to perform user authentication. Two environment variables, `username` and `password`, are passed to the command. Access is granted when the command exits successfully (with exit code 0).
This provider can be used to integrate Home Assistant with arbitrary external authentication services, from plaintext databases over LDAP to RADIUS. A compatible script for LDAP authentication is [this one](https://github.com/bob1de/ldap-auth-sh), for instance. Please note, this will only work when using the Home Assistant Core installation type.
This provider can be used to integrate Home Assistant with arbitrary external authentication services, from plaintext databases over LDAP to RADIUS.
Here is a configuration example:

View File

@ -1,30 +1,37 @@
---
title: "Automation trigger variables"
description: "List all available variables made available by triggers."
title: "Automation Templates"
description: "List all trigger variables available to templates."
---
Automations support [templating](/docs/configuration/templating/) in the same way as scripts do. In addition to the [Home Assistant template extensions](/docs/configuration/templating/#home-assistant-template-extensions) available to scripts, the `trigger` and `this` template variables are available.
Automations support the advanced features of [templating](/docs/configuration/templating/) in the same way as scripts do. In addition to the [Home Assistant template extensions](/docs/configuration/templating/#home-assistant-template-extensions) available to scripts, the `trigger` and `this` template variables are available for automations.
The template variable `this` is also available when evaluating any `trigger_variables` declared in the configuration.
Example of variables used in templates:
## Available `this` data
```jinja
{{ this.name }} is the name of the automation executing from this trigger
{{ trigger.platform }} is the type of trigger object, like `calendar`
```
The variable `this` is the [state object](/docs/configuration/state_object) of the automation at the moment of triggering the actions. State objects also contain context data which can be used to identify the user that caused a {% term script %} or {% term automation %} to execute. Note that `this` will not change while executing the {% term actions %}.
## Available state data
The template variable `this` is an object that contains the [state](/docs/configuration/state_object) of the automation at the moment of triggering the actions and can be used to evaluate [`trigger_variables`](/docs/automation/trigger/#trigger-variables) declared in the configuration of the active {% term trigger %}.
State objects also contain context data which can be used to identify the user that caused a {% term script %} or {% term automation %} to execute. Note that `this` will not change while executing the {% term actions %}.
## Available trigger data
The variable `trigger` is an object that contains details about which {% term trigger %} triggered the automation.
The template variable `trigger` is an object that contains details about which {% term platform %} triggered the automation. The `platform` property contains the name of the {% term platform %} whose event triggered the automation.
Templates can use the data to modify the actions performed by the automation or displayed in a message. For example, you could create an automation that multiple sensors can trigger and then use the sensor's location to specify a light to activate; or you could send a notification containing the friendly name of the sensor that triggered it.
Each [trigger platform](/docs/automation/trigger/#event-trigger) can include additional data specific to that platform.
Each [trigger](/docs/automation/trigger/#event-trigger) platform includes additional data specific to that {% term platform %}.
### All
Triggers from all platforms will include the following data.
Triggers from all platforms will include the following properties.
| Template variable | Data |
| ---- | ---- |
| `trigger.platform` | Trigger object type.
| `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`.)
@ -34,17 +41,17 @@ Triggers from all platforms will include the following data.
These are the properties available for a [Calendar trigger](/docs/automation/trigger/#calendar-trigger).
| Template variable | Data |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| `trigger.platform` | Hardcoded: `calendar` |
| `trigger.event` | The trigger event type, either `start` or `end` |
| `trigger.calendar_event` | The calendar event object matched. |
| `trigger.calendar_event.summary` | The title or summary of the calendar event. |
| `trigger.calendar_event.start` | String representation of the start date or date time of the calendar event e.g. `2022-04-10`, or `2022-04-10 11:30:00-07:00` |
| `trigger.calendar_event.end` | String representation of the end time of date time the calendar event in UTC e.g. `2022-04-11`, or `2022-04-10 11:45:00-07:00` |
| `trigger.calendar_event.all_day` | Indicates the event spans the entire day. |
| `trigger.calendar_event.description` | A detailed description of the calendar event, if available. |
| `trigger.calendar_event.location` | Location information for the calendar event, if available. |
| `trigger.offset` | Timedelta object with offset to the event, if any |
| ---- | ---- |
| `trigger.platform` | Hardcoded: `calendar`
| `trigger.event` | The trigger event type, either `start` or `end`.
| `trigger.calendar_event` | The calendar event object matched.
| `trigger.calendar_event.summary` | The title or summary of the calendar event.
| `trigger.calendar_event.start` | String representation of the start date or date time of the calendar event e.g. `2022-04-10`, or `2022-04-10 11:30:00-07:00`
| `trigger.calendar_event.end` | String representation of the end time of date time the calendar event in UTC e.g. `2022-04-11`, or `2022-04-10 11:45:00-07:00`
| `trigger.calendar_event.all_day` | Indicates the event spans the entire day.
| `trigger.calendar_event.description` | A detailed description of the calendar event, if available.
| `trigger.calendar_event.location` | Location information for the calendar event, if available.
| `trigger.offset` | Timedelta object with offset to the event, if any.
### Device
@ -54,26 +61,50 @@ Inherites template variables from [event](#event) or [state](#state) template ba
| Template variable | Data |
| ---- | ---- |
| `trigger.platform` | Hardcoded: `device`.
| `trigger.platform` | Hardcoded: `device`
### Event
These are the properties available for a [Event trigger](/docs/automation/trigger/#event-trigger).
An [Event](/docs/configuration/events/) trigger is fired each time an {% term entity %} state changes or an event matching the configured event_type occurs.
These are the properties available for an [Event trigger](/docs/automation/trigger/#event-trigger).
| Template variable | Data |
| ---- | ---- |
| `trigger.platform` | Hardcoded: `event`.
| `trigger.platform` | Hardcoded: `event`
| `trigger.event` | Event object that matched.
| `trigger.event.event_type` | Event type.
| `trigger.event.data` | Optional event data.
### Geolocation
These are the properties available for a [Geolocation trigger](/docs/automation/trigger/#geolocation-trigger).
| Template variable | Data |
| ---- | ---- |
| `trigger.platform` | Hardcoded: `geo_location`
| `trigger.event` | The trigger event type, either `enter` or `leave`.
| `trigger.source` | The Geolocation platform creating the trigger event.
| `trigger.zone` | State object of the zone.
### Home Assistant
The Home Assistant trigger is recommended for automations instead of [homeassistant_start or homeassistant_stop events](/docs/configuration/events/#homeassistant_start-homeassistant_started).
These are the properties available for a [Home Assistant trigger](/docs/automation/trigger/#home-assistant-trigger).
| Template variable | Data |
| ---- | ---- |
| `trigger.platform` | Hardcoded: `homeassistant`
| `trigger.event` | The trigger event type, either `start` or `shutdown`.
### MQTT
These are the properties available for a [MQTT trigger](/docs/automation/trigger/#mqtt-trigger).
| Template variable | Data |
| ---- | ---- |
| `trigger.platform` | Hardcoded: `mqtt`.
| `trigger.platform` | Hardcoded: `mqtt`
| `trigger.topic` | Topic that received payload.
| `trigger.payload` | Payload.
| `trigger.payload_json` | Dictionary of the JSON parsed payload.
@ -100,9 +131,9 @@ These are the properties available for a [Sentence trigger](/docs/automation/tri
| Template variable | Data |
| ---- | ---- |
| `trigger.platform` | Hardcoded: `conversation`
| `trigger.sentence` | Text of the sentence that was matched
| `trigger.slots` | Object with matched slot values
| `trigger.details` | Object with matched slot details by name, such as [wildcards](/docs/automation/trigger/#sentence-wildcards). Each detail contains: <ul><li>`name` - name of the slot</li><li>`text` - matched text</li><li>`value` - output value (see [lists](https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax/#lists))</li></ul>
| `trigger.sentence` | Text of the sentence that was matched.
| `trigger.slots` | Object with matched slot values.
| `trigger.details` | Object with matched slot details by name, such as [wildcards](/docs/automation/trigger/#sentence-wildcards). Each detail contains: <ul><li>`name` - name of the slot</li><li>`text` - matched text</li><li>`value` - output value (see [lists](/docs/voice/intent-recognition/template-sentence-syntax/#lists))</li></ul>.
| `trigger.device_id` | The device ID that captured the command, if any.
### State
@ -127,6 +158,16 @@ These are the properties available for a [Sun trigger](/docs/automation/trigger/
| `trigger.event` | The event that just happened: `sunset` or `sunrise`.
| `trigger.offset` | Timedelta object with offset to the event, if any.
### Tag
These are the properties available for a [Tag trigger](/docs/automation/trigger/#tag-trigger).
| Template variable | Data |
| ---- | ---- |
| `trigger.platform` | Hardcoded: `tag`
| `trigger.tag_id` | The tag ID captured.
| `trigger.device_id` | Optional device ID that captured the tag.
### Template
These are the properties available for a [Template trigger](/docs/automation/trigger/#template-trigger).
@ -166,9 +207,9 @@ These properties are available for a [persistent notification trigger](/docs/aut
| `trigger.platform` | Hardcoded: `persistent_notification`
| `trigger.update_type` | Type of persistent notification update `added`, `removed`, `current`, or `updated`.
| `trigger.notification` | Notification object that triggered the persistent notification trigger.
| `trigger.notification.notification_id` | The notification ID
| `trigger.notification.title` | Title of the notification
| `trigger.notification.message` | Message of the notification
| `trigger.notification.notification_id` | The notification ID.
| `trigger.notification.title` | Title of the notification.
| `trigger.notification.message` | Message of the notification.
| `trigger.notification.created_at` | DateTime object indicating when the notification was created.
### Webhook
@ -193,7 +234,7 @@ These are the properties available for a [Zone trigger](/docs/automation/trigger
| `trigger.entity_id` | Entity ID that we are observing.
| `trigger.from_state` | Previous [state object] of the entity.
| `trigger.to_state` | New [state object] of the entity.
| `trigger.zone` | State object of zone
| `trigger.zone` | State object of the zone.
| `trigger.event` | Event that trigger observed: `enter` or `leave`.
## Examples

View File

@ -825,6 +825,101 @@ blueprint:
{% endraw %}
### Weekday filtering
Time triggers can be filtered to fire only on specific days of the week using the `weekday` option. This allows you to create automations that only run on certain days, such as weekdays or weekends.
The `weekday` option accepts:
- A single weekday as a string: `"mon"`, `"tue"`, `"wed"`, `"thu"`, `"fri"`, `"sat"`, `"sun"`
- A list of weekdays using the expanded format
#### Single weekday
This example will turn on the lights only on Mondays at 8:00 AM:
```yaml
automation:
- triggers:
- trigger: time
at: "08:00:00"
weekday: "mon"
actions:
- action: light.turn_on
target:
entity_id: light.bedroom
```
#### Multiple weekdays
This example will run a morning routine only on weekdays (Monday through Friday) at 6:30 AM:
```yaml
automation:
- triggers:
- trigger: time
at: "06:30:00"
weekday:
- "mon"
- "tue"
- "wed"
- "thu"
- "fri"
actions:
- action: script.morning_routine
```
#### Weekend example
This example demonstrates a different wake-up time for weekends:
```yaml
automation:
- alias: "Weekday alarm"
triggers:
- trigger: time
at: "06:30:00"
weekday:
- "mon"
- "tue"
- "wed"
- "thu"
- "fri"
actions:
- action: script.weekday_morning
- alias: "Weekend alarm"
triggers:
- trigger: time
at: "08:00:00"
weekday:
- "sat"
- "sun"
actions:
- action: script.weekend_morning
```
#### Combined with input datetime
The `weekday` option works with all time formats, including input datetime entities:
```yaml
automation:
- triggers:
- trigger: time
at: input_datetime.work_start_time
weekday:
- "mon"
- "tue"
- "wed"
- "thu"
- "fri"
actions:
- action: notify.mobile_app
data:
title: "Work Day!"
message: "Time to start working"
```
## 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).
@ -985,7 +1080,7 @@ additional event data available for use by an automation.
## Sentence trigger
A sentence trigger fires when [Assist](/voice_control/) matches a sentence from a voice assistant using the default [conversation agent](/integrations/conversation/). Sentence triggers only work with Home Assistant Assist. External conversation agents such as OpenAI or Google Generative AI cannot be used to trigger automations.
A sentence trigger fires when [Assist](/voice_control/) matches a sentence from a voice assistant using the default [conversation agent](/integrations/conversation/). Sentence triggers work with Home Assistant Assist. They will not work with external conversation agents such as OpenAI or Google Generative AI unless "Prefer handling commands locally" is enabled in the conversation agent settings.
Sentences are allowed to use some basic [template syntax](https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax/#sentence-templates-syntax) like optional and alternative words. For example, `[it's ]party time` will match both "party time" and "it's party time".

View File

@ -74,7 +74,7 @@ CREATE TABLE statistics_meta (
unit_of_measurement VARCHAR(255),
has_mean BOOLEAN,
has_sum BOOLEAN,
name VARCHAR(255),
name VARCHAR(255), mean_type INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY (id)
)
@ -87,14 +87,6 @@ CREATE TABLE recorder_runs (
PRIMARY KEY (run_id)
)
CREATE TABLE migration_changes (
migration_id VARCHAR(255) NOT NULL,
version SMALLINT NOT NULL,
PRIMARY KEY (migration_id)
)
CREATE TABLE schema_changes (
change_id INTEGER NOT NULL,
schema_version INTEGER,
@ -137,7 +129,6 @@ CREATE TABLE states (
event_id SMALLINT,
last_changed CHAR(0),
last_changed_ts FLOAT,
last_reported_ts FLOAT,
last_updated CHAR(0),
last_updated_ts FLOAT,
old_state_id INTEGER,
@ -149,7 +140,7 @@ CREATE TABLE states (
context_id_bin BLOB,
context_user_id_bin BLOB,
context_parent_id_bin BLOB,
metadata_id INTEGER,
metadata_id INTEGER, last_reported_ts FLOAT,
PRIMARY KEY (state_id),
FOREIGN KEY(old_state_id) REFERENCES states (state_id),
FOREIGN KEY(attributes_id) REFERENCES state_attributes (attributes_id),
@ -169,7 +160,7 @@ CREATE TABLE statistics (
last_reset CHAR(0),
last_reset_ts FLOAT,
state FLOAT,
sum FLOAT,
sum FLOAT, mean_weight FLOAT,
PRIMARY KEY (id),
FOREIGN KEY(metadata_id) REFERENCES statistics_meta (id) ON DELETE CASCADE
)
@ -187,7 +178,7 @@ CREATE TABLE statistics_short_term (
last_reset CHAR(0),
last_reset_ts FLOAT,
state FLOAT,
sum FLOAT,
sum FLOAT, mean_weight FLOAT,
PRIMARY KEY (id),
FOREIGN KEY(metadata_id) REFERENCES statistics_meta (id) ON DELETE CASCADE
)
@ -212,27 +203,33 @@ CREATE INDEX ix_events_data_id ON events (data_id)
CREATE INDEX ix_events_event_type_id_time_fired_ts ON events (event_type_id, time_fired_ts)
CREATE INDEX ix_events_context_id_bin ON events (context_id_bin)
CREATE INDEX ix_events_time_fired_ts ON events (time_fired_ts)
CREATE INDEX ix_events_context_id_bin ON events (context_id_bin)
CREATE INDEX ix_states_context_id_bin ON states (context_id_bin)
CREATE INDEX ix_states_attributes_id ON states (attributes_id)
CREATE INDEX ix_states_last_updated_ts ON states (last_updated_ts)
CREATE INDEX ix_states_metadata_id_last_updated_ts ON states (metadata_id, last_updated_ts)
CREATE INDEX ix_states_old_state_id ON states (old_state_id)
CREATE INDEX ix_states_context_id_bin ON states (context_id_bin)
CREATE INDEX ix_states_last_updated_ts ON states (last_updated_ts)
CREATE INDEX ix_statistics_start_ts ON statistics (start_ts)
CREATE UNIQUE INDEX ix_statistics_statistic_id_start_ts ON statistics (metadata_id, start_ts)
CREATE INDEX ix_statistics_start_ts ON statistics (start_ts)
CREATE UNIQUE INDEX ix_statistics_short_term_statistic_id_start_ts ON statistics_short_term (metadata_id, start_ts)
CREATE INDEX ix_statistics_short_term_start_ts ON statistics_short_term (start_ts)
CREATE UNIQUE INDEX ix_statistics_short_term_statistic_id_start_ts ON statistics_short_term (metadata_id, start_ts)
CREATE TABLE migration_changes (
migration_id VARCHAR(255) NOT NULL,
version SMALLINT NOT NULL,
PRIMARY KEY (migration_id)
)
```
To only show the details about the `states` table (since we are using that one in the next examples):

View File

@ -16,16 +16,18 @@ related:
## The blueprint schema
Blueprint schemas currently supports three types of schema depending on its domain: [`automation`](/docs/automation/yaml/); `script`; and [`template`](/integrations/template/#using-blueprints).
The configuration schema of a blueprint consists of 2 parts:
1. The blueprint's high-level metadata: name, description, the input required from the user.
2. The schema of the thing the blueprint describes.
1. The blueprint's high-level metadata: name, domain and, optionally, any input required from the user.
2. The schema for the blueprint domain it describes.
The first part is referred to as the *blueprint schema*. It contains the
blueprint's metadata.
The only requirement for a blueprint is a name. In its most basic form,
a blueprint would look like:
Minimum required metadata for a blueprint is its name and domain. In its most basic form,
a blueprint looks like:
```yaml
blueprint:
@ -35,10 +37,9 @@ blueprint:
Although this is a valid blueprint, it is not very useful.
The second part depends on the use case of the blueprint. For example, if you create a blueprint for an automation, the full
The second part depends on its domain, the type of blueprint. For example, when creating a blueprint for an automation, the full
schema for an [automation](/docs/automation/yaml/) applies.
You can add a description of the blueprint's use case and user inputs.
This is the full blueprint schema:
@ -50,13 +51,13 @@ name:
description:
description: >
The description of the blueprint. While optional, this field is highly
recommended. Describe what the blueprint does and describe the inputs the blueprint provide. The description can
recommended. Describe what the blueprint does and describe the inputs the blueprint requires. The description can
include [Markdown](https://commonmark.org/help/).
type: string
required: false
domain:
description: >
The domain in which this blueprint is used. Currently, only
The domain in which this blueprint is used. Currently, only three types,
[`automation`](/docs/automation/yaml/), `script` and [`template`](/integrations/template/#using-blueprints) are supported.
type: string
required: true
@ -66,7 +67,7 @@ author:
required: false
homeassistant:
description: >
Home Assistant requirements to be able to use the blueprint successfully.
Home Assistant version required for the blueprint to work successfully.
type: map
required: false
keys:
@ -90,10 +91,9 @@ input:
### Blueprint inputs
As described above, a blueprint can accept one (or multiple)
inputs from the blueprint user.
A blueprint can accept one or multiple inputs from the user, but does not require any input.
These inputs can be of any type (string, boolean, list, dictionary). They can have
These inputs can be of any type (string, boolean, list, map). They can have
a default value and also provide a [selector](/docs/blueprint/selectors/) that
ensures a matching input field in the user interface.
@ -126,9 +126,9 @@ A blueprint input has the following configuration:
{% endconfiguration %}
Each input field can be referred to, outside of the blueprint metadata, using
the `!input` custom YAML tag.
the `!input` custom YAML tag before its name.
The following example shows a minimal blueprint with a single input:
The following example shows a minimal *blueprint schema* with a single input:
```yaml
blueprint:
@ -161,7 +161,7 @@ A section is differentiated from an input by the presence of an additional `inpu
Input sections are a new feature in version 2024.6.0. Set the `min_version` for the blueprint to at least this version if using input sections. Otherwise, the blueprint will generate errors on older versions. See [this section](/docs/blueprint/schema/#min_version) for more details.
{% endcaution %}
The full configuration for a section is below:
The full configuration for an input section is below:
{% configuration %}
@ -194,7 +194,7 @@ input:
The following example shows a blueprint with some inputs in a section:
The following example shows a *blueprint schema* with some inputs in a section:
```yaml
blueprint:
@ -232,7 +232,8 @@ variables:
The [built-in blueprints][blueprint-built-in]
are great examples to get a bit of a feeling of how blueprints work.
Here is the built-in motion light automation blueprint:
Here is the built-in motion light automation blueprint.
Note the *blueprint schema* under the blueprint key is followed by its domain schema. In this example, an automation schema.
```yaml
blueprint:

View File

@ -45,6 +45,7 @@ The following selectors are currently available:
- [RGB color selector](#rgb-color-selector)
- [Select selector](#select-selector)
- [State selector](#state-selector)
- [Statistic selector](#statistic-selector)
- [Target selector](#target-selector)
- [Template selector](#template-selector)
- [Text selector](#text-selector)
@ -720,6 +721,12 @@ multiple:
type: boolean
default: false
required: false
reorder:
description: >
Allows reordering of entities (only applies if `multiple` is set to `true`).
type: boolean
default: false
required: false
{% endconfiguration %}
The output of this selector is the entity ID, or (in case `multiple` is set to
@ -1024,15 +1031,34 @@ The media selector is a powerful selector that allows a user to easily select
media to play on a media device. Media can be a lot of things, for example,
cameras, local media, text-to-speech, Home Assistant Dashboards, and many more.
The user selects the device to play media on, and automatically limits the
selectable media suitable for the selected device.
You are prompted to select the device used to play media. Once the device is selected, the media selector only shows media that is suitable for this device.
![Screenshot of the Media selector](/images/blueprints/selector-media.png)
To ask the user to select a media device and suitable media, you can use the
media selector without any options:
```yaml
media:
```
You can also use the media selector with an optional `accept` filter to limit the
media types that can be selected. The user will not be asked to pick a device.
```yaml
media:
accept:
- image/*
```
{% configuration media %}
accept:
description: >
List of media types the user is allowed to select.
type: list
required: false
{% endconfiguration %}
The output of the media selector, is an mapping with information about
the selected media device and the selected media to play. There is also
metadata, which is used by the frontend and should not be used in the
@ -1058,6 +1084,25 @@ metadata:
media-source://tts/cloud?message=TTS+Message&language=en-US&gender=female
```
Example output if accept filter is used. Note that the `entity_id` is not present:
```yaml
media_content_id: media-source://tts/cloud?message=TTS+Message&language=en-US&gender=female
media_content_type: provider
metadata:
title: TTS Message
thumbnail: https://brands.home-assistant.io/_/cloud/logo.png
media_class: app
children_media_class: null
navigateIds:
- {}
- media_content_type: app
media_content_id: media-source://tts
- media_content_type: provider
media_content_id: >-
media-source://tts/cloud?message=TTS+Message&language=en-US&gender=female
```
## Number selector
The number selector shows either a number input or a slider input, that allows
@ -1082,11 +1127,11 @@ number:
min:
description: The minimum user-settable number value.
type: [integer, float]
required: true
required: false
max:
description: The maximum user-settable number value.
type: [integer, float]
required: true
required: false
step:
description: The step size of the number value. Set to `"any"` to allow any number.
type: [integer, float, "any"]
@ -1100,7 +1145,16 @@ mode:
description: This can be either `box` or `slider` mode.
type: string
required: false
default: slider
default: slider if min and max are set, otherwise box
translation_key:
description: >
Allows translations provided by an integration where `translation_key`
is the translation key that is providing the unit_of_measurement string
translation. See the documentation on
[Backend Localization](https://developers.home-assistant.io/docs/internationalization/core/#selectors)
for more information.
type: string
required: false
{% endconfiguration %}
The output of this selector is a number, for example: `42`
@ -1135,16 +1189,79 @@ number:
The object selector can be used to input arbitrary data in YAML form. This is useful for e.g. lists and dictionaries containing data for actions. The value of the input will contain the provided data.
![Screenshot of an object selector](/images/blueprints/selector-object.png)
When used without options, the selector will accept a free form object.
This selector does not have any other options; therefore, it only has its key.
![Screenshot of an object selector](/images/blueprints/selector-object.png)
```yaml
object:
```
When used with a `schema`, the selector will force the object to be in this format by displaying a form.
![Screenshot of an object selector](/images/blueprints/selector-object-schema.png)
```yaml
object:
label_key: name
description_key: percentage
multiple: true
fields:
name:
label: Name
selector:
text:
percentage:
label: Percentage
selector:
number:
unit_of_measurement: "%"
```
The output of this selector is a YAML object.
{% configuration qr_code %}
fields:
description: >
List of fields of the object.
type: map
required: false
keys:
label:
description: The label of the field
required: false
type: string
selector:
description: The selector to use for this field. It can be any available selector.
required: true
type: string
label_field:
description: >
The field to use as a label. By default, it will be the first field defined. This option is only used if `fields` option set.
type: string
required: false
description_field:
description: >
The field to use as a description. This option is only used if `fields` option set.
type: string
required: false
translation_key:
description: >
Allows translations provided by an integration where `translation_key`
is the translation key that is providing the selector option strings
translation. See the documentation on
[Backend Localization](https://developers.home-assistant.io/docs/internationalization/core/#selectors)
for more information.
type: string
required: false
multiple:
description: >
Allows selecting multiple options. If set to `true`, the resulting value of this selector will be a list instead of a single string value. This option is only used if `fields` option set.
type: boolean
required: false
default: false
{% endconfiguration %}
## QR code selector
The QR code selector shows a QR code. It has no return value.
@ -1305,14 +1422,17 @@ one or more can be selected.
entity_id:
description: The entity ID of which an state can be selected from.
type: string
required: true
required: false
hide_states:
description: The states to exclude from the list of options
type: list
required: false
multiple:
description: >
Allows selecting multiple states. If set to `true`, the resulting value of
this selector will be a list instead of a single string value.
type: boolean
default: false
required: false
{% endconfiguration %}
The output of this selector is the select state (not the translated or
@ -1320,6 +1440,26 @@ prettified name shown in the frontend), or a list of states if `multiple` is tru
For example: `heat_cool`.
## Statistic selector
The statistic selector selects the statistic ID of an entity that records
long-term statistics. It may resemble an entity ID (like `sensor.temperature`),
or an external statistic ID (like `external:temperature`).
![Screenshot of a statistic selector](/images/blueprints/selector-statistic.png)
{% configuration statistic %}
multiple:
description: >
If set to true, the selector returns a list of statistic IDs.
type: boolean
default: false
required: false
{% endconfiguration %}
The output of this selector is a string representing a statistic ID, or
a list of statistic IDs if `multiple` is set to `true`.
## Target selector
The target selector is a rather special selector, allowing the user to select

View File

@ -9,23 +9,35 @@ related:
- docs: /docs/organizing/labels/
---
## Customizing an entity
After adding a new device, you might find the automatically assigned entity ID too technical and the entity lacking a friendly name. You can personalize these elements to better fit your naming conventions or modify other attributes like the icon.
To change entity attributes, follow these steps:
1. Go to {% my entities title="**Settings** > **Devices & services** > **Entities**" %} and select the entity from the list.
2. In the top right corner, select the cog icon.
2. In the top-right corner, select the {% icon "mdi:cog" %} cog icon.
![Entity dialog box with cog icon.](/images/docs/configuration/customizing-entity-dialog.png)
3. Enter or edit the attributes:
- For example, the entity ID here could be shortened to `binary_sensor.living_room_motion_1`.
- Do not change the domain of the entity - the part before the `.` (binary_sensor, in this example).
- For example, the entity ID here could be shortened to `binary_sensor.lumi_sensor_aq2_opening`.
- You can use lowercase letters, numbers, and underscores.
- The ID must not start or end with an underscore.
- To undo the change and revert the ID to the default, select the {% icon "mdi:restore" %} icon.
- **Note**: You can only reset the ID to the default ID for entities with a unique ID.
- IDs of entities that are disabled or for which the integration is not set up cannot be reverted.
- To revert all the entity IDs for a device, on the device page, select the three dots {% icon "mdi:dots-vertical" %} menu, then select **Recreate entity IDs**.
- **Result**: This resets the entity ID and applies the current default naming convention.
- The terms used to generate the entity ID depends on a few factors. Prioritization is as follows:
1. If you changed the friendly name of the entity, the friendly name will be used.
2. The entity ID suggested by the integration (just a few integrations do this).
3. The default name in the user language, if using Latin script.
- If the something other than Latin script is used, the entity ID is based on the English default name.
- This is because entity IDs must use lowercase alphanumeric characters in the range of [a-z,1-9].
![revert all entity IDs for a device from the device page](/images/docs/configuration/device-page-revert-entity-id.png)
- Enter or edit the friendly name.
- In this example, this would change "Opening".
- If needed, from the **Shown as** menu, you can select a different [device class](/integrations/homeassistant/#device-class).
- If you like, add a [label](/docs/organizing/labels/).

View File

@ -52,8 +52,8 @@ There are a few very important rules to remember when adding templates to YAML:
1. You **must** surround single-line templates with double quotes (`"`) or single quotes (`'`).
2. It is advised that you prepare for undefined variables by using `if ... is not none` or the [`default` filter](https://jinja.palletsprojects.com/en/latest/templates/#jinja-filters.default), or both.
3. It is advised that when comparing numbers, you convert the number(s) to a [`float`](https://jinja.palletsprojects.com/en/latest/templates/#float) or an [`int`](https://jinja.palletsprojects.com/en/latest/templates/#int) by using the respective [filter](https://jinja.palletsprojects.com/en/latest/templates/#list-of-builtin-filters).
4. While the [`float`](https://jinja.palletsprojects.com/en/latest/templates/#float) and [`int`](https://jinja.palletsprojects.com/en/latest/templates/#int) filters do allow a default fallback value if the conversion is unsuccessful, they do not provide the ability to catch undefined variables.
3. It is advised that when comparing numbers, you convert the number(s) to a [`float`](https://jinja.palletsprojects.com/en/latest/templates/#jinja-filters.float) or an [`int`](https://jinja.palletsprojects.com/en/latest/templates/#jinja-filters.int) by using the respective [filter](https://jinja.palletsprojects.com/en/latest/templates/#list-of-builtin-filters).
4. While the [`float`](https://jinja.palletsprojects.com/en/latest/templates/#jinja-filters.float) and [`int`](https://jinja.palletsprojects.com/en/latest/templates/#jinja-filters.int) filters do allow a default fallback value if the conversion is unsuccessful, they do not provide the ability to catch undefined variables.
Remembering these simple rules will help save you from many headaches and endless hours of frustration when using automation templates.
@ -97,7 +97,7 @@ In your automations, you could then reuse this macro by importing it:
{{ format_entity('sensor.temperature') }}
```
{$ endraw %}
{% endraw %}
Home Assistant also allows you to write macros with non-string return values by
taking a named argument called `returns` and calling it with a return value. Once created,
@ -623,6 +623,7 @@ If there is more than one entry with the same title, the entities for all the ma
- `labels()` returns the full list of label IDs, or those for a given area ID, device ID, or entity ID.
- `label_id(lookup_value)` returns the label ID for a given label name.
- `label_name(lookup_value)` returns the label name for a given label ID.
- `label_description(lookup_value)` returns the label description for a given label ID.
- `label_areas(label_name_or_id)` returns the list of area IDs tied to a given label ID or name.
- `label_devices(label_name_or_id)` returns the list of device IDs tied to a given label ID or name.
- `label_entities(label_name_or_id)` returns the list of entity IDs tied to a given label ID or name.
@ -774,7 +775,7 @@ For example, if you wanted to select a field from `trigger` in an automation bas
{% endraw %}
- `as_datetime(value, default)` converts a string containing a timestamp, or valid UNIX timestamp, to a datetime object. If that fails, it returns the `default` value or, if omitted, raises an error. When the input is already a datetime object it will be returned as is. in case the input is a datetime.date object, midnight will be added as time. This function can also be used as a filter.
- `as_datetime(value, default)` converts a string containing a timestamp or a valid UNIX timestamp to a datetime object. If conversion fails, the function returns the `default` value. If no `default` is provided and the input is a string that cannot be converted to a datetime, it returns `None`. For other invalid inputs (e.g., a list, dictionary, or a numeric value too large to convert), it raises an error when no `default` is supplied. In case the input is already a datetime object, it is returned unchanged. If the input is a `datetime.date` object, midnight is added as the time. This function can also be used as a filter.
- `as_timestamp(value, default)` converts a datetime object or string to UNIX timestamp. If that fails, returns the `default` value, or if omitted raises an error. This function can also be used as a filter.
- `as_local()` converts a datetime object to local time. This function can also be used as a filter.
- `strptime(string, format, default)` parses a string based on a [format](https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior) and returns a datetime object. If that fails, it returns the `default` value or, if omitted, raises an error.
@ -902,6 +903,29 @@ The temperature is 25°C
{% endraw %}
`from_json(default)` function will attempt to convert the input to `json`. If that fails, returns the `default` value, or if omitted raises an error.
#### Template
{% raw %}
```text
{% set result = 'not json'|from_json('not json') %}
The value is {{ result }}
```
{% endraw %}
#### Output
{% raw %}
```text
The value is not json
```
{% endraw %}
### Is defined
Sometimes a template should only return if a value or object is defined, if not, the supplied default value should be returned. This can be useful to validate a JSON payload.

View File

@ -42,7 +42,7 @@ There are also products for water usage monitoring that are based on existing co
If your water meter lacks a rotary disk, magnetic disk, or coil. There are alternative solutions available to seamlessly integrate water monitoring into your smart home setup:
- [AI-on-the-edge-device](https://github.com/jomjol/AI-on-the-edge-device) is a project running on an ESP32-CAM and can be fully integrated into Home Assistant using the Home Assistant Discovery Functionality of MQTT. It digitalizes your gas/water/electricity meter display and provides its data in various ways.![Photo of the AI-on-the-edge-device Workflow](/images/docs/energy/
- [AI-on-the-edge-device](https://github.com/jomjol/AI-on-the-edge-device) is a project running on an ESP32-CAM and can be fully integrated into Home Assistant using the Home Assistant Discovery Functionality of MQTT. It digitalizes your gas/water/electricity meter display and provides its data in various ways.![Photo of the AI-on-the-edge-device Workflow](/images/docs/energy/ai-on-the-edge-device.jpg)
If you have a Culligan Water Softener, you may be able to interface with the inbuilt `DEBUG PORT` and receive water usage stats including `Gallons` (gal), `Gallons Per Minute` (gal/min), and `Gallons to Recharge` (gal):

View File

@ -1,15 +1,18 @@
---
title: "Z-Wave Controllers"
title: "Z-Wave adapters"
description: "Extended instructions how to set up Z-Wave."
related:
- docs: /integrations/zwave_js/
title: Z-Wave integration
---
## Supported Z-Wave USB Sticks & Hardware Modules
## Supported Z-Wave adapters
You need to have a compatible Z-Wave stick or module installed. The following devices have been confirmed to work with Z-Wave JS:
You need to have a compatible Z-Wave adapter installed. The following devices have been confirmed to work with Z-Wave JS:
{% warning %}
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:
The firmwares of 700 and 800 series Z-Wave adapters have several bugs which impact the stability of the mesh and can cause the adapter 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 or 7.21.6 and newer
@ -29,7 +32,7 @@ The SDK version does not have to match the firmware version. If you are unsure w
{% endnote %}
{% important %}
You should upgrade the firmware on all 700 and 800 series controllers to a recommended version.
You should upgrade the firmware on all 700 and 800 series adapters to a recommended version.
{% endimportant %}
Firmware can be upgraded using the below directions:
@ -41,11 +44,11 @@ Firmware can be upgraded using the below directions:
{% endwarning %}
- 800 series controllers (with some caveats, see notes)
- 800 series USB adapters (with some caveats, see notes)
- HomeSeer SmartStick G8
- Zooz 800 Series Z-Wave Long Range S2 Stick (ZST39 LR)
- 700 series controllers
- 700 series USB adapters
- Aeotec Z-Stick 7 USB stick (ZWA010) (the EU version is not recommended due to RF performance issues)
- HomeSeer SmartStick+ G3
- HomeSeer Z-NET G3
@ -53,7 +56,7 @@ Firmware can be upgraded using the below directions:
- Zooz S2 Stick 700 (ZST10 700)
- Z-Wave.Me Z-Station
- 500 series controllers
- 500 series USB adapters
- Aeotec Z-Stick Gen5 (see note below)
- Everspring USB stick - Gen 5
- GoControl HUSBZB-1 stick
@ -63,39 +66,34 @@ Firmware can be upgraded using the below directions:
- HomeSeer SmartStick+ G2
- HomeSeer Z-NET G2
- Raspberry Pi modules
- Raspberry Pi HAT adapters
- Aeotec Z-Pi 7 Raspberry Pi HAT/Shield (ZWA025, 700 series)
- Z-Wave.Me RaZberry 7 (ZME_RAZBERRY7, 700 series)
- Z-Wave.Me RaZberry 7 Pro (ZMEERAZBERRY7_PRO or ZMEURAZBERRY7_PRO, 700 series)
- Z-Wave.Me Razberry 2 (500 series)
- Z-Wave.Me Razberry 1 (300 series)
If you are just starting out, we recommend that you purchase a 700 series controller or a Raspberry Pi module. The 700 series controllers are the more recent version (when compared to the 500 series). The 700 series controllers support SmartStart, which allows you to add a device by scanning a QR code.
If you are just starting out, we recommend that you purchase an 800 series adapter (with firmware updated to ≥ 7.23.2). The 800 series adapters are the most future-proof and offer the best RF performance.
{% tip %}
It's recommended to use a USB stick, not a module. Passing a module through Docker is more complicated than passing a USB stick through.
{% endtip %}
## Stick alternatives
## Third-party hubs
The alternative to a stick is a hub that supports Z-Wave. Home Assistant supports the following hubs with Z-Wave support:
For the best experience, it is recommended to use an adapter directly with Home Assistant. If this doesn't work for you, you can use a hub that supports Z-Wave. Home Assistant supports the following third-party hubs with Z-Wave support:
- [Vera](/integrations/vera/)
- [Fibaro](/integrations/fibaro/)
- [SmartThings](/integrations/smartthings/)
- [Z-Wave.Me Z-Way](/integrations/zwave_me)
## Controller notes
### 800 Series Controllers
Z-Wave JS does not support Z-Wave Long Range yet.
## Adapter notes
### Aeotec Z-Stick
{% note %}
The Aeotec Z-Stick and some of its variants (e.g. Z-Wave.Me UZB1) are known to have compatibility issues with the Linux kernel because of their [non-compliant behavior](https://forums.raspberrypi.com/viewtopic.php?f=28&t=245031#p1502030). Plugging these controllers through a USB hub can serve as a workaround that sometimes mitigates the issue.
The Aeotec Z-Stick and some of its variants (e.g. Z-Wave.Me UZB1) are known to have compatibility issues with the Linux kernel because of their [non-compliant behavior](https://forums.raspberrypi.com/viewtopic.php?f=28&t=245031#p1502030). Plugging these adapters through a USB hub can serve as a workaround that sometimes mitigates the issue.
{% endnote %}

View File

@ -69,13 +69,11 @@
{%- endif -%}
{% if page.works_with %}
{%- for type in page.works_with -%}
<div class="section">
<a href="https://works-with.home-assistant.io/">
<img src="../../images/works_with/works-with.png" alt="Works with Home assistant">
</a>
</div>
{%- endfor -%}
{%- endif -%}
{% if page.ha_domain %}

View File

@ -9,14 +9,6 @@ To list all your currently connected network storages, go to **{% my storage tit
You need to update to Home Assistant Operating System 10.2 before you can use this feature.
{% endimportant %}
{% else %}
{% important %}
You need to make sure you run a supported {% term "Home Assistant Supervised" %} installation with the latest version of the [os-agent](https://github.com/home-assistant/os-agent). Make sure that your supervisor uses [slave bind propagation](https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation) for the data volume.
{% endimportant %}
{% endif %}
<p class='img'>

View File

@ -1,9 +1,12 @@
Best practice for updating Home Assistant Core:
#### Prerequisites
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**.
3. To update Home Assistant Core, choose one of the following options.
#### To update Home Assistant Core
To update Home Assistant Core, choose one of the following options.
{% if page.installation == "os" %}
@ -20,6 +23,10 @@ Best practice for updating Home Assistant Core:
- Go to {% my updates title="**System** > **Updates**" %}.
- Select the update notification.
- Select the cogwheel {% icon "mdi:cog-outline" %}, then set **Visible** to active.
4. Open the notification for the component you want to update.
5. If you want to backup the system first (recommended), enable the backup toggle.
6. Select **Update**.
7. After the update completed, check if there are any repair issues and check the logs to see if there are any issues with your configuration that need to be addressed.
- title: Using the CLI
content: |
@ -57,6 +64,7 @@ Best practice for updating Home Assistant Core:
{% endtabbed_block %}
After the update, check if there are any repair issues and check the logs to see if there are any issues with your configuration that need to be addressed.
{% endif %}
4. Check if there are any repair issues and check the logs to see if there are any issues with your configuration that need to be addressed.

View File

@ -1,13 +1,6 @@
<!-- Left column begins -->
<div class="grid__item one-third lap-one-half palm-one-whole">
<!-- Community Day 2025 - To move on/after event -->
<a href="/blog/2025/04/24/community-day/" class="material-card picture-promo" style="
background-image: url(/images/frontpage/community-day-2025.webp);
aspect-ratio: 500/263;
" aria-label="State of the Open Home - Saturday April 12th 2025">
</a>
{% assign releases_post_limit = 2 %}
{% assign blog_post_limit = 4 %}
<!-- Home Assistant updates posts -->
@ -65,6 +58,13 @@
</ol>
</div>
<!-- Community Day 2025 - To move on/after event -->
<a href="https://lu.ma/homeassistant" class="material-card picture-promo" target="_blank" style="
background-image: url(/images/frontpage/community-meetup.webp);
aspect-ratio: 500/263;
" aria-label="State of the Open Home - Saturday April 12th 2025">
</a>
<!-- OHF notice -->
<a href="https://www.openhomefoundation.org/blog/announcing-the-open-home-foundation/"
class="material-card highlight-blog-post">

View File

@ -68,7 +68,7 @@ If you change the configuration, you have to restart the server. To do that you
`docker compose` should [already be installed](https://www.docker.com/blog/announcing-compose-v2-general-availability/) on your system. If not, you can [manually](https://docs.docker.com/compose/install/linux/) install it.
{% endtip %}
As the Docker command becomes more complex, switching to `docker compose` can be preferable and support automatically restarting on failure or system restart. Create a `compose.yml` file:
As the Docker command becomes more complex, switching to `docker compose` can be preferable and support automatically restarting on failure or system restart. Create a `compose.yaml` file:
{% include installation/container/compose.md %}

View File

@ -102,7 +102,7 @@ To write the HAOS image to the boot medium on your x86-64 hardware, there are 2
- Computer
- The target x86-64 hardware, on which you want to install the {% term "Home Assistant Operating System" %} (HAOS)
- USB flash drive (USB thumb drive is sufficient, it should be at least 4&nbsp;GB in size)
- USB flash drive (USB thumb drive is sufficient, it should be at least 8&nbsp;GB in size)
- Internet connection
#### To install HAOS via Ubuntu from a USB flash drive

View File

@ -0,0 +1,46 @@
{% capture name %}{{ include.name | default: page.title }}{% endcapture %}
{% capture url %}{{ include.url }}{% endcapture %}
{% for type in page.works_with %}
{% case type %}
{% when "zwave" %}{% assign formatted_type = "Z-Wave" %}
{% when "zigbee" %}{% assign formatted_type = "Zigbee" %}
{% when "matter" %}{% assign formatted_type = "Matter" %}
{% else %}{% assign formatted_type = type | capitalize %}
{% endcase %}
{% if forloop.first %}
{% assign formatted_types = formatted_type %}
{% elsif forloop.last %}
{% assign formatted_types = formatted_types | append: " and " | append: formatted_type %}
{% else %}
{% assign formatted_types = formatted_types | append: ", " | append: formatted_type %}
{% endif %}
{% endfor %}
{% if url and url != "" %}[{{ name }}]({{ url }}){% else %}{{ name }}{% endif %} is a member of the Works with Home Assistant partner program for their {{ formatted_types }} products. {{ name }} is committed to making sure their products are up-to-date and ready to use in Home Assistant.
{% if page.works_with contains "zwave" %}
{{ name }} Z-Wave devices work locally and integrate seamlessly with the Z-Wave integration in Home Assistant (Z-Wave stick required). As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant.
{% my add_zwave_device badge domain=page.ha_domain %}
[Learn more about Z-Wave in Home Assistant.](/integrations/zwave_js/)
{% endif %}
{% if page.works_with contains "zigbee" %}
{{ name }} Zigbee devices work locally and integrate seamlessly with the Zigbee integration in Home Assistant (Zigbee stick required). As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant.
{% my add_zigbee_device badge brand=page.ha_domain %}
[Learn more about Zigbee in Home Assistant.](/integrations/zha/)
{% endif %}
{% if page.works_with contains "matter" %}
{{ name }} 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/)
{% endif %}

View File

@ -29,8 +29,9 @@
<li><a class="external-link" href="https://design.home-assistant.io">Design Portal {% icon "tabler:external-link" %}</a></li>
<li><a class="external-link" href="https://data.home-assistant.io">Data Science Portal {% icon "tabler:external-link" %}</a></li>
<li><a class="external-link" href="https://community.home-assistant.io">Community Forum {% icon "tabler:external-link" %}</a></li>
<li><a class="external-link" href="https://creators.home-assistant.io/">Creator Network {% icon "tabler:external-link" %}</a></li>
<li><a class="external-link" href="https://works-with.home-assistant.io/">Works With Home Assistant {% icon "tabler:external-link" %}</a></li>
<li><a href="/help/reporting_issues/">Reporting issues</a></li>
<li><a href="https://home-assistant-store.creator-spring.com/">Community Merch Store</a></li>
</ul>
<h3>System status</h3>
<ul>

View File

@ -3,14 +3,17 @@ title: Adax
description: Instructions on how to integrate Adax heater into Home Assistant.
ha_category:
- Climate
- Sensor
ha_release: 2021.8
ha_iot_class: Local Polling
ha_codeowners:
- '@danielhiversen'
- '@lazytarget'
ha_domain: adax
ha_config_flow: true
ha_platforms:
- climate
- sensor
ha_integration_type: integration
---
@ -41,3 +44,13 @@ You will also need a credential, which you can create in the Adax app:
In the configuration popup you will need the Account ID, and the generated API password (not the account password)
{% include integrations/config_flow.md %}
## Energy monitoring
When using the cloud integration, the Adax integration provides energy monitoring sensors that track the power consumption of your heaters. These sensors are only available when using the cloud connection, as the local integration does not support energy data.
The integration creates the following energy sensors:
- **Individual energy sensors** - One sensor for each Adax heater showing its energy consumption in Wh
The energy sensors use the `total_increasing` state class, making them suitable for use with Home Assistant's energy dashboard to track your heating costs and consumption over time.

View File

@ -9,7 +9,7 @@ ha_release: 0.95
ha_iot_class: Local Polling
ha_config_flow: true
ha_codeowners:
- '@frenck'
- "@frenck"
ha_domain: adguard
ha_platforms:
- sensor
@ -17,15 +17,38 @@ ha_platforms:
ha_integration_type: service
---
AdGuard Home is a network-wide DNS server that supports ad, tracker,
and adult content blocking. The **AdGuard** integration allows you to control and
monitor your AdGuard Home instance in Home Assistant.
The **AdGuard Home** {% term integration %} allows you to control and monitor your [AdGuard Home](https://adguard.com/adguard-home/overview.html) instance in Home Assistant.
AdGuard Home is a network-wide software for blocking advertisements and tracking. It provides DNS-level protection, automatically covering all home devices without requiring client-side software. When you use AdGuard Home as your DNS server, it blocks advertisements, trackers, and malicious domains for all devices on your network.
## Prerequisites
Before setting up the AdGuard Home integration, ensure you have:
1. AdGuard Home installed and running on your network
2. The IP address or hostname of your AdGuard Home instance
3. Admin access to AdGuard Home
{% include integrations/config_flow.md %}
## Sensors
{% configuration_basic %}
Host:
description: "The IP address or hostname of your AdGuard Home instance. For example: `192.168.1.100` or `adguard.local`."
Port:
description: "The port AdGuard Home is running on. Default is `3000` for the web interface."
Username:
description: "Your AdGuard Home admin username."
Password:
description: "Your AdGuard Home admin password."
Verify SSL certificate:
description: "Enable SSL certificate verification when connecting via HTTPS."
{% endconfiguration_basic %}
This integration provides {% term sensors %} for the following information from AdGuard Home:
## Supported functionality
### Sensors
This integration provides sensors for the following information from AdGuard Home:
- Number of DNS queries.
- Number of blocked DNS queries.
@ -36,77 +59,193 @@ This integration provides {% term sensors %} for the following information from
- Total number of active filter rules loaded.
- Average response time of AdGuard's DNS server in milliseconds.
## Switches
### Switches
The integration will create a number of switches:
The integration provides switches to control AdGuard Home features:
- AdGuard Protection (master switch).
- Filtering.
- Safe Browsing.
- Parental Control.
- Safe Search.
- Query Log.
- **AdGuard protection**: Master switch that controls all AdGuard features
- **Filtering**: Enables DNS filtering using blocklists
- **Safe browsing**: Blocks known phishing and malware sites
- **Parental control**: Blocks adult content
- **Safe search**: Enforces safe search on search engines
- **Query log**: Records DNS queries for statistics
These switches allow you to automate things easily. For example, one could
write an automation to turn off Safe Search after the kids' bedtime.
These switches enable powerful automations. For example, you could automatically enable parental controls during school hours or disable ad blocking for specific time periods.
The "AdGuard Protection" switch is a master switch. It will turn off and
bypass all AdGuard features, regardless of whether they are switched on or not.
The **AdGuard protection** switch acts as a master control. When turned off, it bypasses all AdGuard features regardless of individual switch states.
{% important %}
Turning off Query Log will result in all sensors not receiving updates anymore.
AdGuard relies on Query Log to provide stats.
Turning off **Query log** stops all sensor updates. AdGuard requires query logging to provide statistics.
{% endimportant %}
## Actions
These {% term actions %} allow one to manage filter subscriptions in AdGuard Home.
Using these actions in automations could be helpful to block certain
sites/domains at certain times.
The integration provides {% term actions %} to manage filter subscriptions in AdGuard Home. Use these actions in automations to dynamically control content filtering based on time, presence, or other conditions.
For example, you could create a custom filter list that blocks social media sites
during the day and releases them during the evening.
For example, you could create automations that:
### Action `add_url`
- Block social media during work hours
- Enable strict filtering when guests connect to your network
- Temporarily disable filtering for specific downloads
Add a new filter subscription to AdGuard Home.
### Action `adguard.add_url`
Adds a new filter subscription to AdGuard Home.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------ |
| `name` | No | The name of the filter subscription. |
| `url` | No | The filter URL to subscribe to, containing the filter rules. |
| -------------- | -------- | --------------------------------------------- |
| `name` | No | The name of the filter subscription |
| `url` | No | The filter list URL containing blocking rules |
### Action `remove_url`
### Action `adguard.remove_url`
Removes a filter subscription from AdGuard Home.
| Data attribute | Optional | Description |
| ---------------------- | -------- | -------------------------------------- |
| `url` | No | The filter subscription URL to remove. |
| -------------- | -------- | ------------------------------------- |
| `url` | No | The filter subscription URL to remove |
### Action `enable_url`
### Action `adguard.enable_url`
Enables a filter subscription in AdGuard Home.
Enables a previously disabled filter subscription.
| Data attribute | Optional | Description |
| ---------------------- | -------- | -------------------------------------- |
| `url` | No | The filter subscription URL to enable. |
| -------------- | -------- | ------------------------------------- |
| `url` | No | The filter subscription URL to enable |
### Action `disable_url`
### Action `adguard.disable_url`
Disables a filter subscription in AdGuard Home.
Temporarily disables a filter subscription without removing it.
| Data attribute | Optional | Description |
| ---------------------- | -------- | --------------------------------------- |
| `url` | No | The filter subscription URL to disable. |
| -------------- | -------- | -------------------------------------- |
| `url` | No | The filter subscription URL to disable |
### Action `refresh`
### Action `adguard.refresh`
Refresh all filter subscriptions in AdGuard Home.
Refreshes all filter subscriptions to get the latest blocking rules.
| Data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------- |
| `force` | Yes | Force update (bypasses AdGuard Home throttling). |
| -------------- | -------- | ----------------------------------------------- |
| `force` | Yes | Force update (bypasses AdGuard Home throttling) |
By default, `force` is set to `false`. Forcing an update bypasses AdGuard Home's
throttling logic, so use with care.
By default, `force` is `false`. AdGuard Home normally throttles filter updates to reduce server load. Use forced updates sparingly.
## Examples
### Block social media during work hours
This automation blocks social media sites during business hours:
```yaml
automation:
- alias: "Block social media during work"
triggers:
- trigger: time
at: "09:00:00"
actions:
- action: adguard.add_url
data:
name: "Social media blocklist"
url: "https://raw.githubusercontent.com/example/social-media-blocklist/main/list.txt"
- action: adguard.refresh
- alias: "Unblock social media after work"
triggers:
- trigger: time
at: "17:00:00"
actions:
- action: adguard.remove_url
data:
url: "https://raw.githubusercontent.com/example/social-media-blocklist/main/list.txt"
```
### Enable strict filtering when guests arrive
Automatically enable all protection features when guests connect to your network:
```yaml
automation:
- alias: "Enable strict filtering for guests"
triggers:
- trigger: state
entity_id: group.guest_devices
from: "not_home"
to: "home"
actions:
- action: switch.turn_on
target:
entity_id:
- switch.adguard_parental_control
- switch.adguard_safe_browsing
- switch.adguard_safe_search
```
### Monitor DNS performance
Send a notification if DNS response time exceeds threshold:
{% raw %}
```yaml
automation:
- alias: "Alert on slow DNS"
triggers:
- trigger: numeric_state
entity_id: sensor.adguard_average_processing_speed
above: 50
actions:
- action: notify.mobile_app
data:
title: "DNS Performance Alert"
message: "AdGuard DNS response time is {{ states('sensor.adguard_average_processing_speed') }}ms"
```
{% endraw %}
## Data updates
The AdGuard Home integration polls for updates every 10 seconds to provide near real-time statistics and ensure switch states remain synchronized.
## Troubleshooting
### Integration fails to connect
#### Symptom: "Cannot connect to AdGuard Home"
When setting up the integration, you receive a connection error.
##### Resolution
1. Verify AdGuard Home is running:
- Access the AdGuard Home web interface at `http://YOUR_IP:3000`.
- Check the service status on your server.
2. Check network connectivity:
- Ensure Home Assistant can reach the AdGuard Home instance.
- Verify no firewall rules block port 3000.
3. Confirm credentials:
- Test login via the AdGuard Home web interface.
- Ensure you're using admin credentials.
### Sensors show unavailable
If sensors display as unavailable:
1. Check that **Query log** switch is enabled.
2. Verify AdGuard Home is processing DNS queries.
3. Ensure at least one device uses AdGuard Home as DNS server.
### Actions fail with "Filter URL not found"
This error occurs when trying to enable, disable, or remove a non-existent filter URL. Verify the exact URL using the AdGuard Home web interface under **Filters** > **DNS blocklists**.
## Removing the integration
This integration follows standard integration removal. After removal, your AdGuard Home instance continues running with its current configuration.
{% include integrations/remove_device_service.md %}

View File

@ -0,0 +1,149 @@
---
title: AI Task
description: Instructions on how to setup AI task entities with Home Assistant.
ha_category:
- AI
ha_release: '2025.7'
ha_quality_scale: internal
ha_domain: ai_task
ha_codeowners:
- '@home-assistant/core'
ha_integration_type: entity
---
The **AI Task** {% term integration %} allows you to use AI to help you configure Home Assistant.
{% include integrations/building_block_integration.md %}
For each task, you can set a preferred AI task entity. This allows you to use different AI models for different purposes, such as generating text, summarizing information, or even controlling devices. When the entity ID is omitted in the action, the preferred AI task entity will be used.
## The state of an AI task entity
The {% term state %} of an AI task {% term entity %} is a timestamp showing the date and time when the AI task was last used.
## Action `ai_task.generate_data`
Generates data using AI.
| Data attribute | Optional | Description |
| ---------------------- | -------- | --------------------------------------------------------------------------------------------------------------- |
| `task_name` | no | String that identifies the type of text generation task (for example, "home summary", "alert notification"). |
| `instructions` | no | String containing the specific instructions for the AI to follow when generating the text. |
| `entity_id` | yes | String that points at an `entity_id` of an LLM task entity. If not specified, uses the default LLM task. |
| `structure` | yes | Dictionary defining the structure of the output data. When set, the AI will return structured data with the specified fields. Each field can have a `description`, `selector`, and optional `required` property. |
| `attachments` | yes | List of attachments to include in the task. Each attachment is the output of the [Media Selector](https://www.home-assistant.io/docs/blueprint/selectors/#media-selector).
The response variable is a dictionary with the following keys:
- `data`: The generated text or structured data (depending on whether `structure` is specified).
- `conversation_id`: The ID of the conversation used for the task.
## Examples
### Template entity counting items on a camera
{% raw %}
```yaml
template:
- triggers:
- trigger: homeassistant
event: start
- trigger: time_pattern
minutes: "/5" # update every 5 minutes
actions:
- action: ai_task.generate_data
data:
task_name: "{{ this.entity_id }}"
instructions: >-
This is the inside of my goose coop. How many birds (chickens, geese, and
ducks) are inside the coop?
structure:
birds:
selector:
number:
attachments:
media_content_id: media-source://camera/camera.chicken_coop
media_content_type: image/jpeg
response_variable: result
sensor:
- name: "Chickens"
state: "{{ result.data.birds }}"
state_class: total
```
{% endraw %}
Alternative ideas: detect number of parking spots available, count people in a room, or detect if a door is open.
### Structured output example
{% raw %}
```yaml
# Example: Generate weather and indoor comfort report
script:
- alias: "Weather and comfort report"
sequence:
- action: ai_task.generate_data
data:
task_name: "weather comfort report"
instructions: |
Based on the current conditions:
- Outdoor temperature: {{ states('sensor.outdoor_temperature') }}°C
- Weather condition: {{ states('weather.home') }}
- Indoor temperature: {{ states('sensor.living_room_temperature') }}°C
- Indoor humidity: {{ states('sensor.living_room_humidity') }}%
Generate a funny weather description and assess indoor comfort level.
structure:
weather_description:
description: "A humorous description of the current weather outside"
required: true
selector:
text:
indoor_comfort:
description: "Assessment of how comfortable it is inside compared to outside"
required: true
selector:
text:
response_variable: comfort_report
- action: notify.persistent_notification
data:
title: "🏠 Home climate report"
message: |
🌤️ **Weather outside:**
{{ comfort_report.data.weather_description }}
🛋️ **Indoor comfort:**
{{ comfort_report.data.indoor_comfort }}
```
{% endraw %}
### Simple text generation example
{% raw %}
```yaml
# Example: Generate a notification when garage door is left open
automation:
- alias: "Garage door notification"
triggers:
- trigger: state
entity_id: cover.garage_door
to: 'on'
for:
minutes: 10
actions:
- action: ai_task.generate_data
data:
task_name: "garage door left open comment"
instructions: "Generate a funny notification that garage door was left open"
response_variable: generated_text
- action: notify.persistent_notification
data:
message: "{{ generated_text.data }}"
```
{% endraw %}

View File

@ -27,6 +27,18 @@ 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.
## Use cases
- Monitor indoor and outdoor air quality.
- Warn to open windows when CO2 levels are too high.
- Control ventilation systems based on air quality.
## Supported devices
- AirGradient DIY Air Quality Monitor
- AirGradient Indoor Air Quality Monitor
- AirGradient Outdoor Air Quality Monitor
{% 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.
{% endimportant %}
@ -38,7 +50,11 @@ Host:
description: "The IP address or hostname for your AirGradient device."
{% endconfiguration_basic %}
## Available sensors
## Supported functionality
Below is a complete overview of the entities this integration provides.
### Available sensors
The integration will fetch data from each device. The following sensors are supported:
@ -65,7 +81,7 @@ A number of configuration entities are available as sensors to automate with if
- Display temperature unit
- Display brightness
## Available configuration entities
### Available configuration entities
The integration provides a few configuration entities to customize the device experience.
The settings are only available when the configuration source is set to local.
@ -84,6 +100,67 @@ The following entities are supported:
- NOx learning offset
- Total volatile organic compounds learning offset
### Updates
The AirGradient integration provides an update entity that checks for firmware updates for your AirGradient device.
To install the update, the device needs to be rebooted.
## Data updates
This integration uses local {% term polling %}, meaning it checks for changes to all entities by regularly communicating with the AirGradient device.
The integration will retrieve data from the device every minute.
The updates for the device are checked once every hour.
## Actions
This integration does not provide additional actions. All actions available
for this integration are provided by their respective entities.
## Examples
The following examples show how to use the AirGradient integration in Home
Assistant automations. These examples are just a starting point, and you can
use them as inspiration to create your own automations.
### Notify when the CO2 level is too high
The following example sends a notification to your mobile device when the CO2 level exceeds 1000 ppm.
{% raw %}
```yaml
automation:
- alias: "Notify when CO2 level is too high"
triggers:
- trigger: numeric_state
entity_id: sensor.airgradient_carbon_dioxide
above: 1000
actions:
- action: notify.mobile_app_your_device
data:
title: "High CO2 Level Alert"
message: >
The CO2 level is too high at {{ states('sensor.airgradient_carbon_dioxide') }} ppm.
Please consider ventilating the room.
```
{% endraw %}
## Known limitations
The AirGradient integration currently has the following limitations:
- The update entity is not able to install updates automatically. You will need to reboot the device manually after installing the update.
## Troubleshooting
If you're experiencing issues with your AirGradient integration, try these general troubleshooting steps:
1. Make sure your AirGradient is powered on and properly connected to your home network.
2. If the integration shows as unavailable, try restarting both your AirGradient and Home Assistant.
## Removing the integration
This integration follows standard integration removal, no extra steps are required.

View File

@ -15,6 +15,7 @@ ha_config_flow: true
ha_platforms:
- sensor
ha_integration_type: integration
ha_dhcp: true
---
Integrates Airthings sensors into Home Assistant.
@ -45,3 +46,10 @@ Upon saving the settings, you will be presented with a generated id and secret.
The Airthings integration can now be activated using the generated id and secret that you have just created.
{% include integrations/config_flow.md %}
## Troubleshooting
### The radon sensor does not show up
Initially, the radon sensor may not be published by the Airthings API (at device startup, the value is considered "unknown"), and so you may have to wait for the radon sensor to appear for a new device.

View File

@ -12,12 +12,12 @@ ha_integration_type: entity
related:
- docs: /integrations/manual/
title: Manual alarm
- docs: /integrations/alarm_control_panel.template/
- docs: /integrations/template/#alarm-control-panel
title: Template alarm
---
Home Assistant can give you an interface which is similar to a classic alarm system.
Please see [manual alarm](/integrations/manual) or [template alarm](/integrations/alarm_control_panel.template) for alarm configuration.
Please see [manual alarm](/integrations/manual) or [template alarm](/integrations/template/#alarm-control-panel) for alarm configuration.
{% include integrations/building_block_integration.md %}

View File

@ -195,7 +195,7 @@ name:
type: string
default: MQTT Alarm
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_arm_away:

View File

@ -1,147 +0,0 @@
---
title: "Template Alarm control panel"
description: "Instructions on how to integrate template alarm control panels into Home Assistant."
ha_category:
- Alarm
- Helper
ha_release: 0.105
ha_iot_class: "Local Push"
ha_quality_scale: internal
ha_codeowners:
- '@home-assistant/core'
ha_domain: template
ha_config_flow: true
ha_platforms:
- alarm_control_panel
ha_integration_type: helper
related:
- docs: /docs/configuration/
title: Configuration file
---
The `template` {% term integration %} creates alarm control panels that combine integrations or adds preprocessing logic to actions.
There are several powerful ways to use this {% term integration %}, including grouping existing integrations into a simpler integrations, or adding logic that Home Assistant will execute when accessed.
For example, if you want to expose a true alarm panel to Google Home, Alexa, or HomeKit - but limit its ability to disarm when there's no one home, you can do that using a template.
Another use case could be grouping a series of sensors and services together to represent various "armed" and "disarmed" states and actions.
This can simplify the GUI and make it easier to write automations.
In optimistic mode, the alarm control panel will immediately change state after every command. Otherwise, the alarm control panel will wait for state confirmation from the template. Try to enable it, if experiencing incorrect operation.
{% include integrations/config_flow.md %}
## YAML Configuration
To enable a template alarm control panel in your installation, add the following to your {% term "`configuration.yaml`" %} file.
{% include integrations/restart_ha_after_config_inclusion.md %}
{% raw %}
```yaml
# Example configuration.yaml entry
alarm_control_panel:
- platform: template
panels:
safe_alarm_panel:
value_template: "{{ states('alarm_control_panel.real_alarm') }}"
arm_away:
action: alarm_control_panel.alarm_arm_away
target:
entity_id: alarm_control_panel.real_alarm
data:
code: !secret alarm_code
arm_home:
action: alarm_control_panel.alarm_arm_home
target:
entity_id: alarm_control_panel.real_alarm
data:
code: !secret alarm_code
disarm:
- condition: state
entity_id: device_tracker.paulus
state: "home"
- action: alarm_control_panel.alarm_disarm
target:
entity_id: alarm_control_panel.real_alarm
data:
code: !secret alarm_code
```
{% endraw %}
{% configuration %}
panels:
description: List of your panels.
required: true
type: map
keys:
alarm_control_panel_name:
description: The slug of the panel.
required: true
type: map
keys:
name:
description: Name to use in the frontend.
required: false
type: string
default: Template Alarm Control Panel
unique_id:
description: An ID that uniquely identifies this alarm control panel. Set this to a unique value to allow customization through the UI.
required: false
type: string
value_template:
description: "Defines a template to set the state of the alarm panel. Only the states `armed_away`, `armed_home`, `armed_night`, `armed_vacation`, `arming`, `disarmed`, `pending`, `triggered` and `unavailable` are used."
required: false
type: template
disarm:
description: Defines an action to run when the alarm is disarmed.
required: false
type: action
arm_away:
description: Defines an action to run when the alarm is armed to away mode.
required: false
type: action
arm_home:
description: Defines an action to run when the alarm is armed to home mode.
required: false
type: action
arm_night:
description: Defines an action to run when the alarm is armed to night mode.
required: false
type: action
arm_vacation:
description: Defines an action to run when the alarm is armed to vacation mode.
required: false
type: action
arm_custom_bypass:
description: Defines an action to run when the alarm is armed to custom bypass mode.
required: false
type: action
trigger:
description: Defines an action to run when the alarm is triggered.
required: false
type: action
code_arm_required:
description: If true, the code is required to arm the alarm.
required: false
type: boolean
default: true
code_format:
description: One of `number`, `text` or `no_code`. Format for the code used to arm/disarm the alarm.
required: false
type: string
default: number
{% endconfiguration %}
### Template and action variables
State-based template entities have the special template variable `this` available in their templates and actions. The `this` variable aids [self-referencing](/integrations/template#self-referencing) of an entity's state and attribute in templates and actions.
## Considerations
If you are using the state of an integration that takes extra time to load, the template alarm control panel may get an `unknown` state during startup. This results in error messages in your log file until that integration has completed loading. If you use `is_state()` function in your template, you can avoid this situation.
For example, you would replace {% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %} with this equivalent that returns `true`/`false` and never gives an unknown result: {% raw %}`{{ is_state('switch.source', 'on') }}`{% endraw %}

View File

@ -65,7 +65,7 @@ Next you need to create a Lambda function.
- **US West (Oregon)** region for Japanese and English (AU) skills.
- Click `Functions` in the left navigation bar, display list of your Lambda functions.
- Click `Create function`, select `Author from scratch`, then input a `Function name`.
- Select *Python 3.* as `Runtime` (Python 3.9 was available at this time).
- Select `Python 3.x` as the `Runtime` (choose the latest available Python 3 version).
- Select *Use an existing role* as `Execution role`, then select the role you just created from the `Existing role` list.
- Click `Create function`, then you can configure the details of the Lambda function.
- Under the `Configuration` tab, expand `Designer`, then click on `+ Add trigger` in the left part of the panel and select `Alexa Skills Kit` from the dropdown list to add an Alexa Skills Kit trigger to your Lambda function.

View File

@ -157,7 +157,7 @@ Next you need create a Lambda function.
- Click `Functions` in the left navigation bar, to display the list of your Lambda functions.
- Click `Create function`, select `Author from scratch`, then input a `Function name`.
- Select *Python 3.9*, *Python 3.8* or *Python 3.7* as `Runtime`.
- Select `Python 3.x` as the `Runtime` (choose the latest available Python 3 version).
- Expand the `Change default execution role` dropdown and make sure to select *Use an existing role* as `Execution role`, then select the role you just created from `Existing role` list.
- Click `Create function`, then you can configure the details of Lambda function.
- Expand the `Function overview` (if it isn't already expanded), then click `+ Add trigger` in the left part of the panel, then click `Alexa Smart Home` from the drop down list to add an Alexa Smart Home trigger to your Lambda function.

View File

@ -1,23 +1,28 @@
---
title: Amazon Devices
description: Instructions on how to integrate Amazon Devices into Home Assistant.
title: Alexa Devices
description: Instructions on how to integrate Alexa Devices into Home Assistant.
ha_category:
- Binary Sensor
- Notify
- Sensor
- Switch
ha_release: '2025.6'
ha_domain: amazon_devices
ha_domain: alexa_devices
ha_config_flow: true
ha_codeowners:
- '@chemelli74'
ha_iot_class: Local Polling
ha_iot_class: Cloud Polling
ha_platforms:
- binary_sensor
- diagnostics
- notify
- sensor
- switch
ha_integration_type: hub
ha_quality_scale: bronze
---
The **Amazon Devices** {% term integration %} lets you control Alexa-enabled devices connected to your Amazon account.
The **Alexa Devices** {% term integration %} lets you control Alexa-enabled devices connected to your Amazon account.
The integration provides information on connected devices and enables control of the main features.
@ -31,7 +36,7 @@ There is support for the following device families within Home Assistant:
- **Amazon Echo Plus**
- **Amazon Echo Show**
- **Amazon Fire TV Stick**
- **Fire Tablet**
- **Amazon Fire Tablet**
and all 3rd party that has Alexa capabilities built-in
@ -77,30 +82,7 @@ automation:
data:
message: Welcome home Simone
target:
entity_id: notify.announce_echo_dot_livingroom
```
### Automation: Start Radio on all Echo dots
```yaml
automation:
- alias: Start Radio B.B.C.
id: "start_radio_bbc"
trigger:
- platform: sun
event: sunset
condition:
conditions:
- alias: "condition alias (home)"
condition: state
entity_id: group.person_family
state: "home"
action:
- action: notify.send_message
data:
message: Play B.B.C. on Tunein
target:
entity_id: notify.custom_everywhere
entity_id: notify.echo_dot_livingroom_announce
```
## Data updates
@ -109,10 +91,12 @@ This integration {% term polling polls %} data from the device every 30 seconds
## Supported functionality
The **Amazon Devices** {% term integration %} provides the following entities:
The **Alexa Devices** {% term integration %} provides the following entities:
- Binary sensor - main and Bluetooth connectivity
- Notify - Speak and Announce notifications
- Sensor - temperature and illuminance sensors
- Switch - Do not disturb
## Removing the integration

View File

@ -0,0 +1,49 @@
---
title: Altruist
description: Instructions on how to setup Altruist Sensors in Home Assistant.
ha_category:
- Health
- Sensor
ha_config_flow: true
ha_release: 2025.7
ha_iot_class: Local Polling
ha_codeowners:
- '@airalab'
- '@LoSk-p'
ha_domain: altruist
ha_platforms:
- sensor
ha_integration_type: device
ha_zeroconf: true
ha_quality_scale: bronze
---
The **Altruist** {% term integration %} connects Home Assistant to [Air Quality Sensor “Altruist“](https://robonomics.network/devices/altruist/) — a device designed for decentralized environmental monitoring. It captures noise, dust, and temperature data from the sensor over HTTP, making it available as locally usable entities within Home Assistant.
{% include integrations/config_flow.md %}
{% configuration_basic %}
IP Address:
description: "The local IP address for your Altruist device."
{% endconfiguration_basic %}
## Available sensors
The integration will fetch data from each device. The following sensors are supported:
- Humidity
- Temperature
- Atmospheric pressure
- PM2.5 density
- PM10 density
- Ambient noise level
- Carbon dioxide (CO2) level
- Total volatile organic compounds (TVOC)
- Ambient radiation level
- Wi-Fi signal strength
## Removing the integration
This integration follows standard integration removal, no extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -156,7 +156,7 @@ media_player:
## Remote
The remote allows you to send key commands to your Android TV device with the `remote.send_command` action.
The remote allows you to send key commands and text as input to your Android TV device with the `remote.send_command` action.
The entity has the `current_activity` attribute that shows the current foreground app on the Android TV.
You can pass the application ID shown in this `current_activity` as `activity` in the `remote.turn_on` action to launch that app.
@ -242,6 +242,8 @@ Other:
{% enddetails %}
To send text as keyboard input use the `remote.send_command` and prefix the text to send with `text:`, e.g. `command: text:hello world` to type "hello world" in the selected input field.
If `activity` is specified in `remote.turn_on` it will open the specified URL or the application with the given package name. See [Launching apps section](#launching-apps).
Example actions:
@ -265,6 +267,15 @@ target:
entity_id: remote.living_room_tv
```
```yaml
# Send "Never Gonna Give You Up" as keyboard input text to the selected input field
action: remote.send_command
data:
command: text:Never Gonna Give You Up
target:
entity_id: remote.living_room_tv
```
```yaml
# Launch YouTube
action: remote.turn_on

View File

@ -15,10 +15,4 @@ ha_iot_standard: matter
ha_brand: true
---
[Aqara](https://www.aqara.com/) is a member of the Works with Home Assistant partner program for their Matter products. Aqara is committed to making sure their products are up-to-date and ready to use in Home Assistant.
Aqara Matter devices work locally and integrate seamlessly with the Matter integration in Home Assistant. As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant.
{% my add_matter_device badge domain=page.ha_domain %}
[Learn more about Matter in Home Assistant.](/integrations/matter/)
{% include integrations/wwha.md url="https://www.aqara.com/" %}

View File

@ -112,3 +112,130 @@ target:
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."
preannounce: false # chime disabled
```
### Action `assist_satellite.ask_question`
The {% my developer_call_service service="assist_satellite.ask_question" %} action asks a question on the satellite, listens for a response, and matches it against a predefined list of possible answers. Information about the matched answer is stored in a `response_variable` so the appropriate next steps can be taken in your automation or script.
The question may be provided as text or a media id. If text is used, 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/).
Audio from the user's response is transcribed using the [speech-to-text](/integrations/stt) system of the satellite's configured [pipeline](/voice_control/voice_remote_local_assistant/).
The `answers` are given as a list of objects with the following structure:
- `id` - unique id of the answer
- `sentences` - list of [sentence templates](https://developers.home-assistant.io/docs/voice/intent-recognition/template-sentence-syntax/#sentence-templates-syntax)
Sentence templates may contain wildcard `{slots}` that will be stored in the answer's `slots` field. For example, `play {album} by {artist}` will match "play the white album by the beatles" with "white album" stored in `slots.album` and "the beatles" in `slots.artist`.
The matched answer will be stored in a `response_variable` with the structure:
- `id` - unique id of the matching answer (or `None` if no match)
- `sentence` - response text from user
- `slots` - values of wildcard `{slots}` from matching answer
{% my developer_call_service badge service="assist_satellite.ask_question" %}
Examples in YAML:
{% raw %}
```yaml
actions:
- action: assist_satellite.ask_question
data:
question: "Welcome home! What kind of music would you like to listen to?"
entity_id: assist_satellite.my_entity
answers:
- id: jazz
sentences:
- "[some] jazz [music] [please]"
- "something spicy"
- id: rock
sentences:
- "[some] rock [music] [please]"
- "something with a beat"
- id: nothing
sentences:
- "nothing [for now] [please]"
- "nevermind"
- "cancel"
response_variable: answer
- choose:
- conditions:
- condition: template
value_template: "{{ answer.id == 'jazz' }}"
sequence:
- action: play_jazz_action
- conditions:
- condition: template
value_template: "{{ answer.id == 'rock' }}"
sequence:
- action: play_rock_action
default:
- action: assist_satellite.announce
data:
message: "OK, maybe some other time."
target:
entity_id: assist_satellite.my_entity
```
{%endraw %}
Instead of text, the question can also be a media ID:
```yaml
action: assist_satellite.ask_question
data:
entity_id: assist_satellite.my_entity
question_media_id: ITEM_ID
answers: ANSWERS
response_variable: answer
```
A chime is automatically played before the question. You can override this with your own sound by setting `preannounce_media_id`, or disable the chime entirely by setting `preannounce` to `false`.
Examples in YAML:
```yaml
action: assist_satellite.ask_question
data:
entity_id: assist_satellite.my_entity
preannounce_media_id: ITEM_ID # custom chime
question: QUESTION
answers: ANSWERS
response_variable: answer
```
```yaml
action: assist_satellite.ask_question
data:
entity_id: assist_satellite.my_entity
preannounce: false # chime disabled
question: QUESTION
answers: ANSWERS
response_variable: answer
```
If `answers` is omitted, the response text from the user will be available in the `sentence` text of the `response_variable`.
Examples in YAML:
{% raw %}
```yaml
actions:
- action: assist_satellite.ask_question
data:
question: "Say something"
entity_id: assist_satellite.my_entity
response_variable: answer
- action: assist_satellite.announce
data:
message: "You said {{ answer.sentence }}"
target:
entity_id: assist_satellite.my_entity
```
{% endraw %}

View File

@ -53,6 +53,10 @@ If you are having issues and want to report a problem, always start with making
If your device is not discovered. On your camera, go to **System Options** -> **Advanced** -> **Plain Configuration**. Change the drop-down box to `network` and click `Select Group`. If `Network Interface I0 ZeroConf` contains the `169.x.x.x` IP address, unchecked the box next to `Enabled` for this section and click `Save`.
### Internet access required for full integration
If the Axis device does not have internet access, Home Assistant may only display the camera stream. Other entities such as sensors and output controls might not appear. To ensure all device features are available, make sure the camera has internet access during initial setup.
### Reporting a problem
When creating an issue detailing a problem related to the integration make sure to share the device model and firmware as well as prepare logs. Logs might contain sensitive information so make sure to look through it before sharing.

View File

@ -31,6 +31,8 @@ ha_platforms:
- switch
- time
ha_iot_class: Cloud Push
ha_dhcp: true
ha_zeroconf: true
---
{% include integrations/supported_brand.md %}

View File

@ -0,0 +1,23 @@
---
title: Bauknecht
description: Connect and control your Bauknecht devices using the Whirlpool Appliances integration
ha_category:
- Hub
ha_integration_type: virtual
ha_supporting_domain: whirlpool
ha_supporting_integration: Whirlpool Appliances
ha_release: '2025.8'
ha_domain: bauknecht
ha_codeowners:
- '@abmantis'
- '@mkmer'
ha_config_flow: true
ha_platforms:
- binary_sensor
- climate
- diagnostics
- sensor
ha_iot_class: Cloud Push
---
{% include integrations/supported_brand.md %}

View File

@ -169,7 +169,7 @@ name:
type: string
default: MQTT binary sensor
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
off_delay:

View File

@ -13,6 +13,7 @@ ha_codeowners:
- '@jtodorova23'
ha_domain: blue_current
ha_platforms:
- button
- sensor
ha_integration_type: integration
---

View File

@ -7,8 +7,8 @@ ha_release: 0.51
ha_iot_class: Local Polling
ha_domain: bluesound
ha_platforms:
- media_player
- button
- media_player
ha_codeowners:
- '@thrawnarn'
- '@LouisChrist'

View File

@ -20,13 +20,32 @@ ha_platforms:
- sensor
- switch
ha_integration_type: device
ha_quality_scale: bronze
ha_quality_scale: platinum
ha_dhcp: true
---
The **Bosch Alarm Panel** {% term integration %} allows you to connect your [Bosch Alarm Panel](https://www.boschsecurity.com) to Home Assistant to control and monitor your Bosch Alarm Panel.
{% include integrations/config_flow.md %}
{% configuration_basic %}
Host:
description: "The IP address of your panel. You can find it in your router, or within A-Link Plus / RPS."
Port:
description: "The port used by your panel. This is usually 7700 unless it was changed when the panel was configured."
Password:
description: "The automation code set up for your panel. This can be found within A-Link Plus or RPS. Used by the AMAX, B and G series panels."
User code:
description: "The user code for the user that this integration will communicate with the panel with. This is usually the code you would use when arming or disarming the panel via a code pad. Used by the Solution series panels."
Installer code:
description: "The installer code for your panel. This can be found within A-Link Plus. Used by the AMAX series panels."
{% endconfiguration_basic %}
{% important %}
Since the _Mode 2_ automation user has "superuser" privileges, it bypasses the regularly configured alarm pin: you will _not_ be prompted for a _User_ code when arming/disarming through the integration.
{% endimportant %}
## Supported devices
- _Solution 2000/3000/4000_

View File

@ -97,7 +97,7 @@ If you want to receive these notifications, you must use a dedicated account, as
| `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
#### Available notification types
| Notification type | Name of notification |
| ------------------- | -------------------------------------------------------------- |
@ -117,7 +117,9 @@ The notification that list members receive differs from the label shown in the B
{% endnote %}
### Sending a going shopping notification
{% details "Example YAML configuration" %}
#### Sending a going shopping notification
```yaml
...
@ -129,7 +131,7 @@ actions:
message: going_shopping
```
### Sending an urgent message notification
#### Sending an urgent message notification
Note that for the notification type `urgent_message` the attribute `item` is **required**.
@ -144,6 +146,40 @@ actions:
item: Cilantro
```
{% enddetails %}
### Action: Send reaction
Reactions in **Bring!** let users quickly acknowledge shopping list updates with emojis. The action `bring.send_reaction` in Home Assistant allows sending reactions like 👍 or ❤️ to the latest event from the [Activities entity](#events).
| Data attribute | Optional | Description |
| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------ |
| `entity_id` | no | The Bring! Activities entity to react to its latest activity. For example, event.shopping_list_activities. |
| `reaction` | no | Reaction to send in response to an activity by a list member. |
#### Available reactions
| Reaction | Emoji |
|------------|-------|
| `THUMBS_UP`| 👍🏼 |
| `MONOCLE` | 🧐 |
| `DROOLING` | 🤤 |
| `HEART` | ❤️ |
{% details "Example YAML configuration" %}
```yaml
...
actions:
- action: bring.send_reaction
data:
reaction: HEART
target:
entity_id: event.shoppinglist_activities
```
{% enddetails %}
## Automations
Get started with these automation examples for **Bring!**, each featuring ready-to-use blueprints!

View File

@ -17,6 +17,7 @@ ha_platforms:
- sensor
- water_heater
ha_integration_type: device
ha_zeroconf: true
---
The **BSB-Lan** {% term integration %} integrates [BSBLan](https://github.com/fredlcore/BSB-LAN) devices into Home Assistant.
@ -35,11 +36,21 @@ For more information of which system it supports, take a look at their [document
For authentication HTTP authentication using a username and password,
or using a passkey is supported. Use either one.
## Available sensors depending on your heating system
- `inside temperature`
- `outside temperature`
## Available platforms depending on your system
- `climate`
- `water heater`
For more documentation of the BSBLan device, check the [manual](https://docs.bsb-lan.de).
To see a more detailed listing of the reported systems which are successfully used with BSB-LAN, please follow the corresponding link:
[Supported heating systems](https://docs.bsb-lan.de/supported_heating_systems.html)
The integration is tested with the stable firmware version `3.1.6-20230327101530`. A newer firmware version may not work because the API could have changed.
Please use this release. [release 3.1](https://github.com/fredlcore/BSB-LAN/releases/tag/v3.1)
The integration is tested with the stable firmware version `5.0.16-20250525002819`. A newer firmware version may not work because the API could have changed.
For autodiscovery, use the latest release. [release 5.0](https://github.com/fredlcore/BSB-LAN/releases/tag/v5.0)

View File

@ -42,7 +42,10 @@ In addition, the entity can have the following states:
- **Unknown**: The state is not yet known.
Because the {% term state %} of a button entity in Home Assistant is a timestamp, it
means we can use it in our automations. For example:
changes every time the button is pressed. This means we can trigger automations on
any state change of the button entity, which effectively captures when the button
is pressed. We don't need to use the actual timestamp value; we only care that the
state changed, indicating a button press:
```yaml
triggers:

View File

@ -157,7 +157,7 @@ name:
type: string
default: MQTT Button
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_available:

View File

@ -158,7 +158,7 @@ name:
required: false
type: string
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
topic:

View File

@ -239,7 +239,7 @@ name:
type: string
default: MQTT HVAC
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:

View File

@ -26,7 +26,7 @@ ha_platforms:
- sensor
- switch
ha_integration_type: hub
ha_quality_scale: bronze
ha_quality_scale: silver
---
The **Comelit SimpleHome** {% term integration %} allows you to control your [Comelit home automation devices](https://comelitgroup.it/installatore/offerta/home-building-automation/).

View File

@ -49,34 +49,21 @@ compensation:
```
{% configuration %}
source:
description: The entity to monitor/compensate.
required: true
attribute:
description: Attribute from the source to monitor/compensate. When omitted, the state value of the source will be used.
required: false
type: string
data_points:
description: "The collection of data point conversions with the format `[uncompensated_value, compensated_value]`. e.g., `[1.0, 2.1]`. The number of required data points is equal to the polynomial `degree` + 1. For example, a linear compensation (with `degree: 1`) requires at least 2 data points."
required: true
type: list
unique_id:
description: An ID that uniquely identifies this sensor. Set this to a unique value to allow customization through the UI.
required: false
type: string
attribute:
description: Attribute from the source to monitor/compensate. When omitted the state value of the source will be used.
required: false
type: string
degree:
description: "The degree of a polynomial. e.g., Linear compensation (y = x + 3) has 1 degree, Quadratic compensation (y = x<sup>2</sup> + x + 3) has 2 degrees, etc."
required: false
default: 1
type: integer
precision:
description: Defines the precision of the calculated values, through the argument of round().
required: false
default: 2
type: integer
unit_of_measurement:
description: Defines the units of measurement of the sensor, if any.
device_class:
description: Sets the [class of the device](/integrations/sensor#device-class), changing the device state and icon that is displayed on the frontend.
required: false
type: string
lower_limit:
@ -84,6 +71,31 @@ lower_limit:
required: false
type: boolean
default: false
name:
description: Name to use in the frontend.
required: false
type: string
precision:
description: Defines the precision of the calculated values, through the argument of round().
required: false
default: 2
type: integer
source:
description: The entity to monitor/compensate.
required: true
type: string
state_class:
description: The [state_class](https://developers.home-assistant.io/docs/core/entity/sensor#available-state-classes) of the sensor.
required: false
type: string
unique_id:
description: An ID that uniquely identifies this sensor. Set this to a unique value to allow customization through the UI.
required: false
type: string
unit_of_measurement:
description: Defines the units of measurement of the sensor, if any.
required: false
type: string
upper_limit:
description: "Enables an upper limit for the sensor. The upper limit is defined by the data collections (`data_points`) greatest `uncompensated_value`. For example, if the greatest `uncompensated_value` value is `5.0` and the paired `compensated_value` is `10.0`, any `source` state greater than `5.0` will produce a compensated state of `10.0`."
required: false

View File

@ -31,6 +31,8 @@ ha_platforms:
- switch
- time
ha_iot_class: Cloud Push
ha_dhcp: true
ha_zeroconf: true
---
{% include integrations/supported_brand.md %}

View File

@ -170,7 +170,7 @@ name:
type: string
default: MQTT Cover
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:

View File

@ -1,376 +0,0 @@
---
title: "Template cover"
description: "Instructions on how to integrate template covers into Home Assistant."
ha_category:
- Cover
- Helper
ha_release: 0.48
ha_iot_class: Local Push
ha_quality_scale: internal
ha_codeowners:
- '@home-assistant/core'
ha_domain: template
ha_platforms:
- cover
ha_integration_type: helper
related:
- docs: /docs/configuration/
title: Configuration file
---
The `template` platform can create covers that combine integrations and provides
the ability to run scripts or invoke actions for each of the open,
close, stop, position and tilt commands of a cover.
## Configuration
To enable Template Covers in your installation,
add the following to your {% term "`configuration.yaml`" %} file:
{% raw %}
```yaml
# Example configuration.yaml entry
cover:
- platform: template
covers:
garage_door:
device_class: garage
friendly_name: "Garage Door"
value_template: "{{ states('sensor.garage_door')|float > 0 }}"
open_cover:
action: script.open_garage_door
close_cover:
action: script.close_garage_door
stop_cover:
action: script.stop_garage_door
```
{% endraw %}
{% configuration %}
covers:
description: List of your covers.
required: true
type: map
keys:
friendly_name:
description: Name to use in the frontend.
required: false
type: string
unique_id:
description: An ID that uniquely identifies this cover. Set this to a unique value to allow customization through the UI.
required: false
type: string
value_template:
description: Defines a template to get the state of the cover. Valid output values from the template are `open`, `opening`, `closing` and `closed` which are directly mapped to the corresponding states. In addition, `true` is valid as a synonym to `open` and `false` as a synonym to `closed`. If [both a `value_template` and a `position_template`](#combining-value_template-and-position_template) are specified, only `opening` and `closing` are set from the `value_template`. If the template produces a `None` value the state will be set to `unknown`.
required: false
type: template
position_template:
description: Defines a template to get the position of the cover. Legal values are numbers between `0` (closed) and `100` (open). If the template produces a `None` value the current position will be set to `unknown`.
required: false
type: template
icon_template:
description: Defines a template to specify which icon to use.
required: false
type: template
entity_picture_template:
description: Defines a template for the entity picture of the cover.
required: false
type: template
availability_template:
description: Defines a template to get the `available` state of the entity. If the template either fails to render or returns `True`, `"1"`, `"true"`, `"yes"`, `"on"`, `"enable"`, or a non-zero number, the entity will be `available`. If the template returns any other value, the entity will be `unavailable`. If not configured, the entity will always be `available`. Note that the string comparison is not case sensitive; `"TrUe"` and `"yEs"` are allowed.
required: false
type: template
default: true
device_class:
description: Sets the [class of the device](/integrations/cover/), changing the device state and icon that is displayed on the frontend.
required: false
type: string
open_cover:
description: Defines an action to open the cover. If [`open_cover`](#open_cover) is specified, [`close_cover`](#close_cover) must also be specified. At least one of [`open_cover`](#open_cover) and [`set_cover_position`](#set_cover_position) must be specified.
required: inclusive
type: action
close_cover:
description: Defines an action to close the cover.
required: inclusive
type: action
stop_cover:
description: Defines an action to stop the cover.
required: false
type: action
set_cover_position:
description: Defines an action to set to a cover position (between `0` and `100`). The variable `position` will contain the entity's set position.
required: false
type: action
set_cover_tilt_position:
description: Defines an action to set the tilt of a cover (between `0` and `100`). The variable `tilt` will contain the entity's set tilt position.
required: false
type: action
optimistic:
description: Force cover position to use [optimistic mode](#optimistic-mode).
required: false
type: boolean
default: false
tilt_optimistic:
description: Force cover tilt position to use [optimistic mode](#optimistic-mode).
required: false
type: boolean
default: false
tilt_template:
description: Defines a template to get the tilt state of the cover. Legal values are numbers between `0` (closed) and `100` (open). If the template produces a `None` value the current tilt state will be set to `unknown`.
required: false
type: template
{% endconfiguration %}
### Template and action variables
State-based template entities have the special template variable `this` available in their templates and actions. The `this` variable aids [self-referencing](/integrations/template#self-referencing) of an entity's state and attribute in templates and actions.
## Considerations
If you are using the state of a platform that takes extra time to load, the
Template Cover may get an `unknown` state during startup. This results in error
messages in your log file until that platform has completed loading.
If you use `is_state()` function in your template, you can avoid this situation.
For example, you would replace
{% raw %}`{{ states.cover.source.state == 'open' }}`{% endraw %}
with this equivalent that returns `true`/`false` and never gives an unknown
result:
{% raw %}`{{ is_state('cover.source', 'open') }}`{% endraw %}
## Optimistic mode
In optimistic mode, the cover position state is maintained internally. This mode
is automatically enabled if neither [`value_template`](#value_template) or
[`position_template`](#position_template) are specified. Note that this is
unlikely to be very reliable without some feedback mechanism, since there is
otherwise no way to know if the cover is moving properly. The cover can be
forced into optimistic mode by using the [`optimistic`](#optimistic) attribute.
There is an equivalent mode for `tilt_position` that is enabled when
[`tilt_template`](#tilt_template) is not specified or when the
[`tilt_optimistic`](#tilt_optimistic) attribute is used.
## Combining `value_template` and `position_template`
If both a [`value_template`](#value_template) and a [`position_template`](#position_template) are specified only `opening` and `closing` states are set directly from the `value_template`, the `open` and `closed` states will instead be derived from the cover position.
| value_template output | result |
| --------------------- | ------------------------------------ |
| open | state defined by `position_template` |
| closed | state defined by `position_template` |
| true | state defined by `position_template` |
| false | state defined by `position_template` |
| opening | state set to `opening` |
| closing | state set to `closing` |
| <any other output> | No change of state or position |
## Examples
In this section you will find some real-life examples of how to use this cover.
### Garage door
This example converts a garage door with a controllable switch and position
sensor into a cover. The condition check is optional, but suggested if you
use the same switch to open and close the garage.
{% raw %}
```yaml
cover:
- platform: template
covers:
garage_door:
device_class: garage
friendly_name: "Garage Door"
position_template: "{{ states('sensor.garage_door') }}"
open_cover:
- condition: state
entity_id: sensor.garage_door
state: "off"
- action: switch.turn_on
target:
entity_id: switch.garage_door
close_cover:
- condition: state
entity_id: sensor.garage_door
state: "on"
- action: switch.turn_off
target:
entity_id: switch.garage_door
stop_cover:
action: switch.turn_on
target:
entity_id: switch.garage_door
icon_template: >-
{% if states('sensor.garage_door')|float > 0 %}
mdi:garage-open
{% else %}
mdi:garage
{% endif %}
```
{% endraw %}
### Multiple covers
This example allows you to control two or more covers at once.
{% raw %}
```yaml
homeassistant:
customize:
cover_group:
assumed_state: true
cover:
- platform: template
covers:
cover_group:
friendly_name: "Cover Group"
open_cover:
action: script.cover_group
data:
modus: "open"
close_cover:
action: script.cover_group
data:
modus: "close"
stop_cover:
action: script.cover_group
data:
modus: "stop"
set_cover_position:
action: script.cover_group_position
data:
position: "{{position}}"
set_cover_tilt_position:
action: script.cover_group_tilt_position
data:
tilt: "{{tilt}}"
value_template: "{{is_state('sensor.cover_group', 'open')}}"
icon_template: >-
{% if is_state('sensor.cover_group', 'open') %}
mdi:window-open
{% else %}
mdi:window-closed
{% endif %}
sensor:
- platform: template
sensors:
cover_group:
value_template: >-
{% if is_state('cover.bedroom', 'open') %}
open
{% elif is_state('cover.livingroom', 'open') %}
open
{% else %}
closed
{% endif %}
script:
cover_group:
sequence:
- action: "cover.{{modus}}_cover"
target:
entity_id:
- cover.bedroom
- cover.livingroom
cover_group_position:
sequence:
- action: cover.set_cover_position
target:
entity_id:
- cover.bedroom
- cover.livingroom
data:
position: "{{position}}"
automation:
- alias: "Close covers at night"
triggers:
- trigger: sun
event: sunset
offset: "+00:30:00"
actions:
- action: cover.set_cover_position
target:
entity_id: cover.cover_group
data:
position: 25
```
{% endraw %}
### Change the icon
This example shows how to change the icon based on the cover state.
{% raw %}
```yaml
cover:
- platform: template
covers:
cover_group:
friendly_name: "Cover Group"
open_cover:
action: script.cover_group
data:
modus: "open"
close_cover:
action: script.cover_group
data:
modus: "close"
stop_cover:
action: script.cover_group
data:
modus: "stop"
value_template: "{{is_state('sensor.cover_group', 'open')}}"
icon_template: >-
{% if is_state('sensor.cover_group', 'open') %}
mdi:window-open
{% else %}
mdi:window-closed
{% endif %}
```
{% endraw %}
### Change the entity picture
This example shows how to change the entity picture based on the cover state.
{% raw %}
```yaml
cover:
- platform: template
covers:
cover_group:
friendly_name: "Cover Group"
open_cover:
action: script.cover_group
data:
modus: "open"
close_cover:
action: script.cover_group
data:
modus: "close"
stop_cover:
action: script.cover_group
data:
modus: "stop"
value_template: "{{is_state('sensor.cover_group', 'open')}}"
entity_picture_template: >-
{% if is_state('sensor.cover_group', 'open') %}
/local/cover-open.png
{% else %}
/local/cover-closed.png
{% endif %}
```
{% endraw %}

View File

@ -11,6 +11,7 @@ ha_iot_class: Calculated
ha_qa_scale: internal
ha_codeowners:
- '@afaucogney'
- '@karwosts'
ha_domain: derivative
ha_config_flow: true
ha_platforms:
@ -37,6 +38,8 @@ Metric Prefix:
description: Metric unit to prefix the derivative result ([Wikipedia](https://en.wikipedia.org/wiki/Unit_prefix)).
Time unit:
description: SI unit of time of the derivative. If this parameter is set, the unit of measurement will be set to **x/y** where **x** is the unit of the source sensor and **y** is the value of this parameter.
Max sub-interval:
description: Normally, the derivative is calculated each time the source sensor updates. If a time is specified for this option, the derivative will also be recalculated if this amount of time elapses without an update of the source sensor.
{% endconfiguration_basic %}
## YAML configuration
@ -86,6 +89,11 @@ time_window:
default: 0
required: false
type: time
max_sub_interval:
description: Normally, the derivative is calculated each time the source sensor updates. If a time is specified for this option, the derivative will also be recalculated if this amount of time elapses without an update of the source sensor.
required: false
type: time
default: 0
{% endconfiguration %}
## Temperature example

View File

@ -17,10 +17,10 @@ The device tracker allows you to track devices in Home Assistant. This can happe
## Configuring a `device_tracker` platform
To get started add the following lines to your {% term "`configuration.yaml`" %} (example for Netgear):
To get started add the following lines to your {% term "`configuration.yaml`" %} (example for NETGEAR):
```yaml
# Example configuration.yaml entry for Netgear device
# Example configuration.yaml entry for NETGEAR device
device_tracker:
- platform: netgear
host: IP_ADDRESS
@ -50,7 +50,7 @@ Note that setting `track_new_devices: false` will still result in new devices be
In the {% term "`configuration.yaml`" %}, the extended example from above would look like the following sample:
```yaml
# Example configuration.yaml entry for Netgear device
# Example configuration.yaml entry for NETGEAR device
device_tracker:
- platform: netgear
host: IP_ADDRESS

View File

@ -139,7 +139,7 @@ name:
required: false
type: string
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_available:

View File

@ -32,7 +32,7 @@ There is currently support for the following device types within Home Assistant:
## Setup
It is recommended to set up a new & dedicated account on your DoorBird App/web portal for use with Home Assistant. The instructions in this document refer specifically to the DoorBird IOS/Android app. Still, most actions can also be performed using the web-based [DoorBird - WebAdmin](https://webadmin.doorbird.com) portal and logging in on your DoorBird admin account.
It is recommended to set up a new & dedicated account on your DoorBird App/web portal for use with Home Assistant. The instructions in this document refer specifically to the DoorBird iOS/Android app. Still, most actions can also be performed using the web-based [DoorBird - WebAdmin](https://webadmin.doorbird.com) portal and logging in on your DoorBird admin account.
To setup a new account for Home Assistant, open the DoorBird App by selecting **Settings** (cog icon) > **Administration** > **LOGIN** (using your DoorBird App Administration details). Under the **USER** section, choose **Add**. This new user account requires specific permissions enabled (depending on what functionality you want). Permissions can be found under **Permissions**. The following permissions are recommended (or amend depending on your requirements:
@ -84,7 +84,7 @@ The URLs on the event will be based on the configuration used to connect to your
Once events have been registered on the DoorBird device, they must be attached to a schedule using the official DoorBird app on Android or iOS or the [DoorBird - WebAdmin](https://webadmin.doorbird.com) portal. Currently, there are schedules available for doorbell, motion, relay, and RFID events (on supported DoorBird devices). Essentially, you can enable an HTTP(S) call from your DoorBird device to the Home Assistant DoorBird API by configuring an action/event (by enabling a schedule).
The schedules can be found by navigating to the following area of the DoorBird app (Android or IOS):
The schedules can be found by navigating to the following area of the DoorBird app (Android or iOS):
**Settings** (cog icon) > **Administration** > **LOGIN** (using your App Administration details) > (under **EXPERT SETTINGS**) Schedule for doorbell.

View File

@ -1,148 +0,0 @@
---
title: dweet.io
description: Transfer events to Dweet.io.
ha_category:
- History
- Sensor
ha_release: 0.19
ha_iot_class: Cloud Polling
ha_domain: dweet
ha_platforms:
- sensor
ha_integration_type: integration
related:
- docs: /docs/configuration/
title: Configuration file
ha_quality_scale: legacy
---
The `dweet` {% term integration %} makes it possible to transfer details collected with Home Assistant to [Dweet.io](https://dweet.io/) and visualize them with [freeboard.io](https://freeboard.io). Keep in mind that your information will be public!
<p class='img'>
<img src='/images/screenshots/dweet-freeboard.png' />
</p>
{% note %}
The publishing interval is limited to 1 second. This means that it's possible to miss fast changes.
{% endnote %}
There is currently support for the following device types within Home Assistant:
- [Sensor](#sensor)
## Configuration
To use the `dweet` integration in your installation, add the following to your {% term "`configuration.yaml`" %} file.
{% include integrations/restart_ha_after_config_inclusion.md %}
```yaml
# Example configuration.yaml entry
dweet:
name: YOUR_UNIQUE_IDENTIFIER
whitelist:
- input_number.brightness
- input_boolean.notify_home
- sensor.weather_temperature
- sensor.cpu
```
{% configuration %}
name:
description: A unique identifier for your Home Assistant instance.
required: true
type: string
whitelist:
description: List of entity IDs you want to publish
required: true
type: list
{% endconfiguration %}
## Sensor
The `dweet` sensor platform allows you to get details from your devices which are publishing their values to [Dweet.io](https://dweet.io/).
### Configuration
To use Dweet.io sensors in your installation, add the following to your {% term "`configuration.yaml`" %} file:
{% raw %}
```yaml
# Example configuration.yaml entry
sensor:
- platform: dweet
device: THING_NAME
value_template: "{{ value_json.VARIABLE }}"
```
{% endraw %}
{% configuration %}
device:
description: Identification of the device (also known as `thing`).
required: true
type: string
value_template:
description: The variable to extract a value from the content.
required: true
type: template
name:
description: Let you overwrite the name of the device in the frontend.
required: false
default: Dweet.io Sensor
type: string
unit_of_measurement:
description: Defines the unit of measurement of the sensor, if any.
required: false
type: string
{% endconfiguration %}
### Full configuration sample
A full configuration entry could look like the sample below.
{% raw %}
```yaml
# Example configuration.yaml entry
sensor:
- platform: dweet
name: Temperature
device: THING_NAME
value_template: "{{ value_json.VARIABLE }}"
unit_of_measurement: "°C"
```
{% endraw %}
### Interacting with Dweet.io
You can easily send dweets from the command-line to test your sensor with `curl`.
```bash
curl -H 'Content-Type: application/json' -d '{"temperature": 40, "humidity": 65}' https://dweet.io/dweet/for/ha-sensor
```
will give you a response like the one below:
```json
{"this":"succeeded","by":"dweeting","the":"dweet","with":{"thing":"ha-sensor","created":"2015-12-10T09:43:31.133Z","content":{"temperature":40,"humidity":65}}}
```
The [dweepy](https://github.com/paddycarey/dweepy) module gives you another option to work with [Dweet.io](https://dweet.io/).
Send a dweet.
```bash
$ python3
>>> import dweepy
>>> dweepy.dweet_for('ha-sensor', {'temperature': '23', 'humiditiy':'81'})
{'thing': 'ha-sensor', 'created': '2015-12-10T09:46:08.559Z', 'content': {'humiditiy': 81, 'temperature': 23}}
```
Receive the latest dweet.
```bash
>>> dweepy.get_latest_dweet_for('ha-sensor')
[{'thing': 'ha-sensor'', 'created': '2015-12-10T09:43:31.133Z', 'content': {'humidity': 65, 'temperature': 40}}]
```

View File

@ -15,6 +15,7 @@ ha_platforms:
- button
- diagnostics
- number
- select
- sensor
- switch
ha_iot_class: Local Polling

View File

@ -18,6 +18,7 @@ ha_domain: eheimdigital
ha_integration_type: hub
ha_platforms:
- climate
- diagnostics
- light
- number
- select

View File

@ -128,7 +128,21 @@ The Envoy reports individual micro-inverter device production data. SN is the mi
##### Sensor entities
- **Inverter <abbr title="micro-inverter serial number">SN</abbr>**: Current power generated by the inverter in W.
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> 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.
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> 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 to 15 minutes. This entity is disabled by default for all inverters.
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> Lifetime maximum power**: Maximum power production measured by the inverter (W). This entity is disabled by default for all inverters.
Based on the Envoy firmware version, the Envoy may provide inverter device data as well. If that is the case, additional entities are available. These are disabled by default for all inverters. Enable these as desired.
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> DC voltage**: DC voltage measured by the inverter (V).
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> DC current**: DC current measured by the inverter (A).
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> AC voltage**: AC voltage measured by the inverter (V).
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> AC current**: AC current measured by the inverter (A).
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> Frequency**: Frequency measured by the inverter (Hz).
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> Temperature**: Temperature measured by the inverter (°C).
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> Energy produced**: Energy produced by the inverter during last report cycle (mWh).
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> Energy today**: Energy produced today by the inverter (Wh).
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> Lifetime energy**: Total energy produced during inverter lifetime (Wh).
- **Inverter <abbr title="micro-inverter serial number">SN</abbr> Report duration**: Time in seconds covered by the last report data.
<figure>
<img src="/images/integrations/enphase_envoy/enphase_envoy_inverter_device.png" alt="micro-inverter device">

View File

@ -49,11 +49,12 @@ ha_quality_scale: platinum
## Overview
This integration allows [ESPHome](https://esphome.io) devices to connect directly to Home Assistant with the [native ESPHome API](https://esphome.io/components/api.html).
The **ESPHome** {% term integration %} allows [ESPHome](https://esphome.io) devices to connect directly to Home Assistant with the [native ESPHome API](https://esphome.io/components/api.html).
ESPHome is a firmware generator and configuration system that enables the transformation of microcontrollers into fully customizable smart home devices. Using a simple YAML configuration file, ESPHome allows users to define hardware components like sensors, actuators, and peripherals. These configurations are then compiled into custom firmware that can be flashed onto the target device.
### Key Features
### Key features
- **YAML Configuration**: Specify hardware components, sensors, actuators, and integrations using a clean and straightforward YAML syntax.
- **Custom Firmware Generation**: ESPHome compiles the provided configuration into a highly optimized, device-specific firmware image that is ready to be flashed onto microcontrollers.
- **Seamless Integration**: After flashing, ESPHome devices can integrate seamlessly with Home Assistant using the ESPHome native API. This documentation page focuses on the [native API](https://esphome.io/components/api.html), which allows devices to communicate directly with Home Assistant for real-time automation and monitoring. For other integrations, such as MQTT or HTTP, please refer to the relevant sections of the [ESPHome documentation](https://esphome.io/).
@ -95,12 +96,6 @@ password:
For more information, see the [ESPHome Native API Component documentation](https://esphome.io/components/api.html).
## Removing the integration
This integration follows the standard integration removal process; no extra steps are required.
{% include integrations/remove_device_service.md %}
{% include integrations/option_flow.md %}
These options are disabled by default and not required—only set them if specifically needed.
@ -114,25 +109,26 @@ Subscribe to logs from the device:
## Supported devices
The ESPHome integration works with devices that run ESPHome firmware and expose their functionality through the [native ESPHome API](https://esphome.io/components/api.html). This API is designed for tight, efficient integration with Home Assistant, enabling ESPHome devices to push updates directly to Home Assistant in **near real time**.
The ESPHome {% term integration %} works with devices that run ESPHome firmware and expose their functionality through the [native ESPHome API](https://esphome.io/components/api.html). This API is designed for tight, efficient integration with Home Assistant, enabling ESPHome devices to push updates directly to Home Assistant in **near real time**.
## Updating data
Rather than polling for sensor values or device states, Home Assistant maintains a persistent connection to each ESPHome device using the native API. This allows state changes—such as a temperature sensor update, a button press, or a binary sensor trigger—to be sent immediately as they happen, reducing latency and improving responsiveness in automations.
### Additional Technical Details
### Additional technical details
- **Efficient Communication Protocol**: ESPHome uses a lightweight, bi-directional protocol over TCP, optimized for microcontrollers. This protocol is implemented in [aioesphomeapi](https://github.com/esphome/aioesphomeapi), the async Python library used by Home Assistant to handle real-time communication with ESPHome devices. It enables low-latency updates and near instant command execution.
- **Automatic Reconnection**: Home Assistant maintains a persistent connection to each ESPHome device and will automatically attempt to reconnect if the connection is lost. This includes support for "sleepy" or battery-powered devices that periodically wake from deep sleep. When such a device comes online, Home Assistant quickly re-establishes the connection—especially when **mDNS** (Multicast DNS) is available—allowing the device to be discovered and connected without requiring static IPs or manual configuration.
This real-time behavior enables fast, reactive automations and a smooth user experience compared to traditional polling-based integrations.
## Supported Functionality
## Supported functionality
### Entities
The available entities depend on the components defined in the ESPHome YAML configuration for each device. These entities are exposed through the [Native API Component](https://esphome.io/components/api.html).
### Firing Events on the Home Assistant Event Bus
### Firing events on the Home Assistant event bus
When using the native API with Home Assistant, you can trigger events on the Home Assistant event bus directly from ESPHome. For more details, see the [homeassistant.event Action](https://esphome.io/components/api.html#homeassistant-event-action).
@ -140,15 +136,15 @@ When using the native API with Home Assistant, you can trigger events on the Hom
Each device can define Home Assistant Actions based on its ESPHome YAML configuration. For more information, refer to the [Actions](https://esphome.io/components/api.html#actions) section in the [Native API Component](https://esphome.io/components/api.html) documentation.
### Retrieving Data from Home Assistant
### Retrieving data from Home Assistant
ESPHome can retrieve the state of Home Assistant entities using the [Native API](https://esphome.io/components/api.html) with [User-Defined Actions](https://esphome.io/components/api.html#user-defined-actions).
### Home Assistant Actions
### Home Assistant actions
ESPHome devices can call any [Home Assistant Action](https://esphome.io/components/api.html#homeassistant-service-action). This feature is not enabled by default for newly added devices but can be enabled through the options flow on a per-device basis.
### Tag Scanning Support
### Tag scanning support
The [Native API Component](https://esphome.io/components/api.html) also supports sending tag scan events to Home Assistant. See the [homeassistant.tag_scanned Action](https://esphome.io/components/api.html#homeassistant-tag-scanned-action) for more information.
@ -156,6 +152,7 @@ The [Native API Component](https://esphome.io/components/api.html) also supports
- Entity name is a combination of the friendly name (or name if unset) and component name
- Entity ID is derived from the entity name with the device name prepended
- Unicode characters in names are transliterated to their closest ASCII equivalents for compatibility
Example with `friendly_name` set:
@ -182,20 +179,35 @@ sensor:
The entity will be named `livingroomdesk Temperature` and will default to having an entity ID of `sensor.livingroomdesk_temperature`.
Example with Unicode characters:
```yaml
esphome:
name: "haloszoba-klima"
friendly_name: "Hálószoba klíma"
sensor:
name: "Árvíztűrő tükörfúrógép"
```
The entity will be named `Hálószoba klíma Árvíztűrő tükörfúrógép` and will default to having an entity ID of `sensor.haloszoba_klima_arvizturo_tukorfurogep`. Note how the Unicode characters are transliterated rather than replaced with underscores.
## Troubleshooting
### Viewing Live Logs
### Viewing live logs
To troubleshoot your ESPHome devices, you can easily view live logs, whether you're using the [**ESPHome Device Builder Add-on**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon) or the **ESPHome CLI**. The logs contain detailed information such as Wi-Fi connection status, errors, and debug messages, which can help you identify and resolve issues with your device.
#### Using the [**ESPHome Device Builder Add-on**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon)
1. In the [**ESPHome Device Builder Add-on**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon) add-on, find the device you're working with.
2. Click the **LOGS** button to open the log view.
#### Using the **ESPHome CLI**
If you're using the **ESPHome CLI**, follow the instructions for the [logs Command](https://esphome.io/guides/cli.html#logs-command) to access the logs.
### Obtaining Logs from the Device
### Obtaining logs from the device
If you want the device to send logs without requiring you to be actively monitoring, follow these steps:
@ -216,7 +228,7 @@ If you want the device to send logs without requiring you to be actively monitor
This integration supports reconfiguration, allowing you to make changes—such as updating the IP address—even after a device has already been set up.
### Name Conflict Resolution
### Name conflict resolution
If Home Assistant detects multiple devices with the same [**name**](https://esphome.io/components/esphome.html#configuration-variables), it will automatically initiate **Name Conflict Resolution**. This process is designed to help you seamlessly replace a failed or retired device with new hardware, while preserving your existing configuration if desired.
@ -232,7 +244,7 @@ If youre using the same YAML file on the new device, choose **Migrate**. If i
---
### Requirements for Name Conflict Resolution
### Requirements for name conflict resolution
To trigger Name Conflict Resolution, all of the following must be true:
@ -242,7 +254,7 @@ To trigger Name Conflict Resolution, all of the following must be true:
---
### How to Trigger Name Conflict Resolution
### How to trigger name conflict resolution
You can trigger Name Conflict Resolution in several ways:
@ -251,8 +263,14 @@ You can trigger Name Conflict Resolution in several ways:
- Configuring a **newly discovered device** that uses the same name.
- **Manually adding** a device with the same name via the integration setup.
## Known Limitations
## Known limitations
Each ESPHome device must have a **unique name**. This name is important for mDNS announcements, ensuring that the device can be properly discovered, quickly reconnected when it comes online or wakes from deep sleep (for devices that support deep sleep), and correctly linked to the [**ESPHome Device Builder Add-on**](https://my.home-assistant.io/redirect/supervisor_addon/?addon=5c53de3b_esphome&repository_url=https%3A%2F%2Fgithub.com%2Fesphome%2Fhome-assistant-addon). It's also crucial for **DHCP discovery** if mDNS is not available.
Using duplicate names can lead to connection issues, failed discovery, and unexpected behavior with both the integration and the add-on.
## Removing the integration
This integration follows the standard integration removal process; no extra steps are required.
{% include integrations/remove_device_service.md %}

View File

@ -13,15 +13,11 @@ ha_platforms:
- sensor
ha_iot_standard: matter
ha_brand: true
works_with:
- matter
---
[Eve](https://www.evehome.com/) is a member of the Works with Home Assistant partner program for their Matter products. Eve is committed to making sure their products are up-to-date and ready to use in Home Assistant.
Eve 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/)
{% include integrations/wwha.md url="https://www.evehome.com/" %}
The following devices are supported:

View File

@ -155,7 +155,7 @@ name:
type: string
default: MQTT Event
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
payload_available:

View File

@ -9,7 +9,6 @@ ha_iot_class: Cloud Polling
ha_domain: ezviz
ha_codeowners:
- '@RenierM26'
- '@baqs'
ha_config_flow: true
ha_platforms:
- alarm_control_panel
@ -158,6 +157,18 @@ Once triggered, the siren will automatically deactivate after 60 seconds (EZVIZ
If your camera supports motion detection warning sounds, you can use this entity to select the level.
### Battery work mode
For battery powered cameras, you can use this entity to select the battery work mode to optimize your battery consumption.
| Battery work mode | Description |
| ---------------------- | ---------------------------------------------------------------------------------------------------- |
| Plugged in | The camera will keep recording. The camera should be plugged in. |
| High performance | One video clip is longer but saves less power. |
| Power save | One video clip is shorter and saves more power. |
| Super power saving | Sleep mode is on. Active live view can wake up the camera. |
| Custom | The camera will use the schedules registered in the app. |
### Light entity
A light entity will be added to cameras + light combos. You can turn it on/off and set the brightness.

View File

@ -162,7 +162,7 @@ name:
type: string
default: MQTT Fan
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:

View File

@ -1,266 +0,0 @@
---
title: "Template fan"
description: "Instructions how to setup the template fans within Home Assistant."
ha_category:
- Fan
- Helper
ha_release: 0.69
ha_iot_class: Local Push
ha_quality_scale: internal
ha_codeowners:
- '@home-assistant/core'
ha_domain: template
ha_platforms:
- fan
ha_integration_type: helper
related:
- docs: /docs/configuration/
title: Configuration file
---
The **Template** {% term integration %} creates fans that combine integrations and provides the
ability to run scripts or invoke actions for each of the `turn_on`, `turn_off`, `set_percentage`,
`set_preset_mode`, `set_oscillating`, and `set_direction` commands of a fan.
## Configuration
To enable template fans in your installation, add the following to your
{% term "`configuration.yaml`" %} file:
{% raw %}
```yaml
# Example configuration.yaml entry
fan:
- platform: template
fans:
bedroom_fan:
friendly_name: "Bedroom fan"
value_template: "{{ states('input_boolean.state') }}"
percentage_template: "{{ states('input_number.percentage') }}"
preset_mode_template: "{{ states('input_select.preset_mode') }}"
oscillating_template: "{{ states('input_select.osc') }}"
direction_template: "{{ states('input_select.direction') }}"
turn_on:
action: script.fan_on
turn_off:
action: script.fan_off
set_percentage:
action: script.fans_set_speed
data:
percentage: "{{ percentage }}"
set_preset_mode:
action: script.fans_set_preset_mode
data:
preset_mode: "{{ preset_mode }}"
set_oscillating:
action: script.fan_oscillating
data:
oscillating: "{{ oscillating }}"
set_direction:
action: script.fan_direction
data:
direction: "{{ direction }}"
speed_count: 6
preset_modes:
- 'auto'
- 'smart'
- 'whoosh'
```
{% endraw %}
{% configuration %}
fans:
description: List of your fans.
required: true
type: map
keys:
friendly_name:
description: Name to use in the frontend.
required: false
type: string
unique_id:
description: An ID that uniquely identifies this fan. Set this to a unique value to allow customization through the UI.
required: false
type: string
value_template:
description: "Defines a template to get the state of the fan. Valid values: `on`, `off`"
required: true
type: template
percentage_template:
description: Defines a template to get the speed percentage of the fan.
required: false
type: template
preset_mode_template:
description: Defines a template to get the preset mode of the fan.
required: false
type: template
oscillating_template:
description: "Defines a template to get the osc state of the fan. Valid values: `true`, `false`"
required: false
type: template
direction_template:
description: "Defines a template to get the direction of the fan. Valid values: `forward`, `reverse`"
required: false
type: template
availability_template:
description: Defines a template to get the `available` state of the entity. If the template either fails to render or returns `True`, `"1"`, `"true"`, `"yes"`, `"on"`, `"enable"`, or a non-zero number, the entity will be `available`. If the template returns any other value, the entity will be `unavailable`. If not configured, the entity will always be `available`. Note that the string comparison not case sensitive; `"TrUe"` and `"yEs"` are allowed.
required: false
type: template
default: true
turn_on:
description: Defines an action to run when the fan is turned on.
required: true
type: action
turn_off:
description: Defines an action to run when the fan is turned off.
required: true
type: action
set_percentage:
description: Defines an action to run when the fan is given a speed percentage command.
required: false
type: action
set_preset_mode:
description: Defines an action to run when the fan is given a preset command.
required: false
type: action
set_oscillating:
description: Defines an action to run when the fan is given an osc state command.
required: false
type: action
set_direction:
description: Defines an action to run when the fan is given a direction command.
required: false
type: action
preset_modes:
description: List of preset modes the fan is capable of. This is an arbitrary list of strings and must not contain any speeds.
required: false
type: [string, list]
default: []
speed_count:
description: The number of speeds the fan supports. Used to calculate the percentage step for the `fan.increase_speed` and `fan.decrease_speed` actions.
required: false
type: integer
default: 100
{% endconfiguration %}
### Template and action variables
State-based template entities have the special template variable `this` available in their templates and actions. The `this` variable aids [self-referencing](/integrations/template#self-referencing) of an entity's state and attribute in templates and actions.
## Converting from speeds to percentage
When converting a fan with 3 speeds from the old fan entity model, the following percentages can be used:
0 - `off`
33 - `low`
66 - `medium`
100 - `high`
## Examples
### Helper fan
This example uses an input_boolean and an input_number to mimic a fan, and
the example shows multiple actions for `set_percentage`.
{% raw %}
```yaml
fan:
- platform: template
fans:
helper_fan:
friendly_name: "Helper Fan"
value_template: "{{ states('input_boolean.state') }}"
turn_on:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.state
turn_off:
- action: input_boolean.turn_off
target:
entity_id: input_boolean.state
percentage_template: >
{{ states('input_number.percentage') if is_state('input_boolean.state', 'on') else 0 }}
speed_count: 6
set_percentage:
- action: input_boolean.turn_{{ 'on' if percentage > 0 else 'off' }}
target:
entity_id: input_boolean.state
- action: input_number.set_value
target:
entity_id: input_number.percentage
data:
value: "{{ percentage }}"
```
{% endraw %}
### Preset modes fan
This example uses an existing fan with only a percentage. It extends the
percentage value into useable preset modes without a helper entity.
{% raw %}
```yaml
fan:
- platform: template
fans:
preset_mode_fan:
friendly_name: "Preset Mode Fan Example"
value_template: "{{ states('fan.percentage_fan') }}"
turn_on:
- action: fan.turn_on
target:
entity_id: fan.percentage_fan
turn_off:
- action: fan.turn_off
target:
entity_id: fan.percentage_fan
percentage_template: >
{{ state_attr('fan.percentage_fan', 'percentage') }}
speed_count: 3
set_percentage:
- action: fan.set_percentage
target:
entity_id: fan.percentage_fan
data:
percentage: "{{ percentage }}"
preset_modes:
- "off"
- "low"
- "medium"
- "high"
preset_mode_template: >
{% if is_state('fan.percentage_fan', 'on') %}
{% if state_attr('fan.percentage_fan', 'percentage') == 100 %}
high
{% elif state_attr('fan.percentage_fan', 'percentage') == 66 %}
medium
{% else %}
low
{% endif %}
{% else %}
off
{% endif %}
set_preset_mode:
- action: fan.set_percentage
target:
entity_id: fan.percentage_fan
data:
percentage: >-
{% if preset_mode == 'high' %}
100
{% elif preset_mode == 'medium' %}
66
{% elif preset_mode == 'low' %}
33
{% else %}
0
{% endif %}
```
{% endraw %}

View File

@ -31,7 +31,7 @@ After creating a config entry, you can change the entry name, the name of the no
To use notifications in automations or scripts, see the [getting started with automation page](/getting-started/automation/).
Use the `notify.send_message` entity to store notification messages.
Use the `notify.send_message` action to store notification messages.
## Sensor

View File

@ -31,6 +31,8 @@ ha_platforms:
- switch
- time
ha_iot_class: Cloud Push
ha_dhcp: true
ha_zeroconf: true
---
{% include integrations/supported_brand.md %}

View File

@ -2,6 +2,7 @@
title: Google Gemini
description: Instructions on how to integrate Google Gemini as a conversation agent
ha_category:
- Text-to-speech
- Voice
ha_release: 2023.6
ha_domain: google_gemini
@ -15,6 +16,7 @@ ha_config_flow: true
ha_platforms:
- conversation
- diagnostics
- tts
ha_iot_class: Cloud Polling
---

View File

@ -2,6 +2,8 @@
title: Google Generative AI
description: Instructions on how to integrate Google Generative AI as a conversation agent
ha_category:
- Speech-to-text
- Text-to-speech
- Voice
ha_release: 2023.6
ha_iot_class: Cloud Polling
@ -14,6 +16,8 @@ ha_integration_type: service
ha_platforms:
- conversation
- diagnostics
- stt
- tts
related:
- docs: /voice_control/voice_remote_expose_devices/
title: Exposing entities to Assist
@ -25,7 +29,7 @@ related:
title: Google Generative AI
---
The Google Generative AI integration adds a conversation agent powered by [Google Generative AI](https://ai.google.dev/) in Home Assistant. It can optionally be allowed to control Home Assistant.
The Google Generative AI integration adds a conversation agent, speech-to-text, and text-to-speech entities powered by [Google Generative AI](https://ai.google.dev/) to Home Assistant. The conversation agent can optionally be allowed to control Home Assistant.
Controlling Home Assistant is done by providing the AI 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" %}. The AI is able to provide you information about your devices and control them.
@ -121,6 +125,7 @@ fields:
description: The query to search Google for
required: true
```
{% endraw %}
11. Select **Save script**
@ -147,7 +152,7 @@ Allows you to ask Gemini Pro or Gemini Pro Vision to generate content from a pro
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 |
| `filenames` | yes | File names for attachments to include in the prompt. | /tmp/image.jpg |
@ -188,6 +193,39 @@ response_variable: generated_content
{% endraw %}
### Speak
The `tts.speak` action is the modern way to use TTS. Add the `speak` action, select the Google Generative AI TTS entity, select the media player entity or group to send the TTS audio to, and enter the message to speak.
Text-to-speech (TTS) generation is controllable, meaning you can use natural language to structure interactions and guide the style, accent, pace, and tone of the audio. You can change the way the text is spoken directly in the message by, e.g. entering "Say cheerfully: Have a wonderful day" instead of just "Have a wonderful day".
For more options about `speak`, see the Speak section on the main [TTS](/integrations/tts/#service-speak) building block page.
In YAML, your action will look like this:
{% raw %}
```yaml
action: tts.speak
target:
entity_id: tts.google_generative_ai_tts
data:
media_player_entity_id: media_player.tv
message: Say cheerfully: Have a wonderful day!
options:
voice: <voice-name>
```
{% endraw %}
You can configure the following options:
| Option attribute | Optional | Description | Example |
| ---------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------- |
| `voice` | yes | The [voice name](https://ai.google.dev/gemini-api/docs/speech-generation#voices) to be used for the generated speech. The default is `zephyr`. | `achernar` |
The input language is detected automatically. Check the [Google AI documentation](https://ai.google.dev/gemini-api/docs/speech-generation#languages) for the supported languages.
## 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.

View File

@ -32,7 +32,7 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot
- H5071 Hygrometer Thermometer
- H5072 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)
- [H5075 Bluetooth Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-bluetooth-hygrometer-thermometer-h5075) (Active scans required)
- [H5100 Hygrometer Thermometer](https://us.govee.com/collections/thermo-hydrometer/products/govee-h5100-mini-hygrometer-thermometer-sensors)
- H5101 Hygrometer Thermometer
- H5102 Hygrometer Thermometer
@ -49,6 +49,7 @@ The Govee BLE integration will automatically discover devices once the [Bluetoot
- H5125 2 Button Switch
- H5126 6 Button Switch
- H5127 Presence Sensor
- [H5129 Hygrometer Thermometer](https://us.govee.com/products/wi-fi-temperature-humidity-sensor) (Active scans required)
- H5130 Pressure Sensor
- [H5177/5178 Bluetooth Thermo-Hygrometer](https://us.govee.com/collections/thermo-hydrometer/products/bluetooth-thermo-hygrometer)
- H5174 Hygrometer Thermometer

View File

@ -24,4 +24,9 @@ Users keen to explore all current supported servers and configuration possibilit
Once integrated, the sensor logs into the user's Growatt account and accesses the first "Plant." It then retrieves the inverters associated with this plant and generates sensors for these inverters, as well as overall plant sensors.
## Prerequisites
- Growatt account
- Login credentials to that Growatt account, you will need them during setup of the integration
{% include integrations/config_flow.md %}

View File

@ -99,6 +99,7 @@ Send a single command or a set of commands to one device, device ID and availabl
| `command` | no | A single command or a list of commands to send. |
| `num_repeats` | yes | The number of times to repeat the command(s). |
| `delay_secs` | yes | The number of seconds between sending each command. |
| `hold_secs` | yes | The number of seconds the button on the remote is held before the release is sent. |
In the file 'harmony_REMOTENAME.conf' you can find the available devices and commands, for example:

View File

@ -21,16 +21,10 @@ ha_iot_standard: zwave
ha_brand: true
---
[HELTUN](https://www.heltun.com/) is a member of the Works with Home Assistant partner program for their Z-Wave products. HELTUN is committed to making sure their products are up-to-date and ready to use in Home Assistant.
[HELTUN](https://www.heltun.com/) thermostats make it easy to automate your heating system, their touch panel switches control your lighting and motorized appliances and their high load switches control any high load appliances like groups of lights, heaters, or individual sockets.
HELTUN thermostats make it easy to automate your heating system, their touch panel switches control your lighting and motorized appliances and their high load switches control any high load appliances like groups of lights, heaters, or individual sockets.
HELTUN Z-Wave devices work locally and integrate seamlessly with the Z-Wave integration in Home Assistant (Z-Wave stick required). As all connectivity is happening locally, status updates and controlling your devices happen instantly in Home Assistant.
{% include integrations/wwha.md %}
### Firmware updates
HELTUN periodically releases new firmware with additional features and functionality which can be sent to devices via an encrypted OTA (Over-The-Air) update process. In Home Assistant, you can navigate to your device page and use the Update Device Firmware option to upload the firmware from HELTUN for your device.
{% my add_zwave_device badge domain=page.ha_domain %}
[Learn more about Z-Wave in Home Assistant.](/integrations/zwave_js/)

View File

@ -20,9 +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.
HERE offers a Base Plan which includes 5000 free transactions per month. If you are not [updating sensors on demand](#updating-sensors-on-demand-using-automation), you can track 1 route 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)
More information can be found [on the pricing page](https://www.here.com/get-started/pricing)
{% include integrations/config_flow.md %}

View File

@ -13,6 +13,7 @@ ha_category:
ha_iot_class: Cloud Push
ha_release: '0.110'
ha_domain: home_connect
ha_quality_scale: platinum
ha_codeowners:
- '@DavidMStraub'
- '@Diegorro98'
@ -30,6 +31,7 @@ ha_platforms:
- time
ha_integration_type: integration
ha_zeroconf: true
ha_dhcp: true
---
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).
@ -724,7 +726,7 @@ Both entities can use these options, but the availability of these will depend o
### Sensor
{% details "List of binary sensors" %}
{% details "List of sensors" %}
- **Finish time**:
- **Description**: Represents the time when the program will end.

View File

@ -2,7 +2,20 @@
title: Homee
description: Instructions on how to setup Homee devices in Home Assistant.
ha_category:
- Alarm
- Binary sensor
- Button
- Climate
- Cover
- Event
- Fan
- Light
- Lock
- Number
- Select
- Sensor
- Switch
- Valve
ha_config_flow: true
ha_release: 2025.2
ha_iot_class: Local Push
@ -10,11 +23,12 @@ ha_codeowners:
- '@Taraman17'
ha_domain: homee
ha_platforms:
- alarm-control-panel
- alarm_control_panel
- binary_sensor
- button
- climate
- cover
- diagnostics
- event
- fan
- light
@ -62,6 +76,22 @@ New devices added to Homee will be automatically discovered after a restart of H
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.
## Troubleshooting
First, see the general [Home Assistant troubleshooting guide](/docs/configuration/troubleshooting/).
The **homee** integration supports [debug logs and diagnostics](/docs/configuration/troubleshooting/#debug-logs-and-diagnostics).
### Homee device not working as expected
Make sure, the {% term device %} works as expected in homee.
If a homee device shows up in Home Assistant, but does not work as expected or is missing {% term entities %}, open a [report](https://github.com/home-assistant/core/issues) and attach error logs and the device's {% term diagnostics %} data.
### Integration not loading or homee device not showing up in HA
Check that the homee-user, used for Home Assistant, is allowed to see the device.
If that is the case, open a [report](https://github.com/home-assistant/core/issues) and attach error logs and the diagnostic data of the {% term integration %}.
## Reconfiguration
This integration supports reconfiguration, allowing you to change the IP address, even after a device has already been set up.

View File

@ -13,6 +13,7 @@ ha_category:
- Lock
- Sensor
- Switch
- Valve
ha_iot_class: Cloud Push
ha_release: 0.66
ha_config_flow: true
@ -28,6 +29,7 @@ ha_platforms:
- lock
- sensor
- switch
- valve
- weather
ha_integration_type: integration
ha_codeowners:
@ -48,6 +50,7 @@ There is currently support for the following device types within Home Assistant:
- Lock
- Sensor
- Switch
- Valve
- Weather
{% include integrations/config_flow.md %}
@ -207,6 +210,9 @@ Currently, the **HmIP-DLD** can only be used in Home Assistant without a PIN. En
- Switch Actuator for DIN rail mount 1x channels (*HMIP-DRSI1*)
- Switch Actuator - 2x channels (*HmIP-BS2*)
- homematicip_cloud.valve
- Smart Watering Actuator (*ELV-SH-WSM*)
- homematicip_cloud.weather
- Weather Sensor basic (*HmIP-SWO-B*)
- Weather Sensor plus (*HmIP-SWO-PL*)

View File

@ -13,6 +13,7 @@ ha_platforms:
- button
- diagnostics
- number
- select
- sensor
- switch
ha_zeroconf: true
@ -38,7 +39,13 @@ Integration for the [HomeWizard Energy](https://www.homewizard.com) platform. It
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.
You can skip this step if you are configuring one of the following devices:
- Wi-Fi P1 Meter with firmware version 6 or higher
- Wi-Fi kWh Meter with firmware version 5 or higher
- 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).
@ -118,6 +125,16 @@ The Energy Socket also has a switch to control the outlet state and a status lig
- **Cycles**: Number of charge cycles the battery has gone through.
- **State of charge (%)**: The current state of charge of the battery.
#### Battery group mode
The group of connected batteries can be controlled in three different modes using the **Battery group mode** select entity:
- **Zero on meter**: The Plug-In Battery will try to keep the power consumption/production of your home at zero. This means that the Plug-In Battery will charge or discharge to maintain a net-zero power balance. This is the default mode.
- **Charge to full**: All connected Plug-In Batteries will be charged to 100%, regardless of the power consumption/production of your home. When all batteries are fully charged, the Plug-In Battery will switch to the standby mode.
- **Standby**: Batteries will enter standby mode. This means that the Plug-In Battery will neither charge nor discharge.
The **Battery group mode** select can be found in the P1 Meter device, as the P1 Meter is responsible for controlling the Plug-In Battery. This select entity is disabled by default. See [I can't find entities](#i-cant-find-entities-like-voltage-current-or-battery-group-mode) for instructions on enabling disabled entities.
## Identify
The identify button can be pressed to let the status light blink for a few seconds.
@ -173,13 +190,14 @@ It may happen that you can't find your devices or they won't show up in the inte
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.
- **kWh Meter**: Press and hold the button with the WiFi icon for two seconds. Release the button before the display shows "AP".
- **Energy Socket** and **Water 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
## I can't find entities like voltage, current, or battery group mode
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.
Some entities 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.
## Removing the integration

View File

@ -30,7 +30,6 @@ 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 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.

View File

@ -195,7 +195,7 @@ name:
type: string
default: MQTT humidifier
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
optimistic:

View File

@ -149,6 +149,7 @@ The integration will create the following sensors:
- Cutting blade usage time (if available)
- Error. For example: *Mower tilted*, *outside geofence*.
- Downtime (if available)
- Inactive reason (if available). For example: *Searching for satellites* or *planning*.
- Restricted reason. For example: *Week schedule*, *frost*, or *daily limit*.
- Mode
- Next start

View File

@ -2,15 +2,20 @@
title: Huum
description: Instructions on how to integrate a Huum saunas into Home Assistant.
ha_category:
- Binary sensor
- Climate
- Light
ha_release: 2024.2
ha_iot_class: Cloud Polling
ha_codeowners:
- '@frwickst'
- '@vincentwolsink'
ha_domain: huum
ha_config_flow: true
ha_platforms:
- binary_sensor
- climate
- light
ha_integration_type: integration
---
@ -28,3 +33,20 @@ sauna by mistake.
{% endnote %}
{% include integrations/config_flow.md %}
## Available platforms & entities
### Binary sensors
- **Door**: Sauna door state (open or closed).
### Climate
The climate entity controls the sauna heater and offers the following capabilities:
- Adjust target temperature
- Change operation mode (off or heat)
### Light
- **Light**: Sauna light control (on or off).

View File

@ -91,6 +91,7 @@ Provided entities for controlling external sources:
- `switch.[instance]_component_platform_capture`: Toggles the `Screen Capture` source
- `switch.[instance]_component_usb_capture`: Toggles the `USB Capture` source
- `switch.[instance]_component_audio_capture`: Toggles the `Audio Capture` source
### Control over Hyperion functionality

View File

@ -165,7 +165,7 @@ name:
required: false
type: string
object_id:
description: Used instead of `name` for automatic generation of `entity_id`
description: Used `object_id` instead of `name` for automatic generation of `entity_id`. This only works when the entity is added for the first time. When set, this overrides a user-customized Entity ID in case the entity was deleted and added again.
required: false
type: string
unique_id:

View File

@ -30,7 +30,9 @@ Hydrological station:
Sensor entities added to Home Assistant:
- Water level
- Water flow (if a given hydrological station supports it)
- Water temperature (if a given hydrological station supports it)
- Hydrological alert (provides information on hydrological alerts for a given river and area)
## Removing the integration

Some files were not shown because too many files have changed in this diff Show More