Merge branch 'next' into MA-speaker

This commit is contained in:
Ludovic BOUÉ 2025-11-20 07:39:42 +01:00 committed by GitHub
commit 831ddcdf59
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
506 changed files with 17415 additions and 2755 deletions

View File

@ -51,9 +51,8 @@ speakers.
The writing needs to be inclusive, objective, and not gender biased, polarizing, The writing needs to be inclusive, objective, and not gender biased, polarizing,
or discriminatory. We want to be welcoming to all users. or discriminatory. We want to be welcoming to all users.
Write towards the reader directly, and not a group of users. Write from a second-person perspective, using "you" and "your" instead of "the user" Write towards the reader directly, and not a group of users.
second-person perspective, using "you" and "your" instead of "the user" Write from a second-person perspective, using "you" and "your" instead of "the user" or "users".
or "users".
Make the text feel personal and friendly, as if you are talking to a friend who Make the text feel personal and friendly, as if you are talking to a friend who
really enjoys technology and enjoys this hobby of home automation. Write in really enjoys technology and enjoys this hobby of home automation. Write in

View File

@ -11,7 +11,7 @@ jobs:
pull-requests: write pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: dessant/lock-threads@v5.0.1 - uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # v5.0.1
if: ${{ github.repository_owner == 'home-assistant' }} if: ${{ github.repository_owner == 'home-assistant' }}
with: with:
github-token: ${{ github.token }} github-token: ${{ github.token }}

View File

@ -12,7 +12,7 @@ jobs:
if: github.event.issue.type.name == 'Task' if: github.event.issue.type.name == 'Task'
steps: steps:
- name: Check if user is authorized - name: Check if user is authorized
uses: actions/github-script@v7 uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with: with:
script: | script: |
const issueAuthor = context.payload.issue.user.login; const issueAuthor = context.payload.issue.user.login;

View File

@ -12,7 +12,7 @@ jobs:
pull-requests: write pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/stale@v9.1.0 - uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0
if: ${{ github.repository_owner == 'home-assistant' }} if: ${{ github.repository_owner == 'home-assistant' }}
with: with:
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -8,9 +8,9 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Check out files from GitHub - name: Check out files from GitHub
uses: actions/checkout@v5.0.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Setting up Node.js - name: Setting up Node.js
uses: actions/setup-node@v4.4.0 uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with: with:
node-version: 20 node-version: 20
cache: "npm" cache: "npm"
@ -35,9 +35,9 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Check out files from GitHub - name: Check out files from GitHub
uses: actions/checkout@v5.0.0 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Setting up Node.js - name: Setting up Node.js
uses: actions/setup-node@v4.4.0 uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with: with:
node-version: 20 node-version: 20
cache: "npm" cache: "npm"

3
.gitignore vendored
View File

@ -9,7 +9,10 @@ source/_data/blueprint_exchange_data.json
source/_data/version_data.json source/_data/version_data.json
source/_data/alerts_data.json source/_data/alerts_data.json
source/_data/language_scores.json source/_data/language_scores.json
source/_data/codeowners.json
source/_stash source/_stash
source/stylesheets/homeassistant/pages/connect/zwa-2/index.css
source/stylesheets/homeassistant/pages/community/index.css
source/stylesheets/screen.css source/stylesheets/screen.css
source/.jekyll-cache/ source/.jekyll-cache/
vendor vendor

1
.vscode/cSpell.json vendored
View File

@ -11,6 +11,7 @@
"autodiscovery", "autodiscovery",
"autoheal", "autoheal",
"automations", "automations",
"Backblaze",
"balloob", "balloob",
"bloomsky", "bloomsky",
"Bluesound", "Bluesound",

View File

