ESPHome Configurations
  • Python 59.5%
  • Makefile 29.3%
  • Shell 11.2%
Find a file
Timo Mäkinen 92cc67de30
All checks were successful
CI / lint (push) Successful in 21s
CI / build (push) Successful in 3m50s
Merge pull request 'Update dependency esphome to v2026.10.1' (#6) from renovate/esphome-2026.x into main
Reviewed-on: #6
2026-11-05 08:12:39 +00:00
.forgejo/workflows Update actions/setup-python action to v7.1.0 2026-10-30 02:00:58 +00:00
bin Fix placeholder string 2026-09-24 20:53:52 +00:00
common Use recommended log levels from security best practices 2026-09-24 22:38:18 +00:00
.gitignore Add support for secrets.yaml 2026-09-24 19:17:36 +00:00
.python-version Add workflow to run yamllint and run test builds 2026-09-22 12:30:01 +00:00
.yamllint Skip line length tests in yamllint 2026-09-22 12:34:06 +00:00
age.pub Add support for secrets.yaml 2026-09-24 19:17:36 +00:00
esphome01.yaml Add recommended optimizations 2026-09-24 21:41:11 +00:00
LICENSE Add license 2026-09-24 23:13:59 +00:00
Makefile Add install target to Makefile that uploads firmwares 2026-09-24 20:21:59 +00:00
README.md Add README.md 2026-09-24 23:04:12 +00:00
renovate.json More dependabot like config for renovate 2026-09-24 22:21:54 +00:00
requirements.txt Update dependency esphome to v2026.10.1 2026-11-04 02:01:12 +00:00
secrets.enc.yaml Use recommended naming for secrets 2026-09-24 21:34:47 +00:00

ESPHome Infrastructure Management

This repository uses a GitOps-driven workflow to manage, validate, and deploy ESPHome devices using localized network routing and encrypted secrets management.

Architecture Overview

  • Security Best Practices: All recommendations from the official ESPHome Security Best Practices documentation have been fully implemented.
  • Zero mDNS Dependency: All devices have mDNS disabled for enhanced security and lower network overhead.
  • DNS Resolution: Network tracking relies on static DHCP reservations assigned at the router level. Devices communicate via local DNS hostnames (mapped via use_address).
  • Optimized Logging: To save disk I/O on the centralized log server and protect sensitive network tokens, wifi and api log components are restricted to WARN level.

Secrets Management

Secrets (Wi-Fi credentials, API keys, etc.) are encrypted at rest in the repository within the secrets.enc.yaml file using age.

  • CI Pipelines: Parse the structure of secrets.enc.yaml to identify the required keys, automatically generating a dummy secrets.yaml where all values are replaced with placeholders. This documents the required configuration while validating builds safely without exposing production keys.
  • Production Deployment: Requires the target decryption key to decrypt secrets.enc.yaml and generate the live production secrets.yaml.

Workflows

Continuous Integration (CI)

Every commit and Pull Request (including automated dependency updates) triggers the CI pipeline to ensure structural integrity:

  1. Runs linters to validate the code quality and syntax across the codebase.
  2. Generates dummy secrets from the structure of secrets.enc.yaml.
  3. Compiles the firmware images to guarantee the build succeeds.

Local Deployment

Deployments are currently managed locally from a deployment machine with network access to the IoT infrastructure.

1. Decrypt and Build Firmwares

To decrypt production secrets and compile the production binaries, provide the path to your private age key:

KEY=/path/to/your/production.key make

2. Deploy to Production (OTA)

Once the binaries are built, upload them Over-The-Air and reboot the target devices:

make install