1
0

Compare commits

...

29 Commits

15 changed files with 203 additions and 123 deletions

View File

@@ -1,12 +1,22 @@
name: Lint
on: [push, pull_request]
on:
push:
branches:
- main
pull_request:
jobs:
build:
name: Add-on configuration
runs-on: ubuntu-latest
strategy:
matrix:
channel: [esphome, esphome-beta, esphome-dev]
matrix:
channels:
- folder: esphome
channel: stable
- folder: esphome-beta
channel: beta
- folder: esphome-dev
channel: dev
steps:
- name: ⤵️ Check out code from GitHub
uses: actions/checkout@v2
@@ -17,8 +27,8 @@ jobs:
- name: 🛠 Install dependencies
run: pip install -r script/requirements.txt
- name: 🛠 Generate files from template
run: python script/generate.py dev beta stable
- name: 🚀 Run Home Assistant Add-on Lint on ${{ matrix.channel }}
run: python script/generate.py ${{ matrix.channels.channel }}
- name: 🚀 Run Home Assistant Add-on Lint on ${{ matrix.channels.channel }}
uses: frenck/action-addon-linter@v2
with:
path: "./${{ matrix.channel }}"
path: "./${{ matrix.channels.folder }}"

View File

@@ -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

View File

@@ -5,6 +5,9 @@
"aarch64"
],
"auth_api": true,
"backup_exclude": [
"*/*/"
],
"description": "Beta version of ESPHome add-on",
"hassio_api": true,
"host_network": true,
@@ -25,7 +28,6 @@
},
"schema": {
"certfile": "str?",
"esphome_version": "str?",
"keyfile": "str?",
"leave_front_door_open": "bool?",
"relative_url": "str?",
@@ -34,11 +36,8 @@
"streamer_mode": "bool?"
},
"slug": "esphome-beta",
"snapshot_exclude": [
"*/*/"
],
"stage": "experimental",
"uart": true,
"url": "https://beta.esphome.io/",
"version": "1.20.0b5"
"version": "2021.9.1"
}

View File

@@ -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

View File

@@ -5,7 +5,10 @@
"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 +18,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 +36,6 @@
"streamer_mode": "bool?"
},
"slug": "esphome-dev",
"snapshot_exclude": [
"*/*/"
],
"stage": "experimental",
"uart": true,
"url": "https://next.esphome.io/",

View File

@@ -0,0 +1,39 @@
#!/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}.zip"
bashio::log.info "Checking forked ESPHome"
dev_version=$(python3 -c "from esphome.const import __version__; print(__version__)")
bashio::log.info "Installing esphome from fork '${esphome_fork}' (${full_url})..."
pip3 install -U --no-cache-dir "${full_url}" -qq \
|| bashio::exit.nok "Failed installing esphome pinned version."
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
fi

View File

@@ -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

View File

@@ -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

View File

@@ -23,4 +23,4 @@ if bashio::config.has_value 'relative_url'; then
fi
bashio::log.info "Starting ESPHome dashboard..."
exec esphome /config/esphome dashboard --socket /var/run/esphome.sock --hassio
exec esphome dashboard /config/esphome --socket /var/run/esphome.sock --hassio

View File

@@ -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

View File

@@ -5,6 +5,9 @@
"aarch64"
],
"auth_api": true,
"backup_exclude": [
"*/*/"
],
"description": "ESPHome add-on for intelligently managing all your ESP8266/ESP32 devices",
"hassio_api": true,
"host_network": true,
@@ -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.19.4"
"version": "2021.9.1"
}

View File

@@ -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")
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:])

View File

@@ -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

View File

@@ -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,11 +31,10 @@ 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
@@ -48,14 +47,21 @@ esphome-dev:
description: "Development version of ESPHome add-on"
url: https://next.esphome.io/
stage: experimental
options:
esphome_version: dev
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?
esphome-beta:
<<: *base
directory: esphome-beta
name: ESPHome (beta)
version: '1.20.0b5' # BETA
version: '2021.9.1' # BETA
slug: esphome-beta
description: "Beta version of ESPHome add-on"
url: https://beta.esphome.io/
@@ -66,7 +72,7 @@ esphome-stable:
<<: *base
directory: esphome
name: ESPHome
version: '1.19.4' # STABLE
version: '2021.9.1' # STABLE
slug: esphome
description: "ESPHome add-on for intelligently managing all your ESP8266/ESP32 devices"
image: esphome/esphome-hassio-{arch}

82
template/dev/DOCS.md Normal file
View 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.