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,
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"
second-person perspective, using "you" and "your" instead of "the user"
or "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" or "users".
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

View File

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

View File

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

View File

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

View File

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

3
.gitignore vendored
View File

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

1
.vscode/cSpell.json vendored
View File

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

View File

@ -8,6 +8,11 @@
# https://github.com/blog/2392-introducing-code-owners
# 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/_integration_docs_template.markdown @home-assistant/core
source/_integrations/abode.markdown @shred86
@ -15,6 +20,7 @@ source/_integrations/acaia.markdown @zweckj
source/_integrations/accuweather.markdown @bieniu
source/_integrations/acmeda.markdown @atmurray
source/_integrations/acomax.markdown @starkillerOG
source/_integrations/actron_air.markdown @kclif9 @JagadishDhanamjayam
source/_integrations/adax.markdown @danielhiversen @lazytarget
source/_integrations/adguard.markdown @frenck
source/_integrations/ads.markdown @mrpasztoradam
@ -38,6 +44,7 @@ source/_integrations/airvisual.markdown @bachya
source/_integrations/airvisual_pro.markdown @bachya
source/_integrations/airzone.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/alert.markdown @home-assistant/core @frenck
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/amcrest.markdown @flacjacket
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/android_ip_webcam.markdown @engrbm87
source/_integrations/androidtv.markdown @JeffLIrion @ollo69
@ -77,8 +84,8 @@ source/_integrations/arcam_fmj.markdown @elupus
source/_integrations/arris_tg2492lg.markdown @vanbalken
source/_integrations/arve.markdown @ikalnyi
source/_integrations/aseko_pool_live.markdown @milanmeu
source/_integrations/assist_pipeline.markdown @balloob @synesthesiam
source/_integrations/assist_satellite.markdown @home-assistant/core @synesthesiam
source/_integrations/assist_pipeline.markdown @synesthesiam @arturpragacz
source/_integrations/assist_satellite.markdown @home-assistant/core @synesthesiam @arturpragacz
source/_integrations/asuswrt.markdown @kennedyshead @ollo69 @Vaskivskyi
source/_integrations/atag.markdown @MatsNL
source/_integrations/aten_pe.markdown @mtdcr
@ -166,12 +173,13 @@ source/_integrations/comelit.markdown @chemelli74
source/_integrations/comfoconnect.markdown @michaelarnauts
source/_integrations/command_line.markdown @gjohansson-ST
source/_integrations/compensation.markdown @Petro31
source/_integrations/compit.markdown @Przemko92
source/_integrations/coned.markdown @tronikos
source/_integrations/config.markdown @home-assistant/core
source/_integrations/configurator.markdown @home-assistant/core
source/_integrations/constructa.markdown @DavidMStraub @Diegorro98 @MartinHjelmare
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/coolmaster.markdown @OnFreund
source/_integrations/counter.markdown @fabaff
@ -180,6 +188,7 @@ source/_integrations/cozytouch.markdown @imicknl
source/_integrations/cpuspeed.markdown @fabaff
source/_integrations/cribl.markdown @Bre77
source/_integrations/crownstone.markdown @Crownstone @RicArch97
source/_integrations/cync.markdown @Kinachi249
source/_integrations/dacia.markdown @epenet
source/_integrations/daikin.markdown @fredrike
source/_integrations/date.markdown @home-assistant/core
@ -237,6 +246,7 @@ source/_integrations/ecowitt.markdown @pvizeli
source/_integrations/efergy.markdown @tkdrob
source/_integrations/egardia.markdown @jeroenterheerdt
source/_integrations/eheimdigital.markdown @autinerd
source/_integrations/ekeybionyx.markdown @richardpolzer
source/_integrations/electrasmart.markdown @jafar-atili
source/_integrations/electric_kiwi.markdown @mikey0000
source/_integrations/elevenlabs.markdown @sorgfresser
@ -256,8 +266,6 @@ source/_integrations/energie_vanons.markdown @klaasnicolaas
source/_integrations/energy.markdown @home-assistant/core
source/_integrations/energyzero.markdown @klaasnicolaas
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/entur_public_transport.markdown @hfurubotten
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/event.markdown @home-assistant/core
source/_integrations/evergy.markdown @tronikos
source/_integrations/evil_genius_labs.markdown @balloob
source/_integrations/evohome.markdown @zxdavb
source/_integrations/ezviz.markdown @RenierM26
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/filesize.markdown @gjohansson-ST
source/_integrations/filter.markdown @dgomes
source/_integrations/fing.markdown @Lorenzo-Gasparini
source/_integrations/fire_tv.markdown @JeffLIrion @ollo69
source/_integrations/firefly_iii.markdown @erwindouna
source/_integrations/fireservicerota.markdown @cyberjunky
source/_integrations/firmata.markdown @DaAwesomeP
source/_integrations/fitbit.markdown @allenporter
@ -292,7 +301,6 @@ source/_integrations/fivem.markdown @Sander0542
source/_integrations/fjaraskupan.markdown @elupus
source/_integrations/flexit_bacnet.markdown @lellky @piotrbulinski
source/_integrations/flexom.markdown @imicknl
source/_integrations/flick_electric.markdown @ZephireNZ
source/_integrations/flipr.markdown @cnico
source/_integrations/flo.markdown @dmulcahey
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/forked_daapd.markdown @uvjustin
source/_integrations/fortios.markdown @kimfrellsen
source/_integrations/foscam.markdown @krmarien
source/_integrations/frankever.markdown @balloob @bieniu @thecode @chemelli74 @bdraco
source/_integrations/foscam.markdown @Foscam-wangzhengyu
source/_integrations/frankever.markdown @bieniu @thecode @chemelli74 @bdraco
source/_integrations/freebox.markdown @hacf-fr @Quentame
source/_integrations/freedompro.markdown @stefano055415
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_cloud.markdown @lufton @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_mail.markdown @tkdrob
source/_integrations/google_photos.markdown @allenporter
@ -353,6 +360,7 @@ source/_integrations/gpsd.markdown @fabaff @jrieger
source/_integrations/gree.markdown @cmroche
source/_integrations/greeneye_monitor.markdown @jkeljo
source/_integrations/group.markdown @home-assistant/core
source/_integrations/growatt_server.markdown @johanzander
source/_integrations/guardian.markdown @bachya
source/_integrations/habitica.markdown @tr4nt0r
source/_integrations/hardware.markdown @home-assistant/core
@ -395,7 +403,7 @@ source/_integrations/honeywell.markdown @rdfurman @mkmer
source/_integrations/html5.markdown @alexyao2015
source/_integrations/http.markdown @home-assistant/core
source/_integrations/huawei_lte.markdown @scop @fphammerle
source/_integrations/hue.markdown @balloob @marcelveldt
source/_integrations/hue.markdown @marcelveldt
source/_integrations/huisbaasje.markdown @dennisschroer
source/_integrations/humidifier.markdown @home-assistant/core @Shulyaka
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/incomfort.markdown @jbouwh
source/_integrations/indianamichiganpower.markdown @tronikos
source/_integrations/inels.markdown @epdevlab
source/_integrations/influxdb.markdown @mdegat01
source/_integrations/inkbird.markdown @bdraco
source/_integrations/input_boolean.markdown @home-assistant/core
@ -436,7 +445,7 @@ source/_integrations/insteon.markdown @teharris1
source/_integrations/integration.markdown @dgomes
source/_integrations/intellifire.markdown @jeeftor
source/_integrations/intesishome.markdown @jnimmo
source/_integrations/iometer.markdown @MaestroOnICe
source/_integrations/iometer.markdown @jukrebs
source/_integrations/ios.markdown @robbiet480
source/_integrations/iotawatt.markdown @gtdiehl @jyavenard
source/_integrations/iotty.markdown @shapournemati-iotty
@ -445,6 +454,7 @@ source/_integrations/ipma.markdown @dgomes
source/_integrations/ipp.markdown @ctalkington
source/_integrations/iqvia.markdown @bachya
source/_integrations/irish_rail_transport.markdown @ttroy50
source/_integrations/irm_kmi.markdown @jdejaegh
source/_integrations/iron_os.markdown @tr4nt0r
source/_integrations/isal.markdown @bdraco
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/kodi.markdown @OnFreund
source/_integrations/konnected.markdown @heythisisnate
source/_integrations/konnected_esphome.markdown @jesserockz @kbx81 @bdraco
source/_integrations/kostal_plenticore.markdown @stegm
source/_integrations/kraken.markdown @eifinger
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/lg_netcast.markdown @Drafteed @splinter98
source/_integrations/lg_thinq.markdown @LG-ThinQ-Integration
source/_integrations/libre_hardware_monitor.markdown @Sab44
source/_integrations/lidarr.markdown @tkdrob
source/_integrations/lifx.markdown @Djelibeybi
source/_integrations/light.markdown @home-assistant/core
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/linux_battery.markdown @fabaff
source/_integrations/linx.markdown @starkillerOG
@ -520,6 +532,7 @@ source/_integrations/lookin.markdown @ANMalko @bdraco
source/_integrations/loqed.markdown @mikewoudenberg
source/_integrations/luci.markdown @mzdrale
source/_integrations/luftdaten.markdown @fabaff @frenck
source/_integrations/lunatone.markdown @MoonDevLT
source/_integrations/lupusec.markdown @majuss @suaveolent
source/_integrations/lutron.markdown @cdheiser @wilburCForce
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_eireann.markdown @DylanGore
source/_integrations/meteo_france.markdown @hacf-fr @oncleben31 @Quentame
source/_integrations/meteo_lt.markdown @xE1H
source/_integrations/meteoalarm.markdown @rolfberkenbosch
source/_integrations/meteoclimatic.markdown @adrianmo
source/_integrations/metoffice.markdown @MrHarcombe @avee87
@ -589,8 +603,9 @@ source/_integrations/nam.markdown @bieniu
source/_integrations/nanoleaf.markdown @milanmeu @joostlek
source/_integrations/nasweb.markdown @nasWebio
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/neo.markdown @bieniu @thecode @chemelli74 @bdraco
source/_integrations/ness_alarm.markdown @nickw444
source/_integrations/nest.markdown @allenporter
source/_integrations/netatmo.markdown @cgtobi
@ -610,6 +625,7 @@ source/_integrations/nightscout.markdown @marciogranzotto
source/_integrations/niko_home_control.markdown @VandeurenGlenn
source/_integrations/nilu.markdown @hfurubotten
source/_integrations/nina.markdown @DeerMaximum
source/_integrations/nintendo_parental_controls.markdown @pantherale0
source/_integrations/nissan_leaf.markdown @filcole
source/_integrations/noaa_tides.markdown @jdelaney72
source/_integrations/nobo_hub.markdown @echoromeo @oyvindwe
@ -632,7 +648,7 @@ source/_integrations/nyt_games.markdown @joostlek
source/_integrations/nzbget.markdown @chriscla
source/_integrations/obihai.markdown @dshokouhi @ejpenney
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/ohme.markdown @dan-r
source/_integrations/ollama.markdown @synesthesiam
@ -645,11 +661,11 @@ source/_integrations/onkyo.markdown @arturpragacz @eclair4151
source/_integrations/onvif.markdown @hunterjm @jterrace
source/_integrations/open_meteo.markdown @frenck
source/_integrations/open_router.markdown @joostlek
source/_integrations/openai_conversation.markdown @balloob
source/_integrations/openerz.markdown @misialq
source/_integrations/openexchangerates.markdown @MartinHjelmare
source/_integrations/opengarage.markdown @danielhiversen
source/_integrations/openhome.markdown @bazwilliams
source/_integrations/openrgb.markdown @felipecrs
source/_integrations/opensky.markdown @joostlek
source/_integrations/opentherm_gw.markdown @mvn23
source/_integrations/openuv.markdown @bachya
@ -684,15 +700,16 @@ source/_integrations/pi_hole.markdown @shenxn
source/_integrations/picnic.markdown @corneyl @codesalatdev
source/_integrations/pinecil.markdown @tr4nt0r
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/plaato.markdown @JohNan
source/_integrations/playstation_network.markdown @jackjpowell @tr4nt0r
source/_integrations/plex.markdown @jjlawren
source/_integrations/plugwise.markdown @CoMPaTech @bouwew
source/_integrations/plum_lightpad.markdown @ColinHarrington @prystupa
source/_integrations/point.markdown @fredrike
source/_integrations/pooldose.markdown @lmaertin
source/_integrations/poolsense.markdown @haemishkyd
source/_integrations/portainer.markdown @erwindouna
source/_integrations/portlandgeneral.markdown @tronikos
source/_integrations/powerfox.markdown @klaasnicolaas
source/_integrations/powerwall.markdown @bdraco @jrester @daniel-simpson
@ -705,7 +722,6 @@ source/_integrations/prometheus.markdown @knyar
source/_integrations/prosegur.markdown @dgomes
source/_integrations/proximity.markdown @mib1185
source/_integrations/proxmoxve.markdown @jhollowe @Corbeno
source/_integrations/prusalink.markdown @balloob
source/_integrations/ps4.markdown @ktnrg45
source/_integrations/pse.markdown @tronikos
source/_integrations/psoklahoma.markdown @tronikos
@ -758,7 +774,7 @@ source/_integrations/rest_command.markdown @jpbede
source/_integrations/rexel.markdown @imicknl
source/_integrations/rflink.markdown @javicalle
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/ring.markdown @sdb9696
source/_integrations/risco.markdown @OnFreund
@ -769,6 +785,7 @@ source/_integrations/roku.markdown @ctalkington
source/_integrations/romy.markdown @xeniter
source/_integrations/roomba.markdown @pschmitt @cyr-ius @shenxn @Orhideous
source/_integrations/roon.markdown @pavoni
source/_integrations/route_b_smart_meter.markdown @SeraphicRav
source/_integrations/rpi_power.markdown @shenxn @swetoast
source/_integrations/rss_feed_template.markdown @home-assistant/core
source/_integrations/ruckus_unleashed.markdown @lanrat @ms264556 @gabe565
@ -782,6 +799,7 @@ source/_integrations/saj.markdown @fredericvl
source/_integrations/samsam.markdown @klaasnicolaas
source/_integrations/samsungtv.markdown @chemelli74 @epenet
source/_integrations/sanix.markdown @tomaszsluszniak
source/_integrations/satel_integra.markdown @Tommatheussen
source/_integrations/scene.markdown @home-assistant/core
source/_integrations/schedule.markdown @home-assistant/core
source/_integrations/schlage.markdown @dknowles2
@ -809,9 +827,10 @@ source/_integrations/serial.markdown @fabaff
source/_integrations/seven_segments.markdown @fabaff
source/_integrations/seventeentrack.markdown @shaiu
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/shelly.markdown @balloob @bieniu @thecode @chemelli74 @bdraco
source/_integrations/shelly.markdown @bieniu @thecode @chemelli74 @bdraco
source/_integrations/shodan.markdown @fabaff
source/_integrations/sia.markdown @eavanvalkenburg
source/_integrations/siemens.markdown @DavidMStraub @Diegorro98 @MartinHjelmare
@ -851,7 +870,7 @@ source/_integrations/snapcast.markdown @luar123
source/_integrations/snmp.markdown @nmaggioni
source/_integrations/snoo.markdown @Lash-L
source/_integrations/snooz.markdown @AustinBrunkhorst
source/_integrations/solaredge.markdown @frenck @bdraco
source/_integrations/solaredge.markdown @frenck @bdraco @tronikos
source/_integrations/solaredge_local.markdown @drobtravels @scheric
source/_integrations/solarlog.markdown @Ernst79 @dontinelli
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/suez_water.markdown @ooii @jb101010-2
source/_integrations/sun.markdown @home-assistant/core
source/_integrations/sunricher_dali_center.markdown @niracler
source/_integrations/supla.markdown @mwegrzynek
source/_integrations/surepetcare.markdown @benleb @danielhiversen
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/switchbee.markdown @jafar-atili
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/switchmate.markdown @danielhiversen @qiz-li
source/_integrations/symfonisk.markdown @jjlawren @peterager
@ -900,7 +920,7 @@ source/_integrations/synology_srm.markdown @aerialls
source/_integrations/system_bridge.markdown @timmo001
source/_integrations/systemmonitor.markdown @gjohansson-ST
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/tailwind.markdown @frenck
source/_integrations/tami4.markdown @Guy293
@ -972,6 +992,7 @@ source/_integrations/uprise_smart_shades.markdown @starkillerOG
source/_integrations/uptime.markdown @frenck
source/_integrations/uptime_kuma.markdown @tr4nt0r
source/_integrations/uptimerobot.markdown @ludeeus @chemelli74
source/_integrations/usage_prediction.markdown @home-assistant/core
source/_integrations/usb.markdown @bdraco
source/_integrations/usgs_earthquakes_feed.markdown @exxamalte
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/vegehub.markdown @ghowevege
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/vermont_castings.markdown @jeeftor
source/_integrations/versasense.markdown @imstevenxyz
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/victron_remote_monitoring.markdown @AndyTempel
source/_integrations/vilfo.markdown @ManneW
source/_integrations/vivotek.markdown @HarlemSquirrel
source/_integrations/vizio.markdown @raman325
source/_integrations/vlc_telnet.markdown @rodripf @MartinHjelmare
source/_integrations/vodafone_station.markdown @paoloantinori @chemelli74
source/_integrations/voice_assistant.markdown @balloob @synesthesiam
source/_integrations/voip.markdown @balloob @synesthesiam @jaminh
source/_integrations/voip.markdown @synesthesiam @jaminh
source/_integrations/volumio.markdown @OnFreund
source/_integrations/volvo.markdown @thomasddn
source/_integrations/volvooncall.markdown @molobrakos
source/_integrations/wake_on_lan.markdown @ntilley905
source/_integrations/wake_word.markdown @home-assistant/core @synesthesiam
source/_integrations/wallbox.markdown @hesselonline
@ -1019,7 +1040,7 @@ source/_integrations/websocket_api.markdown @home-assistant/core
source/_integrations/weheat.markdown @jesperraemaekers
source/_integrations/wemo.markdown @esev
source/_integrations/whirlpool.markdown @abmantis @mkmer
source/_integrations/whisper.markdown @balloob @synesthesiam
source/_integrations/whisper.markdown @synesthesiam
source/_integrations/whois.markdown @frenck
source/_integrations/wiffi.markdown @mampfes
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/worldclock.markdown @fabaff
source/_integrations/ws66i.markdown @ssaenger
source/_integrations/wyoming.markdown @balloob @synesthesiam
source/_integrations/wyoming.markdown @synesthesiam
source/_integrations/xbox.markdown @hunterjm
source/_integrations/xiaomi_aqara.markdown @danielhiversen @syssi
source/_integrations/xiaomi_ble.markdown @Jc2k @Ernst79

12
Gemfile
View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,10 @@
#getting_started {
.installations {
&.second {
margin-top: 50px;
}
.label {
background: #e8e6f0;
border-radius: 4px;
@ -143,7 +147,7 @@
}
iconify-icon.external-link {
padding-top: 4px;
display: none;
}
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) {
z-index: unset;
position: relative;
}
}
@ -108,24 +109,32 @@ section#buy {
}
}
.terms {
padding: 0 16px;
max-width: 520px;
font-size: 14px;
position: absolute;
bottom: 20px;
bottom: 50px;
max-width: 22rem;
margin-top: 5rem;
@include bp(desktop) {
bottom: 80px;
bottom: 130px;
font-size: 16px;
margin-top: unset;
max-width: 26rem;
}
@include bp(1750px) {
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;
}
img{
border-radius: 8px;
display: block;
max-width: 800px;
width: 100%;
}
img,p {
&:not(:last-child) {
margin-bottom: 16px;
}
}
&-animation {
min-height: 0;
}

View File

@ -11,7 +11,7 @@ body_id: not_found
<div id="search404"></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">
docsearch({
container: '#search404',

View File

@ -8,6 +8,8 @@ related:
title: Themes
- docs: /dashboards/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 %}.
@ -36,8 +38,8 @@ entity:
type: string
name:
required: false
description: Overwrites friendly name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
default: Current state of the alarm entity.
states:
required: false

View File

@ -104,7 +104,7 @@ type: area
area: bedroom
display_type: picture
navigation_path: my_bedroom
sensor_classes:
sensor_classes:
- temperature
- humidity
alert_classes:
@ -116,4 +116,4 @@ features:
## 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
- docs: /dashboards/cards/
title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
---
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.
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.
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:
description: The height of the icon, in pixels.
Color:
description: The color of the icon.
Theme:
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:
description: The action taken on card tap. For more information, see the [action documentation](/dashboards/actions/#tap-action).
Hold Action:
@ -63,8 +69,8 @@ entity:
type: string
name:
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.
type: string
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, map, list]
default: Entity name
icon:
required: false
@ -91,11 +97,11 @@ icon_height:
description: The height of the icon. Any CSS value may be used.
type: string
default: auto
state_color:
color:
required: false
description: If false, the icon does not change color when the entity is active.
type: boolean
default: true
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: string
default: state
tap_action:
required: false
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_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
{% 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
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.
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
```yaml
type: energy-sources-table
types:
- gas
- water
```
## 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.
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
@ -287,13 +327,73 @@ type: energy-sankey
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).
All energy cards support use of `collection_key` option.
### Examples
Example view with multiple collections:
```yaml

View File

@ -10,6 +10,8 @@ related:
title: Card header and footer
- docs: /dashboards/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.
@ -76,8 +78,8 @@ type:
type: string
name:
required: false
description: Overwrites friendly name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
icon:
required: false
description: Overwrites icon or entity picture.
@ -150,8 +152,8 @@ suffix:
type: string
name:
required: false
description: Overwrites friendly entity name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
icon:
required: false
description: Icon to use. Defaults to icon of entity.
@ -231,8 +233,8 @@ entities:
type: string
name:
required: false
description: Override the friendly entity name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
default: Entity name
show_name:
required: false

View File

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

View File

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

View File

@ -10,6 +10,8 @@ related:
title: Themes
- docs: /dashboards/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.
@ -81,8 +83,8 @@ entity:
type: string
name:
required: false
description: Overwrites friendly name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
icon:
required: false
description: Overwrites icon.

View File

@ -8,6 +8,8 @@ related:
title: Themes
- docs: /dashboards/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.
@ -89,8 +91,8 @@ entity:
type: string
name:
required: false
description: Overwrites friendly name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
{% endconfiguration %}
### Long term statistics

View File

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

View File

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

View File

@ -1,8 +1,8 @@
---
type: card
title: "Logbook card"
sidebar_label: Logbook
description: "The logbook card displays entries from the logbook for specific entities, devices, areas, and/or labels."
title: "Activity card"
sidebar_label: Activity
description: "The activity card displays the activity of specific entities, devices, areas, and/or labels."
related:
- docs: /integrations/frontend/
title: Themes
@ -10,11 +10,11 @@ related:
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'>
<img src='/images/dashboards/logbook.png' alt='Screenshot of the logbook card'>
Screenshot of the logbook card.
<img src='/images/dashboards/activity-card.png' alt='Screenshot of the activity card'>
Screenshot of the activity card.
</p>
{% include dashboard/edit_dashboard.md %}
@ -23,18 +23,20 @@ The logbook card displays entries from the logbook for specific entities, device
{% configuration_basic %}
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:
description: The title that shows on the top of the card.
Hours to show:
description: The number of hours in the past that will be tracked in the card.
Theme:
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 %}
## 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 %}
type:
@ -58,6 +60,10 @@ theme:
required: false
description: Override the used theme for this card with any loaded theme. For more information about themes, see the [frontend documentation](/integrations/frontend/).
type: string
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 %}
### Examples

View File

@ -136,7 +136,7 @@ content: |
## 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:

View File

@ -8,6 +8,8 @@ related:
title: Themes
- docs: /dashboards/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.
@ -34,8 +36,8 @@ entity:
type: string
name:
required: false
description: Overwrites friendly name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
default: Name of entity
theme:
required: false

View File

@ -34,7 +34,7 @@ type:
type: string
image:
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
image_entity:
required: false
@ -67,7 +67,7 @@ theme:
type: string
dark_mode_image:
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
dark_mode_filter:
required: false
@ -322,7 +322,7 @@ double_tap_action:
type: map
image:
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
camera_image:
required: false
@ -423,12 +423,13 @@ style:
### 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
state_image:
"on": /local/living_room_on.jpg
"off": /local/living_room_off.jpg
"on": /local/bed_light_on.png
"off": https://demo.home-assistant.io/stub_config/bedroom.png
"unavailable": media-source://image_upload/123456789
```
### How to use state_filter

View File

@ -10,6 +10,8 @@ related:
title: Themes
- docs: /dashboards/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.
@ -45,7 +47,7 @@ camera_view:
type: string
image:
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
state_image:
required: false
@ -66,8 +68,8 @@ fit_mode:
default: cover
name:
required: false
description: Overwrite entity name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
show_name:
required: false
description: Shows name in footer.
@ -116,14 +118,15 @@ entity: light.bed_light
image: /local/bed_light.png
```
Different images for each state:
Different images for each state (supports local, web, or `media-source://` URLs):
```yaml
type: picture-entity
entity: light.bed_light
state_image:
"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:

View File

@ -40,7 +40,7 @@ title:
type: string
image:
required: false
description: Background image URL.
description: Background image URL (local, web, or `media-source://`)
type: string
image_entity:
required: false
@ -261,7 +261,7 @@ entities: []
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
type: picture-glance
@ -271,6 +271,7 @@ entities:
- light.ceiling_lights
state_image:
"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
```

View File

@ -8,6 +8,8 @@ related:
title: Themes
- docs: /dashboards/cards/
title: Dashboard cards
- docs: /dashboards/naming/
title: Card naming
---
The plant status card is for all the lovely botanists out there.
@ -32,12 +34,12 @@ type:
type: string
entity:
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
name:
required: false
description: Overwrites friendly name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
default: Entity name
theme:
required: false

View File

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

View File

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

View File

@ -8,6 +8,8 @@ related:
title: Themes
- docs: /dashboards/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.
@ -114,8 +116,8 @@ entity:
type: string
name:
required: false
description: Overwrites friendly name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
{% endconfiguration %}
### Example

View File

@ -2,15 +2,17 @@
type: card
title: "Thermostat card"
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:
- docs: /integrations/frontend/
title: Themes
- docs: /dashboards/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'>
<img src='/images/dashboards/thermostat_card.png' alt='Screenshot of the thermostat card'>
@ -32,12 +34,12 @@ type:
type: string
entity:
required: true
description: Entity ID of `climate` domain.
description: Entity ID of `climate` or `water_heater` domain.
type: string
name:
required: false
description: Overwrites friendly name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
default: Name of entity.
theme:
required: false
@ -50,7 +52,7 @@ show_current_as_primary:
default: false
features:
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
{% endconfiguration %}

View File

@ -6,6 +6,8 @@ description: "The tile card gives you a quick overview of an entity. The card al
related:
- docs: /dashboards/actions/
title: Card actions
- docs: /dashboards/naming/
title: Card naming
- docs: /dashboards/features/
title: Card features
- docs: /dashboards/cards/
@ -33,8 +35,8 @@ entity:
type: string
name:
required: false
description: Overwrites the entity name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
icon:
required: false
description: Overwrites the entity icon.
@ -132,7 +134,7 @@ hide_state: true
```yaml
type: tile
entity: light.living_room
state_content:
state_content:
- state
- brightness
- last-changed
@ -150,6 +152,6 @@ features:
## 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.
type: boolean
default: "false"
hide_section_headers:
required: false
description: Hide the 'Active' and 'Completed' sections with the overflow menus.
type: boolean
default: "false"
display_order:
required: false
description: "Optionally sorts the items in the to-do list for display. Options are: `none`: Show the list in its original order. `alpha_asc`: Sort the list in alphabetical order. `alpha_desc`: Sort the list in reverse alphabetical order. `duedate_asc`: Sort the list by due date (soonest first). `duedate_desc`: Sort the list by reverse due date (soonest last)."

View File

@ -8,6 +8,8 @@ related:
title: Themes
- docs: /dashboards/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.
@ -58,8 +60,8 @@ entity:
type: string
name:
required: false
description: Overwrites the friendly name.
type: string
description: Overwrites friendly name. Can be a string, or a name configuration object. See [naming documentation](/dashboards/naming/).
type: [string, map, list]
default: Entity name
show_current:
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
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
[installation types](/installation/#about-installation-methods).
[installation types](/installation/#about-installation-types).
link: /common-tasks/general/#backups
aliases:
- backups
@ -307,23 +307,36 @@
Home Assistant Container is a standalone container-based installation of
Home Assistant Core. Any [OCI](https://opencontainers.org/) compatible
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
definition: >-
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 method). For development, Core can also be run using a Virtual
Environment (previously referred as the Home Assistant Core installation method.
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/).
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](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
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
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 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
definition: >-
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
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
the recommended installation method for most users.
the recommended installation type for most users.
- term: Host
definition: >-
A device that can communicate with other devices on a network. During setup

View File

@ -101,3 +101,11 @@ Miranda Bishop:
Timothy Nibeaudeau:
name: Timothy Nibeaudeau
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.'
- 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>.'
- 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?
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
url: https://cloudfree.shop/product/home-assistant-yellow/
logo: /images/distributors/cloudfree.webp
- name: Seeed Studio
ship_from: US
ship_to: America
url: https://www.seeedstudio.com/Home-Assistant-Yellow-Kit-with-selectable-CM4.html
logo: /images/distributors/seeed-studio.webp
# Asia
- name: Seeed Studio
ship_from: China
ship_to: Asia
url: https://www.seeedstudio.com/Home-Assistant-Yellow-Kit-with-selectable-CM4.html
logo: /images/distributors/seeed-studio.webp
# Australia
- name: Smart Guys
ship_from: Australia
@ -192,16 +181,6 @@ yellow:
url: https://smartguys.com.au/product/home-assistant-yellow-smart-hub/
logo: /images/distributors/smart-guys.webp
# Europe
- name: Botland
ship_from: Poland
ship_to: Europe
url: https://botland.com.pl/centralki-i-bramki-sieciowe/24698-home-assistant-yellow-standard-kit-inteligenta-centralka-zigbee-thread-nabu-casa-yellow-kit-std-794677011741.html
logo: /images/distributors/botland.webp
- name: Mauser
ship_from: Portugal
ship_to: Europe
url: https://mauser.pt/catalog/product_info.php?products_id=095-3150
logo: /images/distributors/mauser.png
- name: Pi-Shop.ch
ship_from: Switzerland
ship_to: Europe
@ -212,21 +191,6 @@ yellow:
ship_to: Europe
url: https://raspberrypi.dk/en/product/home-assistant-yellow/
logo: /images/distributors/RaspberryPi-dk.webp
- name: Seeed Studio
ship_from: Germany
ship_to: Europe
url: https://www.seeedstudio.com/Home-Assistant-Yellow-Kit-with-selectable-CM4.html
logo: /images/distributors/seeed-studio.webp
- name: The Pi Hut
ship_from: UK
ship_to: Europe
url: https://thepihut.com/products/home-assistant-yellow
logo: /images/distributors/pi-hut.webp
- name: Domadoo
ship_from: France
ship_to: Europe
url: https://www.domadoo.fr/en/smart-home-hub/7113-nabu-casa-home-assistant-yellow-kit-with-power-supply.html
logo: /images/distributors/domadoo.jpg
zbt-1:
name: "<strong>Home Assistant Connect ZBT-1</strong>"
distributors:
@ -606,7 +570,7 @@ zwa-2:
- name: mediarath
ship_from: Germany
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
- name: SmarterHOME
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.
{% raw %}
```yaml
automation:
- alias: "Office at evening"
@ -73,4 +75,11 @@ automation:
- action: scene.turn_on
target:
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:
```jinja
{{ this.name }} is the name of the automation executing from this trigger
{{ trigger.platform }} is the type of trigger object, like `calendar`
```
{% raw %}
- `{{ this.name }}` is the name of the automation executing from this trigger
- `{{ trigger.platform }}` is the type of trigger object, like `calendar`
{% endraw %}
## 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).
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 |
| ---- | ---- |
@ -135,6 +135,7 @@ These are the properties available for a [Sentence trigger](/docs/automation/tri
| `trigger.slots` | Object with matched slot values.
| `trigger.details` | Object with matched slot details by name, such as [wildcards](/docs/automation/trigger/#sentence-wildcards). Each detail contains: <ul><li>`name` - name of the slot</li><li>`text` - matched text</li><li>`value` - output value (see [lists](/docs/voice/intent-recognition/template-sentence-syntax/#lists))</li></ul>.
| `trigger.device_id` | The device ID that captured the command, if any.
| `trigger.satellite_id` | The entity ID of the satellite that captured the command, if any.
### State

View File

@ -922,7 +922,7 @@ automation:
## 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
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).
{% 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 %}
```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 %}
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)
@ -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.
- **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.
- **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 %}.
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:
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).
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:

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.
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)
@ -1197,7 +1197,7 @@ When used without options, the selector will accept a free form 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)
@ -1220,7 +1220,7 @@ object:
The output of this selector is a YAML object.
{% configuration qr_code %}
{% configuration object %}
fields:
description: >
List of fields of the object.
@ -1231,6 +1231,11 @@ fields:
description: The label of the field
required: false
type: string
required:
description: If set to true, the field must be present.
required: false
default: false
type: boolean
selector:
description: The selector to use for this field. It can be any available selector.
required: true
@ -1256,7 +1261,7 @@ translation_key:
required: false
multiple:
description: >
Allows selecting multiple options. If set to `true`, the resulting value of this selector will be a list instead of a single string value. This option is only used if `fields` option set.
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
required: false
default: false
@ -1481,34 +1486,6 @@ 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:
description: >
When entity options are provided, the targets are limited by entities
@ -1567,18 +1544,6 @@ target:
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
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`
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).
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
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:
@ -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.
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 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.
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

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.
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
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.
@ -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.
@ -49,7 +49,7 @@ If you find any errors or want to expand the documentation, please [let us know]
#### 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.
@ -142,4 +142,4 @@ homeassistant:
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).
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;'>

View File

@ -75,7 +75,7 @@ If you manually integrate your sensors, for example, using the [MQTT](/integrati
### 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)

View File

@ -42,12 +42,13 @@ You are trying to add a sensor to the energy dashboard, but it does not appear i
### Resolution
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:
- `device_class` must be `energy` 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`.
- `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 `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.
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 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
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;'>

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:
- [Droplet](/integrations/droplet)
- [Flo](/integrations/flo)
- [Flume](/integrations/flume)
- [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
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
- 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
$ 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.
@ -30,4 +30,6 @@ optional arguments:
Show a portion of the config
-f, --files Show used configuration files
-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`.
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
$ hass -h

View File

@ -4,9 +4,9 @@ description: "My integration does not show up"
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:
- [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.
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 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
---
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.

View File

@ -79,7 +79,7 @@
{% if page.ha_domain %}
<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/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>
{%- endif -%}
</section>

View File

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

View File

@ -11,13 +11,13 @@
<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/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/odroid ODROID %}</li>
<li>{% active_link /installation/generic-x86-64 Generic x86-64 %}</li>
<li>{% active_link /installation/linux Linux %}</li>
<li>{% active_link /installation/macos macOS %}</li>
<li>{% active_link /installation/windows Windows %}</li>
<li>{% active_link /installation/alternative Other systems %}</li>
<li>{% active_link /installation/raspberrypi/ Raspberry Pi %}</li>
<li>{% active_link /installation/odroid/ ODROID %}</li>
<li>{% active_link /installation/generic-x86-64/ Generic x86-64 %}</li>
<li>{% active_link /installation/linux/ Linux %}</li>
<li>{% active_link /installation/macos/ macOS %}</li>
<li>{% active_link /installation/windows/ Windows %}</li>
<li>{% active_link /installation/alternative/ Other systems %}</li>
<li>{% active_link /installation/troubleshooting/ Troubleshooting %}</li>
</ul>
{% 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:
```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.

View File

@ -23,6 +23,22 @@
</a>
{% 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 blog_post_limit = 4 %}
<!-- Home Assistant updates posts -->
@ -80,11 +96,11 @@
</ol>
</div>
<!-- Community Day 2025 - To move on/after event -->
<a href="https://lu.ma/homeassistant" class="material-card picture-promo" target="_blank" style="
background-image: url(/images/frontpage/community-meetup.webp);
<!-- Community -->
<a href="/community" class="material-card picture-promo" style="
background-image: url(/images/frontpage/community-card.webp);
aspect-ratio: 500/263;
" aria-label="State of the Open Home - Saturday April 12th 2025">
" aria-label="Join the Home Assistant community">
</a>
<!-- OHF notice -->

View File

@ -23,11 +23,11 @@
</div>
<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">
<img src="/images/frontpage/hero-github-logo.svg" alt="GitHub logo"/>
<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>
</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.
{% 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 %}
{% 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.
- 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 site.installation.types[page.installation_type].variants.size > 1 %}
{% tabbed_block %}
{% for variant in site.installation.types[page.installation_type].variants %}
{% if site.installation.types[page.installation_type].variants.size > 1 %}
{% tabbed_block %}
{% for variant in site.installation.types[page.installation_type].variants %}
- title: {{ variant.name }}
content: |
- title: {{ variant.name }}
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
{{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 %}
{% endfor %}
{% 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.*
*Select and copy the URL or use the "copy" button that appears when you hover it.*
5. Paste the URL into your browser to start the download.
6. Extract the file you just downloaded.
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.
![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**.
![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.
![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.
- 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)
- 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)
- 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)
- 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)
### Start up your {{site.installation.types[page.installation_type].board}}
@ -321,7 +319,7 @@ Minimum recommended assignments:
- title: VirtualBox
content: |
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**.
- 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.
@ -470,8 +468,6 @@ Minimum recommended assignments:
{% endif %}
{% include installation_survey.html %}
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/" %}

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").
- 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.
- Click **Create**.
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.
9. From the resulting dialog take a note of **Client ID** and **Client Secret** you **can not retrieve it again** after closing the dialog.
- 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.
> 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 %}

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/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">
docsearch({
container: '#docsearch',

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