1
0

Compare commits

...

78 Commits

26 changed files with 281 additions and 279 deletions

10
.devcontainer/Dockerfile Normal file
View File

@@ -0,0 +1,10 @@
FROM ghcr.io/home-assistant/devcontainer:addons
RUN \
apt-get update \
&& apt-get install -y --no-install-recommends \
python3-pip
COPY script/requirements.txt /
RUN pip install -r /requirements.txt

View File

@@ -0,0 +1,36 @@
{
"name": "ESPHome Home Assistant add-on devcontainer",
"image": "ghcr.io/esphome/devcontainer:addons",
"appPort": [
"7123:8123",
"7357:4357"
],
"postStartCommand": "bash devcontainer_bootstrap",
"runArgs": [
"-e",
"GIT_EDITOR=code --wait",
"--privileged"
],
"containerEnv": {
"WORKSPACE_DIRECTORY": "${containerWorkspaceFolder}"
},
"extensions": [
"timonwong.shellcheck",
"esbenp.prettier-vscode"
],
"mounts": [
"type=volume,target=/var/lib/docker"
],
"settings": {
"terminal.integrated.profiles.linux": {
"zsh": {
"path": "/usr/bin/zsh"
}
},
"terminal.integrated.defaultProfile.linux": "zsh",
"editor.formatOnPaste": false,
"editor.formatOnSave": true,
"editor.formatOnType": true,
"files.trimTrailingWhitespace": true
}
}

7
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,7 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10

View File

@@ -12,8 +12,8 @@ jobs:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- uses: actions/checkout@v3.1.0
- uses: actions/setup-python@v4
with:
python-version: '3.x'
- run: pip install -r script/requirements.txt
@@ -30,7 +30,7 @@ jobs:
echo "::set-output name=commit_sha::${COMMIT}"
- if: ${{ contains(github.event.inputs.version, 'b') }}
name: Create Beta Release
uses: actions/create-release@v1
uses: actions/create-release@v1.1.4
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -42,7 +42,7 @@ jobs:
commitish: ${{ steps.commit_version.outputs.commit_sha }}
- if: ${{ !contains(github.event.inputs.version, 'b') }}
name: Create Stable Release
uses: actions/create-release@v1
uses: actions/create-release@v1.1.4
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -52,35 +52,3 @@ jobs:
body: 'See https://esphome.io/changelog/index.html'
prerelease: false
commitish: ${{ steps.commit_version.outputs.commit_sha }}
deploy-community-addons:
runs-on: ubuntu-latest
needs: [create-release]
steps:
- 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 }}"
}

View File

@@ -1,46 +0,0 @@
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 }}"
}

View File

