Compare commits
91 Commits
49
.github/workflows/bump-version.yml
vendored
49
.github/workflows/bump-version.yml
vendored
@@ -10,6 +10,7 @@ on:
|
||||
jobs:
|
||||
create-release:
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-python@v2
|
||||
@@ -23,13 +24,14 @@ jobs:
|
||||
git config user.name esphomebot
|
||||
git config user.email esphome@nabucasa.com
|
||||
git add .
|
||||
git commit -m "Bump version to v${{ github.event.inputs.version }}"
|
||||
git commit -m "Bump version to ${{ github.event.inputs.version }}"
|
||||
git push
|
||||
COMMIT=$(git rev-parse HEAD)
|
||||
echo "::set-output name=commit_sha::${COMMIT}"
|
||||
- if: ${{ contains(github.event.inputs.version, 'b') }}
|
||||
name: Create Beta Release
|
||||
uses: actions/create-release@v1
|
||||
continue-on-error: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
@@ -41,6 +43,7 @@ jobs:
|
||||
- if: ${{ !contains(github.event.inputs.version, 'b') }}
|
||||
name: Create Stable Release
|
||||
uses: actions/create-release@v1
|
||||
continue-on-error: true
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
@@ -54,20 +57,30 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [create-release]
|
||||
steps:
|
||||
- name: Publish beta release to community-addons repository
|
||||
run: |
|
||||
docker run --rm hassioaddons/repository-updater:latest \
|
||||
--repository hassio-addons/repository-beta \
|
||||
--addon esphome \
|
||||
--token "${TOKEN}"
|
||||
env:
|
||||
TOKEN: ${{ secrets.COMMUNITY_ADDONS_TOKEN }}
|
||||
- if: ${{ !contains(github.event.inputs.version, 'b') }}
|
||||
name: Publish stable release to community-addons repository
|
||||
run: |
|
||||
docker run --rm hassioaddons/repository-updater:latest \
|
||||
--repository hassio-addons/repository \
|
||||
--addon esphome \
|
||||
--token "${TOKEN}"
|
||||
env:
|
||||
TOKEN: ${{ secrets.COMMUNITY_ADDONS_TOKEN }}
|
||||
- name: Publish beta release to community-addons repository
|
||||
uses: peter-evans/repository-dispatch@v1.1.3
|
||||
with:
|
||||
token: ${{ secrets.COMMUNITY_ADDONS_TOKEN }}
|
||||
repository: hassio-addons/repository-beta
|
||||
event-type: update
|
||||
client-payload: >
|
||||
{
|
||||
"addon": "esphome",
|
||||
"name": "ESPHome",
|
||||
"repository": "esphome/home-assistant-addon",
|
||||
"version": "${{ github.event.inputs.version }}"
|
||||
}
|
||||
- if: ${{ !contains(github.event.inputs.version, 'b') }}
|
||||
name: Publish stable release to community-addons repository
|
||||
uses: peter-evans/repository-dispatch@v1.1.3
|
||||
with:
|
||||
token: ${{ secrets.COMMUNITY_ADDONS_TOKEN }}
|
||||
repository: hassio-addons/repository
|
||||
event-type: update
|
||||
client-payload: >
|
||||
{
|
||||
"addon": "esphome",
|
||||
"name": "ESPHome",
|
||||
"repository": "esphome/home-assistant-addon",
|
||||
"version": "${{ github.event.inputs.version }}"
|
||||
}
|
||||
|
||||
46
.github/workflows/deploy-community.yml
vendored
Normal file
46
.github/workflows/deploy-community.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
name: Update Community Repo
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version:
|
||||
description: The version to release
|
||||
required: true
|
||||
beta:
|
||||
description: Whether to release a beta version
|
||||
type: boolean
|
||||
required: false
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
deploy-community-addons:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- if: ${{ contains(github.event.inputs.version, 'b') || github.event.inputs.beta == 'true' }}
|
||||
name: Publish beta release to community-addons repository
|
||||
uses: peter-evans/repository-dispatch@v1.1.3
|
||||
with:
|
||||
token: ${{ secrets.COMMUNITY_ADDONS_TOKEN }}
|
||||
repository: hassio-addons/repository-beta
|
||||
event-type: update
|
||||
client-payload: >
|
||||
{
|
||||
"addon": "esphome",
|
||||
"name": "ESPHome",
|
||||
"repository": "esphome/home-assistant-addon",
|
||||
"version": "${{ github.event.inputs.version }}"
|
||||
}
|
||||
- if: ${{ !contains(github.event.inputs.version, 'b') }}
|
||||
name: Publish stable release to community-addons repository
|
||||
uses: peter-evans/repository-dispatch@v1.1.3
|
||||
with:
|
||||
token: ${{ secrets.COMMUNITY_ADDONS_TOKEN }}
|
||||
repository: hassio-addons/repository
|
||||
event-type: update
|
||||
client-payload: >
|
||||
{
|
||||
"addon": "esphome",
|
||||
"name": "ESPHome",
|
||||
"repository": "esphome/home-assistant-addon",
|
||||
"version": "${{ github.event.inputs.version }}"
|
||||
}
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
venv/
|
||||
|
||||
@@ -51,15 +51,6 @@ The private key file to use for SSL. If this file doesn't exist, the add-on star
|
||||
Adding this option to the add-on configuration allows you to disable
|
||||
authentication by setting it to `true`.
|
||||
|
||||
### Option: `esphome_version`
|
||||
|
||||
Manually override which ESPHome version to use in the add-on.
|
||||
For example to install the latest development version, use `"esphome_version": "dev"`,
|
||||
or for version 1.14.0: `"esphome_version": "v1.14.0""`.
|
||||
|
||||
Please note that this does not always work and is only meant for testing, usually the
|
||||
ESPHome add-on and dashboard version must match to guarantee a working system.
|
||||
|
||||
### Option: `relative_url`
|
||||
|
||||
Host the ESPHome dashboard under a relative URL, so that it can be integrated
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
{
|
||||
"advanced": true,
|
||||
"arch": [
|
||||
"amd64",
|
||||
"armv7",
|
||||
"aarch64"
|
||||
],
|
||||
"auth_api": true,
|
||||
"backup_exclude": [
|
||||
"*/*/"
|
||||
],
|
||||
"description": "Beta version of ESPHome add-on",
|
||||
"hassio_api": true,
|
||||
"host_network": true,
|
||||
"image": "esphome/esphome-hassio-{arch}",
|
||||
"image": "ghcr.io/esphome/esphome-hassio-{arch}",
|
||||
"ingress": true,
|
||||
"ingress_port": 0,
|
||||
"map": [
|
||||
@@ -25,7 +29,6 @@
|
||||
},
|
||||
"schema": {
|
||||
"certfile": "str?",
|
||||
"esphome_version": "str?",
|
||||
"keyfile": "str?",
|
||||
"leave_front_door_open": "bool?",
|
||||
"relative_url": "str?",
|
||||
@@ -34,11 +37,8 @@
|
||||
"streamer_mode": "bool?"
|
||||
},
|
||||
"slug": "esphome-beta",
|
||||
"snapshot_exclude": [
|
||||
"*/*/"
|
||||
],
|
||||
"stage": "experimental",
|
||||
"uart": true,
|
||||
"url": "https://beta.esphome.io/",
|
||||
"version": "1.20.2"
|
||||
"version": "2022.2.2"
|
||||
}
|
||||
1
esphome-dev/CHANGELOG.md
Normal file
1
esphome-dev/CHANGELOG.md
Normal file
@@ -0,0 +1 @@
|
||||
See https://esphome.io/changelog/index.html
|
||||
@@ -26,6 +26,16 @@ Example add-on configuration:
|
||||
}
|
||||
```
|
||||
|
||||
### Option: `esphome_fork`
|
||||
|
||||
Install ESPHome from a fork or branch.
|
||||
For example to test a pull request, use `pull/XXXX/head` where `XXXX` is the PR number,
|
||||
or you can specify the username of the fork owner and branch `username:branch` which
|
||||
assumes the repository is named `esphome` still.
|
||||
|
||||
Please note that the fork or branch you are using **must** be up to date with ESPHome dev
|
||||
or the add-on **will not start**.
|
||||
|
||||
### Option: `ssl`
|
||||
|
||||
Enables or disables encrypted SSL/TLS (HTTPS) connections to the web server of this add-on.
|
||||
@@ -51,15 +61,6 @@ The private key file to use for SSL. If this file doesn't exist, the add-on star
|
||||
Adding this option to the add-on configuration allows you to disable
|
||||
authentication by setting it to `true`.
|
||||
|
||||
### Option: `esphome_version`
|
||||
|
||||
Manually override which ESPHome version to use in the add-on.
|
||||
For example to install the latest development version, use `"esphome_version": "dev"`,
|
||||
or for version 1.14.0: `"esphome_version": "v1.14.0""`.
|
||||
|
||||
Please note that this does not always work and is only meant for testing, usually the
|
||||
ESPHome add-on and dashboard version must match to guarantee a working system.
|
||||
|
||||
### Option: `relative_url`
|
||||
|
||||
Host the ESPHome dashboard under a relative URL, so that it can be integrated
|
||||
|
||||
@@ -1,17 +1,10 @@
|
||||
ARG BUILD_FROM=esphome/esphome-hassio-base-amd64:2.0.0
|
||||
ARG BUILD_FROM=esphome/esphome-hassio-amd64:dev
|
||||
FROM ${BUILD_FROM}
|
||||
|
||||
# Copy root filesystem
|
||||
COPY rootfs /
|
||||
|
||||
RUN pip3 install --no-cache-dir https://github.com/esphome/esphome/archive/dev.zip
|
||||
|
||||
# Build arguments
|
||||
ARG BUILD_VERSION=dev
|
||||
|
||||
# Labels
|
||||
LABEL \
|
||||
io.hass.name="ESPHome" \
|
||||
io.hass.description="Manage and program ESP8266/ESP32 microcontrollers through YAML configuration files" \
|
||||
io.hass.type="addon" \
|
||||
io.hass.version=dev
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"build_from": {
|
||||
"aarch64": "esphome/esphome-hassio-base-aarch64:3.1.0",
|
||||
"amd64": "esphome/esphome-hassio-base-amd64:3.1.0",
|
||||
"armv7": "esphome/esphome-hassio-base-armv7:3.1.0"
|
||||
"aarch64": "ghcr.io/esphome/esphome-hassio-aarch64:dev",
|
||||
"amd64": "ghcr.io/esphome/esphome-hassio-amd64:dev",
|
||||
"armv7": "ghcr.io/esphome/esphome-hassio-armv7:dev"
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,15 @@
|
||||
{
|
||||
"advanced": true,
|
||||
"arch": [
|
||||
"amd64",
|
||||
"armv7",
|
||||
"aarch64"
|
||||
],
|
||||
"auth_api": true,
|
||||
"description": "Development Version! Manage and program ESP8266/ESP32 microcontrollers through YAML configuration files",
|
||||
"backup_exclude": [
|
||||
"*/*/"
|
||||
],
|
||||
"description": "Development version of ESPHome add-on",
|
||||
"hassio_api": true,
|
||||
"host_network": true,
|
||||
"ingress": true,
|
||||
@@ -15,19 +19,16 @@
|
||||
"config:rw"
|
||||
],
|
||||
"name": "ESPHome (dev)",
|
||||
"options": {
|
||||
"esphome_version": "dev"
|
||||
},
|
||||
"panel_icon": "mdi:chip",
|
||||
"ports": {
|
||||
"6052/tcp": null
|
||||
},
|
||||
"ports_description": {
|
||||
"6052/tcp": "Web interface (Not required for Home Assistant Ingress)"
|
||||
"6052/tcp": "Web interface (not required for Home Assistant ingress)"
|
||||
},
|
||||
"schema": {
|
||||
"certfile": "str?",
|
||||
"esphome_version": "str?",
|
||||
"esphome_fork": "str?",
|
||||
"keyfile": "str?",
|
||||
"leave_front_door_open": "bool?",
|
||||
"relative_url": "str?",
|
||||
@@ -36,9 +37,6 @@
|
||||
"streamer_mode": "bool?"
|
||||
},
|
||||
"slug": "esphome-dev",
|
||||
"snapshot_exclude": [
|
||||
"*/*/"
|
||||
],
|
||||
"stage": "experimental",
|
||||
"uart": true,
|
||||
"url": "https://next.esphome.io/",
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Community Hass.io Add-ons: ESPHome
|
||||
# This files check if all user configuration requirements are met
|
||||
# ==============================================================================
|
||||
|
||||
# Check SSL requirements, if enabled
|
||||
if bashio::config.true 'ssl'; then
|
||||
if ! bashio::config.has_value 'certfile'; then
|
||||
bashio::fatal 'SSL is enabled, but no certfile was specified.'
|
||||
bashio::exit.nok
|
||||
fi
|
||||
|
||||
if ! bashio::config.has_value 'keyfile'; then
|
||||
bashio::fatal 'SSL is enabled, but no keyfile was specified'
|
||||
bashio::exit.nok
|
||||
fi
|
||||
|
||||
|
||||
certfile="/ssl/$(bashio::config 'certfile')"
|
||||
keyfile="/ssl/$(bashio::config 'keyfile')"
|
||||
|
||||
if ! bashio::fs.file_exists "${certfile}"; then
|
||||
if ! bashio::fs.file_exists "${keyfile}"; then
|
||||
# Both files are missing, let's print a friendlier error message
|
||||
bashio::log.fatal 'You enabled encrypted connections using the "ssl": true option.'
|
||||
bashio::log.fatal "However, the SSL files '${certfile}' and '${keyfile}'"
|
||||
bashio::log.fatal "were not found. If you're using Hass.io on your local network and don't want"
|
||||
bashio::log.fatal 'to encrypt connections to the ESPHome dashboard, you can manually disable'
|
||||
bashio::log.fatal 'SSL by setting "ssl" to false."'
|
||||
bashio::exit.nok
|
||||
fi
|
||||
bashio::log.fatal "The configured certfile '${certfile}' was not found."
|
||||
bashio::exit.nok
|
||||
fi
|
||||
|
||||
if ! bashio::fs.file_exists "/ssl/$(bashio::config 'keyfile')"; then
|
||||
bashio::log.fatal "The configured keyfile '${keyfile}' was not found."
|
||||
bashio::exit.nok
|
||||
fi
|
||||
fi
|
||||
@@ -1,34 +0,0 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Community Hass.io Add-ons: ESPHome
|
||||
# Configures NGINX for use with ESPHome
|
||||
# ==============================================================================
|
||||
|
||||
declare certfile
|
||||
declare keyfile
|
||||
declare direct_port
|
||||
declare ingress_interface
|
||||
declare ingress_port
|
||||
|
||||
mkdir -p /var/log/nginx
|
||||
|
||||
direct_port=$(bashio::addon.port 6052)
|
||||
if bashio::var.has_value "${direct_port}"; then
|
||||
if bashio::config.true 'ssl'; then
|
||||
certfile=$(bashio::config 'certfile')
|
||||
keyfile=$(bashio::config 'keyfile')
|
||||
|
||||
mv /etc/nginx/servers/direct-ssl.disabled /etc/nginx/servers/direct.conf
|
||||
sed -i "s/%%certfile%%/${certfile}/g" /etc/nginx/servers/direct.conf
|
||||
sed -i "s/%%keyfile%%/${keyfile}/g" /etc/nginx/servers/direct.conf
|
||||
else
|
||||
mv /etc/nginx/servers/direct.disabled /etc/nginx/servers/direct.conf
|
||||
fi
|
||||
|
||||
sed -i "s/%%port%%/${direct_port}/g" /etc/nginx/servers/direct.conf
|
||||
fi
|
||||
|
||||
ingress_port=$(bashio::addon.ingress_port)
|
||||
ingress_interface=$(bashio::addon.ip_address)
|
||||
sed -i "s/%%port%%/${ingress_port}/g" /etc/nginx/servers/ingress.conf
|
||||
sed -i "s/%%interface%%/${ingress_interface}/g" /etc/nginx/servers/ingress.conf
|
||||
46
esphome-dev/rootfs/etc/cont-init.d/30-esphome-fork.sh
Normal file
46
esphome-dev/rootfs/etc/cont-init.d/30-esphome-fork.sh
Normal file
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Community Hass.io Add-ons: ESPHome
|
||||
# This files installs the user ESPHome fork if specified
|
||||
# The fork must be up to date with the latest ESPHome dev branch
|
||||
# and have no conflicts
|
||||
# ==============================================================================
|
||||
|
||||
declare esphome_fork
|
||||
|
||||
if bashio::config.has_value 'esphome_fork'; then
|
||||
esphome_fork=$(bashio::config 'esphome_fork')
|
||||
if [[ $esphome_fork == *":"* ]]; then
|
||||
IFS=':' read -r -a array <<< "$esphome_fork"
|
||||
username=${array[0]}
|
||||
ref=${array[1]}
|
||||
else
|
||||
username="esphome"
|
||||
ref=$esphome_fork
|
||||
fi
|
||||
full_url="https://github.com/${username}/esphome/archive/${ref}.tar.gz"
|
||||
bashio::log.info "Checking forked ESPHome"
|
||||
dev_version=$(python3 -c "from esphome.const import __version__; print(__version__)")
|
||||
bashio::log.info "Downloading ESPHome from fork '${esphome_fork}' (${full_url})..."
|
||||
curl -L -o /tmp/esphome.tar.gz "${full_url}" -qq \
|
||||
|| bashio::exit.nok "Failed downloading ESPHome fork."
|
||||
bashio::log.info "Installing ESPHome from fork '${esphome_fork}' (${full_url})..."
|
||||
mkdir /esphome-fork
|
||||
tar -zxf /tmp/esphome.tar.gz -C /esphome-fork --strip-components=1 \
|
||||
|| bashio::exit.nok "Failed installing ESPHome from fork."
|
||||
pip install -U -e /esphome-fork || bashio::exit.nok "Failed installing ESPHome from fork."
|
||||
rm -f /tmp/esphome.tar.gz
|
||||
fork_version=$(python3 -c "from esphome.const import __version__; print(__version__)")
|
||||
|
||||
if [[ "$fork_version" != "$dev_version" ]]; then
|
||||
bashio::log.error "############################"
|
||||
bashio::log.error "Uninstalled fork as version does not match"
|
||||
bashio::log.error "Update (or ask the author to update) the branch"
|
||||
bashio::log.error "This is important as the dev addon and the dev ESPHome"
|
||||
bashio::log.error "branch can have changes that are not compatible with old forks"
|
||||
bashio::log.error "and get reported as bugs which we cannot solve easily."
|
||||
bashio::log.error "############################"
|
||||
bashio::exit.nok
|
||||
fi
|
||||
bashio::log.info "Installed ESPHome from fork '${esphome_fork}' (${full_url})..."
|
||||
fi
|
||||
@@ -1,23 +0,0 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Community Hass.io Add-ons: ESPHome
|
||||
# This files installs the user ESPHome version if specified
|
||||
# ==============================================================================
|
||||
|
||||
declare esphome_version
|
||||
|
||||
if bashio::config.has_value 'esphome_version'; then
|
||||
esphome_version=$(bashio::config 'esphome_version')
|
||||
if [[ $esphome_version == *":"* ]]; then
|
||||
IFS=':' read -r -a array <<< "$esphome_version"
|
||||
username=${array[0]}
|
||||
ref=${array[1]}
|
||||
else
|
||||
username="esphome"
|
||||
ref=$esphome_version
|
||||
fi
|
||||
full_url="https://github.com/${username}/esphome/archive/${ref}.zip"
|
||||
bashio::log.info "Installing esphome version '${esphome_version}' (${full_url})..."
|
||||
pip3 install -U --no-cache-dir "${full_url}" \
|
||||
|| bashio::exit.nok "Failed installing esphome pinned version."
|
||||
fi
|
||||
@@ -1,11 +0,0 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Community Hass.io Add-ons: ESPHome
|
||||
# This files migrates the esphome config directory from the old path
|
||||
# ==============================================================================
|
||||
|
||||
if [[ ! -d /config/esphome && -d /config/esphomeyaml ]]; then
|
||||
echo "Moving config directory from /config/esphomeyaml to /config/esphome"
|
||||
mv /config/esphomeyaml /config/esphome
|
||||
mv /config/esphome/.esphomeyaml /config/esphome/.esphome
|
||||
fi
|
||||
@@ -1,96 +0,0 @@
|
||||
types {
|
||||
text/html html htm shtml;
|
||||
text/css css;
|
||||
text/xml xml;
|
||||
image/gif gif;
|
||||
image/jpeg jpeg jpg;
|
||||
application/javascript js;
|
||||
application/atom+xml atom;
|
||||
application/rss+xml rss;
|
||||
|
||||
text/mathml mml;
|
||||
text/plain txt;
|
||||
text/vnd.sun.j2me.app-descriptor jad;
|
||||
text/vnd.wap.wml wml;
|
||||
text/x-component htc;
|
||||
|
||||
image/png png;
|
||||
image/svg+xml svg svgz;
|
||||
image/tiff tif tiff;
|
||||
image/vnd.wap.wbmp wbmp;
|
||||
image/webp webp;
|
||||
image/x-icon ico;
|
||||
image/x-jng jng;
|
||||
image/x-ms-bmp bmp;
|
||||
|
||||
font/woff woff;
|
||||
font/woff2 woff2;
|
||||
|
||||
application/java-archive jar war ear;
|
||||
application/json json;
|
||||
application/mac-binhex40 hqx;
|
||||
application/msword doc;
|
||||
application/pdf pdf;
|
||||
application/postscript ps eps ai;
|
||||
application/rtf rtf;
|
||||
application/vnd.apple.mpegurl m3u8;
|
||||
application/vnd.google-earth.kml+xml kml;
|
||||
application/vnd.google-earth.kmz kmz;
|
||||
application/vnd.ms-excel xls;
|
||||
application/vnd.ms-fontobject eot;
|
||||
application/vnd.ms-powerpoint ppt;
|
||||
application/vnd.oasis.opendocument.graphics odg;
|
||||
application/vnd.oasis.opendocument.presentation odp;
|
||||
application/vnd.oasis.opendocument.spreadsheet ods;
|
||||
application/vnd.oasis.opendocument.text odt;
|
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
pptx;
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
xlsx;
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
||||
docx;
|
||||
application/vnd.wap.wmlc wmlc;
|
||||
application/x-7z-compressed 7z;
|
||||
application/x-cocoa cco;
|
||||
application/x-java-archive-diff jardiff;
|
||||
application/x-java-jnlp-file jnlp;
|
||||
application/x-makeself run;
|
||||
application/x-perl pl pm;
|
||||
application/x-pilot prc pdb;
|
||||
application/x-rar-compressed rar;
|
||||
application/x-redhat-package-manager rpm;
|
||||
application/x-sea sea;
|
||||
application/x-shockwave-flash swf;
|
||||
application/x-stuffit sit;
|
||||
application/x-tcl tcl tk;
|
||||
application/x-x509-ca-cert der pem crt;
|
||||
application/x-xpinstall xpi;
|
||||
application/xhtml+xml xhtml;
|
||||
application/xspf+xml xspf;
|
||||
application/zip zip;
|
||||
|
||||
application/octet-stream bin exe dll;
|
||||
application/octet-stream deb;
|
||||
application/octet-stream dmg;
|
||||
application/octet-stream iso img;
|
||||
application/octet-stream msi msp msm;
|
||||
|
||||
audio/midi mid midi kar;
|
||||
audio/mpeg mp3;
|
||||
audio/ogg ogg;
|
||||
audio/x-m4a m4a;
|
||||
audio/x-realaudio ra;
|
||||
|
||||
video/3gpp 3gpp 3gp;
|
||||
video/mp2t ts;
|
||||
video/mp4 mp4;
|
||||
video/mpeg mpeg mpg;
|
||||
video/quicktime mov;
|
||||
video/webm webm;
|
||||
video/x-flv flv;
|
||||
video/x-m4v m4v;
|
||||
video/x-mng mng;
|
||||
video/x-ms-asf asx asf;
|
||||
video/x-ms-wmv wmv;
|
||||
video/x-msvideo avi;
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
proxy_http_version 1.1;
|
||||
proxy_ignore_client_abort off;
|
||||
proxy_read_timeout 86400s;
|
||||
proxy_redirect off;
|
||||
proxy_send_timeout 86400s;
|
||||
proxy_max_temp_file_size 0;
|
||||
|
||||
proxy_set_header Accept-Encoding "";
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header X-NginX-Proxy true;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header Authorization "";
|
||||
@@ -1,6 +0,0 @@
|
||||
root /dev/null;
|
||||
server_name $hostname;
|
||||
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
add_header X-Robots-Tag none;
|
||||
@@ -1,9 +0,0 @@
|
||||
ssl_protocols TLSv1.2;
|
||||
ssl_prefer_server_ciphers on;
|
||||
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA;
|
||||
ssl_ecdh_curve secp384r1;
|
||||
ssl_session_timeout 10m;
|
||||
ssl_session_cache shared:SSL:10m;
|
||||
ssl_session_tickets off;
|
||||
ssl_stapling on;
|
||||
ssl_stapling_verify on;
|
||||
@@ -1,33 +0,0 @@
|
||||
daemon off;
|
||||
user root;
|
||||
pid /var/run/nginx.pid;
|
||||
worker_processes 1;
|
||||
# Hass.io addon log
|
||||
error_log /proc/1/fd/1 error;
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
include /etc/nginx/includes/mime.types;
|
||||
access_log stdout;
|
||||
default_type application/octet-stream;
|
||||
gzip on;
|
||||
keepalive_timeout 65;
|
||||
sendfile on;
|
||||
server_tokens off;
|
||||
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
# Use Hass.io supervisor as resolver
|
||||
resolver 172.30.32.2;
|
||||
|
||||
upstream esphome {
|
||||
server unix:/var/run/esphome.sock;
|
||||
}
|
||||
|
||||
include /etc/nginx/servers/*.conf;
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
server {
|
||||
listen %%port%% default_server ssl http2;
|
||||
|
||||
include /etc/nginx/includes/server_params.conf;
|
||||
include /etc/nginx/includes/proxy_params.conf;
|
||||
include /etc/nginx/includes/ssl_params.conf;
|
||||
|
||||
ssl on;
|
||||
ssl_certificate /ssl/%%certfile%%;
|
||||
ssl_certificate_key /ssl/%%keyfile%%;
|
||||
|
||||
# Clear Hass.io Ingress header
|
||||
proxy_set_header X-Hassio-Ingress "";
|
||||
|
||||
# Redirect http requests to https on the same port.
|
||||
# https://rageagainstshell.com/2016/11/redirect-http-to-https-on-the-same-port-in-nginx/
|
||||
error_page 497 https://$http_host$request_uri;
|
||||
|
||||
location / {
|
||||
proxy_pass http://esphome;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
server {
|
||||
listen %%port%% default_server;
|
||||
|
||||
include /etc/nginx/includes/server_params.conf;
|
||||
include /etc/nginx/includes/proxy_params.conf;
|
||||
# Clear Hass.io Ingress header
|
||||
proxy_set_header X-Hassio-Ingress "";
|
||||
|
||||
location / {
|
||||
proxy_pass http://esphome;
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
server {
|
||||
listen %%interface%%:%%port%% default_server;
|
||||
|
||||
include /etc/nginx/includes/server_params.conf;
|
||||
include /etc/nginx/includes/proxy_params.conf;
|
||||
# Set Hass.io Ingress header
|
||||
proxy_set_header X-Hassio-Ingress "YES";
|
||||
|
||||
location / {
|
||||
# Only allow from Hass.io supervisor
|
||||
allow 172.30.32.2;
|
||||
deny all;
|
||||
|
||||
proxy_pass http://esphome;
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/usr/bin/execlineb -S0
|
||||
# ==============================================================================
|
||||
# Community Hass.io Add-ons: ESPHome
|
||||
# Take down the S6 supervision tree when ESPHome fails
|
||||
# ==============================================================================
|
||||
if -n { s6-test $# -ne 0 }
|
||||
if -n { s6-test ${1} -eq 256 }
|
||||
|
||||
s6-svscanctl -t /var/run/s6/services
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Community Hass.io Add-ons: ESPHome
|
||||
# Runs the ESPHome dashboard
|
||||
# ==============================================================================
|
||||
|
||||
export ESPHOME_IS_HASSIO=true
|
||||
|
||||
if bashio::config.true 'leave_front_door_open'; then
|
||||
export DISABLE_HA_AUTHENTICATION=true
|
||||
fi
|
||||
|
||||
if bashio::config.true 'streamer_mode'; then
|
||||
export ESPHOME_STREAMER_MODE=true
|
||||
fi
|
||||
|
||||
if bashio::config.true 'status_use_ping'; then
|
||||
export ESPHOME_DASHBOARD_USE_PING=true
|
||||
fi
|
||||
|
||||
if bashio::config.has_value 'relative_url'; then
|
||||
export ESPHOME_DASHBOARD_RELATIVE_URL=$(bashio::config 'relative_url')
|
||||
fi
|
||||
|
||||
bashio::log.info "Starting ESPHome dashboard..."
|
||||
exec esphome /config/esphome dashboard --socket /var/run/esphome.sock --hassio
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/usr/bin/execlineb -S0
|
||||
# ==============================================================================
|
||||
# Community Hass.io Add-ons: ESPHome
|
||||
# Take down the S6 supervision tree when NGINX fails
|
||||
# ==============================================================================
|
||||
if -n { s6-test $# -ne 0 }
|
||||
if -n { s6-test ${1} -eq 256 }
|
||||
|
||||
s6-svscanctl -t /var/run/s6/services
|
||||
@@ -1,14 +0,0 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# ==============================================================================
|
||||
# Community Hass.io Add-ons: ESPHome
|
||||
# Runs the NGINX proxy
|
||||
# ==============================================================================
|
||||
|
||||
bashio::log.info "Waiting for dashboard to come up..."
|
||||
|
||||
while [[ ! -S /var/run/esphome.sock ]]; do
|
||||
sleep 0.5
|
||||
done
|
||||
|
||||
bashio::log.info "Starting NGINX..."
|
||||
exec nginx
|
||||
@@ -51,15 +51,6 @@ The private key file to use for SSL. If this file doesn't exist, the add-on star
|
||||
Adding this option to the add-on configuration allows you to disable
|
||||
authentication by setting it to `true`.
|
||||
|
||||
### Option: `esphome_version`
|
||||
|
||||
Manually override which ESPHome version to use in the add-on.
|
||||
For example to install the latest development version, use `"esphome_version": "dev"`,
|
||||
or for version 1.14.0: `"esphome_version": "v1.14.0""`.
|
||||
|
||||
Please note that this does not always work and is only meant for testing, usually the
|
||||
ESPHome add-on and dashboard version must match to guarantee a working system.
|
||||
|
||||
### Option: `relative_url`
|
||||
|
||||
Host the ESPHome dashboard under a relative URL, so that it can be integrated
|
||||
|
||||
@@ -5,10 +5,13 @@
|
||||
"aarch64"
|
||||
],
|
||||
"auth_api": true,
|
||||
"backup_exclude": [
|
||||
"*/*/"
|
||||
],
|
||||
"description": "ESPHome add-on for intelligently managing all your ESP8266/ESP32 devices",
|
||||
"hassio_api": true,
|
||||
"host_network": true,
|
||||
"image": "esphome/esphome-hassio-{arch}",
|
||||
"image": "ghcr.io/esphome/esphome-hassio-{arch}",
|
||||
"ingress": true,
|
||||
"ingress_port": 0,
|
||||
"map": [
|
||||
@@ -25,7 +28,6 @@
|
||||
},
|
||||
"schema": {
|
||||
"certfile": "str?",
|
||||
"esphome_version": "str?",
|
||||
"keyfile": "str?",
|
||||
"leave_front_door_open": "bool?",
|
||||
"relative_url": "str?",
|
||||
@@ -34,10 +36,7 @@
|
||||
"streamer_mode": "bool?"
|
||||
},
|
||||
"slug": "esphome",
|
||||
"snapshot_exclude": [
|
||||
"*/*/"
|
||||
],
|
||||
"uart": true,
|
||||
"url": "https://esphome.io/",
|
||||
"version": "1.20.2"
|
||||
"version": "2022.2.2"
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "ESPHome Home Assistant Add-Ons",
|
||||
"url": "https://github.com/esphome/hassio",
|
||||
"name": "ESPHome",
|
||||
"url": "https://esphome.io",
|
||||
"maintainer": "ESPHome <esphome@nabucasa.com>"
|
||||
}
|
||||
|
||||
@@ -8,50 +8,58 @@ import json
|
||||
from shutil import copyfile
|
||||
import sys
|
||||
|
||||
|
||||
class Channel(Enum):
|
||||
stable = 'stable'
|
||||
beta = 'beta'
|
||||
dev = 'dev'
|
||||
stable = "stable"
|
||||
beta = "beta"
|
||||
dev = "dev"
|
||||
|
||||
|
||||
def main(args):
|
||||
parser = argparse.ArgumentParser(description='Generate ESPHome Home Assistant config.json')
|
||||
parser.add_argument('channels', nargs='+', type=Channel, choices=list(Channel))
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Generate ESPHome Home Assistant config.json"
|
||||
)
|
||||
parser.add_argument("channels", nargs="+", type=Channel, choices=list(Channel))
|
||||
args = parser.parse_args(args)
|
||||
|
||||
root = Path(__file__).parent.parent
|
||||
templ = root / 'template'
|
||||
templ = root / "template"
|
||||
|
||||
with open(templ / "addon_config.yaml", 'r') as f:
|
||||
with open(templ / "addon_config.yaml", "r") as f:
|
||||
config = yaml.safe_load(f)
|
||||
|
||||
copyf = config['copy_files']
|
||||
copyf = config["copy_files"]
|
||||
|
||||
for channel in args.channels:
|
||||
conf = config[f'esphome-{channel.value}']
|
||||
base_image = conf.pop('base_image')
|
||||
dir_ = root / conf.pop('directory')
|
||||
path = dir_ / 'config.json'
|
||||
with open(path, 'w') as f:
|
||||
conf = config[f"esphome-{channel.value}"]
|
||||
base_image = conf.pop("base_image", None)
|
||||
dir_ = root / conf.pop("directory")
|
||||
path = dir_ / "config.json"
|
||||
with open(path, "w") as f:
|
||||
json.dump(conf, f, indent=2, sort_keys=True)
|
||||
|
||||
for file_, conf_ in copyf.items():
|
||||
copyfile(templ / file_, dir_ / file_)
|
||||
if Path.exists(templ / channel.value / file_):
|
||||
copyfile(templ / channel.value / file_, dir_ / file_)
|
||||
else:
|
||||
copyfile(templ / file_, dir_ / file_)
|
||||
|
||||
path = dir_ / 'FILES ARE GENERATED DO NOT EDIT'
|
||||
with open(path, 'w') as f:
|
||||
path = dir_ / "FILES ARE GENERATED DO NOT EDIT"
|
||||
with open(path, "w") as f:
|
||||
f.write("Any edits should be made to the files in the 'template' directory")
|
||||
|
||||
if channel == Channel.dev:
|
||||
path = dir_ / 'build.json'
|
||||
path = dir_ / "build.json"
|
||||
build_conf = {
|
||||
"build_from": {arch: base_image.format(arch=arch) for arch in conf['arch']}
|
||||
"build_from": {
|
||||
arch: base_image.format(arch=arch) for arch in conf["arch"]
|
||||
}
|
||||
}
|
||||
with open(path, 'w') as f:
|
||||
with open(path, "w") as f:
|
||||
json.dump(build_conf, f, indent=2, sort_keys=True)
|
||||
|
||||
print(f"Wrote {path}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
||||
|
||||
@@ -51,15 +51,6 @@ The private key file to use for SSL. If this file doesn't exist, the add-on star
|
||||
Adding this option to the add-on configuration allows you to disable
|
||||
authentication by setting it to `true`.
|
||||
|
||||
### Option: `esphome_version`
|
||||
|
||||
Manually override which ESPHome version to use in the add-on.
|
||||
For example to install the latest development version, use `"esphome_version": "dev"`,
|
||||
or for version 1.14.0: `"esphome_version": "v1.14.0""`.
|
||||
|
||||
Please note that this does not always work and is only meant for testing, usually the
|
||||
ESPHome add-on and dashboard version must match to guarantee a working system.
|
||||
|
||||
### Option: `relative_url`
|
||||
|
||||
Host the ESPHome dashboard under a relative URL, so that it can be integrated
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
# When changing options in this file, please also run:
|
||||
# python3 script/generate.py dev
|
||||
# python3 script/generate.py dev
|
||||
# to update the dev addon config (beta/stable configs will be updated on next release by release script)
|
||||
base: &base
|
||||
url: https://esphome.io/
|
||||
@@ -31,13 +31,11 @@ base: &base
|
||||
certfile: str?
|
||||
keyfile: str?
|
||||
leave_front_door_open: bool?
|
||||
esphome_version: str?
|
||||
streamer_mode: bool?
|
||||
relative_url: str?
|
||||
status_use_ping: bool?
|
||||
snapshot_exclude:
|
||||
backup_exclude:
|
||||
- "*/*/"
|
||||
base_image: esphome/esphome-hassio-base-{arch}:3.1.0
|
||||
|
||||
esphome-dev:
|
||||
<<: *base
|
||||
@@ -48,28 +46,38 @@ esphome-dev:
|
||||
description: "Development version of ESPHome add-on"
|
||||
url: https://next.esphome.io/
|
||||
stage: experimental
|
||||
options:
|
||||
esphome_version: dev
|
||||
advanced: true
|
||||
schema:
|
||||
ssl: bool?
|
||||
certfile: str?
|
||||
keyfile: str?
|
||||
leave_front_door_open: bool?
|
||||
streamer_mode: bool?
|
||||
relative_url: str?
|
||||
status_use_ping: bool?
|
||||
esphome_fork: str?
|
||||
base_image: ghcr.io/esphome/esphome-hassio-{arch}:dev
|
||||
|
||||
esphome-beta:
|
||||
<<: *base
|
||||
directory: esphome-beta
|
||||
name: ESPHome (beta)
|
||||
version: '1.20.2' # BETA
|
||||
version: '2022.2.2' # BETA
|
||||
slug: esphome-beta
|
||||
description: "Beta version of ESPHome add-on"
|
||||
url: https://beta.esphome.io/
|
||||
image: esphome/esphome-hassio-{arch}
|
||||
image: ghcr.io/esphome/esphome-hassio-{arch}
|
||||
stage: experimental
|
||||
advanced: true
|
||||
|
||||
esphome-stable:
|
||||
<<: *base
|
||||
directory: esphome
|
||||
name: ESPHome
|
||||
version: '1.20.2' # STABLE
|
||||
version: '2022.2.2' # STABLE
|
||||
slug: esphome
|
||||
description: "ESPHome add-on for intelligently managing all your ESP8266/ESP32 devices"
|
||||
image: esphome/esphome-hassio-{arch}
|
||||
image: ghcr.io/esphome/esphome-hassio-{arch}
|
||||
|
||||
copy_files:
|
||||
icon.png:
|
||||
|
||||
82
template/dev/DOCS.md
Normal file
82
template/dev/DOCS.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# Home Assistant Community Add-on: ESPHome
|
||||
|
||||
## Installation
|
||||
|
||||
The installation of this add-on is pretty straightforward and not different in comparison to installing any other Home Assistant add-on.
|
||||
|
||||
1. Search for the “ESPHome” add-on in the Supervisor add-on store.
|
||||
2. Press install to download the add-on and unpack it on your machine. This can take some time.
|
||||
3. Optional: If you're using SSL/TLS certificates and want to encrypt your communication to this add-on, please enter `true` into the `ssl` field and set the `fullchain` and `certfile` options accordingly.
|
||||
4. Start the add-on, check the logs of the add-on to see if everything went well.
|
||||
5. Click "OPEN WEB UI" to open the ESPHome dashboard. You will be asked for your Home Assistant credentials - ESPHome uses Home Assistant's authentication system to log you in.
|
||||
|
||||
You can view the ESPHome documentation at https://esphome.io/
|
||||
|
||||
## Configuration
|
||||
|
||||
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||
|
||||
Example add-on configuration:
|
||||
|
||||
```json
|
||||
{
|
||||
"ssl": false,
|
||||
"certfile": "fullchain.pem",
|
||||
"keyfile": "privkey.pem"
|
||||
}
|
||||
```
|
||||
|
||||
### Option: `esphome_fork`
|
||||
|
||||
Install ESPHome from a fork or branch.
|
||||
For example to test a pull request, use `pull/XXXX/head` where `XXXX` is the PR number,
|
||||
or you can specify the username of the fork owner and branch `username:branch` which
|
||||
assumes the repository is named `esphome` still.
|
||||
|
||||
Please note that the fork or branch you are using **must** be up to date with ESPHome dev
|
||||
or the add-on **will not start**.
|
||||
|
||||
### Option: `ssl`
|
||||
|
||||
Enables or disables encrypted SSL/TLS (HTTPS) connections to the web server of this add-on.
|
||||
Set it to `true` to encrypt communications, `false` otherwise.
|
||||
Please note that if you set this to `true` you must also generate the key and certificate
|
||||
files for encryption. For example using [Let's Encrypt](https://www.home-assistant.io/addons/lets_encrypt/)
|
||||
or [Self-signed certificates](https://www.home-assistant.io/docs/ecosystem/certificates/tls_self_signed_certificate/).
|
||||
|
||||
### Option: `certfile`
|
||||
|
||||
The certificate file to use for SSL. If this file doesn't exist, the add-on start will fail.
|
||||
|
||||
**Note**: The file MUST be stored in `/ssl/`, which is the default for Home Assistant
|
||||
|
||||
### Option: `keyfile`
|
||||
|
||||
The private key file to use for SSL. If this file doesn't exist, the add-on start will fail.
|
||||
|
||||
**Note**: The file MUST be stored in `/ssl/`, which is the default for Home Assistant
|
||||
|
||||
### Option: `leave_front_door_open`
|
||||
|
||||
Adding this option to the add-on configuration allows you to disable
|
||||
authentication by setting it to `true`.
|
||||
|
||||
### Option: `relative_url`
|
||||
|
||||
Host the ESPHome dashboard under a relative URL, so that it can be integrated
|
||||
into existing web proxies like NGINX under a relative URL. Defaults to `/`.
|
||||
|
||||
### Option: `status_use_ping`
|
||||
|
||||
By default the dashboard uses mDNS to check if nodes are online. This does
|
||||
not work across subnets unless your router supports mDNS forwarding or avahi.
|
||||
|
||||
Setting this to `true` will make ESPHome use ICMP ping requests to get the node status. Use this if all nodes always have offline status even when they're connected.
|
||||
|
||||
### Option: `streamer_mode`
|
||||
|
||||
If set to `true`, this will enable streamer mode, which makes ESPHome hide all
|
||||
potentially private information. So for example WiFi (B)SSIDs (which could be
|
||||
used to find your location), usernames, etc. Please note that you need to use
|
||||
the `!secret` tag in your YAML file to also prevent these from showing up
|
||||
while editing and validating.
|
||||
Reference in New Issue
Block a user