Merge branch 'current' into nagyrobi-patch-3

This commit is contained in:
H. Árkosi Róbert 2024-06-10 12:54:45 +02:00 committed by GitHub
commit 02a54307bf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
66 changed files with 831 additions and 167 deletions

View File

@ -2,7 +2,7 @@
{
"name": "ESPHome - docs",
"image": "mcr.microsoft.com/vscode/devcontainers/python:0-3.11",
"postCreateCommand": "pip3 install -r requirements.txt -r requirements_test.txt",
"postCreateCommand": ".devcontainer/postCreate.sh",
"postAttachCommand": "make live-html",
"forwardPorts": [8000],
"features": {

5
.devcontainer/postCreate.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
pip3 install -r requirements.txt -r requirements_test.txt
curl -L https://github.com/CloudCannon/pagefind/releases/download/v1.1.0/pagefind-v1.1.0-x86_64-unknown-linux-musl.tar.gz | tar -xz -C ~/.local/bin

2
.gitignore vendored
View File

@ -11,3 +11,5 @@ venv
.vscode
*.DS_Store
/.idea/
_pagefind/

View File

@ -9,8 +9,22 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
software-properties-common \
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/*
ENV PAGEFIND_VERSION="1.1.0"
ARG TARGETARCH
SHELL ["/bin/bash", "-c"]
RUN <<EOF
export TARGETARCH=${TARGETARCH/arm64/aarch64}
export TARGETARCH=${TARGETARCH/amd64/x86_64}
curl -o pagefind.tar.gz https://github.com/CloudCannon/pagefind/releases/download/v$PAGEFIND_VERSION/pagefind-v$PAGEFIND_VERSION-$TARGETARCH-unknown-linux-musl.tar.gz -L
tar xzf pagefind.tar.gz
rm pagefind.tar.gz
mv pagefind /usr/bin
chmod +x /usr/bin/pagefind
EOF
RUN useradd -ms /bin/bash esphome
USER esphome
WORKDIR /workspaces/esphome-docs

View File

@ -38,7 +38,7 @@ PROJECT_NAME = "ESPHome"
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER = 2024.5.4
PROJECT_NUMBER = 2024.5.5
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a

View File

@ -1,24 +1,24 @@
ESPHOME_PATH = ../esphome
ESPHOME_REF = 2024.5.4
ESPHOME_REF = 2024.5.5
PAGEFIND_VERSION=1.1.0
PAGEFIND=pagefind
NET_PAGEFIND=../pagefindbin/pagefind
.PHONY: html html-strict cleanhtml deploy help live-html live-pagefind Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify
.PHONY: pagefind build-html html html-strict cleanhtml deploy help live-html live-pagefind Makefile netlify netlify-api api netlify-dependencies svg2png copy-svg2png minify
html:
html: pagefind
sphinx-build -M html . _build -j auto -n $(O) -Dhtml_extra_path=_redirects,_pagefind
pagefind:
sphinx-build -M html . _build -j auto -n $(O)
mkdir -p _pagefind/pagefind
${PAGEFIND}
live-html: html
sphinx-autobuild . _build -j auto -n $(O) --host 0.0.0.0
live-pagefind: html
${PAGEFIND} --serve
live-html: pagefind
sphinx-autobuild . _build -j auto -n $(O) --host 0.0.0.0 -Dhtml_extra_path=_redirects,_pagefind
html-strict:
sphinx-build -M html . _build -W -j auto -n $(O)
${PAGEFIND}
minify:
minify _static/webserver-v1.js > _static/webserver-v1.min.js
@ -43,7 +43,9 @@ api:
net-html:
sphinx-build -M html . _build -j auto -n $(O)
mkdir -p _pagefind/pagefind
${NET_PAGEFIND}
sphinx-build -M html . _build -j auto -n $(O) -Dhtml_extra_path=_redirects,_pagefind
netlify-api: netlify-dependencies
mkdir -p _build/html/api
@ -60,9 +62,9 @@ netlify-dependencies: pagefind-binary
pagefind-binary:
mkdir -p ../pagefindbin
curl -o pagefind-v$(PAGEFIND_VERSION)-x86_64-unknown-linux-musl.tar.gz https://github.com/CloudCannon/pagefind/releases/download/v$(PAGEFIND_VERSION)/pagefind-v$(PAGEFIND_VERSION)-x86_64-unknown-linux-musl.tar.gz -L
tar xzf pagefind-v$(PAGEFIND_VERSION)-x86_64-unknown-linux-musl.tar.gz
rm pagefind-v$(PAGEFIND_VERSION)-x86_64-unknown-linux-musl.tar.gz
curl -o pagefind.tar.gz https://github.com/CloudCannon/pagefind/releases/download/v$(PAGEFIND_VERSION)/pagefind-v$(PAGEFIND_VERSION)-x86_64-unknown-linux-musl.tar.gz -L
tar xzf pagefind.tar.gz
rm pagefind.tar.gz
mv pagefind ${NET_PAGEFIND}
@ -74,6 +76,10 @@ netlify: netlify-dependencies netlify-api net-html copy-svg2png
lint: html-strict
python3 lint.py
clean:
rm -rf _pagefind/
sphinx-build -M clean . _build $(O)
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -3,7 +3,7 @@
<msapplication>
<tile>
<square150x150logo src="/_static/mstile-150x150.png"/>
<TileColor>#dfdfdf</TileColor>
<TileColor>#18bcf2</TileColor>
</tile>
</msapplication>
</browserconfig>

View File

@ -1,3 +1,9 @@
/* provide this to be queried in JS. Sadly can't be used in media-queries just yet*/
:root {
--mobile-width-stop: 875;
}
.row-odd {
background-color: #f3f6f6;
}
@ -263,9 +269,8 @@ div.body p, div.body dd, div.body li, div.body blockquote {
.search-results {
background-color: #f8f8f8;
box-shadow: 0 6px 10px rgb(0 0 0 / 0.2);
position: absolute;
position: fixed;
z-index: 1500;
margin-top: 4px;
padding-right: 6px;
padding-left: 6px;
border-radius: 12px;
@ -277,6 +282,42 @@ div.body p, div.body dd, div.body li, div.body blockquote {
display: none;
}
/* New branding changes */
div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6, div.sphinxsidebar h3, div.sphinxsidebar h4, div.admonition p.admonition-title {
font-family: Figtree, system, -apple-system, ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", sans-serif;
font-weight: 600;
}
div.body h1 {
font-size: 2.5rem;
}
body {
font-family: "Instrument Sans", system, -apple-system, ".SFNSText-Regular", "San Francisco", "Roboto", "Segoe UI", "Helvetica Neue", "Lucida Grande", sans-serif;
line-height: 1.5;
letter-spacing: 0.01rem;
}
div.body p, div.body dd, div.body li {
line-height: 1.6;
}
@media screen and (max-width: 875px) {
/* hide search result thumbnails on mobile */
.pagefind-modular-list-thumb {
width: 0;
}
/* reduce height of search box */
.pagefind-modular-input-wrapper {
scale: 90%;
}
.logo {
scale: 60%;
}
}
/* dark theme */
@media (prefers-color-scheme: dark) {
@ -383,6 +424,7 @@ div.body p, div.body dd, div.body li, div.body blockquote {
.pagefind-ui__form, .pagefind-modular-input, .search-results {
color: #ececec !important;
}
:root {
--pagefind-ui-primary: #eeeeee;
--pagefind-ui-text: #eeeeee;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 695 B

After

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 8.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1 +1,10 @@
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="1066.667" height="1066.667" viewBox="0 0 800 800"><path d="M266.5 149.6c-12.4 3.1-19.4 8.1-24.5 17.5l-3.5 6.4-.3 17.6-.4 17.6-4.3.6c-6.1.9-11.1 4.2-14.3 9.6l-2.7 4.6-.3 160.2L216 544H94v-15h49c34.4 0 49.6-.3 51.4-1.1 5-2.3 5.7-6.1 5.4-27.4l-.3-19.5-2.8-2.7-2.7-2.8-50-.3-50-.3V460h99l3.2-2.9 3.3-2.9V412l-2.8-2.7-2.7-2.8-50-.3-50-.3v-14.8l50-.3 50-.3 2.7-2.8 2.8-2.7v-42.2l-3.3-2.9-3.2-2.9H94v-99.8l-2.6-3.1c-3.6-4.3-9.3-4.4-13.5-.2l-2.9 2.9v113.4l2.9 2.9 2.9 2.9H180v16H80.8l-2.9 2.9-2.9 2.9v41.4l2.9 2.9 2.9 2.9H180v16H80.8l-2.9 2.9-2.9 2.9v41l2.6 3.1 2.6 3.1H180v16H81.1l-2.8 2.4-2.8 2.4-.3 21-.3 21 3 3.4 2.9 3.3 67.5.3 67.5.2.7 4.3c.4 2.3 1.3 5.3 2 6.7 2.8 5.4 10.1 10 15.9 10h3.5l.3 19.7c.3 19 .4 20 3 25.5 5.4 11.6 15.2 18.1 28.3 18.6 9.8.5 17.1-1.9 23.7-7.7 9.3-8.2 11.8-17 11.8-41.4V585h12v15.3c0 8.4.5 18 1.1 21.3 2.2 11.9 9.9 21.4 20.8 25.5 7.8 2.9 19.4 2.4 26.6-1.3 6.4-3.4 12.8-10 15.7-16.3 2.1-4.6 2.3-6.7 2.6-24.8l.4-19.7h12.6l.4 19.7c.3 17.7.6 20.3 2.5 24.5 2.9 6.3 9.7 13.4 15.8 16.6 7.2 3.7 18.8 4.2 26.6 1.3 7.9-3 14.1-8.8 18.1-16.9l3.3-6.7.3-19.3.4-19.3 6.1.3 6.2.3.5 20c.5 19.5.6 20.1 3.3 25.3 3.5 6.7 9 12.2 15.3 15.3 4.1 2 6.4 2.4 14.4 2.4 8.1 0 10.3-.4 14.5-2.4 6.3-3.2 12.4-9.3 15.6-15.6 2.2-4.7 2.4-6.3 2.9-25l.5-20 6.1-.3 6.2-.3.3 19.3.4 19.3 3.3 6.7c4 8.1 10.2 13.9 18.1 16.9 7.8 2.9 19.4 2.4 26.6-1.3 6.1-3.2 12.9-10.3 15.8-16.6 2-4.2 2.2-6.7 2.5-24.5l.4-19.7h12.6l.4 19.7c.3 22.6 1.3 26.1 9.1 34.1 6.4 6.7 12.7 9.5 22.2 10 9.8.5 17-1.9 23.7-7.7 9.2-8.2 11.8-17 11.8-41.2v-14.6l4.5-.5c5.4-.7 10.2-3.7 13.6-8.7l2.4-3.6.3-173c.2-121 0-174.1-.8-176.7-2.1-7.2-10.2-13.7-17.1-13.8h-2.6l-.5-16.9c-.4-16.6-.5-17-3.6-23.4-5.9-12-16.9-19-29.6-19-13.6 0-24.8 7-30.4 19.1-2.5 5.4-2.7 6.7-3 22.9l-.4 17.3H623v-15.3c0-17.2-1.1-22.4-6.1-30.1-6.5-9.7-20.5-15.8-31.9-13.8-11.9 2.1-20.7 8.9-25.7 19.7-2.6 5.6-2.7 7-3.1 22.7l-.4 16.8H543v-16.5c0-14.1-.3-17.2-2-21.9-2.9-7.6-8.8-13.9-16.6-17.7-5.7-2.8-7.6-3.3-14.4-3.3-6.8 0-8.7.5-14.4 3.3-7.1 3.5-12.2 8.6-15.8 16-2.1 4.2-2.3 6.3-2.6 22.3l-.4 17.8h-12.6l-.4-16.8c-.6-19.7-1.7-23.7-8.8-31.5-8.6-9.5-20.5-13.2-32.1-10.2-10.5 2.6-18.2 9-22.8 18.5-2.4 5.1-2.6 6.6-2.9 22.7l-.4 17.3H384v-15.3c0-17.2-1.1-22.4-6.1-30.1-6.5-9.7-20.5-15.8-31.9-13.8-11.9 2.1-20.7 9-25.8 20.1-2.4 5.1-2.6 7-3 22.3l-.5 16.8H305v-12.3c0-21.3-2.8-30.7-11.3-38.4-7-6.2-20-10.4-27.2-8.7zm11.5 20.9c1.5.8 3.8 3 4.9 4.8 1.9 3.1 2.1 4.9 2.1 18.6V209h-28v-13.9c0-7.7.5-15.2 1.1-16.8 1.3-3.4 4.7-7.2 7.4-8.3 3.2-1.4 9.4-1.1 12.5.5zm81.6 1.6c4.6 4.2 5.4 7.6 5.4 22.9v14h-28v-15c0-16.9.8-19.6 6.3-23.1 4.5-2.8 12.7-2.2 16.3 1.2zm77.5-1.6c6 3.1 6.9 6.3 6.9 23.2V209h-28.2l.4-15.3c.2-12.7.6-15.8 2.1-18 4-6.1 12.4-8.4 18.8-5.2zm80.4.5c5.5 3.4 6.5 6.9 6.5 23.4V209h-28v-14.6c0-13 .2-15 2.1-18.3 1.1-2.1 3.3-4.5 4.7-5.4 3.7-2.3 10.7-2.2 14.7.3zm81.5 1.5c4.1 4 5 7.9 5 23.2V209h-28v-15c0-16.9.8-19.6 6.3-23.1 4.8-3 12.7-2.2 16.7 1.6zm77.1-2c6 3.1 6.9 6.3 6.9 23.2V209h-28v-13.9c0-7.7.5-15.2 1.1-16.8 1.3-3.4 4.7-7.2 7.4-8.3 3.3-1.4 9.4-1.1 12.6.5zm26.7 226.7l-.3 166.3-232.2.3-232.3.2V231h465l-.2 166.2zM285 602.3c0 14.8-.3 17.7-1.8 20.6-3.7 6.8-12.9 9.1-19.3 4.8-6.1-4-6.9-7.1-6.9-26V585h28v17.3zm79.5.7c0 19.5-.5 21.2-6.8 25-6.4 3.9-15.4 1.5-18.9-5.1-1.5-2.9-1.8-5.8-1.8-20.7v-17.3l13.8.3 13.7.3V603zm79.5-.3c0 15.7-.2 18.2-1.9 20.9-3.7 6.1-13.4 8.1-19.6 4-5-3.3-6-6.8-6.3-23.9-.2-8.7-.1-16.4.2-17.2.4-1.2 3.2-1.5 14.1-1.5H444v17.7zm80-.5c0 15.5-.2 17.6-2 20.6-4.3 7-12.8 9.2-19.1 4.9-6.1-4-6.9-7.1-6.9-26V585h28v17.2zm79.5.8c0 19.5-.5 21.2-6.8 25-6.1 3.8-14.9 1.7-18.7-4.5-1.8-2.9-2-4.9-2-20.9v-17.7l13.8.3 13.7.3V603zm79.5-.7c0 14.8-.3 17.7-1.8 20.6-3.7 6.8-12.9 9.1-19.3 4.8-6-4-6.9-7.1-6.9-25.3 0-8.8.3-16.4.7-16.7.3-.4 6.6-.7 14-.7H683v17.3z"/><path d="M413.7 359.8c-39.5 39.5-53.7 54.3-53.7 56 0 3.5 2.8 8.1 5.3 8.7 1.2.3 6.3.6 11.2.8l9 .2.5 32.3.5 32.4 2.4 1.9c2.2 1.8 5.1 1.9 82.1 1.9s79.9-.1 82.1-1.9l2.4-1.9.5-32.4.5-32.3 9-.2c11.8-.4 13.2-.8 15-4.3 2.8-5.4 2.1-6.6-11.5-20.5l-13-13.2v-22.4c-.1-16-.4-22.9-1.3-24-2.4-3.1-5.6-3.9-15.7-3.9-9.9 0-10.2.1-13.1 2.9-2.4 2.5-2.9 3.7-2.9 8 0 2.8-.3 5.1-.8 5.1-.4 0-11.3-10.6-24.2-23.5-21.8-21.8-23.7-23.5-27-23.5-3.3 0-6.6 3.1-57.3 53.8z"/></svg>
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2_408)">
<path d="M372.68 238.9L267.32 133.52C261.1 127.3 250.92 127.3 244.7 133.52L139.32 238.9C133.1 245.12 128 257.42 128 266.22V362.22C128 371.02 135.2 378.22 144 378.22H206.94V218.92C206.94 215.38 209.8 212.52 213.34 212.52H298.68C302.22 212.52 305.08 215.38 305.08 218.92V244.52C305.08 248.06 302.22 250.92 298.68 250.92H245.34V263.72H298.68C302.22 263.72 305.08 266.58 305.08 270.12V295.72C305.08 299.26 302.22 302.12 298.68 302.12H245.34V314.92H298.68C302.22 314.92 305.08 317.78 305.08 321.32V346.92C305.08 350.46 302.22 353.32 298.68 353.32H238.94C235.4 353.32 232.54 350.46 232.54 346.92C232.54 343.38 235.4 340.52 238.94 340.52H292.28V327.72H238.94C235.4 327.72 232.54 324.86 232.54 321.32V295.72C232.54 292.18 235.4 289.32 238.94 289.32H292.28V276.52H238.94C235.4 276.52 232.54 273.66 232.54 270.12V244.52C232.54 240.98 235.4 238.12 238.94 238.12H292.28V225.32H219.74V378.22H368C376.8 378.22 384 371.02 384 362.22V266.22C384 257.42 378.9 245.12 372.68 238.9Z" fill="#F2F4F9"/>
</g>
<defs>
<clipPath id="clip0_2_408">
<rect width="256" height="256" fill="white" transform="translate(128 128.62)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -33,8 +33,8 @@
"type": "image/png"
}
],
"theme_color": "#dfdfdf",
"background_color": "#dfdfdf",
"theme_color": "#18bcf2",
"background_color": "#18bcf2",
"start_url": "https://esphome.io/",
"display": "standalone"
}

View File

@ -1 +1 @@
2024.5.4
2024.5.5

View File

@ -16,17 +16,18 @@
<link rel="icon" type="image/png" sizes="32x32" href="/_static/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/_static/favicon-16x16.png">
<link rel="manifest" href="/_static/site.webmanifest">
<link rel="mask-icon" href="/_static/safari-pinned-tab.svg" color="#646464">
<link rel="mask-icon" href="/_static/safari-pinned-tab.svg" color="#18bcf2">
<link rel="me" href="https://fosstodon.org/@esphome">
<meta name="apple-mobile-web-app-title" content="ESPHome">
<meta name="application-name" content="ESPHome">
<meta name="msapplication-TileColor" content="#dfdfdf">
<meta name="msapplication-TileColor" content="#18bcf2">
<meta name="msapplication-config" content="/_static/browserconfig.xml">
<meta name="theme-color" content="#dfdfdf">
<meta name="theme-color" content="#18bcf2">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta property="og:site_name" content="ESPHome">
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=3, interactive-widget=overlays-content">
{% endblock %}
{% block relbar_top %}
@ -39,7 +40,6 @@
{% endif %}
</ul>
<div class="search-results" id="search-results"></div>
{% endblock %}
{% block footer %}

View File

@ -1,42 +1,150 @@
<script src="/pagefind/pagefind-modular-ui.js"></script>
<div class="pagefind-ui__form" id="search"></div>
<div class="search-results" id="mobile-search-results"></div>
<script>
let callbackAdded = null;
class El {
constructor(tagname) {
this.element = document.createElement(tagname);
}
id(s) {
this.element.id = s;
return this;
}
class(s) {
this.element.classList.add(s);
return this;
}
attrs(obj) {
for (const [k,v] of Object.entries(obj)) {
this.element.setAttribute(k, v);
}
return this;
}
text(t) {
this.element.innerText = t;
return this;
}
html(t) {
this.element.innerHTML = t;
return this;
}
handle(e, f) {
this.element.addEventListener(e, f);
return this;
}
addTo(el) {
if (el instanceof El) {
el.element.appendChild(this.element);
} else {
el.appendChild(this.element);
}
return this.element;
}
}
window.addEventListener('DOMContentLoaded', (event) => {
const std_target = document.getElementById("search-results");
const mobile_target = document.getElementById("mobile-search-results");
const targetClass = "search-results";
const docel = document.getElementsByClassName("document");
if (docel.length === 0)
return;
const inpel = document.getElementById("search");
if (!inpel)
return;
var mobileWidth = getComputedStyle(document.body).getPropertyValue("--mobile-width-stop");
function isMobile() {
return window.innerWidth <= mobileWidth;
}
const target = document.createElement("div");
target.classList.add(targetClass);
target.id = targetClass;
target.style.display = "none";
docel.item(0).appendChild(target);
const margin = 20;
const resultTemplate = (result) => {
let wrapper = new El("li").class("pagefind-modular-list-result");
let thumb = new El("div").class("pagefind-modular-list-thumb").addTo(wrapper);
if (result?.meta?.image) {
new El("img").class("pagefind-modular-list-image").attrs({
src: result.meta.image,
alt: result.meta.image_alt || result.meta.title
}).addTo(thumb);
}
let inner = new El("div").class("pagefind-modular-list-inner").addTo(wrapper);
let title = new El("p").class("pagefind-modular-list-title").addTo(inner);
new El("a").class("pagefind-modular-list-link").text(result.meta?.title).attrs({
href: result.meta?.url || result.url
}).addTo(title);
let excerpt = new El("p").class("pagefind-modular-list-excerpt").addTo(inner);
new El("a").class("pagefind-modular-list-link").html(result.excerpt).attrs({
href: result.meta?.url || result.url
}).addTo(excerpt);
return wrapper.element;
}
function resizeTarget() {
const searchPos = inpel.getBoundingClientRect();
var leftPos;
var topPos;
var maxWidth = 650;
target.style.width = "auto;"
target.style.height = "fit-content";
target.style.maxWidth = maxWidth + "px";
let rightPos = margin;
if (isMobile()) {
// position search results left aligned with the search box, and below.
leftPos = margin / 2;
topPos = searchPos.bottom + margin / 2;
rightPos = margin / 2;
} else {
// position search results top aligned with the search box, and to its right.
leftPos = searchPos.right + margin * 2;
topPos = searchPos.top;
if (rightPos - leftPos > maxWidth)
rightPos = leftPos + maxWidth;
}
target.style.right = rightPos + "px";
target.style.top = topPos + "px";
target.style.left = leftPos + "px";
let twidth = window.innerWidth - margin - leftPos;
if (twidth > maxWidth)
twidth = maxWidth;
target.style.width = twidth + "px";
target.style.maxHeight = (window.innerHeight - margin - topPos) + "px";
}
window.addEventListener("resize", (event) => { resizeTarget(); });
function showTarget() {
var target = std_target;
if (window.innerWidth <= 875) {
target = mobile_target;
std_target.style.display = "none";
} else {
mobile_target.style.display = "none";
}
target.style.display = "block";
const rect = target.getBoundingClientRect();
const height = window.innerHeight;
target.style.width = "100%";
target.style.height = "fit-content";
target.style.maxHeight = (height - rect.top - 10) + "px";
if (!callbackAdded) {
callbackAdded = true;
if (target.style.display !== "block") {
target.style.display = "block";
document.addEventListener('click', clickCallback);
}
resizeTarget();
}
function hideTargets() {
std_target.style.display = "none";
mobile_target.style.display = "none";
std_target.style.height = "0";
mobile_target.style.height = "0";
if (callbackAdded) {
if (target.style.display !== "none") {
target.style.display = "none";
document.removeEventListener('click', clickCallback);
callbackAdded = false;
}
}
@ -57,19 +165,17 @@
}));
instance.add(new PagefindModularUI.ResultList({
containerElement: "#search-results"
}));
instance.add(new PagefindModularUI.ResultList({
containerElement: "#mobile-search-results"
containerElement: "#search-results",
resultTemplate: resultTemplate
}));
const clickCallback = (event) => {
const path = event.composedPath();
if (path.includes(std_target) || path.includes(mobile_target) || path.includes(inpel))
if (path.includes(target) || path.includes(inpel))
return;
hideTargets();
};
if (std_target && mobile_target) {
if (target) {
instance.on("results", (results) => {
if (results.results.length) {
showTarget();

View File

@ -78,6 +78,14 @@ Release 2024.5.4 - May 28
- [helpers] Move Base64 string to cpp :esphomepr:`6819` by :ghuser:`gabest11`
Release 2024.5.5 - June 5
-------------------------
- [voice_assistant] Half the microphone ringbuffer size :esphomepr:`6830` by :ghuser:`jesserockz`
- [i2s_speaker] Add buffer allocation failure checks :esphomepr:`6829` by :ghuser:`jesserockz`
- [improv_serial] Fix for IDF 4.4.7 :esphomepr:`6855` by :ghuser:`kbx81`
Full list of changes
--------------------

View File

@ -10,8 +10,7 @@ The ``bang_bang`` climate platform allows you to regulate a value with a
.. note::
A number of people have asked about the behavior of the bang-bang controller. In version 1.15, a
:doc:`thermostat <thermostat>` component was added which behaves more like a common thermostat; it is
The :doc:`thermostat <thermostat>` component behaves more like a common thermostat; it is
essentially two bang-bang controllers in one. Please see the `Bang-bang vs. Thermostat`_ section below
if you are not sure which is appropriate for your application.

View File

@ -44,7 +44,7 @@ submit a feature request (see FAQ).
+---------------------------------------+---------------------+----------------------+
| :ref:`LG<climate_ir_lg>` | ``climate_ir_lg`` | yes |
+---------------------------------------+---------------------+----------------------+
| Midea | ``midea_ir`` | yes |
| :ref:`Midea<midea_ir>` | ``midea_ir`` | yes |
+---------------------------------------+---------------------+----------------------+
| :ref:`Mitsubishi<mitsubishi>` | ``mitsubishi`` | yes |
+---------------------------------------+---------------------+----------------------+
@ -169,35 +169,6 @@ IR receiver.
name: "Living Room AC"
receiver_id: rcvr
.. _midea_ir:
``midea_ir`` Climate
-------------------------
These air conditioners support two protocols: Midea and Coolix. Therefore, when using an IR receiver, it considers both protocols and publishes the received states.
Additional configuration is available for this platform
Configuration variables:
- **use_fahrenheit** (*Optional*, boolean): Allows you to transfer the temperature to the air conditioner in degrees Fahrenheit. The air conditioner display also shows the temperature in Fahrenheit. Defaults to ``false``.
.. code-block:: yaml
# Example configuration entry
climate:
- platform: midea_ir
name: "AC"
sensor: room_temperature
use_fahrenheit: true
.. note::
- See :ref:`Transmit Midea<remote_transmitter-transmit_midea>` to send custom commands, including Follow Me mode.
- See :ref:`Toshiba<toshiba>` below if you are looking for compatibility with Midea model MAP14HS1TBL or similar.
.. _climate_ir_lg:
``climate_ir_lg`` Climate
@ -272,6 +243,34 @@ Known working with:
- Delonghi PAC WE 120HP
.. _midea_ir:
``midea_ir`` Climate
-------------------------
These air conditioners support two protocols: Midea and Coolix. Therefore, when using an IR receiver, it considers both protocols and publishes the received states.
Additional configuration is available for this platform
Configuration variables:
- **use_fahrenheit** (*Optional*, boolean): Allows you to transfer the temperature to the air conditioner in degrees Fahrenheit. The air conditioner display also shows the temperature in Fahrenheit. Defaults to ``false``.
.. code-block:: yaml
# Example configuration entry
climate:
- platform: midea_ir
name: "AC"
sensor: room_temperature
use_fahrenheit: true
.. note::
- See :ref:`Transmit Midea<remote_transmitter-transmit_midea>` to send custom commands, including Follow Me mode.
- See :ref:`Toshiba<toshiba>` below if you are looking for compatibility with Midea model MAP14HS1TBL or similar.
.. _mitsubishi:
``mitsubishi`` Climate

View File

@ -62,7 +62,6 @@ Configuration variables:
of hiding one of them. Defaults to ``false``.
- **has_position** (*Optional*, boolean): Whether this cover will publish its position as a floating point number.
By default (``false``), the cover only publishes OPEN/CLOSED position.
Parameter useless if you set the POSITION_ACTION (is set to TRUE).
- **tilt_action** (*Optional*, :ref:`Action <config-action>`): The action that should
be performed when the remote (like Home Assistant's frontend) requests the cover be set to a specific
tilt position. The desired tilt is available in the lambda in the ``tilt`` variable.
@ -71,6 +70,7 @@ Configuration variables:
- **position_action** (*Optional*, :ref:`Action <config-action>`): The action that should
be performed when the remote (like Home Assistant's frontend) requests the cover be set to a specific
position. The desired position is available in the lambda in the ``pos`` variable.
Useless if `has_position` is not set to ``true``.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- All other options from :ref:`Cover <config-cover>`.

View File

@ -86,14 +86,17 @@ This can be handled at the **stop_action** by using the following lambda functio
stop_action:
- lambda: !lambda |-
if (id(cover).last_operation() == CoverOperation::COVER_OPERATION_OPENING) {
if (id(cover).get_last_operation() == CoverOperation::COVER_OPERATION_OPENING) {
// Cover is currently opening
id(cover_button_down).press();
} else if (id(cover).last_operation() == CoverOperation::COVER_OPERATION_CLOSING) {
} else if (id(cover).get_last_operation() == CoverOperation::COVER_OPERATION_CLOSING) {
// Cover is currently closing
id(cover_button_up).press();
}
Be aware that ``get_last_operation`` will only return the last opening or closing operation, but not the last idle operation.
This issue is tracked `here <https://github.com/esphome/issues/issues/4252#issuecomment-2132727377>`_.
See Also
--------

View File

@ -103,12 +103,12 @@ The ``date`` provided can be in one of 3 formats:
# String date
- datetime.date.set:
id: my_date
id: my_datetime_date
date: "2023-12-04"
# Individual date parts
- datetime.date.set:
id: my_date
id: my_datetime_date
date:
year: 2023
month: 12
@ -116,7 +116,7 @@ The ``date`` provided can be in one of 3 formats:
# Using a lambda
- datetime.date.set:
id: my_date
id: my_datetime_date
date: !lambda |-
// Return an ESPTime struct
return {.day_of_month: 4, .month: 12, .year: 2023};
@ -142,7 +142,7 @@ advanced stuff (see the full API Reference for more info).
.. code-block:: cpp
// Within lambda, set the date to 2024-02-25
auto call = id(my_date).make_call();
auto call = id(my_datetime_date).make_call();
call.set_date("2024-02-25");
call.perform();
@ -174,12 +174,12 @@ The ``time`` provided can be in one of 3 formats:
# String time
- datetime.time.set:
id: my_time
id: my_datetime_time
time: "12:34:56"
# Individual time parts
- datetime.time.set:
id: my_time
id: my_datetime_time
time:
hour: 12
minute: 34
@ -187,7 +187,7 @@ The ``time`` provided can be in one of 3 formats:
# Using a lambda
- datetime.time.set:
id: my_time
id: my_datetime_time
time: !lambda |-
// Return an ESPTime struct
return {.second: 56, .minute: 34, .hour: 12};
@ -212,7 +212,7 @@ advanced stuff (see the full API Reference for more info).
.. code-block:: cpp
// Within lambda, set the time to 12:34:56
auto call = id(my_time).make_call();
auto call = id(my_datetime_time).make_call();
call.set_time("12:34:56");
call.perform();
@ -227,7 +227,7 @@ advanced stuff (see the full API Reference for more info).
.. code-block:: cpp
// For example, create a custom log message when a value is received:
ESP_LOGI("main", "Value of my datetime: %0d:%02d:%02d", id(my_time).hour, id(my_time).minute, id(my_time).second);
ESP_LOGI("main", "Value of my datetime: %0d:%02d:%02d", id(my_datetime_time).hour, id(my_datetime_time).minute, id(my_datetime_time).second);
DateTime Automation

View File

@ -13,7 +13,7 @@ using :ref:`lambdas <config-lambda>`.
datetime:
# Example Date
- platform: template
id: my_date
id: my_datetime_date
type: date
name: Pick a Date
optimistic: yes
@ -22,7 +22,7 @@ using :ref:`lambdas <config-lambda>`.
# Example Time
- platform: template
id: my_time
id: my_datetime_time
type: time
name: Pick a Time
optimistic: yes

View File

@ -360,8 +360,7 @@ You can display current time using a time component. Please see the example :ref
Screen Clipping
---------------
Screen clipping is a new set of methods since version 2023.2.0 of esphome. It could be useful when you just want to show
a part of an image or make sure that what you draw on the screen does not go outside a specific region on the screen.
Screen clipping can be useful when you just want to show a part of an image or make sure that what you draw on the screen does not go outside a specific region on the screen.
With ``start_clipping(left, top, right, bottom);`` start you the clipping process and when you are done drawing in that region
you can stop the clipping process with ``end_clipping();`` . You can nest as many ``start_clipping();`` as you want as long

View File

@ -174,8 +174,10 @@ Test Setting:
Camera uses PWM timer #1. If you need PWM (via the ``ledc`` platform) you need to manually specify
a channel there (with the ``channel: 2`` parameter)
Configuration for Ai-Thinker Camera
-----------------------------------
Configuration examples
----------------------
**Ai-Thinker Camera**:
.. warning::
@ -203,8 +205,7 @@ Configuration for Ai-Thinker Camera
name: My Camera
# ...
Configuration for M5Stack Camera
--------------------------------
**M5Stack Camera**:
.. warning::
@ -235,8 +236,7 @@ Configuration for M5Stack Camera
name: My Camera
# ...
Configuration for M5Stack Timer Camera X/F
------------------------------------------
**M5Stack Timer Camera X/F**:
.. code-block:: yaml
@ -258,8 +258,7 @@ Configuration for M5Stack Timer Camera X/F
name: My Camera
# ...
Confguration for M5Stack M5CameraF New
--------------------------------------
**M5Stack M5CameraF New**:
.. code-block:: yaml
@ -277,8 +276,7 @@ Confguration for M5Stack M5CameraF New
pixel_clock_pin: GPIO21
reset_pin: GPIO15
Configuration for Wrover Kit Boards
-----------------------------------
**Wrover Kit Boards**:
.. code-block:: yaml
@ -299,8 +297,7 @@ Configuration for Wrover Kit Boards
name: My Camera
# ...
Configuration for TTGO T-Camera V05
-----------------------------------
**TTGO T-Camera V05**:
.. code-block:: yaml
@ -322,8 +319,7 @@ Configuration for TTGO T-Camera V05
name: My Camera
# ...
Configuration for TTGO T-Camera V162
------------------------------------
**TTGO T-Camera V162**:
.. code-block:: yaml
@ -346,8 +342,7 @@ Configuration for TTGO T-Camera V162
name: My Camera
# ...
Configuration for TTGO T-Camera V17
-----------------------------------
**TTGO T-Camera V17**:
.. code-block:: yaml
@ -371,8 +366,7 @@ Configuration for TTGO T-Camera V17
name: My Camera
# ...
Configuration for TTGO T-Journal
--------------------------------
**TTGO T-Journal**:
.. code-block:: yaml
@ -394,8 +388,7 @@ Configuration for TTGO T-Journal
# ...
Configuration for TTGO-Camera Plus
----------------------------------
**TTGO-Camera Plus**:
.. code-block:: yaml
@ -418,8 +411,7 @@ Configuration for TTGO-Camera Plus
name: My Camera
# ...
Configuration for TTGO-Camera Mini
----------------------------------
**TTGO-Camera Mini**:
.. code-block:: yaml
@ -440,8 +432,7 @@ Configuration for TTGO-Camera Mini
name: My Camera
# ...
Configuration for ESP-EYE
----------------------------------
**ESP-EYE**:
.. code-block:: yaml
@ -462,8 +453,7 @@ Configuration for ESP-EYE
name: My Camera
# ...
Configuration for ESP32S3_EYE on `Freenove ESP32-S3-DevKitC-1 <https://github.com/Freenove/Freenove_ESP32_S3_WROOM_Board>`_
---------------------------------------------------------------------------------------------------------------------------
**ESP32S3_EYE** on `Freenove ESP32-S3-DevKitC-1 <https://github.com/Freenove/Freenove_ESP32_S3_WROOM_Board>`__:
.. code-block:: yaml
@ -490,6 +480,26 @@ Configuration for ESP32S3_EYE on `Freenove ESP32-S3-DevKitC-1 <https://github.co
name: My Camera
# ...
**Seeed Studio XIAO ESP32S3 Sense**:
.. code-block:: yaml
esp32_camera:
external_clock:
pin: GPIO10
frequency: 20MHz
i2c_pins:
sda: GPIO40
scl: GPIO39
data_pins: [GPIO15, GPIO17, GPIO18, GPIO16, GPIO14, GPIO12, GPIO11, GPIO48]
vsync_pin: GPIO38
href_pin: GPIO47
pixel_clock_pin: GPIO13
# Image settings
name: My Camera
# ...
See Also
--------

View File

@ -233,7 +233,7 @@ Configuration examples
.. note::
Revision 5 and below of the wESP32 board use the LAN8720 Ethernet PHY. Revision 7 and newer of it use the RTL8201 Ethernet PHY. Support for RTL8201 is available from ESPHome version 2022.12 upwards.
Revision 5 and below of the wESP32 board use the LAN8720 Ethernet PHY. Revision 7 and newer of it use the RTL8201 Ethernet PHY.
**OpenHacks LAN8720**:

View File

@ -92,6 +92,7 @@ Event Automation
************
This automation will be triggered when an event of the specified types is triggered.
In :ref:`Lambdas <config-lambda>` you can get the event type from the trigger with ``event_type``.
.. code-block:: yaml
@ -100,7 +101,8 @@ This automation will be triggered when an event of the specified types is trigge
# ...
on_event:
then:
- logger.log: "Event Triggered"
- lambda: |-
ESP_LOGD("main", "Event %s triggered.", event_type.c_str());
Configuration variables: see :ref:`Automation <automation>`.

38
components/host.rst Normal file
View File

@ -0,0 +1,38 @@
HOST Platform
=============
.. seo::
:description: Configuration for the host platform for ESPHome.
:image: host.svg
The ``host`` platform allows ESPHome configurations to be compiled and run on a desktop computer. This is known
to work on MacOS and Linux. On Windows `WSL <https://learn.microsoft.com/en-us/windows/wsl/install>`_ (Windows Subsystem for Linux) can be used to create a Linux environment that will run ESPHome.
The only configuration required is to optionally set a dummy MAC address that will be used to identify the
configuration to Home Assistant (the native MAC address is not readily available.)
.. note::
HA will not automatically discover an ESPHome instance running on ``host`` using MDNS, and you will need
to add it explicitly using the IP address of your host computer.
Many components, especially those interfacing to actual hardware, will not be available when using ``host``. Do not
configure wifi - network will automatically be available using the host computer.
.. code-block:: yaml
# Example configuration entry
host:
mac_address: "98:35:69:ab:f6:79"
Configuration variables:
------------------------
- **mac_address** (**Optional**, MAC address): A dummy MAC address to use when communicating with HA.
See Also
--------
- :doc:`esphome`
- :ghedit:`Edit`

View File

@ -702,14 +702,14 @@ the strip and shifts them forward every ``add_led_interval``.
- red: 100%
green: 100%
blue: 100%
num_leds: 1
num_leds: 5
gradient: true
- red: 0%
green: 0%
blue: 0%
num_leds: 1
add_led_interval: 100ms
reverse: false
gradient: false
Configuration variables:

View File

@ -58,7 +58,7 @@ Microphone Triggers
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This trigger will fire when new data is received from the microphone.
The data is available as a ``std::vector<uint8_t>`` in the variable ``x``.
The data is available as a ``std::vector<int16_t>`` in the variable ``x``.
.. code-block:: yaml

View File

@ -31,6 +31,7 @@ required to be set up in your configuration for this sensor to work.
tvoc:
name: "ENS160 Total Volatile Organic Compounds"
aqi:
id: ens160_air_quality_index
name: "ENS160 Air Quality Index"
update_interval: 60s
address: 0x53

View File

@ -72,12 +72,12 @@ Advanced:
- **id** (*Optional*, :ref:`config-id`): Set the ID of this sensor for use in lambdas.
- All other options from :ref:`Sensor <config-sensor>`.
- **compensation** (*Optional*): The block containing sensors used for compensation.
- **compensation** (*Optional*): The block containing sensors used for compensation. Both values must be supplied in order to be able to generate the absolute humidity to be reported to the sensor.
- **temperature_source** (*Optional*, :ref:`config-id`): Give an external temperature sensor ID
here. This can improve the sensor's internal calculations.
here. The data must be in Celsius. This can improve the sensor's internal calculations.
- **humidity_source** (*Optional*, :ref:`config-id`): Give an external humidity sensor ID
- **humidity_source** (*Optional*, :ref:`config-id`): Give an external relative humidity sensor ID
here. This can improve the sensor's internal calculations.
.. _sgp30-calibrating:

View File

@ -54,6 +54,24 @@ Configuration variables:
but can also increase temperature readings and decrease humidity readings as a side effect.
Defaults to ``false``.
I²C Configuration when using Higher I²C Frequencies
---------------------------------------------------
When using the **IDF framework** and **I²C frequencies greater than 50-100kHz**, the I²C configuration needs to include a **timeout** option.
On an ESP32, the Arduino framework has a default I²C timeout of 50ms whereas on IDF framework, the default timeout is 100us.
At these higher I²C frequencies, the default I²C timeout on IDF framework causes a "Communication with SHT3xD failed" error on setup.
A solution that has been tested on ESP32 at 800kHz, is to increase the I²C timeout to 10ms as per the following example.
.. code-block:: yaml
# Example I²C configuration
i2c:
sda: 21
scl: 22
scan: true
frequency: 800khz
timeout: 10ms
See Also
--------

View File

@ -11,7 +11,6 @@ Once configured, you can use any of the 8 pins for your projects. Up-to 256 shif
to provide more pins, without using more GPIO pins on the controller. They are linked by connecting pin Q of the closer
shift register to the pin QH of the next shift register.
.. code-block:: yaml
# Example configuration entry
@ -28,12 +27,11 @@ Configuration variables:
- **id** (**Required**, :ref:`config-id`): The id to use for this SN74HC165 component.
- **data_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): Pin connected to SN74HC165 Serial Output (QH) input.
- **clock_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): Pin connected to SN74HC165 Clock (CLK) pin
- **load_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): Pin connected to SN74HC165 Load input (SH/LD) pin
- **clock_inhibit_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): Pin connected to SN74HC165 Clock Inhibit (CLK INH) pin
- **clock_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): Pin connected to SN74HC165 Clock (CLK) pin.
- **load_pin** (**Required**, :ref:`Pin Schema <config-pin_schema>`): Pin connected to SN74HC165 Load input (SH/LD) pin.
- **clock_inhibit_pin** (*Optional*, :ref:`Pin Schema <config-pin_schema>`): Pin connected to SN74HC165 Clock Inhibit (CLK INH) pin. The use of it is optional, as it can be directly connected to ground.
- **sr_count** (*Optional*, int): Number of daisy-chained shift registers, up-to 256. Defaults to ``1``.
Pin configuration variables:
****************************
@ -62,7 +60,6 @@ Pin configuration variables:
See Also
--------
- :doc:`binary_sensor/gpio`
- :apiref:`SN74HC165/SN74HC165.h`
- :ghedit:`Edit`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -10,7 +10,6 @@ was compiled against as a text sensor.
.. figure:: images/version-ui.png
:align: center
:width: 80.0%
.. code-block:: yaml
@ -40,7 +39,7 @@ Disabling the compilation timestamp:
This will, for example, change the output of the sensor from:
``1.15.0-dev (Jun 8 2020, 18:53:16)`` to ``1.15.0-dev``
``2024.6.0-dev May 30 2024, 09:07:35`` to just ``2024.6.0-dev``
See Also

View File

@ -181,6 +181,15 @@ In the ``seconds:``, ``minutes:``, ... fields you can use the following operator
then:
- switch.toggle: my_switch
.. note::
``on_time`` does not re-schedule events for times that are skipped or duplicated due to local Daylight
Saving Time or other local time-adjustments like leap seconds. In regions with Daylight Saving Time, this
means that events located between 01:00 - 02:00 may trigger twice, and events scheduled between 02:00 - 03:00 may
be skipped once a year. This differs from `cron <https://man7.org/linux/man-pages/man8/cron.8.html>`__ behavior
despite allowing the use of similar `crontab` syntax. Similarly, triggers on days of the month that do not exist
("every 31st of the month") will be skipped when those dates do not exist.
.. _time-on_time_sync:
``on_time_sync`` Trigger

View File

@ -64,7 +64,7 @@ Configuration variables:
- **ota** (*Optional*, boolean): Turn on or off the OTA feature inside webserver. Strongly not suggested without enabled authentication settings. Defaults to ``true``. Cannot be used with the ``esp-idf`` framework.
- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation.
- **local** (*Optional*, boolean): Include supporting javascript locally allowing it to work without internet access. Defaults to ``false``.
- **version** (*Optional*, string): ``1`` or ``2``. Version 1 displays as a table. Version 2 uses web components and has more functionality. Defaults to ``2``.
- **version** (*Optional*, string): ``1``, ``2`` or ``3``. Version 1 displays as a table. Version 2 uses web components and has more functionality. Version 3 uses HA-Styling. Defaults to ``2``.
To conserve flash size, the CSS and JS files used on the root page to show a simple user
interface are hosted by esphome.io. If you want to use your own service, use the

View File

@ -75,7 +75,7 @@ Configuration variables:
Defaults to ``.local``.
- **reboot_timeout** (*Optional*, :ref:`config-time`): The amount of time to wait before rebooting when no
WiFi connection exists. Can be disabled by setting this to ``0s``, but note that the low level IP stack currently
seems to have issues with WiFi where a full reboot is required to get the interface back working. Defaults to ``15min``.
seems to have issues with WiFi where a full reboot is required to get the interface back working. Defaults to ``15min``. Does not apply when in access point mode.
- **power_save_mode** (*Optional*, string): The power save mode for the WiFi interface.
See :ref:`wifi-power_save_mode`
@ -193,7 +193,7 @@ power saving mode.
Connecting to Multiple Networks
-------------------------------
Starting with version 1.10.0, you can give ESPHome a number of WiFi networks to connect to.
You can give ESPHome a number of WiFi networks to connect to.
ESPHome will then attempt to connect to the one with the highest signal strength.
To enable this mode, remove the ``ssid`` and ``password`` options from your wifi configuration

View File

@ -69,7 +69,7 @@ author = "ESPHome"
# The short X.Y version.
version = "2024.5"
# The full version, including alpha/beta/rc tags.
release = "2024.5.4"
release = "2024.5.5"
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.

View File

@ -168,8 +168,8 @@ There are several ways of doing this. See below examples to see how you can spec
Substitutions
-------------
Starting with version 1.10.0, ESPHome has a powerful new way to reduce repetition in configuration files:
Substitutions. With substitutions, you can have a single generic source file for all nodes of one kind and
ESPHome has a powerful new way to reduce repetition in configuration files: Substitutions.
With substitutions, you can have a single generic source file for all nodes of one kind and
substitute expressions in.
.. code-block:: yaml

View File

@ -39,8 +39,7 @@ For all projects
- Network configuration must assume defaults (no static IPs or DNS configured)
- It **must** compile successfully without any user changes after adopting it.
- All configuration is contained within a single YAML file. Fully remote packages are permitted if using ``import_full_config: true``.
- Your product name cannot contain **ESPHome** except in the case of *ending with* **for ESPHome**
- Your product name cannot contain "**ESPHome**" except in the case of *ending with* "**for ESPHome**"
When your project matches all requirements of the Made for ESPHome program,
you can apply for permission to carry the logo by emailing esphome@nabucasa.com

View File

@ -449,7 +449,6 @@ Contributors
- `Eenoo (@Eenoo) <https://github.com/Eenoo>`__
- `Eli Fidler (@efidler) <https://github.com/efidler>`__
- `egandro (@egandro) <https://github.com/egandro>`__
- `Erwin Kooi (@egeltje) <https://github.com/egeltje>`__
- `Maxime Michel (@Egglestron) <https://github.com/Egglestron>`__
- `Eike (@ei-ke) <https://github.com/ei-ke>`__
- `Elazar Leibovich (@elazarl) <https://github.com/elazarl>`__
@ -1048,6 +1047,7 @@ Contributors
- `Mike Lynch (@Prow7) <https://github.com/Prow7>`__
- `Peter Sarossy (@psarossy) <https://github.com/psarossy>`__
- `Peter Tatrai (@ptatrai) <https://github.com/ptatrai>`__
- `Pieter Viljoen (@ptr727) <https://github.com/ptr727>`__
- `Leandro Puerari (@puerari) <https://github.com/puerari>`__
- `puuu (@puuu) <https://github.com/puuu>`__
- `Pascal Vizeli (@pvizeli) <https://github.com/pvizeli>`__
@ -1374,4 +1374,4 @@ Contributors
- `Christian Zufferey (@zuzu59) <https://github.com/zuzu59>`__
- `Zynth-dev (@Zynth-dev) <https://github.com/Zynth-dev>`__
*This page was last updated May 28, 2024.*
*This page was last updated June 5, 2024.*

19
images/host.svg Normal file
View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg height="300px" width="300px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 34.418 34.418" xml:space="preserve">
<g>
<path style="fill:#010002;" d="M32.335,11.606h-6.533v-1.009h6.533V11.606z M32.335,12.264h-6.533v1.011h6.533V12.264z
M32.331,7.687h-6.523V9.91h6.523V7.687z M34.418,5.297v23.827c-0.001,0.357-0.292,0.648-0.65,0.648h-9.397
c-0.359,0-0.649-0.291-0.649-0.649V5.297c0-0.358,0.29-0.65,0.649-0.65h9.397C34.127,4.647,34.418,4.939,34.418,5.297z
M33.119,5.944h-8.1v22.53h8.1V5.944z M32.335,13.932h-6.533v1.008h6.533V13.932z M31.272,21.45c0,1.162-0.939,2.099-2.097,2.099
c-1.16,0-2.099-0.938-2.099-2.099c0-1.158,0.94-2.098,2.099-2.098C30.333,19.352,31.272,20.293,31.272,21.45z M30.515,21.45
c0-0.739-0.6-1.341-1.341-1.341c-0.742,0-1.342,0.601-1.342,1.341s0.6,1.34,1.342,1.34C29.915,22.79,30.515,22.19,30.515,21.45z
M21.937,9.218v13.505c0,0.814-0.655,1.473-1.461,1.473H13.18c0,0-0.414,2.948,2.212,2.948v1.475H13.18H8.758H6.546v-1.473
c2.529,0,2.212-2.948,2.212-2.948H1.465C0.656,24.198,0,23.539,0,22.725V9.218c0-0.814,0.656-1.47,1.465-1.47h19.01
C21.282,7.748,21.937,8.404,21.937,9.218z M12.332,22.394c0-0.698-0.566-1.263-1.264-1.263c-0.699,0-1.266,0.565-1.266,1.263
s0.566,1.265,1.266,1.265C11.767,23.659,12.332,23.092,12.332,22.394z M20.371,9.311H1.568v11.387H20.37h0.001
C20.371,20.698,20.371,9.311,20.371,9.311z M11.081,21.603c-0.434,0-0.785,0.352-0.785,0.785s0.352,0.785,0.785,0.785
s0.785-0.352,0.785-0.785S11.515,21.603,11.081,21.603z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -131,6 +131,7 @@ Supported Microcontrollers
RP2040, components/rp2040, rp2040.svg
BK72xx, components/libretiny, bk72xx.svg
RTL87xx, components/libretiny, rtl87xx.svg
host, components/host, host.svg, dark-invert
Microcontroller Peripherals
---------------------------

View File

@ -251,7 +251,7 @@ def lint_ext_check(fname: str, stat: os.stat_result):
)
@lint_file_check(exclude=["script/*", "lint.py"])
@lint_file_check(exclude=["script/*", ".devcontainer/*", "lint.py"])
def lint_executable_bit(fname: str, stat: os.stat_result):
ex = EXECUTABLE_BIT[fname]
if ex != 100644:

View File

@ -1,4 +1,5 @@
site: _build/html
output_path: _pagefind/pagefind
exclude_selectors:
- "a.headerlink"
- ".toctree-wrapper"

View File

@ -5,7 +5,7 @@ Web Server API
:description: Information on Web Server APIs, including Event Source APIs and REST APIs.
:image: logo-text.svg
Since version 1.3, ESPHome includes a built-in web server that can be used to view states
ESPHome includes a built-in web server that can be used to view states
and send commands. In addition to the web-frontend available under the root index of the
web server, there's also two other features the web server currently offers: A real time event
source and REST API.