@@ -0,0 +1,41 @@
name: Build devcontainer image
on:
workflow_dispatch:
push:
branches:
- main
paths:
- .devcontainer/**
schedule:
- cron: '0 0 1 * *'
pull_request:
branches:
- main
paths:
- .devcontainer/**
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- name: Log in to the GitHub container registry
uses: docker/login-action@v2.1.0
if: github.event_name != 'pull_request'
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2.1.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2.2.1
- name: Build and Push
uses: docker/build-push-action@v3.2.0
with:
context: .
file: .devcontainer/Dockerfile
tags: ghcr.io/${{ github.repository_owner }}/devcontainer:addons
push: ${{ github.event_name != 'pull_request' }}
platforms: linux/amd64,linux/arm64

View File

@@ -19,9 +19,9 @@ jobs:
channel: dev
steps:
- name: ⤵️ Check out code from GitHub
uses: actions/checkout@v2
uses: actions/checkout@v3.1.0
- name: 🛠 Setup Python
uses: actions/setup-python@v2
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: 🛠 Install dependencies
@@ -29,6 +29,6 @@ jobs:
- name: 🛠 Generate files from template
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
uses: frenck/action-addon-linter@v2.10.1
with:
path: "./${{ matrix.channels.folder }}"

19
.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,19 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Start Home Assistant",
"type": "shell",
"command": "supervisor_run",
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": []
}
]
}

View File

@@ -1,44 +0,0 @@
{
"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": "ghcr.io/esphome/esphome-hassio-{arch}",
"ingress": true,
"ingress_port": 0,
"map": [
"ssl:ro",
"config:rw"
],
"name": "ESPHome (beta)",
"panel_icon": "mdi:chip",
"ports": {
"6052/tcp": null
},
"ports_description": {
"6052/tcp": "Web interface (not required for Home Assistant ingress)"
},
"schema": {
"certfile": "str?",
"keyfile": "str?",
"leave_front_door_open": "bool?",
"relative_url": "str?",
"ssl": "bool?",
"status_use_ping": "bool?",
"streamer_mode": "bool?"
},
"slug": "esphome-beta",
"stage": "experimental",
"uart": true,
"url": "https://beta.esphome.io/",
"version": "2022.3.1"
}

39
esphome-beta/config.yaml Normal file
View File

@@ -0,0 +1,39 @@
---
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: ghcr.io/esphome/esphome-hassio-{arch}
ingress: true
ingress_port: 0
init: false
map:
- ssl:ro
- config:rw
name: ESPHome (beta)
panel_icon: mdi:chip
ports:
6052/tcp: null
ports_description:
6052/tcp: Web interface (not required for Home Assistant ingress)
schema:
certfile: str?
default_compile_process_limit: int(1,)?
keyfile: str?
leave_front_door_open: bool?
relative_url: str?
ssl: bool?
status_use_ping: bool?
streamer_mode: bool?
slug: esphome-beta
stage: experimental
uart: true
url: https://beta.esphome.io/
version: 2022.12.2

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -1,40 +1,31 @@
# Home Assistant Community Add-on: ESPHome
# ESPHome DEV add on
## Installation
This is **development** version of the ESPHome add on.
The installation of this add-on is pretty straightforward and not different in comparison to installing any other Home Assistant add-on.
To deploy production nodes please use mainstream release 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/
The add on uses a version of ESPHome built automatically every day at 02:00 UTC. and is used to test components in development. See the `esphome_fork` configuration below to properly configure the add on. Once you update the configuration make sure to rebuild the image.
## 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.
assumes the repository is named `esphome` still.
If you need to test the latest commit on dev branch before the image is updated you can enter `dev` here.
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**.
or the add-on **will not start**.
## General ESPHome add on configurations
General options also available in other versions.
### Option: `ssl`

View File

@@ -1,7 +0,0 @@
{
"build_from": {
"aarch64": "ghcr.io/esphome/esphome-hassio-aarch64:dev",
"amd64": "ghcr.io/esphome/esphome-hassio-amd64:dev",
"armv7": "ghcr.io/esphome/esphome-hassio-armv7:dev"
}
}

5
esphome-dev/build.yaml Normal file
View File

@@ -0,0 +1,5 @@
---
build_from:
aarch64: ghcr.io/esphome/esphome-hassio-aarch64:dev
amd64: ghcr.io/esphome/esphome-hassio-amd64:dev
armv7: ghcr.io/esphome/esphome-hassio-armv7:dev

View File

@@ -1,44 +0,0 @@
{
"advanced": true,
"arch": [
"amd64",
"armv7",
"aarch64"
],
"auth_api": true,
"backup_exclude": [
"*/*/"
],
"description": "Development version of ESPHome add-on",
"hassio_api": true,
"host_network": true,
"ingress": true,
"ingress_port": 0,
"map": [
"ssl:ro",
"config:rw"
],
"name": "ESPHome (dev)",
"panel_icon": "mdi:chip",
"ports": {
"6052/tcp": null
},
"ports_description": {
"6052/tcp": "Web interface (not required for Home Assistant ingress)"
},
"schema": {
"certfile": "str?",
"esphome_fork": "str?",
"keyfile": "str?",
"leave_front_door_open": "bool?",
"relative_url": "str?",
"ssl": "bool?",
"status_use_ping": "bool?",
"streamer_mode": "bool?"
},
"slug": "esphome-dev",
"stage": "experimental",
"uart": true,
"url": "https://next.esphome.io/",
"version": "dev"
}

39
esphome-dev/config.yaml Normal file
View File

@@ -0,0 +1,39 @@
---
advanced: true
arch:
- amd64
- armv7
- aarch64
auth_api: true
backup_exclude:
- '*/*/'
description: Development version of ESPHome add-on
hassio_api: true
host_network: true
ingress: true
ingress_port: 0
init: false
map:
- ssl:ro
- config:rw
name: ESPHome (dev)
panel_icon: mdi:chip
ports:
6052/tcp: null
ports_description:
6052/tcp: Web interface (not required for Home Assistant ingress)
schema:
certfile: str?
default_compile_process_limit: int(1,)?
esphome_fork: str?
keyfile: str?
leave_front_door_open: bool?
relative_url: str?
ssl: bool?
status_use_ping: bool?
streamer_mode: bool?
slug: esphome-dev
stage: experimental
uart: true
url: https://next.esphome.io/
version: dev

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

7
esphome-dev/rootfs/etc/cont-init.d/30-esphome-fork.sh Normal file → Executable file
View File

@@ -25,10 +25,11 @@ if bashio::config.has_value 'esphome_fork'; then
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 \
rm -rf /esphome || bashio::exit.nok "Failed to remove ESPHome."
mkdir /esphome
tar -zxf /tmp/esphome.tar.gz -C /esphome --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."
pip install -U -e /esphome || 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__)")

View File