@ -8,6 +8,11 @@
# https://github.com/blog/2392-introducing-code-owners # https://github.com/blog/2392-introducing-code-owners
# Pages # Pages
# Non-integration pages (manually maintained)
source/privacy/index.markdown @frenck
# Integration pages (auto-synced from core)
source/_integrations/3_day_blinds.markdown @starkillerOG source/_integrations/3_day_blinds.markdown @starkillerOG
source/_integrations/_integration_docs_template.markdown @home-assistant/core source/_integrations/_integration_docs_template.markdown @home-assistant/core
source/_integrations/abode.markdown @shred86 source/_integrations/abode.markdown @shred86
@ -15,6 +20,7 @@ source/_integrations/acaia.markdown @zweckj
source/_integrations/accuweather.markdown @bieniu source/_integrations/accuweather.markdown @bieniu
source/_integrations/acmeda.markdown @atmurray source/_integrations/acmeda.markdown @atmurray
source/_integrations/acomax.markdown @starkillerOG source/_integrations/acomax.markdown @starkillerOG
source/_integrations/actron_air.markdown @kclif9 @JagadishDhanamjayam
source/_integrations/adax.markdown @danielhiversen @lazytarget source/_integrations/adax.markdown @danielhiversen @lazytarget
source/_integrations/adguard.markdown @frenck source/_integrations/adguard.markdown @frenck
source/_integrations/ads.markdown @mrpasztoradam source/_integrations/ads.markdown @mrpasztoradam
@ -38,6 +44,7 @@ source/_integrations/airvisual.markdown @bachya
source/_integrations/airvisual_pro.markdown @bachya source/_integrations/airvisual_pro.markdown @bachya
source/_integrations/airzone.markdown @Noltari source/_integrations/airzone.markdown @Noltari
source/_integrations/airzone_cloud.markdown @Noltari source/_integrations/airzone_cloud.markdown @Noltari
source/_integrations/aladdin_connect.markdown @swcloudgenie
source/_integrations/alarm_control_panel.markdown @home-assistant/core source/_integrations/alarm_control_panel.markdown @home-assistant/core
source/_integrations/alert.markdown @home-assistant/core @frenck source/_integrations/alert.markdown @home-assistant/core @frenck
source/_integrations/alexa.markdown @home-assistant/cloud @ochlocracy @jbouwh source/_integrations/alexa.markdown @home-assistant/cloud @ochlocracy @jbouwh
@ -50,7 +57,7 @@ source/_integrations/ambient_network.markdown @thomaskistler
source/_integrations/ambient_station.markdown @bachya source/_integrations/ambient_station.markdown @bachya
source/_integrations/amcrest.markdown @flacjacket source/_integrations/amcrest.markdown @flacjacket
source/_integrations/amp_motorization.markdown @starkillerOG source/_integrations/amp_motorization.markdown @starkillerOG
source/_integrations/analytics.markdown @home-assistant/core @ludeeus source/_integrations/analytics.markdown @home-assistant/core
source/_integrations/analytics_insights.markdown @joostlek source/_integrations/analytics_insights.markdown @joostlek
source/_integrations/android_ip_webcam.markdown @engrbm87 source/_integrations/android_ip_webcam.markdown @engrbm87
source/_integrations/androidtv.markdown @JeffLIrion @ollo69 source/_integrations/androidtv.markdown @JeffLIrion @ollo69
@ -77,8 +84,8 @@ source/_integrations/arcam_fmj.markdown @elupus
source/_integrations/arris_tg2492lg.markdown @vanbalken source/_integrations/arris_tg2492lg.markdown @vanbalken
source/_integrations/arve.markdown @ikalnyi source/_integrations/arve.markdown @ikalnyi
source/_integrations/aseko_pool_live.markdown @milanmeu source/_integrations/aseko_pool_live.markdown @milanmeu
source/_integrations/assist_pipeline.markdown @balloob @synesthesiam source/_integrations/assist_pipeline.markdown @synesthesiam @arturpragacz
source/_integrations/assist_satellite.markdown @home-assistant/core @synesthesiam source/_integrations/assist_satellite.markdown @home-assistant/core @synesthesiam @arturpragacz
source/_integrations/asuswrt.markdown @kennedyshead @ollo69 @Vaskivskyi source/_integrations/asuswrt.markdown @kennedyshead @ollo69 @Vaskivskyi
source/_integrations/atag.markdown @MatsNL source/_integrations/atag.markdown @MatsNL
source/_integrations/aten_pe.markdown @mtdcr source/_integrations/aten_pe.markdown @mtdcr
@ -166,12 +173,13 @@ source/_integrations/comelit.markdown @chemelli74
source/_integrations/comfoconnect.markdown @michaelarnauts source/_integrations/comfoconnect.markdown @michaelarnauts
source/_integrations/command_line.markdown @gjohansson-ST source/_integrations/command_line.markdown @gjohansson-ST
source/_integrations/compensation.markdown @Petro31 source/_integrations/compensation.markdown @Petro31
source/_integrations/compit.markdown @Przemko92
source/_integrations/coned.markdown @tronikos source/_integrations/coned.markdown @tronikos
source/_integrations/config.markdown @home-assistant/core source/_integrations/config.markdown @home-assistant/core
source/_integrations/configurator.markdown @home-assistant/core source/_integrations/configurator.markdown @home-assistant/core
source/_integrations/constructa.markdown @DavidMStraub @Diegorro98 @MartinHjelmare source/_integrations/constructa.markdown @DavidMStraub @Diegorro98 @MartinHjelmare
source/_integrations/control4.markdown @lawtancool source/_integrations/control4.markdown @lawtancool
source/_integrations/conversation.markdown @home-assistant/core @synesthesiam source/_integrations/conversation.markdown @home-assistant/core @synesthesiam @arturpragacz
source/_integrations/cookidoo.markdown @miaucl source/_integrations/cookidoo.markdown @miaucl
source/_integrations/coolmaster.markdown @OnFreund source/_integrations/coolmaster.markdown @OnFreund
source/_integrations/counter.markdown @fabaff source/_integrations/counter.markdown @fabaff
@ -180,6 +188,7 @@ source/_integrations/cozytouch.markdown @imicknl
source/_integrations/cpuspeed.markdown @fabaff source/_integrations/cpuspeed.markdown @fabaff
source/_integrations/cribl.markdown @Bre77 source/_integrations/cribl.markdown @Bre77
source/_integrations/crownstone.markdown @Crownstone @RicArch97 source/_integrations/crownstone.markdown @Crownstone @RicArch97
source/_integrations/cync.markdown @Kinachi249
source/_integrations/dacia.markdown @epenet source/_integrations/dacia.markdown @epenet
source/_integrations/daikin.markdown @fredrike source/_integrations/daikin.markdown @fredrike
source/_integrations/date.markdown @home-assistant/core source/_integrations/date.markdown @home-assistant/core
@ -237,6 +246,7 @@ source/_integrations/ecowitt.markdown @pvizeli
source/_integrations/efergy.markdown @tkdrob source/_integrations/efergy.markdown @tkdrob
source/_integrations/egardia.markdown @jeroenterheerdt source/_integrations/egardia.markdown @jeroenterheerdt
source/_integrations/eheimdigital.markdown @autinerd source/_integrations/eheimdigital.markdown @autinerd
source/_integrations/ekeybionyx.markdown @richardpolzer
source/_integrations/electrasmart.markdown @jafar-atili source/_integrations/electrasmart.markdown @jafar-atili
source/_integrations/electric_kiwi.markdown @mikey0000 source/_integrations/electric_kiwi.markdown @mikey0000
source/_integrations/elevenlabs.markdown @sorgfresser source/_integrations/elevenlabs.markdown @sorgfresser
@ -256,8 +266,6 @@ source/_integrations/energie_vanons.markdown @klaasnicolaas
source/_integrations/energy.markdown @home-assistant/core source/_integrations/energy.markdown @home-assistant/core
source/_integrations/energyzero.markdown @klaasnicolaas source/_integrations/energyzero.markdown @klaasnicolaas
source/_integrations/enigma2.markdown @autinerd source/_integrations/enigma2.markdown @autinerd
source/_integrations/enmax.markdown @tronikos
source/_integrations/enocean.markdown @bdurrer
source/_integrations/enphase_envoy.markdown @bdraco @cgarwood @catsmanac source/_integrations/enphase_envoy.markdown @bdraco @cgarwood @catsmanac
source/_integrations/entur_public_transport.markdown @hfurubotten source/_integrations/entur_public_transport.markdown @hfurubotten
source/_integrations/environment_canada.markdown @gwww @michaeldavie source/_integrations/environment_canada.markdown @gwww @michaeldavie
@ -272,7 +280,6 @@ source/_integrations/esphome.markdown @jesserockz @kbx81 @bdraco
source/_integrations/eufylife_ble.markdown @bdr99 source/_integrations/eufylife_ble.markdown @bdr99
source/_integrations/event.markdown @home-assistant/core source/_integrations/event.markdown @home-assistant/core
source/_integrations/evergy.markdown @tronikos source/_integrations/evergy.markdown @tronikos
source/_integrations/evil_genius_labs.markdown @balloob
source/_integrations/evohome.markdown @zxdavb source/_integrations/evohome.markdown @zxdavb
source/_integrations/ezviz.markdown @RenierM26 source/_integrations/ezviz.markdown @RenierM26
source/_integrations/faa_delays.markdown @ntilley905 source/_integrations/faa_delays.markdown @ntilley905
@ -284,7 +291,9 @@ source/_integrations/file.markdown @fabaff
source/_integrations/file_upload.markdown @home-assistant/core source/_integrations/file_upload.markdown @home-assistant/core
source/_integrations/filesize.markdown @gjohansson-ST source/_integrations/filesize.markdown @gjohansson-ST
source/_integrations/filter.markdown @dgomes source/_integrations/filter.markdown @dgomes
source/_integrations/fing.markdown @Lorenzo-Gasparini
source/_integrations/fire_tv.markdown @JeffLIrion @ollo69 source/_integrations/fire_tv.markdown @JeffLIrion @ollo69
source/_integrations/firefly_iii.markdown @erwindouna
source/_integrations/fireservicerota.markdown @cyberjunky source/_integrations/fireservicerota.markdown @cyberjunky
source/_integrations/firmata.markdown @DaAwesomeP source/_integrations/firmata.markdown @DaAwesomeP
source/_integrations/fitbit.markdown @allenporter source/_integrations/fitbit.markdown @allenporter
@ -292,7 +301,6 @@ source/_integrations/fivem.markdown @Sander0542
source/_integrations/fjaraskupan.markdown @elupus source/_integrations/fjaraskupan.markdown @elupus
source/_integrations/flexit_bacnet.markdown @lellky @piotrbulinski source/_integrations/flexit_bacnet.markdown @lellky @piotrbulinski
source/_integrations/flexom.markdown @imicknl source/_integrations/flexom.markdown @imicknl
source/_integrations/flick_electric.markdown @ZephireNZ
source/_integrations/flipr.markdown @cnico source/_integrations/flipr.markdown @cnico
source/_integrations/flo.markdown @dmulcahey source/_integrations/flo.markdown @dmulcahey
source/_integrations/flume.markdown @ChrisMandich @bdraco @jeeftor source/_integrations/flume.markdown @ChrisMandich @bdraco @jeeftor
@ -300,8 +308,8 @@ source/_integrations/flux_led.markdown @icemanch
source/_integrations/forecast_solar.markdown @klaasnicolaas @frenck source/_integrations/forecast_solar.markdown @klaasnicolaas @frenck
source/_integrations/forked_daapd.markdown @uvjustin source/_integrations/forked_daapd.markdown @uvjustin
source/_integrations/fortios.markdown @kimfrellsen source/_integrations/fortios.markdown @kimfrellsen
source/_integrations/foscam.markdown @krmarien source/_integrations/foscam.markdown @Foscam-wangzhengyu
source/_integrations/frankever.markdown @balloob @bieniu @thecode @chemelli74 @bdraco source/_integrations/frankever.markdown @bieniu @thecode @chemelli74 @bdraco
source/_integrations/freebox.markdown @hacf-fr @Quentame source/_integrations/freebox.markdown @hacf-fr @Quentame
source/_integrations/freedompro.markdown @stefano055415 source/_integrations/freedompro.markdown @stefano055415
source/_integrations/fritz.markdown @AaronDavidSchneider @chemelli74 @mib1185 source/_integrations/fritz.markdown @AaronDavidSchneider @chemelli74 @mib1185
@ -340,7 +348,6 @@ source/_integrations/google_assistant.markdown @home-assistant/cloud
source/_integrations/google_assistant_sdk.markdown @tronikos source/_integrations/google_assistant_sdk.markdown @tronikos
source/_integrations/google_cloud.markdown @lufton @tronikos source/_integrations/google_cloud.markdown @lufton @tronikos
source/_integrations/google_drive.markdown @tronikos source/_integrations/google_drive.markdown @tronikos
source/_integrations/google_gemini.markdown @tronikos @ivanlh
source/_integrations/google_generative_ai_conversation.markdown @tronikos @ivanlh source/_integrations/google_generative_ai_conversation.markdown @tronikos @ivanlh
source/_integrations/google_mail.markdown @tkdrob source/_integrations/google_mail.markdown @tkdrob
source/_integrations/google_photos.markdown @allenporter source/_integrations/google_photos.markdown @allenporter
@ -353,6 +360,7 @@ source/_integrations/gpsd.markdown @fabaff @jrieger
source/_integrations/gree.markdown @cmroche source/_integrations/gree.markdown @cmroche
source/_integrations/greeneye_monitor.markdown @jkeljo source/_integrations/greeneye_monitor.markdown @jkeljo
source/_integrations/group.markdown @home-assistant/core source/_integrations/group.markdown @home-assistant/core
source/_integrations/growatt_server.markdown @johanzander
source/_integrations/guardian.markdown @bachya source/_integrations/guardian.markdown @bachya
source/_integrations/habitica.markdown @tr4nt0r source/_integrations/habitica.markdown @tr4nt0r
source/_integrations/hardware.markdown @home-assistant/core source/_integrations/hardware.markdown @home-assistant/core
@ -395,7 +403,7 @@ source/_integrations/honeywell.markdown @rdfurman @mkmer
source/_integrations/html5.markdown @alexyao2015 source/_integrations/html5.markdown @alexyao2015
source/_integrations/http.markdown @home-assistant/core source/_integrations/http.markdown @home-assistant/core
source/_integrations/huawei_lte.markdown @scop @fphammerle source/_integrations/huawei_lte.markdown @scop @fphammerle
source/_integrations/hue.markdown @balloob @marcelveldt source/_integrations/hue.markdown @marcelveldt
source/_integrations/huisbaasje.markdown @dennisschroer source/_integrations/huisbaasje.markdown @dennisschroer
source/_integrations/humidifier.markdown @home-assistant/core @Shulyaka source/_integrations/humidifier.markdown @home-assistant/core @Shulyaka
source/_integrations/hunterdouglas_powerview.markdown @bdraco @kingy444 @trullock source/_integrations/hunterdouglas_powerview.markdown @bdraco @kingy444 @trullock
@ -423,6 +431,7 @@ source/_integrations/immich.markdown @mib1185
source/_integrations/improv_ble.markdown @emontnemery source/_integrations/improv_ble.markdown @emontnemery
source/_integrations/incomfort.markdown @jbouwh source/_integrations/incomfort.markdown @jbouwh
source/_integrations/indianamichiganpower.markdown @tronikos source/_integrations/indianamichiganpower.markdown @tronikos
source/_integrations/inels.markdown @epdevlab
source/_integrations/influxdb.markdown @mdegat01 source/_integrations/influxdb.markdown @mdegat01
source/_integrations/inkbird.markdown @bdraco source/_integrations/inkbird.markdown @bdraco
source/_integrations/input_boolean.markdown @home-assistant/core source/_integrations/input_boolean.markdown @home-assistant/core
@ -436,7 +445,7 @@ source/_integrations/insteon.markdown @teharris1
source/_integrations/integration.markdown @dgomes source/_integrations/integration.markdown @dgomes
source/_integrations/intellifire.markdown @jeeftor source/_integrations/intellifire.markdown @jeeftor
source/_integrations/intesishome.markdown @jnimmo source/_integrations/intesishome.markdown @jnimmo
source/_integrations/iometer.markdown @MaestroOnICe source/_integrations/iometer.markdown @jukrebs
source/_integrations/ios.markdown @robbiet480 source/_integrations/ios.markdown @robbiet480
source/_integrations/iotawatt.markdown @gtdiehl @jyavenard source/_integrations/iotawatt.markdown @gtdiehl @jyavenard
source/_integrations/iotty.markdown @shapournemati-iotty source/_integrations/iotty.markdown @shapournemati-iotty
@ -445,6 +454,7 @@ source/_integrations/ipma.markdown @dgomes
source/_integrations/ipp.markdown @ctalkington source/_integrations/ipp.markdown @ctalkington
source/_integrations/iqvia.markdown @bachya source/_integrations/iqvia.markdown @bachya
source/_integrations/irish_rail_transport.markdown @ttroy50 source/_integrations/irish_rail_transport.markdown @ttroy50
source/_integrations/irm_kmi.markdown @jdejaegh
source/_integrations/iron_os.markdown @tr4nt0r source/_integrations/iron_os.markdown @tr4nt0r
source/_integrations/isal.markdown @bdraco source/_integrations/isal.markdown @bdraco
source/_integrations/iskra.markdown @iskramis source/_integrations/iskra.markdown @iskramis
@ -476,6 +486,7 @@ source/_integrations/knocki.markdown @joostlek @jgatto1 @JakeBosh
source/_integrations/knx.markdown @Julius2342 @farmio @marvin-w source/_integrations/knx.markdown @Julius2342 @farmio @marvin-w
source/_integrations/kodi.markdown @OnFreund source/_integrations/kodi.markdown @OnFreund
source/_integrations/konnected.markdown @heythisisnate source/_integrations/konnected.markdown @heythisisnate
source/_integrations/konnected_esphome.markdown @jesserockz @kbx81 @bdraco
source/_integrations/kostal_plenticore.markdown @stegm source/_integrations/kostal_plenticore.markdown @stegm
source/_integrations/kraken.markdown @eifinger source/_integrations/kraken.markdown @eifinger
source/_integrations/krispol.markdown @starkillerOG source/_integrations/krispol.markdown @starkillerOG
@ -498,11 +509,12 @@ source/_integrations/letpot.markdown @jpelgrom
source/_integrations/leviton_z_wave.markdown @home-assistant/z-wave source/_integrations/leviton_z_wave.markdown @home-assistant/z-wave
source/_integrations/lg_netcast.markdown @Drafteed @splinter98 source/_integrations/lg_netcast.markdown @Drafteed @splinter98
source/_integrations/lg_thinq.markdown @LG-ThinQ-Integration source/_integrations/lg_thinq.markdown @LG-ThinQ-Integration
source/_integrations/libre_hardware_monitor.markdown @Sab44
source/_integrations/lidarr.markdown @tkdrob source/_integrations/lidarr.markdown @tkdrob
source/_integrations/lifx.markdown @Djelibeybi source/_integrations/lifx.markdown @Djelibeybi
source/_integrations/light.markdown @home-assistant/core source/_integrations/light.markdown @home-assistant/core
source/_integrations/linak.markdown @abmantis source/_integrations/linak.markdown @abmantis
source/_integrations/linkedgo.markdown @balloob @bieniu @thecode @chemelli74 @bdraco source/_integrations/linkedgo.markdown @bieniu @thecode @chemelli74 @bdraco
source/_integrations/linkplay.markdown @Velleman source/_integrations/linkplay.markdown @Velleman
source/_integrations/linux_battery.markdown @fabaff source/_integrations/linux_battery.markdown @fabaff
source/_integrations/linx.markdown @starkillerOG source/_integrations/linx.markdown @starkillerOG
@ -520,6 +532,7 @@ source/_integrations/lookin.markdown @ANMalko @bdraco
source/_integrations/loqed.markdown @mikewoudenberg source/_integrations/loqed.markdown @mikewoudenberg
source/_integrations/luci.markdown @mzdrale source/_integrations/luci.markdown @mzdrale
source/_integrations/luftdaten.markdown @fabaff @frenck source/_integrations/luftdaten.markdown @fabaff @frenck
source/_integrations/lunatone.markdown @MoonDevLT
source/_integrations/lupusec.markdown @majuss @suaveolent source/_integrations/lupusec.markdown @majuss @suaveolent
source/_integrations/lutron.markdown @cdheiser @wilburCForce source/_integrations/lutron.markdown @cdheiser @wilburCForce
source/_integrations/lutron_caseta.markdown @swails @danaues @eclair4151 source/_integrations/lutron_caseta.markdown @swails @danaues @eclair4151
@ -548,6 +561,7 @@ source/_integrations/melnor.markdown @vanstinator
source/_integrations/met.markdown @danielhiversen source/_integrations/met.markdown @danielhiversen
source/_integrations/met_eireann.markdown @DylanGore source/_integrations/met_eireann.markdown @DylanGore
source/_integrations/meteo_france.markdown @hacf-fr @oncleben31 @Quentame source/_integrations/meteo_france.markdown @hacf-fr @oncleben31 @Quentame
source/_integrations/meteo_lt.markdown @xE1H
source/_integrations/meteoalarm.markdown @rolfberkenbosch source/_integrations/meteoalarm.markdown @rolfberkenbosch
source/_integrations/meteoclimatic.markdown @adrianmo source/_integrations/meteoclimatic.markdown @adrianmo
source/_integrations/metoffice.markdown @MrHarcombe @avee87 source/_integrations/metoffice.markdown @MrHarcombe @avee87
@ -589,8 +603,9 @@ source/_integrations/nam.markdown @bieniu
source/_integrations/nanoleaf.markdown @milanmeu @joostlek source/_integrations/nanoleaf.markdown @milanmeu @joostlek
source/_integrations/nasweb.markdown @nasWebio source/_integrations/nasweb.markdown @nasWebio
source/_integrations/national_grid_us.markdown @tronikos source/_integrations/national_grid_us.markdown @tronikos
source/_integrations/nederlandse_spoorwegen.markdown @YarmoM source/_integrations/nederlandse_spoorwegen.markdown @YarmoM @heindrichpaul
source/_integrations/neff.markdown @DavidMStraub @Diegorro98 @MartinHjelmare source/_integrations/neff.markdown @DavidMStraub @Diegorro98 @MartinHjelmare
source/_integrations/neo.markdown @bieniu @thecode @chemelli74 @bdraco
source/_integrations/ness_alarm.markdown @nickw444 source/_integrations/ness_alarm.markdown @nickw444
source/_integrations/nest.markdown @allenporter source/_integrations/nest.markdown @allenporter
source/_integrations/netatmo.markdown @cgtobi source/_integrations/netatmo.markdown @cgtobi
@ -610,6 +625,7 @@ source/_integrations/nightscout.markdown @marciogranzotto
source/_integrations/niko_home_control.markdown @VandeurenGlenn source/_integrations/niko_home_control.markdown @VandeurenGlenn
source/_integrations/nilu.markdown @hfurubotten source/_integrations/nilu.markdown @hfurubotten
source/_integrations/nina.markdown @DeerMaximum source/_integrations/nina.markdown @DeerMaximum
source/_integrations/nintendo_parental_controls.markdown @pantherale0
source/_integrations/nissan_leaf.markdown @filcole source/_integrations/nissan_leaf.markdown @filcole
source/_integrations/noaa_tides.markdown @jdelaney72 source/_integrations/noaa_tides.markdown @jdelaney72
source/_integrations/nobo_hub.markdown @echoromeo @oyvindwe source/_integrations/nobo_hub.markdown @echoromeo @oyvindwe
@ -632,7 +648,7 @@ source/_integrations/nyt_games.markdown @joostlek
source/_integrations/nzbget.markdown @chriscla source/_integrations/nzbget.markdown @chriscla
source/_integrations/obihai.markdown @dshokouhi @ejpenney source/_integrations/obihai.markdown @dshokouhi @ejpenney
source/_integrations/octoprint.markdown @rfleming71 source/_integrations/octoprint.markdown @rfleming71
source/_integrations/ogemray.markdown @balloob @bieniu @thecode @chemelli74 @bdraco source/_integrations/ogemray.markdown @bieniu @thecode @chemelli74 @bdraco
source/_integrations/ohmconnect.markdown @robbiet480 source/_integrations/ohmconnect.markdown @robbiet480
source/_integrations/ohme.markdown @dan-r source/_integrations/ohme.markdown @dan-r
source/_integrations/ollama.markdown @synesthesiam source/_integrations/ollama.markdown @synesthesiam
@ -645,11 +661,11 @@ source/_integrations/onkyo.markdown @arturpragacz @eclair4151
source/_integrations/onvif.markdown @hunterjm @jterrace source/_integrations/onvif.markdown @hunterjm @jterrace
source/_integrations/open_meteo.markdown @frenck source/_integrations/open_meteo.markdown @frenck
source/_integrations/open_router.markdown @joostlek source/_integrations/open_router.markdown @joostlek
source/_integrations/openai_conversation.markdown @balloob
source/_integrations/openerz.markdown @misialq source/_integrations/openerz.markdown @misialq
source/_integrations/openexchangerates.markdown @MartinHjelmare source/_integrations/openexchangerates.markdown @MartinHjelmare
source/_integrations/opengarage.markdown @danielhiversen source/_integrations/opengarage.markdown @danielhiversen
source/_integrations/openhome.markdown @bazwilliams source/_integrations/openhome.markdown @bazwilliams
source/_integrations/openrgb.markdown @felipecrs
source/_integrations/opensky.markdown @joostlek source/_integrations/opensky.markdown @joostlek
source/_integrations/opentherm_gw.markdown @mvn23 source/_integrations/opentherm_gw.markdown @mvn23
source/_integrations/openuv.markdown @bachya source/_integrations/openuv.markdown @bachya
@ -684,15 +700,16 @@ source/_integrations/pi_hole.markdown @shenxn
source/_integrations/picnic.markdown @corneyl @codesalatdev source/_integrations/picnic.markdown @corneyl @codesalatdev
source/_integrations/pinecil.markdown @tr4nt0r source/_integrations/pinecil.markdown @tr4nt0r
source/_integrations/ping.markdown @jpbede source/_integrations/ping.markdown @jpbede
source/_integrations/piper.markdown @balloob @synesthesiam source/_integrations/piper.markdown @synesthesiam
source/_integrations/pitsos.markdown @DavidMStraub @Diegorro98 @MartinHjelmare source/_integrations/pitsos.markdown @DavidMStraub @Diegorro98 @MartinHjelmare
source/_integrations/plaato.markdown @JohNan source/_integrations/plaato.markdown @JohNan
source/_integrations/playstation_network.markdown @jackjpowell @tr4nt0r source/_integrations/playstation_network.markdown @jackjpowell @tr4nt0r
source/_integrations/plex.markdown @jjlawren source/_integrations/plex.markdown @jjlawren
source/_integrations/plugwise.markdown @CoMPaTech @bouwew source/_integrations/plugwise.markdown @CoMPaTech @bouwew
source/_integrations/plum_lightpad.markdown @ColinHarrington @prystupa
source/_integrations/point.markdown @fredrike source/_integrations/point.markdown @fredrike
source/_integrations/pooldose.markdown @lmaertin
source/_integrations/poolsense.markdown @haemishkyd source/_integrations/poolsense.markdown @haemishkyd
source/_integrations/portainer.markdown @erwindouna
source/_integrations/portlandgeneral.markdown @tronikos source/_integrations/portlandgeneral.markdown @tronikos
source/_integrations/powerfox.markdown @klaasnicolaas source/_integrations/powerfox.markdown @klaasnicolaas
source/_integrations/powerwall.markdown @bdraco @jrester @daniel-simpson source/_integrations/powerwall.markdown @bdraco @jrester @daniel-simpson
@ -705,7 +722,6 @@ source/_integrations/prometheus.markdown @knyar
source/_integrations/prosegur.markdown @dgomes source/_integrations/prosegur.markdown @dgomes
source/_integrations/proximity.markdown @mib1185 source/_integrations/proximity.markdown @mib1185
source/_integrations/proxmoxve.markdown @jhollowe @Corbeno source/_integrations/proxmoxve.markdown @jhollowe @Corbeno
source/_integrations/prusalink.markdown @balloob
source/_integrations/ps4.markdown @ktnrg45 source/_integrations/ps4.markdown @ktnrg45
source/_integrations/pse.markdown @tronikos source/_integrations/pse.markdown @tronikos
source/_integrations/psoklahoma.markdown @tronikos source/_integrations/psoklahoma.markdown @tronikos
@ -758,7 +774,7 @@ source/_integrations/rest_command.markdown @jpbede
source/_integrations/rexel.markdown @imicknl source/_integrations/rexel.markdown @imicknl
source/_integrations/rflink.markdown @javicalle source/_integrations/rflink.markdown @javicalle
source/_integrations/rfxtrx.markdown @danielhiversen @elupus @RobBie1221 source/_integrations/rfxtrx.markdown @danielhiversen @elupus @RobBie1221
source/_integrations/rhasspy.markdown @balloob @synesthesiam source/_integrations/rhasspy.markdown @synesthesiam
source/_integrations/ridwell.markdown @bachya source/_integrations/ridwell.markdown @bachya
source/_integrations/ring.markdown @sdb9696 source/_integrations/ring.markdown @sdb9696
source/_integrations/risco.markdown @OnFreund source/_integrations/risco.markdown @OnFreund
@ -769,6 +785,7 @@ source/_integrations/roku.markdown @ctalkington
source/_integrations/romy.markdown @xeniter source/_integrations/romy.markdown @xeniter
source/_integrations/roomba.markdown @pschmitt @cyr-ius @shenxn @Orhideous source/_integrations/roomba.markdown @pschmitt @cyr-ius @shenxn @Orhideous
source/_integrations/roon.markdown @pavoni source/_integrations/roon.markdown @pavoni
source/_integrations/route_b_smart_meter.markdown @SeraphicRav
source/_integrations/rpi_power.markdown @shenxn @swetoast source/_integrations/rpi_power.markdown @shenxn @swetoast
source/_integrations/rss_feed_template.markdown @home-assistant/core source/_integrations/rss_feed_template.markdown @home-assistant/core
source/_integrations/ruckus_unleashed.markdown @lanrat @ms264556 @gabe565 source/_integrations/ruckus_unleashed.markdown @lanrat @ms264556 @gabe565
@ -782,6 +799,7 @@ source/_integrations/saj.markdown @fredericvl
source/_integrations/samsam.markdown @klaasnicolaas source/_integrations/samsam.markdown @klaasnicolaas
source/_integrations/samsungtv.markdown @chemelli74 @epenet source/_integrations/samsungtv.markdown @chemelli74 @epenet
source/_integrations/sanix.markdown @tomaszsluszniak source/_integrations/sanix.markdown @tomaszsluszniak
source/_integrations/satel_integra.markdown @Tommatheussen
source/_integrations/scene.markdown @home-assistant/core source/_integrations/scene.markdown @home-assistant/core
source/_integrations/schedule.markdown @home-assistant/core source/_integrations/schedule.markdown @home-assistant/core
source/_integrations/schlage.markdown @dknowles2 source/_integrations/schlage.markdown @dknowles2
@ -809,9 +827,10 @@ source/_integrations/serial.markdown @fabaff
source/_integrations/seven_segments.markdown @fabaff source/_integrations/seven_segments.markdown @fabaff
source/_integrations/seventeentrack.markdown @shaiu source/_integrations/seventeentrack.markdown @shaiu
source/_integrations/sfr_box.markdown @epenet source/_integrations/sfr_box.markdown @epenet
source/_integrations/sharkiq.markdown @JeffResc @funkybunch source/_integrations/sftp_storage.markdown @maretodoric
source/_integrations/sharkiq.markdown @JeffResc @funkybunch @TheOneOgre
source/_integrations/shell_command.markdown @home-assistant/core source/_integrations/shell_command.markdown @home-assistant/core
source/_integrations/shelly.markdown @balloob @bieniu @thecode @chemelli74 @bdraco source/_integrations/shelly.markdown @bieniu @thecode @chemelli74 @bdraco
source/_integrations/shodan.markdown @fabaff source/_integrations/shodan.markdown @fabaff
source/_integrations/sia.markdown @eavanvalkenburg source/_integrations/sia.markdown @eavanvalkenburg
source/_integrations/siemens.markdown @DavidMStraub @Diegorro98 @MartinHjelmare source/_integrations/siemens.markdown @DavidMStraub @Diegorro98 @MartinHjelmare
@ -851,7 +870,7 @@ source/_integrations/snapcast.markdown @luar123
source/_integrations/snmp.markdown @nmaggioni source/_integrations/snmp.markdown @nmaggioni
source/_integrations/snoo.markdown @Lash-L source/_integrations/snoo.markdown @Lash-L
source/_integrations/snooz.markdown @AustinBrunkhorst source/_integrations/snooz.markdown @AustinBrunkhorst
source/_integrations/solaredge.markdown @frenck @bdraco source/_integrations/solaredge.markdown @frenck @bdraco @tronikos
source/_integrations/solaredge_local.markdown @drobtravels @scheric source/_integrations/solaredge_local.markdown @drobtravels @scheric
source/_integrations/solarlog.markdown @Ernst79 @dontinelli source/_integrations/solarlog.markdown @Ernst79 @dontinelli
source/_integrations/solax.markdown @squishykid @Darsstar source/_integrations/solax.markdown @squishykid @Darsstar
@ -880,6 +899,7 @@ source/_integrations/stt.markdown @home-assistant/core
source/_integrations/subaru.markdown @G-Two source/_integrations/subaru.markdown @G-Two
source/_integrations/suez_water.markdown @ooii @jb101010-2 source/_integrations/suez_water.markdown @ooii @jb101010-2
source/_integrations/sun.markdown @home-assistant/core source/_integrations/sun.markdown @home-assistant/core
source/_integrations/sunricher_dali_center.markdown @niracler
source/_integrations/supla.markdown @mwegrzynek source/_integrations/supla.markdown @mwegrzynek
source/_integrations/surepetcare.markdown @benleb @danielhiversen source/_integrations/surepetcare.markdown @benleb @danielhiversen
source/_integrations/swepco.markdown @tronikos source/_integrations/swepco.markdown @tronikos
@ -889,7 +909,7 @@ source/_integrations/switch.markdown @home-assistant/core
source/_integrations/switch_as_x.markdown @home-assistant/core source/_integrations/switch_as_x.markdown @home-assistant/core
source/_integrations/switchbee.markdown @jafar-atili source/_integrations/switchbee.markdown @jafar-atili
source/_integrations/switchbot.markdown @danielhiversen @RenierM26 @murtas @Eloston @dsypniewski @zerzhang source/_integrations/switchbot.markdown @danielhiversen @RenierM26 @murtas @Eloston @dsypniewski @zerzhang
source/_integrations/switchbot_cloud.markdown @SeraphicRav @laurence-presland @Gigatrappeur source/_integrations/switchbot_cloud.markdown @SeraphicRav @laurence-presland @Gigatrappeur @XiaoLing-git
source/_integrations/switcher_kis.markdown @thecode @YogevBokobza source/_integrations/switcher_kis.markdown @thecode @YogevBokobza
source/_integrations/switchmate.markdown @danielhiversen @qiz-li source/_integrations/switchmate.markdown @danielhiversen @qiz-li
source/_integrations/symfonisk.markdown @jjlawren @peterager source/_integrations/symfonisk.markdown @jjlawren @peterager
@ -900,7 +920,7 @@ source/_integrations/synology_srm.markdown @aerialls
source/_integrations/system_bridge.markdown @timmo001 source/_integrations/system_bridge.markdown @timmo001
source/_integrations/systemmonitor.markdown @gjohansson-ST source/_integrations/systemmonitor.markdown @gjohansson-ST
source/_integrations/tado.markdown @erwindouna source/_integrations/tado.markdown @erwindouna
source/_integrations/tag.markdown @balloob @dmulcahey source/_integrations/tag.markdown @home-assistant/core
source/_integrations/tailscale.markdown @frenck source/_integrations/tailscale.markdown @frenck
source/_integrations/tailwind.markdown @frenck source/_integrations/tailwind.markdown @frenck
source/_integrations/tami4.markdown @Guy293 source/_integrations/tami4.markdown @Guy293
@ -972,6 +992,7 @@ source/_integrations/uprise_smart_shades.markdown @starkillerOG
source/_integrations/uptime.markdown @frenck source/_integrations/uptime.markdown @frenck
source/_integrations/uptime_kuma.markdown @tr4nt0r source/_integrations/uptime_kuma.markdown @tr4nt0r
source/_integrations/uptimerobot.markdown @ludeeus @chemelli74 source/_integrations/uptimerobot.markdown @ludeeus @chemelli74
source/_integrations/usage_prediction.markdown @home-assistant/core
source/_integrations/usb.markdown @bdraco source/_integrations/usb.markdown @bdraco
source/_integrations/usgs_earthquakes_feed.markdown @exxamalte source/_integrations/usgs_earthquakes_feed.markdown @exxamalte
source/_integrations/utility_meter.markdown @dgomes source/_integrations/utility_meter.markdown @dgomes
@ -981,23 +1002,23 @@ source/_integrations/vallox.markdown @andre-richter @slovdahl @viiru- @yozik04
source/_integrations/valve.markdown @home-assistant/core source/_integrations/valve.markdown @home-assistant/core
source/_integrations/vegehub.markdown @ghowevege source/_integrations/vegehub.markdown @ghowevege
source/_integrations/velbus.markdown @Cereal2nd @brefra source/_integrations/velbus.markdown @Cereal2nd @brefra
source/_integrations/velux.markdown @Julius2342 @DeerMaximum @pawlizio source/_integrations/velux.markdown @Julius2342 @DeerMaximum @pawlizio @wollew
source/_integrations/venstar.markdown @garbled1 @jhollowe source/_integrations/venstar.markdown @garbled1 @jhollowe
source/_integrations/vermont_castings.markdown @jeeftor source/_integrations/vermont_castings.markdown @jeeftor
source/_integrations/versasense.markdown @imstevenxyz source/_integrations/versasense.markdown @imstevenxyz
source/_integrations/version.markdown @ludeeus source/_integrations/version.markdown @ludeeus
source/_integrations/vesync.markdown @markperdue @webdjoe @thegardenmonkey @cdnninja @iprak source/_integrations/vesync.markdown @markperdue @webdjoe @thegardenmonkey @cdnninja @iprak @sapuseven
source/_integrations/vicare.markdown @CFenner source/_integrations/vicare.markdown @CFenner
source/_integrations/victron_remote_monitoring.markdown @AndyTempel
source/_integrations/vilfo.markdown @ManneW source/_integrations/vilfo.markdown @ManneW
source/_integrations/vivotek.markdown @HarlemSquirrel source/_integrations/vivotek.markdown @HarlemSquirrel
source/_integrations/vizio.markdown @raman325 source/_integrations/vizio.markdown @raman325
source/_integrations/vlc_telnet.markdown @rodripf @MartinHjelmare source/_integrations/vlc_telnet.markdown @rodripf @MartinHjelmare
source/_integrations/vodafone_station.markdown @paoloantinori @chemelli74 source/_integrations/vodafone_station.markdown @paoloantinori @chemelli74
source/_integrations/voice_assistant.markdown @balloob @synesthesiam source/_integrations/voice_assistant.markdown @balloob @synesthesiam
source/_integrations/voip.markdown @balloob @synesthesiam @jaminh source/_integrations/voip.markdown @synesthesiam @jaminh
source/_integrations/volumio.markdown @OnFreund source/_integrations/volumio.markdown @OnFreund
source/_integrations/volvo.markdown @thomasddn source/_integrations/volvo.markdown @thomasddn
source/_integrations/volvooncall.markdown @molobrakos
source/_integrations/wake_on_lan.markdown @ntilley905 source/_integrations/wake_on_lan.markdown @ntilley905
source/_integrations/wake_word.markdown @home-assistant/core @synesthesiam source/_integrations/wake_word.markdown @home-assistant/core @synesthesiam
source/_integrations/wallbox.markdown @hesselonline source/_integrations/wallbox.markdown @hesselonline
@ -1019,7 +1040,7 @@ source/_integrations/websocket_api.markdown @home-assistant/core
source/_integrations/weheat.markdown @jesperraemaekers source/_integrations/weheat.markdown @jesperraemaekers
source/_integrations/wemo.markdown @esev source/_integrations/wemo.markdown @esev
source/_integrations/whirlpool.markdown @abmantis @mkmer source/_integrations/whirlpool.markdown @abmantis @mkmer
source/_integrations/whisper.markdown @balloob @synesthesiam source/_integrations/whisper.markdown @synesthesiam
source/_integrations/whois.markdown @frenck source/_integrations/whois.markdown @frenck
source/_integrations/wiffi.markdown @mampfes source/_integrations/wiffi.markdown @mampfes
source/_integrations/wilight.markdown @leofig-rj source/_integrations/wilight.markdown @leofig-rj
@ -1032,7 +1053,7 @@ source/_integrations/wolflink.markdown @adamkrol93 @mtielen
source/_integrations/workday.markdown @fabaff @gjohansson-ST source/_integrations/workday.markdown @fabaff @gjohansson-ST
source/_integrations/worldclock.markdown @fabaff source/_integrations/worldclock.markdown @fabaff
source/_integrations/ws66i.markdown @ssaenger source/_integrations/ws66i.markdown @ssaenger
source/_integrations/wyoming.markdown @balloob @synesthesiam source/_integrations/wyoming.markdown @synesthesiam
source/_integrations/xbox.markdown @hunterjm source/_integrations/xbox.markdown @hunterjm
source/_integrations/xiaomi_aqara.markdown @danielhiversen @syssi source/_integrations/xiaomi_aqara.markdown @danielhiversen @syssi
source/_integrations/xiaomi_ble.markdown @Jc2k @Ernst79 source/_integrations/xiaomi_ble.markdown @Jc2k @Ernst79

12
Gemfile
View File

@ -3,16 +3,16 @@ source 'https://rubygems.org'
ruby '> 2.5.0' ruby '> 2.5.0'
group :development do group :development do
gem 'rake', '13.3.0' gem 'rake', '13.3.1'
gem 'jekyll', '4.4.1' gem 'jekyll', '4.4.1'
gem 'compass', '1.0.3' gem 'compass', '1.0.3'
gem 'sass-globbing', '1.1.5' gem 'sass-globbing', '1.1.5'
gem 'stringex', '2.8.6' gem 'stringex', '2.8.6'
# > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189
gem 'sassc', '2.1.0' gem 'sassc', '2.1.0'
gem 'sass-embedded', '1.91.0' gem 'sass-embedded', '1.93.2'
gem 'rubocop', '1.80.1' gem 'rubocop', '1.81.7'
gem 'ruby-lsp', '0.26.1' gem 'ruby-lsp', '0.26.2'
gem 'rackup', '2.2.1' gem 'rackup', '2.2.1'
end end
@ -23,8 +23,8 @@ group :jekyll_plugins do
gem 'jekyll-toc', '0.19.0' gem 'jekyll-toc', '0.19.0'
end end
gem 'sinatra', '4.1.1' gem 'sinatra', '4.2.1'
gem 'nokogiri', '1.18.9' gem 'nokogiri', '1.18.10'
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
# and associated library # and associated library

View File

@ -5,10 +5,10 @@ GEM
public_suffix (>= 2.0.2, < 7.0) public_suffix (>= 2.0.2, < 7.0)
ast (2.4.3) ast (2.4.3)
base64 (0.3.0) base64 (0.3.0)
bigdecimal (3.2.2) bigdecimal (3.3.1)
chunky_png (1.4.0) chunky_png (1.4.0)
colorator (1.1.0) colorator (1.1.0)
commonmarker (0.23.11) commonmarker (0.23.12)
compass (1.0.3) compass (1.0.3)
chunky_png (~> 1.2) chunky_png (~> 1.2)
compass-core (~> 1.0.2) compass-core (~> 1.0.2)
@ -30,10 +30,10 @@ GEM
ffi (1.17.2-arm64-darwin) ffi (1.17.2-arm64-darwin)
ffi (1.17.2-x86_64-linux-gnu) ffi (1.17.2-x86_64-linux-gnu)
forwardable-extended (2.6.0) forwardable-extended (2.6.0)
google-protobuf (4.32.0-arm64-darwin) google-protobuf (4.33.0-arm64-darwin)
bigdecimal bigdecimal
rake (>= 13) rake (>= 13)
google-protobuf (4.32.0-x86_64-linux-gnu) google-protobuf (4.33.0-x86_64-linux-gnu)
bigdecimal bigdecimal
rake (>= 13) rake (>= 13)
http_parser.rb (0.8.0) http_parser.rb (0.8.0)
@ -70,7 +70,7 @@ GEM
nokogiri (~> 1.12) nokogiri (~> 1.12)
jekyll-watch (2.2.1) jekyll-watch (2.2.1)
listen (~> 3.0) listen (~> 3.0)
json (2.13.2) json (2.15.2)
kramdown (2.5.1) kramdown (2.5.1)
rexml (>= 3.3.9) rexml (>= 3.3.9)
kramdown-parser-gfm (1.1.0) kramdown-parser-gfm (1.1.0)
@ -86,21 +86,21 @@ GEM
multi_json (1.17.0) multi_json (1.17.0)
mustermann (3.0.4) mustermann (3.0.4)
ruby2_keywords (~> 0.0.1) ruby2_keywords (~> 0.0.1)
nokogiri (1.18.9-arm64-darwin) nokogiri (1.18.10-arm64-darwin)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.18.9-x86_64-linux-gnu) nokogiri (1.18.10-x86_64-linux-gnu)
racc (~> 1.4) racc (~> 1.4)
parallel (1.27.0) parallel (1.27.0)
parser (3.3.9.0) parser (3.3.10.0)
ast (~> 2.4.1) ast (~> 2.4.1)
racc racc
pathutil (0.16.2) pathutil (0.16.2)
forwardable-extended (~> 2.6) forwardable-extended (~> 2.6)
prism (1.4.0) prism (1.6.0)
public_suffix (6.0.2) public_suffix (6.0.2)
racc (1.8.1) racc (1.8.1)
rack (3.2.1) rack (3.2.4)
rack-protection (4.1.1) rack-protection (4.2.1)
base64 (>= 0.1.0) base64 (>= 0.1.0)
logger (>= 1.6.0) logger (>= 1.6.0)
rack (>= 3.0.0, < 4) rack (>= 3.0.0, < 4)
@ -110,16 +110,16 @@ GEM
rackup (2.2.1) rackup (2.2.1)
rack (>= 3) rack (>= 3)
rainbow (3.1.1) rainbow (3.1.1)
rake (13.3.0) rake (13.3.1)
rb-fsevent (0.11.2) rb-fsevent (0.11.2)
rb-inotify (0.11.1) rb-inotify (0.11.1)
ffi (~> 1.0) ffi (~> 1.0)
rbs (3.9.4) rbs (3.9.5)
logger logger
regexp_parser (2.11.2) regexp_parser (2.11.3)
rexml (3.4.2) rexml (3.4.4)
rouge (4.6.0) rouge (4.6.1)
rubocop (1.80.1) rubocop (1.81.7)
json (~> 2.3) json (~> 2.3)
language_server-protocol (~> 3.17.0.2) language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0) lint_roller (~> 1.1.0)
@ -127,13 +127,13 @@ GEM
parser (>= 3.3.0.2) parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0) rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0) regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.46.0, < 2.0) rubocop-ast (>= 1.47.1, < 2.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0) unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.46.0) rubocop-ast (1.47.1)
parser (>= 3.3.7.2) parser (>= 3.3.7.2)
prism (~> 1.4) prism (~> 1.4)
ruby-lsp (0.26.1) ruby-lsp (0.26.2)
language_server-protocol (~> 3.17.0) language_server-protocol (~> 3.17.0)
prism (>= 1.2, < 2.0) prism (>= 1.2, < 2.0)
rbs (>= 3, < 5) rbs (>= 3, < 5)
@ -141,9 +141,9 @@ GEM
ruby2_keywords (0.0.5) ruby2_keywords (0.0.5)
safe_yaml (1.0.5) safe_yaml (1.0.5)
sass (3.4.25) sass (3.4.25)
sass-embedded (1.91.0-arm64-darwin) sass-embedded (1.93.2-arm64-darwin)
google-protobuf (~> 4.31) google-protobuf (~> 4.31)
sass-embedded (1.91.0-x86_64-linux-gnu) sass-embedded (1.93.2-x86_64-linux-gnu)
google-protobuf (~> 4.31) google-protobuf (~> 4.31)
sass-globbing (1.1.5) sass-globbing (1.1.5)
sass (>= 3.1) sass (>= 3.1)
@ -151,11 +151,11 @@ GEM
ffi (~> 1.9) ffi (~> 1.9)
sassc (2.1.0-x86_64-linux) sassc (2.1.0-x86_64-linux)
ffi (~> 1.9) ffi (~> 1.9)
sinatra (4.1.1) sinatra (4.2.1)
logger (>= 1.6.0) logger (>= 1.6.0)
mustermann (~> 3.0) mustermann (~> 3.0)
rack (>= 3.0.0, < 4) rack (>= 3.0.0, < 4)
rack-protection (= 4.1.1) rack-protection (= 4.2.1)
rack-session (>= 2.0.0, < 3) rack-session (>= 2.0.0, < 3)
tilt (~> 2.0) tilt (~> 2.0)
stringex (2.8.6) stringex (2.8.6)
@ -180,15 +180,15 @@ DEPENDENCIES
jekyll-paginate (= 1.1.0) jekyll-paginate (= 1.1.0)
jekyll-sitemap (= 1.4.0) jekyll-sitemap (= 1.4.0)
jekyll-toc (= 0.19.0) jekyll-toc (= 0.19.0)
nokogiri (= 1.18.9) nokogiri (= 1.18.10)
rackup (= 2.2.1) rackup (= 2.2.1)
rake (= 13.3.0) rake (= 13.3.1)
rubocop (= 1.80.1) rubocop (= 1.81.7)
ruby-lsp (= 0.26.1) ruby-lsp (= 0.26.2)
sass-embedded (= 1.91.0) sass-embedded (= 1.93.2)
sass-globbing (= 1.1.5) sass-globbing (= 1.1.5)
sassc (= 2.1.0) sassc (= 2.1.0)
sinatra (= 4.1.1) sinatra (= 4.2.1)
stringex (= 2.8.6) stringex (= 2.8.6)
tzinfo (~> 2.0) tzinfo (~> 2.0)
tzinfo-data tzinfo-data

View File

@ -32,6 +32,8 @@ task :generate do
abort("Generating version data failed") unless success abort("Generating version data failed") unless success
success = system "rake language_scores_data" success = system "rake language_scores_data"
abort("Generating language scores data failed") unless success abort("Generating language scores data failed") unless success
success = system "rake codeowners_data"
abort("Extracting codeowners") unless success
success = system "jekyll build" success = system "jekyll build"
abort("Generating site failed") unless success abort("Generating site failed") unless success
if ENV["CONTEXT"] != 'production' if ENV["CONTEXT"] != 'production'
@ -71,6 +73,7 @@ task :preview, :listen do |t, args|
system "rake analytics_data" system "rake analytics_data"
system "rake version_data" system "rake version_data"
system "rake language_scores_data" system "rake language_scores_data"
system "rake codeowners_data"
system "rake alerts_data" system "rake alerts_data"
jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build -t --watch --incremental") jekyllPid = Process.spawn({"OCTOPRESS_ENV"=>"preview"}, "jekyll build -t --watch --incremental")
compassPid = Process.spawn("compass watch") compassPid = Process.spawn("compass watch")
@ -128,3 +131,25 @@ task :language_scores_data do
file.write(JSON.generate(remote_data)) file.write(JSON.generate(remote_data))
end end
end end
desc "Extract CODEOWNERS and output to _data/codeowners.json"
task :codeowners_data do
codeowners = []
File.readlines("CODEOWNERS").each do |line|
next if line.start_with?("#") || line.strip.empty?
parts = line.split
next if parts.length < 2
owners = parts[1..-1]
owners.each do |owner|
owner = owner.delete_prefix('@')
next if owner.include?('/')
codeowners << owner unless codeowners.include?(owner)
end
end
codeowners.sort!
File.open("#{source_dir}/_data/codeowners.json", "w") do |file|
file.write(JSON.generate(codeowners))
end
end

View File

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

BIN
activity-panel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

355
package-lock.json generated
View File

@ -20,11 +20,11 @@
"remark-lint-prohibited-strings": "^4.0.0", "remark-lint-prohibited-strings": "^4.0.0",
"remark-lint-unordered-list-marker-style": "^4.0.1", "remark-lint-unordered-list-marker-style": "^4.0.1",
"remark-stringify": "^11.0.0", "remark-stringify": "^11.0.0",
"textlint": "^15.2.2", "textlint": "^15.2.3",
"textlint-filter-rule-allowlist": "^4.0.0", "textlint-filter-rule-allowlist": "^4.0.0",
"textlint-filter-rule-comments": "^1.2.2", "textlint-filter-rule-comments": "^1.2.2",
"textlint-rule-common-misspellings": "^1.0.1", "textlint-rule-common-misspellings": "^1.0.1",
"textlint-rule-terminology": "^5.2.15" "textlint-rule-terminology": "^5.2.16"
} }
}, },
"node_modules/@azu/format-text": { "node_modules/@azu/format-text": {
@ -144,9 +144,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@modelcontextprotocol/sdk": { "node_modules/@modelcontextprotocol/sdk": {
"version": "1.17.3", "version": "1.20.0",
"resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.17.3.tgz", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.20.0.tgz",
"integrity": "sha512-JPwUKWSsbzx+DLFznf/QZ32Qa+ptfbUlHhRLrBQBAFu9iI1iYvizM4p+zhhRDceSsPutXp4z+R/HPVphlIiclg==", "integrity": "sha512-kOQ4+fHuT4KbR2iq2IjeV32HiihueuOf1vJkq18z08CLZ1UQrTc8BXJpVfxZkq45+inLLD+D4xx4nBjUelJa4Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -267,82 +267,68 @@
} }
}, },
"node_modules/@textlint/ast-node-types": { "node_modules/@textlint/ast-node-types": {
"version": "13.4.1", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-13.4.1.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.3.tgz",
"integrity": "sha512-qrZyhCh8Ekk6nwArx3BROybm9BnX6vF7VcZbijetV/OM3yfS4rTYhoMWISmhVEP2H2re0CtWEyMl/XF+WdvVLQ==", "integrity": "sha512-GEhoxfmh6TF+xC8TJmAUwOzzh0J6sVDqjKhwTTwetf7YDdhHbIv1PuUb/dTadMVIWs1H0+JD4Y27n6LWMmqn9Q==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/ast-tester": { "node_modules/@textlint/ast-tester": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-15.2.3.tgz",
"integrity": "sha512-puwnJSPOeqtPQslz6ehfEF1wqoTb/iTebHj+vy6zePpHhBZRJdZKOqPe7p83Atetc8O5SEYa1aJ8ur8sSm0wQw==", "integrity": "sha512-eT0DBbQTa7Hm0JRRHT9vUv6VoIuY19eqI8UL2I7AzE820DSrrNkgGg/ZxB9I6BCDK/Yg96lJ45fMIeOFPvuJaQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "15.2.2", "@textlint/ast-node-types": "15.2.3",
"debug": "^4.4.1" "debug": "^4.4.3"
} }
}, },
"node_modules/@textlint/ast-tester/node_modules/@textlint/ast-node-types": {
"version": "15.2.2",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz",
"integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/ast-traverse": { "node_modules/@textlint/ast-traverse": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-15.2.3.tgz",
"integrity": "sha512-5uZCNp6fSYvDgQW3LGnJYC90ac1qWhUZJtjE1tI0fPk7U14Gr0Qu5FEOMuW0YUV5aoo3P1OpwrKPt2U6FFlrvg==", "integrity": "sha512-XqlEVbQanAu40pGrtoRJzV3bWUxiCvqpu6FBmHotUgah1jjNWe6DQRkDsjcil9qXrVjXfQFAjG8ZuDk9/sUcGg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "15.2.2" "@textlint/ast-node-types": "15.2.3"
} }
}, },
"node_modules/@textlint/ast-traverse/node_modules/@textlint/ast-node-types": {
"version": "15.2.2",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz",
"integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/config-loader": { "node_modules/@textlint/config-loader": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-15.2.3.tgz",
"integrity": "sha512-uFlxTMhgS0jLzdn4xd3TDS/3QWlE8br2LQVnCjdNmvyU7qNpXHy/9+XUEfbvVMyBXrfBnDIFY4AQAXfhGdOo7g==", "integrity": "sha512-dSedypITXGyh/Bz0t/tQU1NMyehfZeeYhEMtfqpdFY6a3ABLpfaZpOMOZd9EP4zwu2oi2OsooQBMbn/ZdXJ12w==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/kernel": "15.2.2", "@textlint/kernel": "15.2.3",
"@textlint/module-interop": "15.2.2", "@textlint/module-interop": "15.2.3",
"@textlint/resolver": "15.2.2", "@textlint/resolver": "15.2.3",
"@textlint/types": "15.2.2", "@textlint/types": "15.2.3",
"@textlint/utils": "15.2.2", "@textlint/utils": "15.2.3",
"debug": "^4.4.1", "debug": "^4.4.3",
"rc-config-loader": "^4.1.3" "rc-config-loader": "^4.1.3"
} }
}, },
"node_modules/@textlint/feature-flag": { "node_modules/@textlint/feature-flag": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-15.2.3.tgz",
"integrity": "sha512-SX//fr056jGT3aRDbPTz4k0kEqyHRTvbHTr7HgC3yuksO89NKl605gmU9flrykBZC+i4GOMcR2BL4SweiNXbTg==", "integrity": "sha512-XW2NVj3K7Pi8jlgwxKMUh7L1y+EMN+s47TtEC1rkagI581THgHnAyAe+/aHZsF/CJEwevZtGnaan2MY1rnbsYA==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/fixer-formatter": { "node_modules/@textlint/fixer-formatter": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-15.2.3.tgz",
"integrity": "sha512-wX52sevPrM/hWDAolBm5yJkSQ5QGmLYMja4C1Ao3o/HVO5eI/Q6PS8amtoGJOilOXKrVV0hBuEwGdrXuyGngXw==", "integrity": "sha512-cdA3Pt2aaR2NKDBqv/rZiZ8VIuTsUZYX1uaq6v2T2HDFlHn46gv6A4TPg8w5ACpoHid1+kADqe67GRpCxPb9rQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/module-interop": "15.2.2", "@textlint/module-interop": "15.2.3",
"@textlint/resolver": "15.2.2", "@textlint/resolver": "15.2.3",
"@textlint/types": "15.2.2", "@textlint/types": "15.2.3",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"debug": "^4.4.1", "debug": "^4.4.3",
"diff": "^5.2.0", "diff": "^5.2.0",
"string-width": "^4.2.3", "string-width": "^4.2.3",
"strip-ansi": "^6.0.1", "strip-ansi": "^6.0.1",
@ -356,45 +342,38 @@
"dev": true "dev": true
}, },
"node_modules/@textlint/kernel": { "node_modules/@textlint/kernel": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-15.2.3.tgz",
"integrity": "sha512-xFtIx3thI3SC2wk4uApJ5lW0cks4pkSfoRejfYoAMwPd1VyvFhCsQQWNRTyXIlXfNIGT6qY82SoPyXvi3XF6Zg==", "integrity": "sha512-A+YVhh5cFMDrNbnhA754/PT2WrVirQ/zCvGKJz/+yKR+ju97eQc6wZOcu/vYAEsS0+vDZRyR/opD+aOaI3GHZA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "15.2.2", "@textlint/ast-node-types": "15.2.3",
"@textlint/ast-tester": "15.2.2", "@textlint/ast-tester": "15.2.3",
"@textlint/ast-traverse": "15.2.2", "@textlint/ast-traverse": "15.2.3",
"@textlint/feature-flag": "15.2.2", "@textlint/feature-flag": "15.2.3",
"@textlint/source-code-fixer": "15.2.2", "@textlint/source-code-fixer": "15.2.3",
"@textlint/types": "15.2.2", "@textlint/types": "15.2.3",
"@textlint/utils": "15.2.2", "@textlint/utils": "15.2.3",
"debug": "^4.4.1", "debug": "^4.4.3",
"fast-equals": "^4.0.3", "fast-equals": "^4.0.3",
"structured-source": "^4.0.0" "structured-source": "^4.0.0"
} }
}, },
"node_modules/@textlint/kernel/node_modules/@textlint/ast-node-types": {
"version": "15.2.2",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz",
"integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/linter-formatter": { "node_modules/@textlint/linter-formatter": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.3.tgz",
"integrity": "sha512-oMVaMJ3exFvXhCj3AqmCbLaeYrTNLqaJnLJMIlmnRM3/kZdxvku4OYdaDzgtlI194cVxamOY5AbHBBVnY79kEg==", "integrity": "sha512-gnFGl8MejAS4rRDPKV2OYvU0Tb0iJySOPDahf+RCK30b615UqY6CjqWxXw1FvXfT3pHPoRrefVu39j1AKm2ezg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@azu/format-text": "^1.0.2", "@azu/format-text": "^1.0.2",
"@azu/style-format": "^1.0.1", "@azu/style-format": "^1.0.1",
"@textlint/module-interop": "15.2.2", "@textlint/module-interop": "15.2.3",
"@textlint/resolver": "15.2.2", "@textlint/resolver": "15.2.3",
"@textlint/types": "15.2.2", "@textlint/types": "15.2.3",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"debug": "^4.4.1", "debug": "^4.4.3",
"js-yaml": "^3.14.1", "js-yaml": "^3.14.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"pluralize": "^2.0.0", "pluralize": "^2.0.0",
@ -405,14 +384,14 @@
} }
}, },
"node_modules/@textlint/markdown-to-ast": { "node_modules/@textlint/markdown-to-ast": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-15.2.3.tgz",
"integrity": "sha512-7LsDOCApuM5463e4mfJAORyOMDxzJGmfDfoT6RtwL5P1T1kKGxLl5yudzdfm8++WB8v4wJZZEUQqppejeDRs9Q==", "integrity": "sha512-5kz75TBEOUQIpqCaV65l98YSIpfyOyTKSn4et9A//iSbjiwZHDK3HBo2jDWdkHmGX28+w1hBFDR7/eFMnbxAJQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "15.2.2", "@textlint/ast-node-types": "15.2.3",
"debug": "^4.4.1", "debug": "^4.4.3",
"mdast-util-gfm-autolink-literal": "^0.1.3", "mdast-util-gfm-autolink-literal": "^0.1.3",
"neotraverse": "^0.6.18", "neotraverse": "^0.6.18",
"remark-footnotes": "^3.0.0", "remark-footnotes": "^3.0.0",
@ -423,13 +402,6 @@
"unified": "^9.2.2" "unified": "^9.2.2"
} }
}, },
"node_modules/@textlint/markdown-to-ast/node_modules/@textlint/ast-node-types": {
"version": "15.2.2",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz",
"integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/markdown-to-ast/node_modules/bail": { "node_modules/@textlint/markdown-to-ast/node_modules/bail": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
@ -673,9 +645,9 @@
} }
}, },
"node_modules/@textlint/module-interop": { "node_modules/@textlint/module-interop": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.3.tgz",
"integrity": "sha512-2rmNcWrcqhuR84Iio1WRzlc4tEoOMHd6T7urjtKNNefpTt1owrTJ9WuOe60yD3FrTW0J/R0ux5wxUbP/eaeFOA==", "integrity": "sha512-dV6M3ptOFJjR5bgYUMeVqc8AqFrMtCEFaZEiLAfMufX29asYonI2K8arqivOA69S2Lh6esyij6V7qpQiXeK/cA==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
@ -703,83 +675,69 @@
} }
}, },
"node_modules/@textlint/resolver": { "node_modules/@textlint/resolver": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.3.tgz",
"integrity": "sha512-4hGWjmHt0y+5NAkoYZ8FvEkj8Mez9TqfbTm3BPjoV32cIfEixl2poTOgapn1rfm73905GSO3P1jiWjmgvii13Q==", "integrity": "sha512-Qd3udqo2sWa3u0sYgDVd9M/iybBVBJLrWGaID6Yzl9GyhdGi0E6ngo3b9r+H6psbJDIaCKi54IxvC9q5didWfA==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/@textlint/source-code-fixer": { "node_modules/@textlint/source-code-fixer": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-15.2.3.tgz",
"integrity": "sha512-Cstr9wjK7toLmY2hhlZ3YcIh8o/gr7E5dpCd9IalNiMBedvvLYuOfhktKgUa4E7oFcGtl0leDPgx5ENDY25JDw==", "integrity": "sha512-DfKy15kGFG8ddEYDyeRKilVI3nTSdEp5/sw7ariyUXk2spAW8xdToRpgeMaluF4Cp5gcGa6bVOTDJapj/UfFvA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/types": "15.2.2", "@textlint/types": "15.2.3",
"debug": "^4.4.1" "debug": "^4.4.3"
} }
}, },
"node_modules/@textlint/text-to-ast": { "node_modules/@textlint/text-to-ast": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-15.2.3.tgz",
"integrity": "sha512-IphrojtJw3eW/1JMm/Hzc0dsDFALpEzjankABS6tIHMvB2O+2wejRDbDaqmgCgMCr+lGKoMNg5Xvlr5x9XRxww==", "integrity": "sha512-xweE4sDTz56tLy90UXcjn/YEYZr2NH/Kh4Kr5FmQ8K4MtJXOVOubnwmN9503/Vmj4Mq9uNuEzR35D4H2LVHriQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "15.2.2" "@textlint/ast-node-types": "15.2.3"
} }
}, },
"node_modules/@textlint/text-to-ast/node_modules/@textlint/ast-node-types": {
"version": "15.2.2",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz",
"integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/textlint-plugin-markdown": { "node_modules/@textlint/textlint-plugin-markdown": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-15.2.3.tgz",
"integrity": "sha512-JzmHAtC2C4LOpJ/JD2YsqBZt9ej4khFFDI0d9E6P9y9AO/HOEv4GeT7aAjGGPG6AVO977aGiJ92EK9kTwlVnIQ==", "integrity": "sha512-fpHuWt1Tonl+UuObH5upByvPWQjd9swu+beMlrSagBWTFblEyNxGwgaQkTjaWC/SYqJn4TkTsT1c1IZJaHV5oQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/markdown-to-ast": "15.2.2", "@textlint/markdown-to-ast": "15.2.3",
"@textlint/types": "15.2.2" "@textlint/types": "15.2.3"
} }
}, },
"node_modules/@textlint/textlint-plugin-text": { "node_modules/@textlint/textlint-plugin-text": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-15.2.3.tgz",
"integrity": "sha512-bZYlxw8S9zsuJgx2EAR23RFyQ3JtyuIDUA3dbt5Sov2eo20LitNjDIqrQgDo85widbOD/6rG7VioNesV1/6HFw==", "integrity": "sha512-d5a1dXCYqx3cz8Q8dg5JFqWGbZHbfnYIKsue5DndEY6YtZ99JnaAvReo6GuJK5Pg+6pgOys2OvyZRxFA4D59fQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/text-to-ast": "15.2.2", "@textlint/text-to-ast": "15.2.3",
"@textlint/types": "15.2.2" "@textlint/types": "15.2.3"
} }
}, },
"node_modules/@textlint/types": { "node_modules/@textlint/types": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.3.tgz",
"integrity": "sha512-X2BHGAR3yXJsCAjwYEDBIk9qUDWcH4pW61ISfmtejau+tVqKtnbbvEZnMTb6mWgKU1BvTmftd5DmB1XVDUtY3g==", "integrity": "sha512-i8XVmDHJwykMXcGgkSxZLjdbeqnl+voYAcIr94KIe0STwgkHIhwHJgb/tEVFawGClHo+gPczF12l1C5+TAZEzQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "15.2.2" "@textlint/ast-node-types": "15.2.3"
} }
}, },
"node_modules/@textlint/types/node_modules/@textlint/ast-node-types": {
"version": "15.2.2",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz",
"integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==",
"dev": true,
"license": "MIT"
},
"node_modules/@textlint/utils": { "node_modules/@textlint/utils": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-15.2.3.tgz",
"integrity": "sha512-uPCfBl2NF4tiXGjAE5DAwah0Bn/EFsgtXhDEIJV4hsSfBQBD8Guqnh8MvJj25fvZaQS+MTNGiEC6bFXtIMHuAg==", "integrity": "sha512-B5OHi1P6JA0Hy04MmmTeNXFTsSfvgbbqQAWj9iUHg+GhPtd8GyFzb0uxLDIp1oqAGN8eM2hR/n8vwz4WsfPqMw==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
@ -1380,9 +1338,9 @@
} }
}, },
"node_modules/debug": { "node_modules/debug": {
"version": "4.4.1", "version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -1616,13 +1574,13 @@
} }
}, },
"node_modules/eventsource-parser": { "node_modules/eventsource-parser": {
"version": "3.0.5", "version": "3.0.6",
"resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.5.tgz", "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz",
"integrity": "sha512-bSRG85ZrMdmWtm7qkF9He9TNRzc/Bm99gEJMaQoHJ9E6Kv9QBbsldh2oMj7iXmYNEAVvNgvv5vPorG6W+XtBhQ==", "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=20.0.0" "node": ">=18.0.0"
} }
}, },
"node_modules/execall": { "node_modules/execall": {
@ -1744,9 +1702,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/fast-uri": { "node_modules/fast-uri": {
"version": "3.0.6", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
"integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -2480,7 +2438,8 @@
"version": "4.17.21", "version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true "dev": true,
"license": "MIT"
}, },
"node_modules/lodash.sortby": { "node_modules/lodash.sortby": {
"version": "4.7.0", "version": "4.7.0",
@ -4488,13 +4447,14 @@
"dev": true "dev": true
}, },
"node_modules/path-to-regexp": { "node_modules/path-to-regexp": {
"version": "8.2.0", "version": "8.3.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz",
"integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "funding": {
"node": ">=16" "type": "opencollective",
"url": "https://opencollective.com/express"
} }
}, },
"node_modules/picocolors": { "node_modules/picocolors": {
@ -4613,19 +4573,36 @@
} }
}, },
"node_modules/raw-body": { "node_modules/raw-body": {
"version": "3.0.0", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz",
"integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"bytes": "3.1.2", "bytes": "3.1.2",
"http-errors": "2.0.0", "http-errors": "2.0.0",
"iconv-lite": "0.6.3", "iconv-lite": "0.7.0",
"unpipe": "1.0.0" "unpipe": "1.0.0"
}, },
"engines": { "engines": {
"node": ">= 0.8" "node": ">= 0.10"
}
},
"node_modules/raw-body/node_modules/iconv-lite": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz",
"integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
} }
}, },
"node_modules/rc-config-loader": { "node_modules/rc-config-loader": {
@ -6715,9 +6692,9 @@
} }
}, },
"node_modules/strip-json-comments": { "node_modules/strip-json-comments": {
"version": "5.0.2", "version": "5.0.3",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.2.tgz", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
"integrity": "sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==", "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@ -6797,28 +6774,28 @@
"dev": true "dev": true
}, },
"node_modules/textlint": { "node_modules/textlint": {
"version": "15.2.2", "version": "15.2.3",
"resolved": "https://registry.npmjs.org/textlint/-/textlint-15.2.2.tgz", "resolved": "https://registry.npmjs.org/textlint/-/textlint-15.2.3.tgz",
"integrity": "sha512-0V02Lvs7GJfXPNJgBVhayysW+9qe0bZVmyD8FrYzkW70xZcSoVK4Hdl6825wpQqn8KgdB171WNYlWq5FPEAPgg==", "integrity": "sha512-TV6STsR0iDSuBtQTtgtAlQVT65OubHcpxOIGxWgRCBfRqlEwdkD6v3tx6ydE16nk0VdpPJP3/PuIMLKQSQk/ZA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@modelcontextprotocol/sdk": "^1.17.2", "@modelcontextprotocol/sdk": "^1.19.1",
"@textlint/ast-node-types": "15.2.2", "@textlint/ast-node-types": "15.2.3",
"@textlint/ast-traverse": "15.2.2", "@textlint/ast-traverse": "15.2.3",
"@textlint/config-loader": "15.2.2", "@textlint/config-loader": "15.2.3",
"@textlint/feature-flag": "15.2.2", "@textlint/feature-flag": "15.2.3",
"@textlint/fixer-formatter": "15.2.2", "@textlint/fixer-formatter": "15.2.3",
"@textlint/kernel": "15.2.2", "@textlint/kernel": "15.2.3",
"@textlint/linter-formatter": "15.2.2", "@textlint/linter-formatter": "15.2.3",
"@textlint/module-interop": "15.2.2", "@textlint/module-interop": "15.2.3",
"@textlint/resolver": "15.2.2", "@textlint/resolver": "15.2.3",
"@textlint/textlint-plugin-markdown": "15.2.2", "@textlint/textlint-plugin-markdown": "15.2.3",
"@textlint/textlint-plugin-text": "15.2.2", "@textlint/textlint-plugin-text": "15.2.3",
"@textlint/types": "15.2.2", "@textlint/types": "15.2.3",
"@textlint/utils": "15.2.2", "@textlint/utils": "15.2.3",
"debug": "^4.4.1", "debug": "^4.4.3",
"file-entry-cache": "^10.1.3", "file-entry-cache": "^10.1.4",
"glob": "^10.4.5", "glob": "^10.4.5",
"md5": "^2.3.0", "md5": "^2.3.0",
"optionator": "^0.9.4", "optionator": "^0.9.4",
@ -6927,39 +6904,31 @@
} }
}, },
"node_modules/textlint-rule-terminology": { "node_modules/textlint-rule-terminology": {
"version": "5.2.15", "version": "5.2.16",
"resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-5.2.15.tgz", "resolved": "https://registry.npmjs.org/textlint-rule-terminology/-/textlint-rule-terminology-5.2.16.tgz",
"integrity": "sha512-Gmh4au9iB14aNEFNi8fCF3gYYdL5tHw4Ihw1DMGpEADiK4j75PYGFOElzjqmyqRNnhLPWxY/b5OrP77EYmPasA==", "integrity": "sha512-1HQotOLJb6kGAgmRYEA9KiIU+fQupZcOVpZEEhFwmRempvpNnhKowa7Zfpss2v6sbp8Ya+iXRs9xKGw+xheCbQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"lodash": "^4.17.21", "strip-json-comments": "^5.0.3",
"strip-json-comments": "^5.0.1", "textlint-rule-helper": "^2.5.0"
"textlint-rule-helper": "^2.3.1"
}, },
"engines": { "engines": {
"node": ">=20" "node": ">=20"
} }
}, },
"node_modules/textlint-rule-terminology/node_modules/textlint-rule-helper": { "node_modules/textlint-rule-terminology/node_modules/textlint-rule-helper": {
"version": "2.3.1", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-2.3.1.tgz", "resolved": "https://registry.npmjs.org/textlint-rule-helper/-/textlint-rule-helper-2.5.0.tgz",
"integrity": "sha512-b1bijvyiUmKinfFE5hkQMSXs3Ky8jyZ3Y6SOoTRJKV9HLL2LWUVFAUezO7z4FpAkVvYruDYWCwA5qWV8GmvyUw==", "integrity": "sha512-QIbFPtyqLy0g5BJn8mryk9iHzGYicNaFIpLFPiEnb4RXxrEGeQ2W2aARQ9yEXLIAqo+OwK4ndWBAWkbgJEPzTQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@textlint/ast-node-types": "^13.4.1", "@textlint/ast-node-types": "^15.2.1",
"structured-source": "^4.0.0", "structured-source": "^4.0.0",
"unist-util-visit": "^2.0.3" "unist-util-visit": "^2.0.3"
} }
}, },
"node_modules/textlint/node_modules/@textlint/ast-node-types": {
"version": "15.2.2",
"resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz",
"integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==",
"dev": true,
"license": "MIT"
},
"node_modules/textlint/node_modules/brace-expansion": { "node_modules/textlint/node_modules/brace-expansion": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",

View File

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

View File

@ -328,6 +328,7 @@ dd {
display: flex; display: flex;
align-items: center; align-items: center;
font-weight: normal; font-weight: normal;
@media only screen and (max-width: $menu-collapse) { @media only screen and (max-width: $menu-collapse) {
user-select: none; user-select: none;
} }
@ -612,11 +613,11 @@ a.material-card:hover {
.links ul { .links ul {
list-style: none; list-style: none;
margin: 0; margin: 0;
} }
.links li { .links li {
display: inline; display: inline;
} }
} }
.installation-survey { .installation-survey {
@ -894,10 +895,19 @@ a.material-card:hover {
// make it blink every 1.5 seconds, no smoothing // make it blink every 1.5 seconds, no smoothing
animation: blink 1.5s infinite; animation: blink 1.5s infinite;
animation-timing-function: steps(1); animation-timing-function: steps(1);
@keyframes blink { @keyframes blink {
0% { opacity: 1; } 0% {
50% { opacity: 0.2; } opacity: 1;
100% { opacity: 1; } }
50% {
opacity: 0.2;
}
100% {
opacity: 1;
}
} }
} }
@ -1228,12 +1238,48 @@ article.listing {
border-radius: 8px; border-radius: 8px;
box-shadow: rgba(0, 0, 0, 0.5) 0 0 1px; box-shadow: rgba(0, 0, 0, 0.5) 0 0 1px;
vertical-align: middle; vertical-align: middle;
}
img,
table,
div.contain {
&+p { &+p {
margin-top: 1.5rem; margin-top: 1.5rem;
} }
} }
div.contain {
display: grid;
font-size: .9rem;
font-style: italic;
gap: 16px;
text-align: center;
img {
background-color: unset;
border-radius: 20px;
border: unset;
box-shadow: unset;
display: block;
filter: drop-shadow(0 6px 16px rgba(0, 0, 0, 0.1));
margin: 0 auto;
max-width: 620px;
width: 100%;
}
&.fw{
img {
max-width: 100%;
}
}
&.nb {
img {
border-radius: unset;
}
}
}
img.no-shadow { img.no-shadow {
border: 0; border: 0;
box-shadow: none; box-shadow: none;
@ -1275,11 +1321,20 @@ article.listing {
border-radius: 8px; border-radius: 8px;
border-width: 8px; border-width: 8px;
text-align: center; text-align: center;
overflow: hidden;
padding-bottom: 8px; padding-bottom: 8px;
font-size: 0.9rem; font-size: 0.9rem;
box-shadow: rgba(0, 0, 0, 0.5) 0 0 1px; box-shadow: rgba(0, 0, 0, 0.5) 0 0 1px;
font-style: italic;
border: 0; border: 0;
lite-youtube{
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
overflow: hidden;
margin: 0 auto 8px;
}
img { img {
display: block; display: block;
box-shadow: none; box-shadow: none;
@ -1308,10 +1363,10 @@ article.listing {
text-decoration: underline; text-decoration: underline;
overflow-wrap: break-word; overflow-wrap: break-word;
&[rel*="external"]{ &[rel*="external"] {
position: relative; position: relative;
&:after{ &:after {
content: "\00a0\00a0\00a0\00a0\00a0"; content: "\00a0\00a0\00a0\00a0\00a0";
display: inline-block; display: inline-block;
} }

View File

@ -1,6 +1,10 @@
#getting_started { #getting_started {
.installations { .installations {
&.second {
margin-top: 50px;
}
.label { .label {
background: #e8e6f0; background: #e8e6f0;
border-radius: 4px; border-radius: 4px;
@ -143,7 +147,7 @@
} }
iconify-icon.external-link { iconify-icon.external-link {
padding-top: 4px; display: none;
} }
svg { svg {
@ -285,4 +289,4 @@
} }
} }
} }
} }

View File

@ -0,0 +1,132 @@
.container {
display: flex;
margin: 0 auto;
max-width: calc(var(--container-max-width) + (var(--container-gutters) * 2));
padding: 12px calc(var(--container-gutters) / 2);
width: 100%;
height: 100%;
@include bp(desktop) {
padding: 12px var(--container-gutters);
}
&-full {
margin: 0 auto;
padding: 0 calc(var(--container-gutters) / 2);
max-width: calc(var(--container-full-max-width) + (var(--container-gutters) * 2));
width: 100%;
@include bp(desktop) {
padding: 0 var(--container-gutters);
}
}
}
footer{
isolation: isolate;
position: relative;
&:before{
content: '';
position: absolute;
height: 500px;
left: 0;
right: 0;
bottom: 100%;
background: linear-gradient(180deg, #F5F6FA 0%, #FFFFFF 100%);
}
}
html{
scroll-padding-top: 92px;
}
#landingpage {
background-color: #F5F6FA;
color: #002332;
height: auto;
.page-content {
overflow-x: clip;
padding-top: 68px;
}
.content {
max-width: unset;
margin: 0;
}
img {
box-shadow: unset;
vertical-align: unset;
border: unset;
}
.spacer {
display: none;
}
}
section {
padding: var(--section-spacing-y) 0;
position: relative;
z-index: 1;
}
main#page-community {
h1,
.h1 {
@include h1;
}
h2,
.h2 {
@include h2;
}
h3,
.h3 {
@include h3;
text-transform: unset;
letter-spacing: unset;
}
h4,
.h4 {
@include h4;
}
h5,
.h5 {
@include h5;
}
h6,
.h6 {
@include h6;
}
.small {
@include small;
}
.big {
@include big;
}
p {
color: var(--typography-paragraph-color);
font-size: var(--typography-paragraph-font-size);
font-weight: var(--typography-paragraph-font-weight);
line-height: var(--typography-paragraph-line-height);
margin: 0;
&:last-child {
margin-bottom: 0;
}
}
figure {
margin: 0;
}
}

View File

@ -0,0 +1,107 @@
.button {
// Reset - remove after global button refactor
border: unset;
color: initial;
height: unset;
line-height: initial;
margin: unset;
overflow: hidden;
align-items: center;
background-color: #99DFFC;
border-radius: 40px;
display: inline-flex;
font-size: 10px;
font-weight: 600;
padding: 10px 24px;
transition: color 0.2s ease, background-color 0.2s ease;
@include bp(desktop) {
font-size: 14px;
}
&:hover {
box-shadow: unset;
background-color: var(--color-primary);
color: #ffffff;
}
&:before {
content: unset;
}
&:has(.icon) {
gap: 4px;
padding: 4px 14px 4px 4px;
@include bp(desktop) {
gap: 10px;
padding: 8px 24px 8px 8px;
}
}
&.secondary {
background-color: var(--color-secondary);
&:hover {
background-color: var(--color-primary);
color: #ffffff;
}
}
&.hollow-dark {
background-color: unset;
box-shadow: inset 0 0 0 1px #fff;
color: #ffffff;
&:hover {
background-color: #ffffff;
color: #002332;
}
}
}
.buttons {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 12px;
// If DSAP is enabled
&[data-dsap] {
// Only apply if scrolling down into view
&:not([data-dsap-is="in"]):not([data-dsap-is="above"]) {
// Only if scrolling down into the element
.button {
transition-duration: 0s;
transition-delay: 0s;
opacity: 0;
transform: translateY(50px);
scale: 0.85;
}
}
.button {
transform: translateY(0);
@for $i from 1 through 10 {
&:nth-child(#{$i}) {
transition-property: transform, opacity, scale;
transition-duration: .5s;
transition-delay: #{0.1 + ($i * 0.05)}s;
transition-timing-function: cubic-bezier(0.2, 1, 0.5, 1);
}
}
}
}
@include bp(desktop) {
gap: 24px;
}
}

View File

@ -0,0 +1,21 @@
.event-card{
background-color: rgba(255,255,255,0.4);
padding: 12px;
border-radius: 12px;
border: 1px solid #ffffff;
.button{
margin-top: 20px;
}
.event-title{
@include h4;
}
.event-meta{
@include p;
color: #4F606E;
margin-top: 6px;
font-size: 12px;
}
}

View File

@ -0,0 +1,25 @@
.icon{
aspect-ratio: 1/1;
background-color: #ffffff;
border-radius: 50%;
color: #002332;
height: 100%;
padding: 4px;
display: grid;
place-items: center;
height: 24px;
width: 24px;
&:has(use[href="#facebook"]){
padding: 0;
svg{
height: 100%;
width: 100%;
}
}
svg{
width: 100%;
height: 100%;
}
}

View File

@ -0,0 +1,84 @@
@mixin bp($breakpoint) {
@if $breakpoint ==large-mobile {
@media (min-width: 500px) {
@content;
}
}
@else if $breakpoint ==tablet {
@media (min-width: 768px) {
@content;
}
}
@else if $breakpoint ==desktop {
@media (min-width: 1024px) {
@content;
}
}
@else if $breakpoint ==large-desktop {
@media (min-width: 1280px) {
@content;
}
}
// else if the breakpoint is a pixel value, use it as is
@else {
@media (min-width: $breakpoint) {
@content;
}
}
}
@mixin h1 {
font-size: var(--typography-h1-font-size);
font-weight: var(--typography-h1-font-weight);
line-height: var(--typography-h1-line-height);
letter-spacing: -1px;
}
@mixin h2 {
font-size: var(--typography-h2-font-size);
font-weight: var(--typography-h2-font-weight);
line-height: var(--typography-h2-line-height);
letter-spacing: -1px;
}
@mixin h3 {
font-size: var(--typography-h3-font-size);
font-weight: var(--typography-h3-font-weight);
line-height: var(--typography-h3-line-height);
}
@mixin h4 {
font-size: var(--typography-h4-font-size);
font-weight: var(--typography-h4-font-weight);
line-height: var(--typography-h4-line-height);
}
@mixin h5 {
font-size: var(--typography-h5-font-size);
font-weight: var(--typography-h5-font-weight);
line-height: var(--typography-h5-line-height);
}
@mixin h6 {
font-size: var(--typography-h6-font-size);
font-weight: var(--typography-h6-font-weight);
line-height: var(--typography-h6-line-height);
}
@mixin p {
font-size: var(--typography-paragraph-font-size);
font-weight: var(--typography-paragraph-font-weight);
line-height: var(--typography-paragraph-line-height);
}
@mixin small{
font-size: var(--typography-small-paragraph-font-size, var(--typography-paragraph-font-size));
font-weight: var(--typography-small-paragraph-font-weight, var(--typography-paragraph-font-weight));
line-height: var(--typography-small-paragraph-line-height, var(--typography-paragraph-line-height));
}
@mixin big {
font-size: var(--typography-big-font-size);
font-weight: var(--typography-big-font-weight);
line-height: var(--typography-big-line-height);
text-transform: uppercase;
}

View File

@ -0,0 +1,92 @@
.photos {
display: grid;
isolation: isolate;
place-items: center;
position: relative;
&[data-dsap]:not([data-dsap-is="in"]):not([data-dsap-is="above"]) { // Only if scrolling down into the element
.photo {
opacity: 0;
left: 0;
top: 0;
right: 0;
transform: rotate(0) scale(0.8);
transition-duration: 0s;
transition-delay: 0s;
&.large {
opacity: 1;
}
}
}
.photo {
background-color: #ffffff;
grid-area: 1/1;
display: flex;
flex-direction: column;
gap: 8px;
transition-property: transform, opacity, top, left, right;
transition-duration: .8s;
transition-delay: .25s;
transition-timing-function: cubic-bezier(0.2, 1, 0.5, 1);
@for $i from 1 through 3 {
&:nth-child(#{$i}) {
transition-delay: #{0.25 + ($i * 0.05)}s;
}
}
img {
aspect-ratio: 1/1;
width: 100%;
background-color: #f5f5f5;
}
figcaption {
font-size: 16px;
text-align: center;
}
&.small {
border-radius: 8px;
padding: 6px;
position: absolute;
right: -15%;
top: -10%;
width: 50%;
z-index: 1;
transform: rotate(9deg);
img {
border-radius: 4px;
}
}
&.medium {
border-radius: 12px;
left: -10%;
padding: 8px;
position: absolute;
top: -15%;
width: 70%;
z-index: 2;
transform: rotate(-15deg);
img {
border-radius: 6px;
}
}
&.large {
border-radius: 12px;
padding: 12px;
z-index: 3;
img {
border-radius: 6px;
}
}
}
}

View File

@ -0,0 +1,26 @@
.stats {
display: flex;
flex-wrap: wrap;
gap: 24px 40px;
.stat {
display: flex;
flex-direction: column;
min-width: 100px;
.stat-value {
@include h3;
color: var(--color-secondary);
display: flex;
gap: 4px;
}
.stat-label {
@include small;
max-width: 140px;
text-wrap: balance;
}
}
}

View File

@ -0,0 +1,57 @@
:root {
--color-primary: #00AEF8;
--color-secondary: #16F3BE;
// Containers and widths
--container-max-width: 1100px;
--container-full-max-width: 1400px;
--container-gutters: 24px;
--section-spacing-y: 52px;
// Typography
--typography-base-font: "Figtree", serif;
--typography-heading-line-height: 1.25;
--typography-h1-font-size: 36px;
--typography-h1-font-weight: 600;
--typography-h1-line-height: 1;
--typography-h2-font-size: 30px;
--typography-h2-font-weight: 600;
--typography-h2-line-height: 1.1;
--typography-h3-font-size: 24px;
--typography-h3-font-weight: 700;
--typography-h3-line-height: var(--typography-heading-line-height);
--typography-h4-font-size: 14px;
--typography-h4-font-weight: 700;
--typography-h4-line-height: 1.25;
--typography-paragraph-color: #4F606E;
--typography-paragraph-font-size: 16px;
--typography-paragraph-font-weight: 400;
--typography-paragraph-line-height: 1.25;
--typography-small-paragraph-font-size: 12px;
--typography-small-paragraph-line-height: 1.3;
--typography-big-font-size: 46px;
--typography-big-font-weight: 700;
--typography-big-line-height: 1;
}
@include bp(desktop) {
:root {
--section-spacing-y: 80px;
--typography-h1-font-size: 66px;
--typography-h2-font-size: 48px;
--typography-h3-font-size: 32px;
--typography-h4-font-size: 20px;
--typography-paragraph-font-size: 24px;
--typography-small-paragraph-font-size: 16px;
--typography-big-font-size: 128px;
}
}

View File

@ -0,0 +1,260 @@
section#faq {
.container{
flex-direction: column;
h2{
margin: 0;
margin-bottom: 30px;
@include bp(desktop){
margin-bottom: 60px;
}
}
}
.accordion {
.accordion-items {
display: flex;
flex-direction: column;
margin-top: 1px;
}
.accordion-item {
--open: 0;
border-bottom: 1px solid #72787E;
display: flex;
flex-direction: column;
// Checkbox-driven open state
input[type="checkbox"] {
display: none;
}
input[type="checkbox"]:checked ~ .accordion-item-heading {
// Optionally style the heading when open
}
input[type="checkbox"]:checked ~ .accordion-item-content-animation-wrapper {
grid-template-rows: 1fr;
transition: grid-template-rows 0.4s ease 0s;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
.accordion-item-content-transform-wrapper {
opacity: 1;
transform: translateY(0);
transition: transform 0.4s ease, visibility 0s 0.4s ease, margin-top 0.4s ease, opacity 0.3s ease 0.425s;
visibility: visible;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more {
background-color: var(--color-primary)
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more:before,
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more:after {
transform: translate(-50%, -50%) scale(calc(64/28));
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more:hover:before,
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more:hover:after {
transform: translate(-50%, -50%) scale(calc(56/28));
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more .plus {
transform: translate(-50%, -50%) rotate(90deg);
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more .plus:before {
opacity: 0;
}
input[type="checkbox"]:checked ~ .accordion-item-heading .button-more .plus:after {
background-color: #ffffff;
}
&-heading {
cursor: pointer;
margin-bottom: -1px;
transition: background-color 0.3s, color 0.3s;
user-select: none;
isolation: isolate;
label{
display: flex;
justify-content: space-between;
padding: 20px 0;
z-index: 1;
@include bp(desktop){
padding: 40px 0;
}
}
&-title {
font-weight: 400;
font-size: 20px;
color: #002332;
@include bp(desktop){
font-size: 24px;
}
}
&-icon {
display: grid;
flex-shrink: 0;
height: 32px;
place-items: center;
position: relative;
width: 32px;
}
.button-more {
background-color: #ffffff;
border-radius: 50%;
cursor: pointer;
height: 24px;
position: relative;
transition: background-color 0.25s ease-out, box-shadow 0.25s ease-out;
width: 24px;
.plus {
height: 8px;
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%) rotate(0deg);
transition: transform .25s ease-out;
width: 8px;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
.plus:before,
.plus:after {
background-color: var(--color-primary);
content: '';
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
transition: opacity .25s ease-out, background-color .25s ease-out;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
.plus:before {
height: 2px;
width: 8px;
}
.plus:after {
height: 8px;
width: 2px;
}
&:before {
-webkit-backdrop-filter: blur(2px);
backdrop-filter: blur(2px);
background-color: rgba(255, 255, 255, .25);
border-radius: 50%;
content: '';
height: 28px;
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
transition: transform .25s ease-out;
width: 28px;
z-index: -1;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
&:after {
border-radius: 50%;
content: '';
height: 28px;
left: 50%;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
width: 28px;
z-index: 1;
}
&:hover:before,
&:hover:after {
transform: translate(-50%, -50%) scale(calc(34/28));
}
// .active state now handled by input:checked selectors above
}
}
&-content {
gap: 20px;
grid-template-rows: 0fr;
justify-content: center;
padding: 0 0 20px 0;
transition: grid-template-rows 0.3s, transform, visibility 0.3s;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
&,
p {
color: #4F606E;
font-size: 16px;
line-height: 1.5;
margin: 0;
}
p:not(:last-child) {
margin-bottom: 1rem;
}
&-animation {
min-height: 0;
}
&-animation-wrapper {
display: grid;
grid-template-rows: 0fr;
overflow: hidden;
transition: grid-template-rows 0.4s ease;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
&-transform-wrapper {
margin-top: 0;
opacity: 0.875;
transform: translateY(-100%);
transition: transform 0.4s ease, margin-top 0.4s ease, opacity 0.3s ease;
@media (prefers-reduced-motion: reduce) {
transition: none;
}
}
}
}
}
}

View File

@ -0,0 +1,54 @@
section#global {
padding-bottom: 0;
.container {
align-items: center;
flex-direction: column;
gap: 0 40px;
@include bp(desktop) {
flex-direction: row;
}
}
.content {
display: flex;
flex-basis: 0;
flex-direction: column;
flex-grow: 1;
gap: 24px;
@include bp(desktop) {
gap: 60px;
}
&-inner {
display: flex;
flex-direction: column;
gap: 6px;
@include bp(desktop) {
gap: 12px;
}
}
h2 {
margin: 0;
}
}
.photos-wrapper {
max-width: 424px;
padding: 100px 0 0;
@include bp(desktop) {
margin-left: 75px;
}
.photos {
flex-basis: 0;
flex-grow: 1;
}
}
}

View File

@ -0,0 +1,44 @@
section#hero {
--section-spacing-y: 0;
background-image: url('/images/community/hero-m.svg');
background-position: center;
background-size: cover;
border-radius: 12px;
display: flex;
flex-direction: column;
justify-content: flex-end;
min-height: 600px;
@include bp(tablet) {
background-image: url('/images/community/hero.svg');
background-position: center;
border-radius: 24px;
}
.container {
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: 24px 12px;
@include bp(tablet) {
padding: 164px 12px 66px 12px;
}
.content {
align-items: flex-start;
display: flex;
flex-direction: column;
max-width: 670px;
.event-card, .button {
margin-top: 24px;
@include bp(tablet) {
margin-top: 32px;
}
}
}
}
}

View File

@ -0,0 +1,106 @@
section#join {
isolation: isolate;
.container {
align-items: center;
flex-direction: column;
position: relative;
}
h2 {
align-items: center;
display: flex;
flex-direction: column;
margin: 0 auto;
text-transform: unset;
span:not(:first-child) {
margin-top: 8px;
@include bp(desktop) {
margin-top: 24px;
}
}
}
p {
//background-color: rgba(245, 246, 250, 0.6);
//backdrop-filter: blur(2px);
max-width: 650px;
text-align: center;
text-wrap: balance;
padding-top: 16px;
z-index: 1;
@include bp(desktop) {
padding-top: 40px;
}
}
.buttons {
margin-top: 52px;
z-index: 1;
@include bp(desktop) {
margin-top: 60px;
}
}
.avatars {
display: grid;
// 12 cols
grid-template-columns: repeat(6, 1fr);
position: absolute;
inset: 0;
&[data-dsap]:not([data-dsap-is="in"]):not([data-dsap-is="above"]) { // Reset after scroll up
.avatar{
opacity: 0;
}
}
@include bp(tablet) {
grid-template-columns: repeat(12, 1fr);
}
.avatar {
justify-self: center;
transition: opacity 0.25s ease-out;
&.hide{
img{
opacity: 0;
}
}
img {
height: 48px;
width: 48px;
border-radius: 50%;
transition: opacity 0.5s ease-out;
}
// hide every even avatar on desktop
&:nth-child(odd) {
display: none;
@include bp(tablet) {
display: block;
}
}
$list: 21,31,76,0,35,70,100,95,50,6,30,26;
@for $i from 1 through 12 {
&:nth-child(#{$i}) {
$offset: nth($list, $i);
transform: translateY(calc(#{$offset} * 1%));
opacity: 1;
transition-delay: #{0.2 + ($i * 0.05)}s;
}
}
}
}
}

View File

@ -0,0 +1,126 @@
section#meetups {
background-color: #CCEFFE;
border-radius: 12px;
overflow: hidden;
margin-top: 24px;
@include bp(tablet) {
border-radius: 24px;
}
.container {
gap: 60px;
flex-direction: column;
@include bp(tablet) {
flex-direction: row;
}
.content {
display: flex;
flex-direction: column;
align-items: flex-start;
h2 {
margin: 0;
margin-bottom: 20px;
@include bp(tablet) {
margin-bottom: 40px;
}
}
svg:has(use[href="#community"]) {
height: 40px;
width: 40px;
margin-bottom: 12px;
@include bp(desktop) {
margin-bottom: 40px;
height: 80px;
width: 80px;
}
}
.event-card, .button {
margin-top: 20px;
@include bp(tablet) {
margin-top: 32px;
}
}
}
.guide {
background-color: rgba(246, 248, 251, 0.2);
border: 1px solid #ffffff;
border-radius: 12px;
padding: 40px 24px;
h3 {
margin: 0;
text-wrap: balance;
margin-bottom: 12px;
}
p {
color: #002332;
}
.buttons {
justify-content: flex-start;
}
.steps {
display: flex;
flex-direction: column;
gap: 8px;
margin: 40px 0;
.step {
@include small;
padding-left: 32px;
line-height: 1.5;
color: #4F606E;
position: relative;
&:before {
content: '';
width: 15px;
height: 15px;
border-radius: 50%;
box-shadow: inset 0 0 0 5px var(--color-primary);
left: 0;
top: 4px;
position: absolute;
}
&:not(:last-child) {
padding-bottom: 28px;
&:after {
content: '';
width: 1px;
background-color: #4F606E;
left: 7px;
bottom: -4px;
top: 26px;
position: absolute;
}
}
}
}
}
}
.content,
.guide {
@include bp(desktop) {
flex-grow: 1;
flex-basis: 50%;
width: 100%;
}
}
}

View File

@ -0,0 +1,36 @@
section#nav {
--section-spacing-y: 20px;
@include bp(tablet) {
--section-spacing-y: 40px;
}
.nav-pills{
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 12px;
.nav-pill{
background-color: #ffffff;
border-radius: 32px;
cursor: pointer;
transition: background-color 0.25s ease, color 0.25s ease;
font-size: 12px;
font-weight: 500;
padding: 6px 12px;
white-space: nowrap;
text-decoration: none;
color: #002332;
&:hover{
background-color: var(--color-primary);
color: #ffffff;
}
@include bp(tablet) {
font-size: 14px;
}
}
}
}

View File

@ -0,0 +1,157 @@
section#newsletter {
--section-spacing-y: 0;
background-color: #002332;
border-radius: 12px;
overflow: hidden;
.container {
gap: 0px 60px;
align-items: flex-end;
justify-content: center;
align-items: center;
flex-direction: column;
@include bp(tablet) {
align-items: center;
flex-direction: row;
}
@include bp(desktop) {
align-items: flex-end;
}
}
h2 {
margin-top: 0;
text-wrap: balance;
}
&,
p {
color: #ffffff;
}
@include bp(tablet) {
border-radius: 24px;
}
.content {
padding: 52px 0;
@include bp(tablet) {
padding: 100px 0;
}
}
.buttons {
justify-content: flex-start;
margin-top: 20px;
@include bp(tablet) {
margin-top: 40px;
}
}
.editions {
display: flex;
flex-direction: column;
flex-shrink: 0;
max-width: 570px;
align-items: center;
margin-bottom: -40px;
width: 100%;
order: 1;
@include bp(tablet) {
order: -1;
flex-basis: 50%;
align-self: center;
}
@include bp(desktop) {
}
@include bp(large-desktop) {
flex-basis: 570px;
align-self: flex-end;
margin-bottom: -64px;
}
&[data-dsap]:not([data-dsap-is="in"]):not([data-dsap-is="above"]) {
// Only if scrolling down into the element
.edition {
transition-duration: 0s;
transition-delay: 0s;
&:nth-child(1) {
transform: translateY(120px);
}
&:nth-child(2) {
transform: translateY(40px);
}
}
}
.edition {
aspect-ratio: 571/300;
width: 100%;
max-width: 100%;
position: relative;
border-radius: 6px;
overflow: hidden;
transition: transform 0.8s cubic-bezier(0.3, 1, 0.5, 1);
transition-delay: .25s;
@include bp(tablet) {
border-radius: 12px;
}
.label {
display: none;
}
img {
width: 100%;
height: 100%;
object-fit: cover;
position: absolute;
border-radius: 0;
inset: 0;
}
&:nth-child(1) {
max-width: 80%;
height: 45px;
transition-delay: .3s;
z-index: 1;
@include bp(tablet) {
height: 70px;
}
}
&:nth-child(2) {
max-width: 90%;
justify-self: center;
height: 50px;
transform: translateY(-20px);
z-index: 2;
@include bp(tablet) {
height: 80px;
}
}
&:nth-child(3) {
max-width: 100%;
justify-self: center;
z-index: 3;
transform: translateY(-40px);
}
}
}
}

View File

@ -0,0 +1,20 @@
// Setup
@import "homeassistant/pages/community/mixins.scss";
@import "homeassistant/pages/community/variables.scss";
// Base
@import "homeassistant/pages/community/base.scss";
@import "homeassistant/pages/community/icon.scss";
@import "homeassistant/pages/community/buttons.scss";
@import "homeassistant/pages/community/event-card.scss";
@import "homeassistant/pages/community/photos.scss";
@import "homeassistant/pages/community/stats.scss";
// Components
@import "homeassistant/pages/community/components/nav.scss";
@import "homeassistant/pages/community/components/hero.scss";
@import "homeassistant/pages/community/components/global.scss";
@import "homeassistant/pages/community/components/join.scss";
@import "homeassistant/pages/community/components/newsletter.scss";
@import "homeassistant/pages/community/components/meetups.scss";
@import "homeassistant/pages/community/components/faq.scss";

View File

@ -24,3 +24,20 @@ section {
} }
} }
} }
.nc-collaboration{
position: absolute;
&.mobile{
display: block;
@include bp(desktop){
display: none;
}
}
&.desktop{
display: none;
@include bp(desktop){
display: block;
}
}
}

View File

@ -55,6 +55,7 @@ section#buy {
@include bp(desktop) { @include bp(desktop) {
z-index: unset; z-index: unset;
position: relative;
} }
} }
@ -108,24 +109,32 @@ section#buy {
} }
} }
.terms { .terms {
padding: 0 16px; padding: 0 16px;
max-width: 520px; max-width: 520px;
font-size: 14px; font-size: 14px;
position: absolute; position: absolute;
bottom: 20px; bottom: 50px;
max-width: 22rem; max-width: 22rem;
margin-top: 5rem; margin-top: 5rem;
@include bp(desktop) { @include bp(desktop) {
bottom: 80px; bottom: 130px;
font-size: 16px; font-size: 16px;
margin-top: unset; margin-top: unset;
max-width: 26rem; max-width: 26rem;
} }
@include bp(1750px) { @include bp(1750px) {
max-width: 33rem; max-width: 33rem;
} }
} }
.nc-collaboration{
bottom: 20px;
max-width: calc(100% - 20px);
@include bp(desktop){
bottom: 60px;
}
}
} }

View File

@ -229,6 +229,19 @@ section#faq {
margin: 0; margin: 0;
} }
img{
border-radius: 8px;
display: block;
max-width: 800px;
width: 100%;
}
img,p {
&:not(:last-child) {
margin-bottom: 16px;
}
}
&-animation { &-animation {
min-height: 0; min-height: 0;
} }

View File

@ -11,7 +11,7 @@ body_id: not_found
<div id="search404"></div> <div id="search404"></div>
</div> </div>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@docsearch/js@3/dist/umd/index.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@docsearch/js@3/dist/umd/index.min.js" integrity="sha384-f/IEhh8fvOc2ALU79emLlUqAYXyqlA/zYhM+g5GlWMk15QBjTXy05TtmfT1TbtV6" crossorigin="anonymous"></script>
<script type="text/javascript"> <script type="text/javascript">
docsearch({ docsearch({
container: '#search404', container: '#search404',

View File

@ -8,6 +8,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The alarm panel card allows you to arm and disarm your [alarm control panel](/integrations/#alarm) {% term integrations %}. The alarm panel card allows you to arm and disarm your [alarm control panel](/integrations/#alarm) {% term integrations %}.
@ -36,8 +38,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: Overwrites friendly name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Current state of the alarm entity. default: Current state of the alarm entity.
states: states:
required: false required: false

View File

@ -104,7 +104,7 @@ type: area
area: bedroom area: bedroom
display_type: picture display_type: picture
navigation_path: my_bedroom navigation_path: my_bedroom
sensor_classes: sensor_classes:
- temperature - temperature
- humidity - humidity
alert_classes: alert_classes:
@ -116,4 +116,4 @@ features:
## Available colors ## 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`. The following colors are available to colorize the area card: `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`, `white`, or any hex color code (for example, `#93c47d`).

View File

@ -12,6 +12,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The button card allows you to add buttons to perform tasks. The button card allows you to add buttons to perform tasks.
@ -34,14 +36,18 @@ Name:
description: The button name that is displayed on the card. If this field is left blank and the card interacts with an entity, the button name defaults to the entity name. Otherwise, no name is displayed. description: The button name that is displayed on the card. If this field is left blank and the card interacts with an entity, the button name defaults to the entity name. Otherwise, no name is displayed.
Icon: Icon:
description: The icon that is displayed on the card. If this field is left blank and the card interacts with an entity, the icon defaults to the entity domain icon. Otherwise, no icon is displayed. description: The icon that is displayed on the card. If this field is left blank and the card interacts with an entity, the icon defaults to the entity domain icon. Otherwise, no icon is displayed.
Show Name:
description: A toggle to show or hide the button name.
Show Icon:
description: A toggle to show or hide the icon.
Icon Height: Icon Height:
description: The height of the icon, in pixels. description: The height of the icon, in pixels.
Color:
description: The color of the icon.
Theme: Theme:
description: Name of any loaded theme to be used for this card. For more information about themes, see the [frontend documentation](/integrations/frontend/). description: Name of any loaded theme to be used for this card. For more information about themes, see the [frontend documentation](/integrations/frontend/).
Show Name:
description: A toggle to show or hide the button name.
Show State:
description: A toggle to show or hide the state of the entity.
Show Icon:
description: A toggle to show or hide the icon.
Tap Action: Tap Action:
description: The action taken on card tap. For more information, see the [action documentation](/dashboards/actions/#tap-action). description: The action taken on card tap. For more information, see the [action documentation](/dashboards/actions/#tap-action).
Hold Action: Hold Action:
@ -63,8 +69,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: The button name that is displayed on the card. It defaults to the entity name only if the card interacts with an entity. Otherwise, if not configured, no name is displayed. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/). It defaults to the entity name only if the card interacts with an entity. Otherwise, if not configured, no name is displayed.
type: string type: [string, map, list]
default: Entity name default: Entity name
icon: icon:
required: false required: false
@ -91,11 +97,11 @@ icon_height:
description: The height of the icon. Any CSS value may be used. description: The height of the icon. Any CSS value may be used.
type: string type: string
default: auto default: auto
state_color: color:
required: false required: false
description: If false, the icon does not change color when the entity is active. description: Set the color for the icon. By default, the color is based on `state`, `domain`, and `device_class` of your entity. It accepts [color token](/dashboards/button/#available-colors) or hex color code.
type: boolean type: string
default: true default: state
tap_action: tap_action:
required: false required: false
description: The action taken on card tap. For more information, see the [action documentation](/dashboards/actions/#tap-action). description: The action taken on card tap. For more information, see the [action documentation](/dashboards/actions/#tap-action).
@ -203,3 +209,7 @@ cards:
show_name: true show_name: true
show_icon: true show_icon: true
``` ```
## Available colors
The following colors are available to colorize the button card: `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`, `white`, or any hex color code (for example, `#93c47d`).

View File

@ -220,6 +220,43 @@ locations:
type: list type: list
{% endconfiguration %} {% endconfiguration %}
### Time
Specify the visibility of the card based on the current time and day of the week.
```yaml
condition: time
after: "08:00"
before: "17:00"
weekdays:
- mon
- tue
- wed
- thu
- fri
```
{% configuration %}
condition:
required: true
description: "`time`"
type: string
after:
required: false
description: Time in 24-hour format (HH:MM) after which the card should be visible.*
type: string
before:
required: false
description: Time in 24-hour format (HH:MM) before which the card should be visible.*
type: string
weekdays:
required: false
description: List of weekdays on which the card should be visible. Valid values are `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, `sun`.
type: list
{% endconfiguration %}
At least one of `after` or `before` must be used for this condition to be valid. Both can be used together to define a time range as in the example above.
### And ### And
Specify that all conditions must be met. Specify that all conditions must be met.

View File

@ -121,10 +121,28 @@ link_dashboard: true
The energy sources table card shows all your energy sources, and the corresponding amount of energy. The energy sources table card shows all your energy sources, and the corresponding amount of energy.
If setup, it will also show the costs and compensation per source and the total. If setup, it will also show the costs and compensation per source and the total.
### YAML configuration
The following YAML options are available
{% configuration %}
type:
required: true
description: "`energy-sources-table`"
type: string
types:
required: false
description: "If defined, table displays listed types of consumption only. Valid values are: `grid`, `solar`, `battery`, `gas`, and `water`."
type: list
{% endconfiguration %}
### Example ### Example
```yaml ```yaml
type: energy-sources-table type: energy-sources-table
types:
- gas
- water
``` ```
## Grid neutrality gauge ## Grid neutrality gauge
@ -196,7 +214,29 @@ type: energy-self-sufficiency-gauge
The devices energy graph show the energy usage per device, it is sorted by usage. The devices energy graph show the energy usage per device, it is sorted by usage.
By default, this card will show all your devices. Optionally, the number of devices can be limited by adding the `max_devices` option and specifying the maximum number of devices to show. If there are more devices available than shown, the devices with the highest energy usage are shown. ### YAML configuration
The following YAML options are available
{% configuration %}
type:
required: true
description: "`energy-devices-graph`"
type: string
title:
required: false
description: The title of the card.
type: string
max_devices:
required: false
description: By default, this card will show all your devices. Optionally, the number of devices can be limited by adding the `max_devices` option and specifying the maximum number of devices to show. If there are more devices available than shown, the devices with the highest energy usage are shown.
type: integer
hide_compound_stats:
required: false
description: Hide higher level devices like breakers. These are devices that are set as `included_in_stat` of another device.
type: boolean
default: false
{% endconfiguration %}
### Examples ### Examples
@ -287,13 +327,73 @@ type: energy-sankey
layout: vertical layout: vertical
``` ```
## Using Multiple Collections ## Power Sankey graph to visualize power flow
<p class='img'>
<img src='/images/dashboards/energy/sankey.png' alt='Screenshot of the Sankey graph card to visualize power'>
Screenshot of the power Sankey graph card.
</p>
The power Sankey graph shows the real-time flow of power in your home. Unlike the energy Sankey card, which shows historical energy data based on the selected date range, this card displays current power values and is not affected by the date picker selection.
It visualizes the instantaneous power flow from sources (like the grid, solar panels, and battery) to consumers in your home. Devices are grouped into floors and areas if these are configured.
### YAML configuration
The following YAML options are available
{% configuration %}
type:
required: true
description: "`power-sankey`"
type: string
collection_key:
required: false
description: "Collection key to use for the card. This links the card to a specific energy dashboard collection. Defaults to `energy_dashboard`."
type: string
default: energy_dashboard
title:
required: false
description: The title of the card.
type: string
layout:
required: false
description: "`vertical`, `horizontal` or `auto`. Determines the orientation (flow direction) of the card. `auto` changes it based on the screen size."
type: string
default: auto
group_by_area:
required: false
description: Whether to group the devices by area
type: boolean
default: true
group_by_floor:
required: false
description: Whether to group the devices by floor
type: boolean
default: true
{% endconfiguration %}
### Examples
```yaml
type: power-sankey
```
The following example orients the flow from left to right:
```yaml
type: power-sankey
layout: horizontal
```
## Using multiple collections
By default, all energy cards are linked to any `energy-date-selection` card on the view, and all `energy-date-selection` cards are linked to the same period. To enable multiple different date selections on the same view, it is necessary to link them to different collections. This is done by adding the variable `collection_key` to the card YAML, and giving this a value of any custom string that begins with `energy_`. (strings that do not start with `energy_` will generate an error). By default, all energy cards are linked to any `energy-date-selection` card on the view, and all `energy-date-selection` cards are linked to the same period. To enable multiple different date selections on the same view, it is necessary to link them to different collections. This is done by adding the variable `collection_key` to the card YAML, and giving this a value of any custom string that begins with `energy_`. (strings that do not start with `energy_` will generate an error).
All energy cards support use of `collection_key` option. All energy cards support use of `collection_key` option.
### Examples ### Examples
Example view with multiple collections: Example view with multiple collections:
```yaml ```yaml

View File

@ -10,6 +10,8 @@ related:
title: Card header and footer title: Card header and footer
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The entities card is the most common type of card. It groups items together into lists. It can be used to display an entity's state or attribute, but also contain buttons, web links, etc. The entities card is the most common type of card. It groups items together into lists. It can be used to display an entity's state or attribute, but also contain buttons, web links, etc.
@ -76,8 +78,8 @@ type:
type: string type: string
name: name:
required: false required: false
description: Overwrites friendly name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
icon: icon:
required: false required: false
description: Overwrites icon or entity picture. description: Overwrites icon or entity picture.
@ -150,8 +152,8 @@ suffix:
type: string type: string
name: name:
required: false required: false
description: Overwrites friendly entity name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
icon: icon:
required: false required: false
description: Icon to use. Defaults to icon of entity. description: Icon to use. Defaults to icon of entity.
@ -231,8 +233,8 @@ entities:
type: string type: string
name: name:
required: false required: false
description: Override the friendly entity name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Entity name default: Entity name
show_name: show_name:
required: false required: false

View File

@ -10,6 +10,8 @@ related:
title: Card header and footer title: Card header and footer
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The entity card gives you a quick overview of your entity's state. The entity card gives you a quick overview of your entity's state.
@ -38,8 +40,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: Name of entity. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Entity name. default: Entity name.
icon: icon:
required: false required: false

View File

@ -8,6 +8,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The gauge card is a basic card that allows visually seeing sensor data. The gauge card is a basic card that allows visually seeing sensor data.
@ -45,8 +47,8 @@ attribute:
type: string type: string
name: name:
required: false required: false
description: Name of gauge entity. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Entity name default: Entity name
unit: unit:
required: false required: false

View File

@ -10,6 +10,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The glance card is useful to group multiple sensors in a compact overview. Keep in mind that this can be used together with [entity-filter](/dashboards/entity-filter/) cards to create dynamic cards. The glance card is useful to group multiple sensors in a compact overview. Keep in mind that this can be used together with [entity-filter](/dashboards/entity-filter/) cards to create dynamic cards.
@ -81,8 +83,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: Overwrites friendly name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
icon: icon:
required: false required: false
description: Overwrites icon. description: Overwrites icon.

View File

@ -8,6 +8,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The history graph card allows you to display a graph for each of up to eight entities. The history graph card allows you to display a graph for each of up to eight entities.
@ -89,8 +91,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: Overwrites friendly name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
{% endconfiguration %} {% endconfiguration %}
### Long term statistics ### Long term statistics

View File

@ -8,6 +8,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The humidifier card lets you control and monitor humidifiers, dehumidifiers, and hygrostat devices. The humidifier card lets you control and monitor humidifiers, dehumidifiers, and hygrostat devices.
@ -36,8 +38,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: Name of entity. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Entity name default: Entity name
theme: theme:
required: false required: false

View File

@ -52,6 +52,11 @@ allow_open_top_navigation:
description: 'Allow the user to open iframe content links by opening the default browser in the Home Assistant mobile app. It is false by default because it adds allow-top-navigation-by-user-activation on the iframe sandbox attribute which is less secure. So set it to true if you need it and are confident with the iframe content.' description: 'Allow the user to open iframe content links by opening the default browser in the Home Assistant mobile app. It is false by default because it adds allow-top-navigation-by-user-activation on the iframe sandbox attribute which is less secure. So set it to true if you need it and are confident with the iframe content.'
type: boolean type: boolean
default: false default: false
hide_background:
required: false
description: 'Hide the card background, making it transparent. This removes the background color, box-shadow, and border. Useful for pages which allow transparent backgrounds so the iframe can blend into the dashboard view.'
type: boolean
default: false
title: title:
required: false required: false
description: The card title. description: The card title.

View File

@ -10,6 +10,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The light card allows you to change the brightness of a light. The light card allows you to change the brightness of a light.
@ -38,8 +40,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: Overwrites friendly name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Name of entity default: Name of entity
icon: icon:
required: false required: false

View File

@ -1,8 +1,8 @@
--- ---
type: card type: card
title: "Logbook card" title: "Activity card"
sidebar_label: Logbook sidebar_label: Activity
description: "The logbook card displays entries from the logbook for specific entities, devices, areas, and/or labels." description: "The activity card displays the activity of specific entities, devices, areas, and/or labels."
related: related:
- docs: /integrations/frontend/ - docs: /integrations/frontend/
title: Themes title: Themes
@ -10,11 +10,11 @@ related:
title: Dashboard cards title: Dashboard cards
--- ---
The logbook card displays entries from the logbook for specific entities, devices, areas, and/or labels. The activity card displays entries from the activity for specific entities, devices, areas, and/or labels.
<p class='img'> <p class='img'>
<img src='/images/dashboards/logbook.png' alt='Screenshot of the logbook card'> <img src='/images/dashboards/activity-card.png' alt='Screenshot of the activity card'>
Screenshot of the logbook card. Screenshot of the activity card.
</p> </p>
{% include dashboard/edit_dashboard.md %} {% include dashboard/edit_dashboard.md %}
@ -23,18 +23,20 @@ The logbook card displays entries from the logbook for specific entities, device
{% configuration_basic %} {% configuration_basic %}
Target: Target:
description: The entities, devices, areas and labels whose logbook entries will show in the card. See [target selector](/docs/blueprint/selectors/#target-selector) for more information. description: The entities, devices, areas and labels whose activity entries will show in the card. See [target selector](/docs/blueprint/selectors/#target-selector) for more information.
Title: Title:
description: The title that shows on the top of the card. description: The title that shows on the top of the card.
Hours to show: Hours to show:
description: The number of hours in the past that will be tracked in the card. description: The number of hours in the past that will be tracked in the card.
Theme: Theme:
description: Name of any loaded theme to be used for this card. For more information about themes, see the [frontend documentation](/integrations/frontend/). description: Name of any loaded theme to be used for this card. For more information about themes, see the [frontend documentation](/integrations/frontend/).
State filter:
description: Limit the displayed logbook entries to only the specified states.
{% endconfiguration_basic %} {% endconfiguration_basic %}
## YAML configuration ## YAML configuration
The following YAML options are available when you use YAML mode or just prefer to use YAML in the code editor in the UI. The following YAML options are available when you use YAML mode or just prefer to use YAML in the code editor in the UI. Activity used to be called "logbook" in the past, and is still called logbook in YAML.
{% configuration %} {% configuration %}
type: type:
@ -58,6 +60,10 @@ theme:
required: false 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/). 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 type: string
state_filter:
required: false
description: Limit the displayed logbook entries to only the selected states. For example a list of `['on']` will display entries when targeted entities turn on, but not when they turn off.
type: list
{% endconfiguration %} {% endconfiguration %}
### Examples ### Examples

View File

@ -136,7 +136,7 @@ content: |
## ha-alert ## ha-alert
You can also use our [\`ha-alert\`](https://design.home-assistant.io/#components/ha-alert) component in the Markdown card. You can also use our [`ha-alert`](https://design.home-assistant.io/#components/ha-alert) component in the Markdown card.
Example: Example:

View File

@ -8,6 +8,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The media control card is used to display [media player](/integrations/#media-player) entities on an interface with easy to use controls. The media control card is used to display [media player](/integrations/#media-player) entities on an interface with easy to use controls.
@ -34,8 +36,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: Overwrites friendly name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Name of entity default: Name of entity
theme: theme:
required: false required: false

View File

@ -34,7 +34,7 @@ type:
type: string type: string
image: image:
required: true required: true
description: The URL of an image.<br/>To use a locally hosted image, see [Hosting](/integrations/http#hosting-files). description: The URL of an image.<br/>To use a locally hosted image, see [Hosting](/integrations/http#hosting-files), or use a `media-source://` URL for Media content.
type: string type: string
image_entity: image_entity:
required: false required: false
@ -67,7 +67,7 @@ theme:
type: string type: string
dark_mode_image: dark_mode_image:
required: false required: false
description: "This image is used when the dark mode is activated and no state image is set." description: This image is used when the dark mode is activated and no state image is set.<br/>To use a locally hosted image, see [Hosting](/integrations/http#hosting-files), or use a `media-source://` URL for Media content.
type: string type: string
dark_mode_filter: dark_mode_filter:
required: false required: false
@ -322,7 +322,7 @@ double_tap_action:
type: map type: map
image: image:
required: false required: false
description: The image to display. description: The image to display.<br/>To use a locally hosted image, see [Hosting](/integrations/http#hosting-files), or use a `media-source://` URL for Media content.
type: string type: string
camera_image: camera_image:
required: false required: false
@ -423,12 +423,13 @@ style:
### How to use state_image ### How to use state_image
Specify a different image to display based on the state of the entity. Specify a different image to display based on the state of the entity (supports local, web, or `media-source://` URLs):
```yaml ```yaml
state_image: state_image:
"on": /local/living_room_on.jpg "on": /local/bed_light_on.png
"off": /local/living_room_off.jpg "off": https://demo.home-assistant.io/stub_config/bedroom.png
"unavailable": media-source://image_upload/123456789
``` ```
### How to use state_filter ### How to use state_filter

View File

@ -10,6 +10,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The picture entity card displays an entity in the form of an image. Instead of images from URL, it can also show the picture of `camera` entities. The picture entity card displays an entity in the form of an image. Instead of images from URL, it can also show the picture of `camera` entities.
@ -45,7 +47,7 @@ camera_view:
type: string type: string
image: image:
required: false required: false
description: URL of an image. To use a locally hosted image, see [Hosting](/integrations/http#hosting-files). description: URL of an image. To use a locally hosted image, see [Hosting](/integrations/http#hosting-files), or use a `media-source://` URL for Media content.
type: string type: string
state_image: state_image:
required: false required: false
@ -66,8 +68,8 @@ fit_mode:
default: cover default: cover
name: name:
required: false required: false
description: Overwrite entity name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
show_name: show_name:
required: false required: false
description: Shows name in footer. description: Shows name in footer.
@ -116,14 +118,15 @@ entity: light.bed_light
image: /local/bed_light.png image: /local/bed_light.png
``` ```
Different images for each state: Different images for each state (supports local, web, or `media-source://` URLs):
```yaml ```yaml
type: picture-entity type: picture-entity
entity: light.bed_light entity: light.bed_light
state_image: state_image:
"on": /local/bed_light_on.png "on": /local/bed_light_on.png
"off": /local/bed_light_off.png "off": https://demo.home-assistant.io/stub_config/bedroom.png
"unavailable": media-source://image_upload/123456789
``` ```
Displaying a live feed from an FFmpeg camera: Displaying a live feed from an FFmpeg camera:

View File

@ -40,7 +40,7 @@ title:
type: string type: string
image: image:
required: false required: false
description: Background image URL. description: Background image URL (local, web, or `media-source://`)
type: string type: string
image_entity: image_entity:
required: false required: false
@ -261,7 +261,7 @@ entities: []
camera_image: camera.front_garden_camera camera_image: camera.front_garden_camera
``` ```
Use different images based on entity state: Use different images based on entity state (supports local, web, or `media-source://` URLs):
```yaml ```yaml
type: picture-glance type: picture-glance
@ -271,6 +271,7 @@ entities:
- light.ceiling_lights - light.ceiling_lights
state_image: state_image:
"on": /local/living_room_on.png "on": /local/living_room_on.png
"off": /local/living_room_off.png "off": https://demo.home-assistant.io/stub_config/living_room.png
"unavailable": media-source://image_upload/123456789
entity: group.living.room entity: group.living.room
``` ```

View File

@ -8,6 +8,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The plant status card is for all the lovely botanists out there. The plant status card is for all the lovely botanists out there.
@ -32,12 +34,12 @@ type:
type: string type: string
entity: entity:
required: true required: true
description: Entity ID of `plant` domain. description: Entity ID of `plant` domain. For more information, see the [`plant` integration](/integrations/plant).
type: string type: string
name: name:
required: false required: false
description: Overwrites friendly name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Entity name default: Entity name
theme: theme:
required: false required: false

View File

@ -8,6 +8,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The sensor card gives you a quick overview of a sensor's 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.
@ -40,8 +42,8 @@ icon:
type: string type: string
name: name:
required: false required: false
description: The card name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
graph: graph:
required: false required: false
description: Type of graph (`none` or `line`). description: Type of graph (`none` or `line`).

View File

@ -8,6 +8,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The statistic card allows you to display a statistical value for an entity. The statistic card allows you to display a statistical value for an entity.
@ -40,8 +42,8 @@ stat_type:
type: string type: string
name: name:
required: false required: false
description: Name of entity. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Entity name. default: Entity name.
icon: icon:
required: false required: false

View File

@ -8,6 +8,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The statistics graph card allows you to display a graph of statistics data for each of the entities listed. The statistics graph card allows you to display a graph of statistics data for each of the entities listed.
@ -114,8 +116,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: Overwrites friendly name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
{% endconfiguration %} {% endconfiguration %}
### Example ### Example

View File

@ -2,15 +2,17 @@
type: card type: card
title: "Thermostat card" title: "Thermostat card"
sidebar_label: Thermostat sidebar_label: Thermostat
description: "The thermostat card gives control of your climate entity, allowing you to change the temperature and mode of the entity." description: "The thermostat card gives control of your climate or water heater entity, allowing you to change the temperature and mode of the entity."
related: related:
- docs: /integrations/frontend/ - docs: /integrations/frontend/
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The thermostat card gives control of your [climate](/integrations/#climate) {% term entity %}, allowing you to change the temperature and mode of the {% term entity %}. The thermostat card gives control of your [climate](/integrations/#climate) {% term entity %} or [water heater](/integrations/#water_heater) {% term entity %}, allowing you to change the temperature and mode of the {% term entity %}.
<p class='img'> <p class='img'>
<img src='/images/dashboards/thermostat_card.png' alt='Screenshot of the thermostat card'> <img src='/images/dashboards/thermostat_card.png' alt='Screenshot of the thermostat card'>
@ -32,12 +34,12 @@ type:
type: string type: string
entity: entity:
required: true required: true
description: Entity ID of `climate` domain. description: Entity ID of `climate` or `water_heater` domain.
type: string type: string
name: name:
required: false required: false
description: Overwrites friendly name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Name of entity. default: Name of entity.
theme: theme:
required: false required: false
@ -50,7 +52,7 @@ show_current_as_primary:
default: false default: false
features: features:
required: false required: false
description: Additional widgets to control your entity. See [available features](/dashboards/features). Only climate related features are supported. description: Additional widgets to control your entity. See [available features](/dashboards/features). Only climate or water heater related features are supported.
type: list type: list
{% endconfiguration %} {% endconfiguration %}

View File

@ -6,6 +6,8 @@ description: "The tile card gives you a quick overview of an entity. The card al
related: related:
- docs: /dashboards/actions/ - docs: /dashboards/actions/
title: Card actions title: Card actions
- docs: /dashboards/naming/
title: Card naming
- docs: /dashboards/features/ - docs: /dashboards/features/
title: Card features title: Card features
- docs: /dashboards/cards/ - docs: /dashboards/cards/
@ -33,8 +35,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: Overwrites the entity name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
icon: icon:
required: false required: false
description: Overwrites the entity icon. description: Overwrites the entity icon.
@ -132,7 +134,7 @@ hide_state: true
```yaml ```yaml
type: tile type: tile
entity: light.living_room entity: light.living_room
state_content: state_content:
- state - state
- brightness - brightness
- last-changed - last-changed
@ -150,6 +152,6 @@ features:
## Available colors ## Available colors
You want to colorize the tile card? Choose one of the following colors: `primary`, `accent`, `disabled`, `red`, `pink`, `purple`, `deep-purple`, `indigo`, `blue`, `light-blue`, `cyan`, `teal`, `green`, `light-green`, `lime`, `yellow`, `amber`, `orange`, `deep-orange`, `brown`, `grey`, `blue-grey`, `black` and `white`. The following colors are available to colorize the tile card: `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`, `white`, or any hex color code (for example, `#93c47d`).

View File

@ -71,6 +71,11 @@ hide_create:
description: Hide the textbox for creating new tasks at the top of the card. description: Hide the textbox for creating new tasks at the top of the card.
type: boolean type: boolean
default: "false" default: "false"
hide_section_headers:
required: false
description: Hide the 'Active' and 'Completed' sections with the overflow menus.
type: boolean
default: "false"
display_order: display_order:
required: false required: false
description: "Optionally sorts the items in the to-do list for display. Options are: `none`: Show the list in its original order. `alpha_asc`: Sort the list in alphabetical order. `alpha_desc`: Sort the list in reverse alphabetical order. `duedate_asc`: Sort the list by due date (soonest first). `duedate_desc`: Sort the list by reverse due date (soonest last)." description: "Optionally sorts the items in the to-do list for display. Options are: `none`: Show the list in its original order. `alpha_asc`: Sort the list in alphabetical order. `alpha_desc`: Sort the list in reverse alphabetical order. `duedate_asc`: Sort the list by due date (soonest first). `duedate_desc`: Sort the list by reverse due date (soonest last)."

View File

@ -8,6 +8,8 @@ related:
title: Themes title: Themes
- docs: /dashboards/cards/ - docs: /dashboards/cards/
title: Dashboard cards title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
--- ---
The weather forecast card displays the weather. This card is particularly useful on wall-mounted displays. The weather forecast card displays the weather. This card is particularly useful on wall-mounted displays.
@ -58,8 +60,8 @@ entity:
type: string type: string
name: name:
required: false required: false
description: Overwrites the friendly name. description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: string type: [string, map, list]
default: Entity name default: Entity name
show_current: show_current:
required: false required: false

View File

@ -0,0 +1,11 @@
items:
- question: Where do I find support?
answer: Support for Home Assistant software (and other Open Home Foundation projects) is done by community members who volunteer their time to help out fellow hobbyists. The most active communities for providing support are our <a href="https://community.home-assistant.io/">community forums</a> and the <a href="https://discord.com/invite/home-assistant">Discord server</a>. Just make sure to follow the rules about where and how to post your support query. It is also possible to ask for support in the <a href="https://www.facebook.com/groups/HomeAssistant/">Facebook group</a> and on <a href="https://www.reddit.com/r/homeassistant/">Reddit</a>.
- question: How can I contribute to the project?
answer: <p>No matter your experience, there are plenty of ways to get involved and contribute to Home Assistant! If youve got the dev skills (whether you're a beginner or expert), <a href="https://developers.home-assistant.io/docs/review-process#before-creating-your-pr">start here</a>, which shows you how to craft a PR, and then check out our extensive <a href="https://developers.home-assistant.io/docs/development_index/">Core documentation</a> to help familiarize yourself with our architecture. There you will find instructions on how to join the Developers category in our Discord server, which allows you to chat directly with other developers.</p><p>If you're knowledgeable about how to use Home Assistant, don't be afraid to hop onto one (or more) of our community platforms to share this knowledge. This is a great way to contribute if youre not a developer. Additionally, suppose you're a designer and are passionate about Home Assistant. In that case, we'd love for you to check out our <a href="https://developers.home-assistant.io/docs/development_index/">Developers category in Discord</a> (Follow the steps to join the development server, and choose I want to contribute design skills!).</p><p>If youre not able to give your time, you can also financially support the foundation, which pays passionate people to work on Home Assistant full-time. Subscribing to <a href="https://www.home-assistant.io/cloud/">Home Assistant Cloud</a> or purchasing our officially licensed Home Assistant hardware supports the development of this project and <a href="https://www.openhomefoundation.org/projects/">many others</a>. In the near future, we hope to relaunch our merch store where community members can purchase swag to support the foundation.</p>
- question: Where can I find regional communities?
answer: <p>This is not an exhaustive list of regional communities, but the ones that we are aware of. Is yours missing? Let us know!</p><ul><li><a href="https://forum.hacf.fr/">Home Assistant Communauté Francophone</a></li><li><a href="https://discord.com/invite/6PWva4TYXz">Community Smart Home</a> (German-speaking Discord Server) and <a href="https://community-smarthome.com/">their forums</a></li><li><a href="https://www.facebook.com/groups/HomeAssistantNL/">Home Assistant [DUTCH]</a> (Private FB group)</li><li><a href="https://www.facebook.com/groups/594073248777064">Home Assistant Enthusiasts - South Africa</a> (Private FB group)</li><li><a href="https://www.facebook.com/groups/homeassistantau">Home Assistant AU & NZ</a> (Australia & New Zealand - Public FB group)</li><li><a href="https://www.facebook.com/groups/homeassistant.island/">Home Assistant Ísland</a> (Iceland - Private FB group)</li></ul>
- question: Can community hosts be reimbursed for fees related to their meetups?
answer: Yes! Community is the foundation of Home Assistant, and we want to help make sure that meeting with other smart home enthusiasts is a stress-free experience. The Open Home Foundation will reimburse hosts for certain fees related to hosting a meetup. Check out our Expense Guidelines for Hosts for more information.
- question: I have a suggestion for this page!
answer: Excellent! Let Missy know by emailing <a href="mailto:community@openhomefoundation.org">community@openhomefoundation.org</a>, and we'll put it under consideration.

View File

@ -79,7 +79,7 @@
Home Assistant has built-in functionality to create files containing a copy Home Assistant has built-in functionality to create files containing a copy
of your configuration. This can be used to restore your Home Assistant as of your configuration. This can be used to restore your Home Assistant as
well as migrate to a new system. The backup feature is available for all well as migrate to a new system. The backup feature is available for all
[installation types](/installation/#about-installation-methods). [installation types](/installation/#about-installation-types).
link: /common-tasks/general/#backups link: /common-tasks/general/#backups
aliases: aliases:
- backups - backups
@ -307,23 +307,36 @@
Home Assistant Container is a standalone container-based installation of Home Assistant Container is a standalone container-based installation of
Home Assistant Core. Any [OCI](https://opencontainers.org/) compatible Home Assistant Core. Any [OCI](https://opencontainers.org/) compatible
runtime can be used, but the documentation focus is on Docker. runtime can be used, but the documentation focus is on Docker.
link: /installation/#about-installation-methods link: /installation/#about-installation-types
- term: Home Assistant Core - term: Home Assistant Core
definition: >- definition: >-
Home Assistant Core is the Python program at the heart of Home Assistant. It Home Assistant Core is the Python program at the heart of Home Assistant. It
is part of all installation types. It can be installed standalone (without Home Assistant is part of all installation types. It can be installed standalone (without Home Assistant
Supervisor) as a container using Docker (this is typically referred to as the Home Assistant Supervisor) as a container using Docker (this is typically referred to as the Home Assistant
Container installation method). For development, Core can also be run using a Virtual Container installation type). For development, Core can also be run using a Virtual
Environment (previously referred as the Home Assistant Core installation method. Environment (previously referred as the Home Assistant Core installation type.
For production setup, the [Home Assistant Core installation method is deprecated](https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/). For production setup, the [Home Assistant Core installation type is deprecated](https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/).
excerpt: >-
Home Assistant Core is the Python program at the heart of Home Assistant. It
is part of all installation types. It can be installed standalone (without Home Assistant
Supervisor) as a container using Docker (this is typically referred to as the Home Assistant
Container installation type). For development, Core can also be run using a Virtual
Environment (previously referred as the Home Assistant Core installation type).
For production setup, the Home Assistant Core installation type is deprecated.
- term: Home Assistant Supervised - term: Home Assistant Supervised
definition: >- definition: >-
The Home Assistant Supervised installation method is a full UI managed home automation ecosystem The Home Assistant Supervised installation type is a full UI managed home automation ecosystem
that runs the Home Assistant Core program, the Home Assistant Supervisor and that runs the Home Assistant Core program, the Home Assistant Supervisor and
add-ons. It comes pre-installed on Home Assistant OS, but can be installed add-ons. It comes pre-installed on Home Assistant OS, but can be installed
standalone on Debian Linux systems. It leverages Docker, which is managed by standalone on Debian Linux systems. It leverages Docker, which is managed by
the Home Assistant Supervisor. The the Home Assistant Supervisor. The
[Home Assistant Supervised installation method is deprecated](https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/). [Home Assistant Supervised installation type is deprecated](https://www.home-assistant.io/blog/2025/05/22/deprecating-core-and-supervised-installation-methods-and-32-bit-systems/).
excerpt: >-
The Home Assistant Supervised installation type is a full UI managed home automation ecosystem
that runs the Home Assistant Core program, the Home Assistant Supervisor and
add-ons. It comes pre-installed on Home Assistant OS, but can be installed
standalone on Debian Linux systems. It leverages Docker, which is managed by
the Home Assistant Supervisor. The Home Assistant Supervised installation type is deprecated.
- term: Home Assistant Supervisor - term: Home Assistant Supervisor
definition: >- definition: >-
The Home Assistant Supervisor is a program that manages a Home Assistant The Home Assistant Supervisor is a program that manages a Home Assistant
@ -337,7 +350,7 @@
includes Home Assistant Core, the Home Assistant Supervisor, and supports includes Home Assistant Core, the Home Assistant Supervisor, and supports
add-ons. Home Assistant Supervisor keeps it up to date, removing the need add-ons. Home Assistant Supervisor keeps it up to date, removing the need
for you to manage an operating system. Home Assistant Operating System is for you to manage an operating system. Home Assistant Operating System is
the recommended installation method for most users. the recommended installation type for most users.
- term: Host - term: Host
definition: >- definition: >-
A device that can communicate with other devices on a network. During setup A device that can communicate with other devices on a network. During setup

View File

@ -101,3 +101,11 @@ Miranda Bishop:
Timothy Nibeaudeau: Timothy Nibeaudeau:
name: Timothy Nibeaudeau name: Timothy Nibeaudeau
github: timoPtr github: timoPtr
Keith Burzinski:
name: Keith Burzinski
github: kbx81
Carl Albertsson:
name: Carl Albertsson
github: mellowism

View File

@ -21,5 +21,9 @@ items:
answer: 'For the best performance, place Connect ZWA-2 upright, away from any radio-blocking obstructions. Avoid placing Connect ZWA-2 on its side or mounting it sideways on a wall. There is even an accelerometer inside it to ensure people position it correctly, with the top status light blinking quickly if placed at a suboptimal angle.' answer: 'For the best performance, place Connect ZWA-2 upright, away from any radio-blocking obstructions. Avoid placing Connect ZWA-2 on its side or mounting it sideways on a wall. There is even an accelerometer inside it to ensure people position it correctly, with the top status light blinking quickly if placed at a suboptimal angle.'
- question: Does the Connect ZWA-2 run on ESPHome? - question: Does the Connect ZWA-2 run on ESPHome?
answer: 'No, while the Connect ZWA-2 does contain an ESP32 chip, it does not run an ESPHome-based firmware. Though it includes a Wi-Fi/Bluetooth antenna, it is inactive. It uses the ESP32 chip as a USB controller. The firmware for the ESP32 in the Connect ZWA-2 is open source and can be <a href="https://github.com/NabuCasa/zwave-esp-bridge">found here</a>, and the firmware for the Z-Wave chip can be <a href="https://github.com/NabuCasa/zwave-firmware">found here</a>.' answer: 'No, while the Connect ZWA-2 does contain an ESP32 chip, it does not run an ESPHome-based firmware. Though it includes a Wi-Fi/Bluetooth antenna, it is inactive. It uses the ESP32 chip as a USB controller. The firmware for the ESP32 in the Connect ZWA-2 is open source and can be <a href="https://github.com/NabuCasa/zwave-esp-bridge">found here</a>, and the firmware for the Z-Wave chip can be <a href="https://github.com/NabuCasa/zwave-firmware">found here</a>.'
- question: Why does a direct USB connection improve your Z-Wave network?
answer: '<p>During the development of Connect ZWA-2, we tested several ways of connecting Z-Wave adapters to Home Assistant. We found that, currently, the most reliable method is a direct USB connection, and this is all to do with latency.</p><img src="/images/connect/zwa-2/latency.webp"><p>For Z-Wave devices to work with Home Assistant, three parts need to communicate: Home Assistant, the Z-Wave JS add-on, and the adapter (e.g., Connect ZWA-2). The connection between the add-on and the adapter is latency-sensitive, so USB is the best option. Network connections can introduce latency, which can cause issues. In contrast, communication between the add-on and Home Assistant is less sensitive and works fine locally or over the network.</p><p>If you need to place Connect ZWA-2 far away from your Home Assistant system, you can run Z-Wave JS on another machine, plug your Connect ZWA-2 into it via USB, and then connect that machine to Home Assistant over the network. <a href="https://support.nabucasa.com/hc/en-us/articles/29751691427741" target="_blank" rel="noopener">More on that process here</a>.</p>'
- question: Where is the best place in my home for Connect ZWA-2?
answer: '<p>Thanks to its optimized antenna design and Z-Waves use of the sub-GHz frequency, Connect ZWA-2 works great in most places around the house, even if your Home Assistant system is in a basement, a far corner room, or an attic. Every home is different, but our testing shows it should cover an average-sized home, regardless of location.</p><p>If placement in your home becomes an issue, and you need to place Connect ZWA-2 far away from your Home Assistant system, there is a solution. It is possible to run Z-Wave JS on another system, and plug Connect ZWA-2 into that system via USB. Then you can connect that system over the network to Home Assistant. <a href="https://support.nabucasa.com/hc/en-us/articles/29751691427741" target="_blank" rel="noopener">More on that process here</a>.</p>'
- question: Who manufactures the Connect ZWA-2? - question: Who manufactures the Connect ZWA-2?
answer: 'Nabu Casa, a commercial partner of the Open Home Foundation, is the manufacturer of the Connect ZWA-2. A significant part of Nabu Casas revenue on Home Assistant-branded products is paid to the Open Home Foundation as a partnership fee. Purchasing products from commercial partners supports the Open Home Foundation and the development of all its projects, such as Home Assistant, Z-Wave JS, ESPHome, and Music Assistant.' answer: 'Nabu Casa, a commercial partner of the Open Home Foundation, is the manufacturer of the Connect ZWA-2. A significant part of Nabu Casas revenue on Home Assistant-branded products is paid to the Open Home Foundation as a partnership fee. Purchasing products from commercial partners supports the Open Home Foundation and the development of all its projects, such as Home Assistant, Z-Wave JS, ESPHome, and Music Assistant.'

View File

@ -174,17 +174,6 @@ yellow:
ship_to: America ship_to: America
url: https://cloudfree.shop/product/home-assistant-yellow/ url: https://cloudfree.shop/product/home-assistant-yellow/
logo: /images/distributors/cloudfree.webp logo: /images/distributors/cloudfree.webp
- name: Seeed Studio
ship_from: US
ship_to: America
url: https://www.seeedstudio.com/Home-Assistant-Yellow-Kit-with-selectable-CM4.html
logo: /images/distributors/seeed-studio.webp
# Asia
- name: Seeed Studio
ship_from: China
ship_to: Asia
url: https://www.seeedstudio.com/Home-Assistant-Yellow-Kit-with-selectable-CM4.html
logo: /images/distributors/seeed-studio.webp
# Australia # Australia
- name: Smart Guys - name: Smart Guys
ship_from: Australia ship_from: Australia
@ -192,16 +181,6 @@ yellow:
url: https://smartguys.com.au/product/home-assistant-yellow-smart-hub/ url: https://smartguys.com.au/product/home-assistant-yellow-smart-hub/
logo: /images/distributors/smart-guys.webp logo: /images/distributors/smart-guys.webp
# Europe # Europe
- name: Botland
ship_from: Poland
ship_to: Europe
url: https://botland.com.pl/centralki-i-bramki-sieciowe/24698-home-assistant-yellow-standard-kit-inteligenta-centralka-zigbee-thread-nabu-casa-yellow-kit-std-794677011741.html
logo: /images/distributors/botland.webp
- name: Mauser
ship_from: Portugal
ship_to: Europe
url: https://mauser.pt/catalog/product_info.php?products_id=095-3150
logo: /images/distributors/mauser.png
- name: Pi-Shop.ch - name: Pi-Shop.ch
ship_from: Switzerland ship_from: Switzerland
ship_to: Europe ship_to: Europe
@ -212,21 +191,6 @@ yellow:
ship_to: Europe ship_to: Europe
url: https://raspberrypi.dk/en/product/home-assistant-yellow/ url: https://raspberrypi.dk/en/product/home-assistant-yellow/
logo: /images/distributors/RaspberryPi-dk.webp logo: /images/distributors/RaspberryPi-dk.webp
- name: Seeed Studio
ship_from: Germany
ship_to: Europe
url: https://www.seeedstudio.com/Home-Assistant-Yellow-Kit-with-selectable-CM4.html
logo: /images/distributors/seeed-studio.webp
- name: The Pi Hut
ship_from: UK
ship_to: Europe
url: https://thepihut.com/products/home-assistant-yellow
logo: /images/distributors/pi-hut.webp
- name: Domadoo
ship_from: France
ship_to: Europe
url: https://www.domadoo.fr/en/smart-home-hub/7113-nabu-casa-home-assistant-yellow-kit-with-power-supply.html
logo: /images/distributors/domadoo.jpg
zbt-1: zbt-1:
name: "<strong>Home Assistant Connect ZBT-1</strong>" name: "<strong>Home Assistant Connect ZBT-1</strong>"
distributors: distributors:
@ -606,7 +570,7 @@ zwa-2:
- name: mediarath - name: mediarath
ship_from: Germany ship_from: Germany
ship_to: Europe ship_to: Europe
url: https://mediarath.de/products/home-assistant-connect-zwa-2-antenne-z-wave-800-long-range-plus-plus-v2 url: https://mediarath.de/products/home-assistant-connect-zwa-2-adapter-z-wave-800-long-range-plus-plus-v2
logo: /images/distributors/mediarath.de.webp logo: /images/distributors/mediarath.de.webp
- name: SmarterHOME - name: SmarterHOME
ship_from: Czech Republic ship_from: Czech Republic

View File

@ -50,6 +50,8 @@ automation 2:
Conditions can also be part of an action. You can combine multiple actions and conditions in a single action, and they will be processed in the order you put them in. If the result of a condition is false, the action will stop there so any action after that condition will not be executed. Conditions can also be part of an action. You can combine multiple actions and conditions in a single action, and they will be processed in the order you put them in. If the result of a condition is false, the action will stop there so any action after that condition will not be executed.
{% raw %}
```yaml ```yaml
automation: automation:
- alias: "Office at evening" - alias: "Office at evening"
@ -73,4 +75,11 @@ automation:
- action: scene.turn_on - action: scene.turn_on
target: target:
entity_id: scene.office_at_evening entity_id: scene.office_at_evening
- action: light.turn_on
target: "{{ {'entity_id': ['light.office', 'light.office_2']} }}"
- action: switch.turn_on
target:
label_id: "{{ ['office_evening', 'office_after_15'] }}"
``` ```
{% endraw %}

View File

@ -7,10 +7,10 @@ Automations support the advanced features of [templating](/docs/configuration/te
Example of variables used in templates: Example of variables used in templates:
```jinja {% raw %}
{{ this.name }} is the name of the automation executing from this trigger - `{{ this.name }}` is the name of the automation executing from this trigger
{{ trigger.platform }} is the type of trigger object, like `calendar` - `{{ trigger.platform }}` is the type of trigger object, like `calendar`
``` {% endraw %}
## Available state data ## Available state data
@ -57,7 +57,7 @@ These are the properties available for a [Calendar trigger](/docs/automation/tri
These are the properties available for a [Device trigger](/docs/automation/trigger/#device-triggers). These are the properties available for a [Device trigger](/docs/automation/trigger/#device-triggers).
Inherites template variables from [event](#event) or [state](#state) template based on the type of trigger selected for the device. Inherits template variables from [event](#event) or [state](#state) template based on the type of trigger selected for the device.
| Template variable | Data | | Template variable | Data |
| ---- | ---- | | ---- | ---- |
@ -135,6 +135,7 @@ These are the properties available for a [Sentence trigger](/docs/automation/tri
| `trigger.slots` | Object with matched slot values. | `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.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. | `trigger.device_id` | The device ID that captured the command, if any.
| `trigger.satellite_id` | The entity ID of the satellite that captured the command, if any.
### State ### State

View File

@ -922,7 +922,7 @@ automation:
## Time pattern trigger ## 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). 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.
```yaml ```yaml
automation: automation:
@ -970,7 +970,7 @@ See the [Persistent Notification](/integrations/persistent_notification/) integr
Webhook trigger fires when a web request is made to the webhook endpoint: `/api/webhook/<webhook_id>`. The webhook endpoint is created automatically when you set it as the `webhook_id` in an automation trigger. The `webhook_id` can either be a static value or computed using [limited templates](/docs/configuration/templating/#limited-templates). Webhook trigger fires when a web request is made to the webhook endpoint: `/api/webhook/<webhook_id>`. The webhook endpoint is created automatically when you set it as the `webhook_id` in an automation trigger. The `webhook_id` can either be a static value or computed using [limited templates](/docs/configuration/templating/#limited-templates).
{% note %} {% note %}
The `webhook_id` template is only evaluated when setting up the trigger, they will not be re-evaluated for incomming webhook triggers. The `webhook_id` template is only evaluated when setting up the trigger, they will not be re-evaluated for incoming webhook triggers.
{% endnote %} {% endnote %}
```yaml ```yaml

View File

@ -33,7 +33,7 @@ If you are writing automations in YAML, it is also useful to go to {% my server_
When an {% term automation %} is run, all steps are recorded and a trace is made. From the UI, open **Settings**, which is located in the sidebar, then select **Automations & Scenes** to go to the automation editor or click this button directly: {% my automations badge %} When an {% term automation %} is run, all steps are recorded and a trace is made. From the UI, open **Settings**, which is located in the sidebar, then select **Automations & Scenes** to go to the automation editor or click this button directly: {% my automations badge %}
From the automation editor UI, or in the automations list in the three dots menu, select **Traces**. Alternatively, select an automation entry shown in the Logbook. From the automation editor UI, or in the automations list in the three dots menu, select **Traces**. Alternatively, select an automation entry shown under **Activity**.
![Automation tracing example](/images/integrations/automation/automation-tracing.png) ![Automation tracing example](/images/integrations/automation/automation-tracing.png)
@ -44,7 +44,7 @@ The right side of the trace screen has tabs with more information:
- **Step Details** shows data and results of the step that is currently highlighted. - **Step Details** shows data and results of the step that is currently highlighted.
- **Automation Config** shows the full YAML configuration at the time the automation was run. - **Automation Config** shows the full YAML configuration at the time the automation was run.
- **Trace Timeline**, shown in the screenshot above, lists the steps that were executed and their timing. - **Trace Timeline**, shown in the screenshot above, lists the steps that were executed and their timing.
- **Related logbook entries**, shows a logbook for all the entries related to the specific trace. - **Related activity**, shows the activity for all the entries related to the specific trace.
- **Blueprint Config** will only be shown if the automation was created from a {% term blueprint %}. - **Blueprint Config** will only be shown if the automation was created from a {% term blueprint %}.
The top bar shows the date and time the automation was triggered. Use the left and right arrows to view previous runs of the automation. The top bar shows the date and time the automation was triggered. Use the left and right arrows to view previous runs of the automation.

View File

@ -86,7 +86,7 @@ If you do not want to [re-import the blueprint](/docs/automation/using_blueprint
its {% term YAML %} content to keep it up to date: its {% term YAML %} content to keep it up to date:
1. Navigate to the blueprints directory (`blueprints/automation/`). 1. Navigate to the blueprints directory (`blueprints/automation/`).
The location of this directory depends on the installation method. It's The location of this directory depends on the installation type. It's
similar to how you find [`configuration.yaml`](/docs/configuration/#editing-configurationyaml). similar to how you find [`configuration.yaml`](/docs/configuration/#editing-configurationyaml).
2. Next, you must find the blueprint to update. The path name of a blueprint consists of: 2. Next, you must find the blueprint to update. The path name of a blueprint consists of:
- The username of the user that created it. The name depends on the source of the blueprint: - The username of the user that created it. The name depends on the source of the blueprint:

View File

@ -1189,7 +1189,7 @@ 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. 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.
When used without options, the selector will accept a free form object. When used without options, the selector will accept any valid YAML content, such as objects, arrays, strings, or other YAML types. The input box is displayed as an editor with syntax highlighting.
![Screenshot of an object selector](/images/blueprints/selector-object.png) ![Screenshot of an object selector](/images/blueprints/selector-object.png)
@ -1197,7 +1197,7 @@ When used without options, the selector will accept a free form object.
object: object:
``` ```
When used with a `schema`, the selector will force the object to be in this format by displaying a form. When used with `fields` specified, 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) ![Screenshot of an object selector](/images/blueprints/selector-object-schema.png)
@ -1220,7 +1220,7 @@ object:
The output of this selector is a YAML object. The output of this selector is a YAML object.
{% configuration qr_code %} {% configuration object %}
fields: fields:
description: > description: >
List of fields of the object. List of fields of the object.
@ -1231,6 +1231,11 @@ fields:
description: The label of the field description: The label of the field
required: false required: false
type: string type: string
required:
description: If set to true, the field must be present.
required: false
default: false
type: boolean
selector: selector:
description: The selector to use for this field. It can be any available selector. description: The selector to use for this field. It can be any available selector.
required: true required: true
@ -1256,7 +1261,7 @@ translation_key:
required: false required: false
multiple: multiple:
description: > 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. Allows adding multiple objects. If set to `true`, the resulting value of this selector will be a list instead of a single YAML object. This option is only used if `fields` option set.
type: boolean type: boolean
required: false required: false
default: false default: false
@ -1481,34 +1486,6 @@ target:
``` ```
{% configuration target %} {% configuration target %}
device:
description: >
When device options are provided, the targets are limited by devices
that at least match the given conditions. Can be either a object or a list
of object.
type: list
keys:
integration:
description: >
Can be set to an integration domain. Limits the device targets that
are provided devices by the set integration domain, for example,
[`zha`](/integrations/zha).
type: string
required: false
manufacturer:
description: >
When set, it limits the targets to devices provided by the set
manufacturer name.
type: string
required: false
model:
description: When set, it limits the targets to devices by the set model.
type: string
required: false
model_id:
description: When set, the targets are limited to devices that have the set model ID.
type: string
required: false
entity: entity:
description: > description: >
When entity options are provided, the targets are limited by entities When entity options are provided, the targets are limited by entities
@ -1567,18 +1544,6 @@ target:
domain: light domain: light
``` ```
Another example using the target selector, which only shows targets that
provide one or more remote controls, provided by the
[deCONZ](/integrations/deconz) integration.
```yaml
target:
device:
- integration: deconz
manufacturer: IKEA of Sweden
model: TRADFRI remote control
```
## Template selector ## Template selector
The template selector can be used to input a Jinja2 template. This is useful The template selector can be used to input a Jinja2 template. This is useful

View File

@ -27,7 +27,7 @@ Example of a configuration.yaml file, accessed using the File editor add-on on a
## Editing `configuration.yaml` ## Editing `configuration.yaml`
How you edit your `configuration.yaml` file depends on your editor preferences and the [installation method](/installation/#about-installation-methods) you used to set up Home Assistant. Follow these steps: How you edit your `configuration.yaml` file depends on your editor preferences and the [installation type](/installation/#about-installation-types) you used to set up Home Assistant. Follow these steps:
1. [Set up file access](#to-set-up-access-to-the-files-and-prepare-an-editor). 1. [Set up file access](#to-set-up-access-to-the-files-and-prepare-an-editor).
2. [Locate the config directory](#to-find-the-configuration-directory). 2. [Locate the config directory](#to-find-the-configuration-directory).
@ -37,7 +37,7 @@ How you edit your `configuration.yaml` file depends on your editor preferences a
### To set up access to the files and prepare an editor ### To set up access to the files and prepare an editor
Before you can edit a file, you need to know how to access files in Home Assistant and setup an editor. Before you can edit a file, you need to know how to access files in Home Assistant and setup an editor.
File access depends on your [installation method](/installation/#about-installation-methods). If you use {% term "Home Assistant Operating System" %}, you can use editor add-ons, for example. If you use {% term "Home Assistant Container" %}, add-ons are not available. File access depends on your [installation type](/installation/#about-installation-types). If you use {% term "Home Assistant Operating System" %}, you can use editor add-ons, for example. If you use {% term "Home Assistant Container" %}, add-ons are not available.
To set up file access on the Home Assistant Operating System, follow these steps: To set up file access on the Home Assistant Operating System, follow these steps:
@ -70,7 +70,7 @@ If you have watched any videos about setting up Home Assistant using `configurat
After changing configuration or automation files, you can check if the configuration is valid. A configuration check is also applied automatically when you reload the configuration or when you restart Home Assistant. After changing configuration or automation files, you can check if the configuration is valid. A configuration check is also applied automatically when you reload the configuration or when you restart Home Assistant.
The method for running a configuration check depends on your [installation type](/installation/#about-installation-methods). Check the common tasks for your installation type: The method for running a configuration check depends on your [installation type](/installation/#about-installation-types). Check the common tasks for your installation type:
- [Configuration check on Operating System](/common-tasks/os/#configuration-check) - [Configuration check on Operating System](/common-tasks/os/#configuration-check)
- [Configuration check on Container](/common-tasks/container/#configuration-check) - [Configuration check on Container](/common-tasks/container/#configuration-check)

View File

@ -221,7 +221,7 @@ learn more about packages, see the [Packages](/docs/configuration/packages) page
That about wraps it up. That about wraps it up.
If you have issues, checkout `home-assistant.log` in the configuration directory as well as your indentations. If all else fails, head over to our [Discord chat server][discord] and ask away. If you have issues, check the file indentations and check [the Home Assistant logs](/integrations/logger/#viewing-logs). If all else fails, head over to our [Discord chat server][discord] and ask away.
## Debugging configuration files ## Debugging configuration files

View File

@ -11,11 +11,11 @@ It can happen that you run into trouble while configuring Home Assistant. Perhap
Before we dive into common issues, make sure you know where your configuration directory is. Home Assistant will print out the configuration directory it is using when starting up. Before we dive into common issues, make sure you know where your configuration directory is. Home Assistant will print out the configuration directory it is using when starting up.
Whenever an integration or configuration option results in a warning, it will be stored in `home-assistant.log` in the configuration directory. This file is reset on start of Home Assistant. Whenever an integration or configuration option results in a warning, it will be stored in [the logs](/integrations/logger/#viewing-logs).
## My integration does not show up ## My integration does not show up
When an integration does not show up, many different things can be the case. Before you try any of these steps, make sure to look at the `home-assistant.log` file and see if there are any errors related to your integration you are trying to set up. When an integration does not show up, many different things can be the case. Before you try any of these steps, make sure to look at the [the logs](/integrations/logger/#viewing-logs) and see if there are any errors related to your integration you are trying to set up.
If you have incorrect entries in your configuration files you can use the configuration check command (below) to assist in identifying them. If you have incorrect entries in your configuration files you can use the configuration check command (below) to assist in identifying them.
@ -41,7 +41,7 @@ sensor:
... ...
``` ```
Another common problem is that a required configuration setting is missing. If this is the case, the integration will report this to `home-assistant.log`. You can have a look at [the various integration pages](/integrations/) for instructions on how to setup the integrations. Another common problem is that a required configuration setting is missing. If this is the case, the integration will report this in [the logs](/integrations/logger/#viewing-logs). You can have a look at [the various integration pages](/integrations/) for instructions on how to setup the integrations.
See the [logger](/integrations/logger/) integration for instructions on how to define the level of logging you require for specific modules. See the [logger](/integrations/logger/) integration for instructions on how to define the level of logging you require for specific modules.
@ -49,7 +49,7 @@ If you find any errors or want to expand the documentation, please [let us know]
#### Problems with dependencies #### Problems with dependencies
Almost all integrations have external dependencies to communicate with your devices and services. Sometimes Home Assistant is unable to install the necessary dependencies. If this is the case, it should show up in `home-assistant.log`. Almost all integrations have external dependencies to communicate with your devices and services. Sometimes Home Assistant is unable to install the necessary dependencies. If this is the case, it should show up in [the logs](/integrations/logger/#viewing-logs).
The first step is trying to restart Home Assistant and see if the problem persists. If it does, look at the log to see what the error is. If you can't figure it out, please [report it](https://github.com/home-assistant/core/issues) so we can investigate what is going on. The first step is trying to restart Home Assistant and see if the problem persists. If it does, look at the log to see what the error is. If you can't figure it out, please [report it](https://github.com/home-assistant/core/issues) so we can investigate what is going on.
@ -142,4 +142,4 @@ homeassistant:
debug: true debug: true
``` ```
Once debug is enabled, periodically check [Home Assistant System Logs](https://my.home-assistant.io/redirect/logs) for new messages. Once debug is enabled, periodically check [Home Assistant System Logs](https://my.home-assistant.io/redirect/logs) for new messages.

View File

@ -20,4 +20,6 @@ Home Assistant is an open platform and so home energy management is not restrict
If you have a sensor that returns instantaneous power readings (W or kW), then to add a sensor that returns energy usage or generation (kWh), refer to the [Riemann sum integral integration](/integrations/integration/#energy). If you have a sensor that returns instantaneous power readings (W or kW), then to add a sensor that returns energy usage or generation (kWh), refer to the [Riemann sum integral integration](/integrations/integration/#energy).
You can also configure power sensors alongside energy sensors in the Energy dashboard. Power inputs accept sensors with `state_class: measurement` and appropriate units (for example `W` or `kW`).
<img src='/images/docs/energy/energy-overview.png' alt='Visual representation of how all different energy forms relate.' style='border: 0;box-shadow: none;'> <img src='/images/docs/energy/energy-overview.png' alt='Visual representation of how all different energy forms relate.' style='border: 0;box-shadow: none;'>

View File

@ -75,7 +75,7 @@ If you manually integrate your sensors, for example, using the [MQTT](/integrati
### Troubleshooting ### Troubleshooting
If you are unable to select your energy sensor in the grid consumption drop-down, make sure that its value is being recorded in the Recorder settings. If you are unable to select your energy or power sensor in the grid consumption drop-down, make sure that its value is being recorded in the Recorder settings.
[Energy integrations](/integrations/#energy) [Energy integrations](/integrations/#energy)

View File

@ -42,12 +42,13 @@ You are trying to add a sensor to the energy dashboard, but it does not appear i
### Resolution ### Resolution
To find out why the sensor is not showing, check the following points: To find out why the sensor is not showing, check the following points:
- The sensor must have the appropriate attributes. Check your entity attributes in {% my developer_states title="**Developer Tools** > **States**" %} to confirm the following: - The sensor must have the appropriate attributes. Check your entity attributes in {% my developer_states title="**Developer Tools** > **States**" %} to confirm the following:
- `device_class` must be `energy` for electricity grid, solar, or battery categories. It must be `gas` for gas, or `water` for water. - `device_class` must be `energy` or `power` for electricity grid, solar, or battery categories. It must be `gas` for gas, or `water` for water.
- `state_class` must be `total` or `total_increasing`. - `state_class` must be `measurement` for power sensors and `total` or `total_increasing` for all others.
- The sensor must have an appropriate `unit_of_measurement`. See the help text for each category to see which units are accepted. Units containing an exponent must match superscript characters exactly as defined, e.g. `m³` is accepted, `m3` is not. - The sensor must have an appropriate `unit_of_measurement`. See the help text for each category to see which units are accepted. Units containing an exponent must match superscript characters exactly as defined, e.g. `m³` is accepted, `m3` is not.
If any of the attributes are not correct, please open an issue against the integration that provides your sensor, or if you are developing custom template sensors, make sure the templates have the correct settings. If any of the attributes are not correct, please open an issue against the integration that provides your sensor, or if you are developing custom template sensors, make sure the templates have the correct settings.
- The entity must be a `sensor`. If you are trying to add something from another domain (for example an `input_number`), then you must first create a template sensor from it. - The entity must be a `sensor`. If you are trying to add something from another domain (for example an `input_number`), then you must first create a template sensor from it.
- The entity must not have any statistics errors. Go to {% my developer_statistics title="**Developer Tools** > **Statistics**" %} to check your specific entity. If your unit has a listed issue here, you must fix the issue before it can be added to the dashboard. - The entity must not have any statistics errors. Go to {% my developer_statistics title="**Developer Tools** > **Statistics**" %} to check your specific entity. If your unit has a listed issue here, you must fix the issue before it can be added to the dashboard.

View File

@ -19,7 +19,7 @@ Smart relays sit behind your "normal" switches and make them smart. It allows yo
## Devices with power (W) sensors ## Devices with power (W) sensors
Some smart devices, such as air conditioning, boilers, and others, may provide a power sensor, measured in Watts. You can use the [Integration (Riemann sum integral) integration](/integrations/integration/#energy) to calculate the energy your device is using. You can then use the energy sensor in the Energy Dashboard, as individual devices. For information on setting up an entity for use in the **Energy** dashboard, refer to the [energy FAQ](/docs/energy/faq/#troubleshooting-missing-entities). Some smart devices, such as air conditioning, boilers, and others, may provide a power sensor, measured in Watts. You can use the [Integration (Riemann sum integral) integration](/integrations/integration/#energy) to calculate the energy your device is using. You can then use the energy sensor in the Energy Dashboard, as individual devices. You can add the power sensor directly if it has the appropriate attributes. For information on setting up an entity for use in the **Energy** dashboard, refer to the [energy FAQ](/docs/energy/faq/#troubleshooting-missing-entities).
<img src='/images/docs/energy/devices.png' alt='Graphic showing energy flowing from the home to individual devices.' style='border: 0;box-shadow: none; display: block; max-height: 400px; margin: 0 auto;'> <img src='/images/docs/energy/devices.png' alt='Graphic showing energy flowing from the home to individual devices.' style='border: 0;box-shadow: none; display: block; max-height: 400px; margin: 0 auto;'>

View File

@ -25,6 +25,7 @@ Some hardware with water meters may also provide additional practical functions
We have the following integrations available for existing products that can provide information about water usage: We have the following integrations available for existing products that can provide information about water usage:
- [Droplet](/integrations/droplet)
- [Flo](/integrations/flo) - [Flo](/integrations/flo)
- [Flume](/integrations/flume) - [Flume](/integrations/flume)
- [HomeWizard Energy](/integrations/homewizard) - [HomeWizard Energy](/integrations/homewizard)

View File

@ -325,7 +325,7 @@ This can be used to take different actions based on whether or not the condition
## Fire an event ## Fire an event
This {% term action %} allows you to fire an event. Events can be used for many things. It could trigger an {% term automation %} or indicate to another integration that something is happening. For instance, in the below example it is used to create an entry in the logbook. This {% term action %} allows you to fire an event. Events can be used for many things. It could trigger an {% term automation %} or indicate to another integration that something is happening. For instance, in the below example it is used to create an entry in the **Activity** panel.
```yaml ```yaml
- alias: "Fire LOGBOOK_ENTRY event" - alias: "Fire LOGBOOK_ENTRY event"

View File

@ -16,7 +16,7 @@ The script has further options like checking configuration files which are not l
```bash ```bash
$ hass --script check_config -h $ hass --script check_config -h
usage: hass [-h] [--script {check_config}] [-c CONFIG] [-i [INFO]] [-f] [-s] usage: hass [-h] [--script {check_config}] [-c CONFIG] [-i [INFO]] [-f] [-s] [--json] [--fail-on-warnings]
Check Home Assistant configuration. Check Home Assistant configuration.
@ -30,4 +30,6 @@ optional arguments:
Show a portion of the config Show a portion of the config
-f, --files Show used configuration files -f, --files Show used configuration files
-s, --secrets Show secret information -s, --secrets Show secret information
--json Output JSON format
--fail-on-warnings Exit non-zero if warnings are present
``` ```

View File

@ -5,7 +5,7 @@ description: "Description of hass."
The command-line part of Home Assistant is `hass`. The command-line part of Home Assistant is `hass`.
This tool is only available to users of the Home Assistant Core installation method. It is started from the command line on the computer running Home Assistant Core (accessed perhaps via SSH). This tool is only available to users of the Home Assistant Core installation type. It is started from the command line on the computer running Home Assistant Core (accessed perhaps via SSH).
```text ```text
$ hass -h $ hass -h

View File

@ -4,9 +4,9 @@ description: "My integration does not show up"
ha_category: Configuration ha_category: Configuration
--- ---
When an integration does not show up, many different things can be the case. Before you try any of these steps, make sure to look at the `home-assistant.log` file and see if there are any errors related to your integration you are trying to set up. When an integration does not show up, many different things can be the case. Before you try any of these steps, make sure to look at the [the logs](/integrations/logger/#viewing-logs) and see if there are any errors related to your integration you are trying to set up.
If you have incorrect entries in your configuration files you can use the CLI script to check your configuration, each installation type has its own section in the common-tasks about this: If you have incorrect entries in your configuration files you can use the CLI script to check your configuration, each installation type has its own section in the common-tasks about this:
- [Operating System](/common-tasks/os/#configuration-check) - [Operating System](/common-tasks/os/#configuration-check)
- [Container](/common-tasks/container/#configuration-check) - [Container](/common-tasks/container/#configuration-check)

View File

@ -5,7 +5,7 @@ ha_category: Installation
--- ---
Home Assistant Core is a Python program, in simple words. It can be run on various operating systems and provide the ability to track, control and automate your devices. Home Assistant Core is a Python program, in simple words. It can be run on various operating systems and provide the ability to track, control and automate your devices.
When people talking about Home Assistant Core they usually refer to a standalone [installation method](/docs/installation/). When people talking about Home Assistant Core they usually refer to a standalone [installation type](/docs/installation/).
[Home Assistant](/hassio/) is a combination of Home Assistant Core and tools which allows one to run it easily on a Raspberry Pi and other platforms without setting up an operating system first. [Home Assistant](/hassio/) is a combination of Home Assistant Core and tools which allows one to run it easily on a Raspberry Pi and other platforms without setting up an operating system first.
Home Assistant is an all-in one-solution and has a management user interface that can be used from the Home Assistant frontend. This interface is not present in a Home Assistant Core setup. Home Assistant is an all-in one-solution and has a management user interface that can be used from the Home Assistant frontend. This interface is not present in a Home Assistant Core setup.

View File

@ -4,6 +4,6 @@ description: "Problems with dependencies"
ha_category: Usage ha_category: Usage
--- ---
Almost all integrations have external dependencies to communicate with your devices and services. Sometimes Home Assistant is unable to install the necessary dependencies. If this is the case, it should show up in `home-assistant.log`. Almost all integrations have external dependencies to communicate with your devices and services. Sometimes Home Assistant is unable to install the necessary dependencies. If this is the case, it should show up in [the logs](/integrations/logger/#viewing-logs).
The first step is trying to restart Home Assistant and see if the problem persists. If it does, look at the log to see what the error is. If you can't figure it out, please [report it](https://github.com/home-assistant/home-assistant/issues) so we can investigate what is going on. The first step is trying to restart Home Assistant and see if the problem persists. If it does, look at the log to see what the error is. If you can't figure it out, please [report it](https://github.com/home-assistant/home-assistant/issues) so we can investigate what is going on.

View File

@ -79,7 +79,7 @@
{% if page.ha_domain %} {% if page.ha_domain %}
<div class='section'> <div class='section'>
<a href="https://github.com/home-assistant/core/tree/dev/homeassistant/components/{{ domain }}" target="_blank">{% icon "simple-icons:github" %} View source on GitHub</a><br /> <a href="https://github.com/home-assistant/core/tree/dev/homeassistant/components/{{ domain }}" target="_blank">{% icon "simple-icons:github" %} View source on GitHub</a><br />
<a href="https://github.com/home-assistant/core/issues?q=is%3Aissue+is%3Aopen+label%3A%22integration%3A+{{ domain }}%22" target="_blank">{% icon "mdi:bug" %} View known issues</a> <a href="https://github.com/home-assistant/core/issues?q=is%3Aissue+label%3A%22integration%3A+{{ domain }}%22" target="_blank">{% icon "mdi:bug" %} View known issues</a>
</div> </div>
{%- endif -%} {%- endif -%}
</section> </section>

View File

@ -40,6 +40,7 @@
<li>{% active_link /dashboards/features/ Features %}</li> <li>{% active_link /dashboards/features/ Features %}</li>
<li>{% active_link /dashboards/header-footer/ Headers & footers %}</li> <li>{% active_link /dashboards/header-footer/ Headers & footers %}</li>
<li>{% active_link /dashboards/actions/ Actions %}</li> <li>{% active_link /dashboards/actions/ Actions %}</li>
<li>{% active_link /dashboards/naming/ Naming %}</li>
<li><a <li><a
class="external-link" class="external-link"
href="https://developers.home-assistant.io/docs/frontend/custom-ui/custom-card/" href="https://developers.home-assistant.io/docs/frontend/custom-ui/custom-card/"

View File

@ -11,13 +11,13 @@
<ul> <ul>
<li><a href="https://support.nabucasa.com/hc/en-us/categories/24638797677853-Home-Assistant-Green">Home Assistant Green {% icon "tabler:external-link" %}</a></li> <li><a href="https://support.nabucasa.com/hc/en-us/categories/24638797677853-Home-Assistant-Green">Home Assistant Green {% icon "tabler:external-link" %}</a></li>
<li><a href="https://support.nabucasa.com/hc/en-us/categories/24734575925149-Home-Assistant-Yellow">Home Assistant Yellow {% icon "tabler:external-link" %}</a></li> <li><a href="https://support.nabucasa.com/hc/en-us/categories/24734575925149-Home-Assistant-Yellow">Home Assistant Yellow {% icon "tabler:external-link" %}</a></li>
<li>{% active_link /installation/raspberrypi Raspberry Pi %}</li> <li>{% active_link /installation/raspberrypi/ Raspberry Pi %}</li>
<li>{% active_link /installation/odroid ODROID %}</li> <li>{% active_link /installation/odroid/ ODROID %}</li>
<li>{% active_link /installation/generic-x86-64 Generic x86-64 %}</li> <li>{% active_link /installation/generic-x86-64/ Generic x86-64 %}</li>
<li>{% active_link /installation/linux Linux %}</li> <li>{% active_link /installation/linux/ Linux %}</li>
<li>{% active_link /installation/macos macOS %}</li> <li>{% active_link /installation/macos/ macOS %}</li>
<li>{% active_link /installation/windows Windows %}</li> <li>{% active_link /installation/windows/ Windows %}</li>
<li>{% active_link /installation/alternative Other systems %}</li> <li>{% active_link /installation/alternative/ Other systems %}</li>
<li>{% active_link /installation/troubleshooting/ Troubleshooting %}</li> <li>{% active_link /installation/troubleshooting/ Troubleshooting %}</li>
</ul> </ul>
{% endif %} {% endif %}

View File

@ -41,7 +41,7 @@ Note: This commands will render your current Home Assistant OS installation unbo
Use the local terminal (HDMI/keyboard) to access the system console. On the Home Assistant CLI (command line), enter `login` to enter the root shell and use `curl` to download an image and `dd` it to the eMMC block device: Use the local terminal (HDMI/keyboard) to access the system console. On the Home Assistant CLI (command line), enter `login` to enter the root shell and use `curl` to download an image and `dd` it to the eMMC block device:
```sh ```sh
curl https://dn.odroid.com/RK3566/ODROID-M1S/Installer/ODROID-M1S_EMMC2UMS.img | dd of=/dev/mmcblk0 curl -L -A "Mozilla/5.0" https://dn.odroid.com/RK3566/ODROID-M1S/Installer/ODROID-M1S_EMMC2UMS.img | sudo dd of=/dev/mmcblk0 bs=4M status=progress conv=fsync
``` ```
This way, the device will start in the UMS mode on the next boot with the SD card removed. Follow the [Install over USB from PC](https://wiki.odroid.com/odroid-m1s/getting_started/os_installation_guide#install_over_usb_from_pc) to install a different operating system. This way, the device will start in the UMS mode on the next boot with the SD card removed. Follow the [Install over USB from PC](https://wiki.odroid.com/odroid-m1s/getting_started/os_installation_guide#install_over_usb_from_pc) to install a different operating system.

View File

@ -23,6 +23,22 @@
</a> </a>
{% endif %} {% endif %}
<a href="https://www.youtube.com/watch?v=HSRvso6cbf0" class="material-card picture-promo picture-top" target="_blank"
rel="noopener noreferrer" aria-label="Join the livestream for our latest product reveal!"
style="background-image: url(/images/frontpage/feature-nov19.webp);background-size: cover;aspect-ratio: 900/600;">
<div class="caption">
<div>
<div class="title">
Product launch incoming
</div>
<div class="subtitle">
Join the livestream for our latest product reveal!<br />
November 19 @ 12PM PT / 3PM ET / 21:00 CET
</div>
</div>
</div>
</a>
{% assign releases_post_limit = 2 %} {% assign releases_post_limit = 2 %}
{% assign blog_post_limit = 4 %} {% assign blog_post_limit = 4 %}
<!-- Home Assistant updates posts --> <!-- Home Assistant updates posts -->
@ -80,11 +96,11 @@
</ol> </ol>
</div> </div>
<!-- Community Day 2025 - To move on/after event --> <!-- Community -->
<a href="https://lu.ma/homeassistant" class="material-card picture-promo" target="_blank" style=" <a href="/community" class="material-card picture-promo" style="
background-image: url(/images/frontpage/community-meetup.webp); background-image: url(/images/frontpage/community-card.webp);
aspect-ratio: 500/263; aspect-ratio: 500/263;
" aria-label="State of the Open Home - Saturday April 12th 2025"> " aria-label="Join the Home Assistant community">
</a> </a>
<!-- OHF notice --> <!-- OHF notice -->

View File

@ -23,11 +23,11 @@
</div> </div>
<div class="hero-socialproof"> <div class="hero-socialproof">
<a href="https://github.blog/news-insights/octoverse/octoverse-2024/#the-state-of-open-source" target="_blank" class=""> <a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/#the-top-open-source-projects-by-contributors" target="_blank" class="">
<div class="hero-github-top-project"> <div class="hero-github-top-project">
<img src="/images/frontpage/hero-github-logo.svg" alt="GitHub logo"/> <img src="/images/frontpage/hero-github-logo.svg" alt="GitHub logo"/>
<img src="/images/frontpage/hero-trophy.svg" alt="Top open source project trophy"/> <img src="/images/frontpage/hero-trophy.svg" alt="Top open source project trophy"/>
<p><strong>Top open source project</strong> by contributors in 2024</p> <p><strong>Top open source project</strong> by contributors in 2025</p>
</div> </div>
</a> </a>

View File

@ -4,7 +4,7 @@
These below instructions are for an installation of {% term "Home Assistant Container" %} running in your own container environment, which you manage yourself. Any [OCI](https://opencontainers.org/) compatible runtime can be used, however this guide will focus on installing it with Docker. These below instructions are for an installation of {% term "Home Assistant Container" %} running in your own container environment, which you manage yourself. Any [OCI](https://opencontainers.org/) compatible runtime can be used, however this guide will focus on installing it with Docker.
{% note %} {% note %}
This installation method **does not have access to add-ons**. If you want to use add-ons, you need to use another installation method. The recommended method is {% term "Home Assistant Operating System" %}. Checkout the [overview table of installation types](https://www.home-assistant.io/installation/#about-installation-methods) to see the differences. This installation type **does not have access to add-ons**. If you want to use add-ons, you need to use another installation type. The recommended type is {% term "Home Assistant Operating System" %}. Checkout the [overview table of installation types](https://www.home-assistant.io/installation/#about-installation-types) to see the differences.
{% endnote %} {% endnote %}
{% important %} {% important %}

View File

@ -180,53 +180,51 @@ Use this method only if Method 1 does not work for you.
4. Download the image to your computer. 4. Download the image to your computer.
- Copy the URL for the image. - Copy the URL for the image.
- If there are multiple links below, make sure to select the correct link for your version of {{site.installation.types[page.installation_type].board}}. - If there are multiple links below, make sure to select the correct link for your version of {{site.installation.types[page.installation_type].board}}.
{% if site.installation.types[page.installation_type].variants.size > 1 %} {% if site.installation.types[page.installation_type].variants.size > 1 %}
{% tabbed_block %} {% tabbed_block %}
{% for variant in site.installation.types[page.installation_type].variants %} {% for variant in site.installation.types[page.installation_type].variants %}
- title: {{ variant.name }} - title: {{ variant.name }}
content: | content: |
```text
{{release_url}}/{{site.data.version_data.hassos[variant.key]}}/haos_{{ variant.key }}-{{site.data.version_data.hassos[variant.key]}}.img.xz
```
{% if variant.key == "odroid-n2" %}
[Guide: Flashing ODROID-N2 using OTG-USB](/installation/odroid#flashing-an-odroid-n2)
{% elsif variant.key == "odroid-m1s" %}
[Guide: Flashing ODROID-M1S using OTG-USB](/installation/odroid#flashing-an-odroid-m1s)
{% elsif variant.key == "rpi4" or variant.key == "rpi3" %}
*(64-bit is recommended)*
{% endif %}
{% endfor %}
{% endtabbed_block %}
{% else %}
```text ```text
{{release_url}}/{{site.data.version_data.hassos[variant.key]}}/haos_{{ variant.key }}-{{site.data.version_data.hassos[variant.key]}}.img.xz {% assign board_key = site.installation.types[page.installation_type].variants[0].key %}
{{release_url}}/{{site.data.version_data.hassos[board_key]}}/haos_{{ board_key }}-{{site.data.version_data.hassos[board_key]}}.img.xz
``` ```
{% if variant.key == "odroid-n2" %}
[Guide: Flashing ODROID-N2 using OTG-USB](/installation/odroid#flashing-an-odroid-n2)
{% elsif variant.key == "odroid-m1s" %}
[Guide: Flashing ODROID-M1S using OTG-USB](/installation/odroid#flashing-an-odroid-m1s)
{% elsif variant.key == "rpi4" or variant.key == "rpi3" %}
*(64-bit is recommended)*
{% endif %} {% endif %}
{% endfor %} *Select and copy the URL or use the "copy" button that appears when you hover it.*
{% endtabbed_block %}
{% else %}
```text
{% assign board_key = site.installation.types[page.installation_type].variants[0].key %}
{{release_url}}/{{site.data.version_data.hassos[board_key]}}/haos_{{ board_key }}-{{site.data.version_data.hassos[board_key]}}.img.xz
```
{% endif %}
*Select and copy the URL or use the "copy" button that appear when you hover it.*
5. Paste the URL into your browser to start the download. 5. Paste the URL into your browser to start the download.
6. Extract the file you just downloaded. 6. Extract the file you just downloaded.
7. Select **Flash from file** and select the image you just extracted. 7. Select **Flash from file** and select the image you just extracted.
- Do not use **Flash from URL**. It does not work on some systems. - Do not use **Flash from URL**. It does not work on some systems.
![Screenshot of the Etcher software showing flash from URL selected.](/images/installation/etcher1_file.png)
![Screenshot of the Etcher software showing flash from URL selected.](/images/installation/etcher1_file.png)
8. **Select target**. 8. **Select target**.
![Screenshot of the Etcher software showing the select target button highlighted.](/images/installation/etcher3.png) ![Screenshot of the Etcher software showing the select target button highlighted.](/images/installation/etcher3.png)
9. Select the boot medium ({{site.installation.types[page.installation_type].installation_media}}) you want to use for your installation. 9. Select the boot medium ({{site.installation.types[page.installation_type].installation_media}}) you want to use for your installation.
![Screenshot of the Etcher software showing the targets available.](/images/installation/etcher4.png) ![Screenshot of the Etcher software showing the targets available.](/images/installation/etcher4.png)
10. Select **Flash!** to start writing the image. 10. Select **Flash!** to start writing the image.
- If the operation fails, decompress the .xz file and try again. - If the operation fails, decompress the .xz file and try again.
![Screenshot of the Etcher software showing the Flash button highlighted.](/images/installation/etcher5.png) ![Screenshot of the Etcher software showing the Flash button highlighted.](/images/installation/etcher5.png)
- When Balena Etcher has finished writing the image, you will see a confirmation. - When Balena Etcher has finished writing the image, you will see a confirmation.
![Screenshot of the Etcher software showing that the installation has completed.](/images/installation/etcher6.png) ![Screenshot of the Etcher software showing that the installation has completed.](/images/installation/etcher6.png)
### Start up your {{site.installation.types[page.installation_type].board}} ### Start up your {{site.installation.types[page.installation_type].board}}
@ -321,7 +319,7 @@ Minimum recommended assignments:
- title: VirtualBox - title: VirtualBox
content: | content: |
1. Create a new virtual machine. 1. Create a new virtual machine.
2. Select type **Linux**, subtype **Oracle Linux** and version **Oracle Linux (ARM 64-bit)**. 2. Select type **Linux**, subtype **Oracle Linux** and version **Oracle Linux (64-bit)** or **Oracle Linux (ARM 64-bit)** depending on your hardware.
3. Under **Hardware**, select the amount of memory and number of CPUs. Then, select **Enable EFI**. 3. Under **Hardware**, select the amount of memory and number of CPUs. Then, select **Enable EFI**.
- Make sure **EFI** is enabled. If EFI is not enabled, HAOS won't boot. - Make sure **EFI** is enabled. If EFI is not enabled, HAOS won't boot.
4. Under **Hard Disk**, select **Use an existing virtual hard disk file**, select the unzipped VDI file from above. 4. Under **Hard Disk**, select **Use an existing virtual hard disk file**, select the unzipped VDI file from above.
@ -470,8 +468,6 @@ Minimum recommended assignments:
{% endif %} {% endif %}
{% include installation_survey.html %}
With the Home Assistant Operating System installed and accessible, you can continue with onboarding. With the Home Assistant Operating System installed and accessible, you can continue with onboarding.
{% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %} {% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %}

View File

@ -1,15 +0,0 @@
<div class="material-card text installation-survey" id="survey_section">
<h4>
<a href="#installation-survey_section" class="title-link"
><b>Help us improve Home Assistant</b></a
>
</h4>
<p>
Have you just installed Home Assistant? The Home Assistant team is looking
to talk to you to understand how the installation went.
</p>
<a href="https://forms.gle/BBQN5yiu6f1qfq6g9" target="_blank" class="button"
>Help now</a
>
</div>
<div><p></p></div>

View File

@ -43,12 +43,7 @@ This section explains how to generate a client ID and client secret on
- For Application type, choose **Web Application** and give this client ID a name (like "Home Assistant Client"). - For Application type, choose **Web Application** and give this client ID a name (like "Home Assistant Client").
- Add `https://my.home-assistant.io/redirect/oauth` to **Authorized redirect URIs** then select **Create**. - Add `https://my.home-assistant.io/redirect/oauth` to **Authorized redirect URIs** then select **Create**.
> **Note**: This is not a placeholder. It is the URI that must be used. > **Note**: This is not a placeholder. It is the URI that must be used.
- Click **Create**. 9. From the resulting dialog take a note of **Client ID** and **Client Secret** you **can not retrieve it again** after closing the dialog.
9. Find the client you just created. Under the Actions column, choose **Download OAuth client** (download icon), which will show you the **Client ID** and **Client Secret**.
- Make a note of these (for example, copy and paste them into a text editor), as you will need them shortly.
- Once you have noted these strings, select **Close**. - Once you have noted these strings, select **Close**.
- Congratulations! You are now the keeper of a client secret. Guard it in your treasure box. In most cases, your new credentials will be active within a few minutes. However, Google states that activation may take up to five hours in some circumstances. - Congratulations! You are now the keeper of a client secret. Guard it in your treasure box. In most cases, your new credentials will be active within a few minutes. However, Google states that activation may take up to five hours in some circumstances.
> If you need to find these credentials again at any point, then navigate to **APIs & Services** > **Credentials**, and you will see **Home Assistant Credentials** (or whatever you named them in the previous step) under **OAuth 2.0 Client IDs**.
>
> To view the **Client ID** and **Client Secret**, click the **Download OAuth client** (download icon) under the Actions column.
{% enddetails %} {% enddetails %}

View File

@ -1,9 +1,9 @@
<script type="module" src="https://cdn.jsdelivr.net/npm/@justinribeiro/lite-youtube@1.3.1/lite-youtube.js"></script> <script type="module" src="https://cdn.jsdelivr.net/npm/@justinribeiro/lite-youtube@1.3.1/lite-youtube.js" integrity="sha384-7o3d1sg8jSS1LMKzzIEucWtWFI1X4lFCC5gu2ylAgH3KmHcJgjTqp6LWfIvbbmf9" crossorigin="anonymous"></script>
<script src="{{ '/javascripts/terminology_tooltip.js' | cache_buster }}" type="text/javascript" defer></script> <script src="{{ '/javascripts/terminology_tooltip.js' | cache_buster }}" type="text/javascript" defer></script>
<script src="{{ '/javascripts/prism.js' | cache_buster }}" type="text/javascript" defer></script> <script src="{{ '/javascripts/prism.js' | cache_buster }}" type="text/javascript" defer></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@docsearch/js@3/dist/umd/index.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/@docsearch/js@3/dist/umd/index.min.js" integrity="sha384-f/IEhh8fvOc2ALU79emLlUqAYXyqlA/zYhM+g5GlWMk15QBjTXy05TtmfT1TbtV6" crossorigin="anonymous"></script>
<script type="text/javascript"> <script type="text/javascript">
docsearch({ docsearch({
container: '#docsearch', container: '#docsearch',

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