@@ -1,42 +0,0 @@
{
"arch": [
"amd64",
"armv7",
"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": "ghcr.io/esphome/esphome-hassio-{arch}",
"ingress": true,
"ingress_port": 0,
"map": [
"ssl:ro",
"config:rw"
],
"name": "ESPHome",
"panel_icon": "mdi:chip",
"ports": {
"6052/tcp": null
},
"ports_description": {
"6052/tcp": "Web interface (not required for Home Assistant ingress)"
},
"schema": {
"certfile": "str?",
"keyfile": "str?",
"leave_front_door_open": "bool?",
"relative_url": "str?",
"ssl": "bool?",
"status_use_ping": "bool?",
"streamer_mode": "bool?"
},
"slug": "esphome",
"uart": true,
"url": "https://esphome.io/",
"version": "2022.3.1"
}

37
esphome/config.yaml Normal file
View File

@@ -0,0 +1,37 @@
---
arch:
- amd64
- armv7
- 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: ghcr.io/esphome/esphome-hassio-{arch}
ingress: true
ingress_port: 0
init: false
map:
- ssl:ro
- config:rw
name: ESPHome
panel_icon: mdi:chip
ports:
6052/tcp: null
ports_description:
6052/tcp: Web interface (not required for Home Assistant ingress)
schema:
certfile: str?
default_compile_process_limit: int(1,)?
keyfile: str?
leave_front_door_open: bool?
relative_url: str?
ssl: bool?
status_use_ping: bool?
streamer_mode: bool?
slug: esphome
uart: true
url: https://esphome.io/
version: 2022.12.2

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -4,7 +4,6 @@ import argparse
import yaml
from pathlib import Path
from enum import Enum
import json
from shutil import copyfile
import sys
@@ -34,9 +33,9 @@ def main(args):
conf = config[f"esphome-{channel.value}"]
base_image = conf.pop("base_image", None)
dir_ = root / conf.pop("directory")
path = dir_ / "config.json"
path = dir_ / "config.yaml"
with open(path, "w") as f:
json.dump(conf, f, indent=2, sort_keys=True)
yaml.dump(conf, f, indent=2, sort_keys=True, explicit_start=True)
for file_, conf_ in copyf.items():
if Path.exists(templ / channel.value / file_):
@@ -49,16 +48,14 @@ def main(args):
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.yaml"
build_conf = {
"build_from": {
arch: base_image.format(arch=arch) for arch in conf["arch"]
}
}
with open(path, "w") as f:
json.dump(build_conf, f, indent=2, sort_keys=True)
print(f"Wrote {path}")
yaml.dump(build_conf, f, indent=2, sort_keys=True, explicit_start=True)
if __name__ == "__main__":

View File

@@ -1 +1 @@
PyYAML==5.4
PyYAML==6.0

View File

@@ -34,8 +34,11 @@ base: &base
streamer_mode: bool?
relative_url: str?
status_use_ping: bool?
default_compile_process_limit: int(1,)?
backup_exclude:
- "*/*/"
# Disable docker init for s6
init: false
esphome-dev:
<<: *base
@@ -56,13 +59,14 @@ esphome-dev:
relative_url: str?
status_use_ping: bool?
esphome_fork: str?
default_compile_process_limit: int(1,)?
base_image: ghcr.io/esphome/esphome-hassio-{arch}:dev
esphome-beta:
<<: *base
directory: esphome-beta
name: ESPHome (beta)
version: '2022.3.1' # BETA
version: '2022.12.2' # BETA
slug: esphome-beta
description: "Beta version of ESPHome add-on"
url: https://beta.esphome.io/
@@ -74,7 +78,7 @@ esphome-stable:
<<: *base
directory: esphome
name: ESPHome
version: '2022.3.1' # STABLE
version: '2022.12.2' # STABLE
slug: esphome
description: "ESPHome add-on for intelligently managing all your ESP8266/ESP32 devices"
image: ghcr.io/esphome/esphome-hassio-{arch}

View File

@@ -1,40 +1,31 @@
# Home Assistant Community Add-on: ESPHome
# ESPHome DEV add on
## Installation
This is **development** version of the ESPHome add on.
The installation of this add-on is pretty straightforward and not different in comparison to installing any other Home Assistant add-on.
To deploy production nodes please use mainstream release 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/
The add on uses a version of ESPHome built automatically every day at 02:00 UTC. and is used to test components in development. See the `esphome_fork` configuration below to properly configure the add on. Once you update the configuration make sure to rebuild the image.
## 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.
assumes the repository is named `esphome` still.
If you need to test the latest commit on dev branch before the image is updated you can enter `dev` here.
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**.
or the add-on **will not start**.
## General ESPHome add on configurations
General options also available in other versions.
### Option: `ssl`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB