Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
f82cc62
Merge pull request #2 from finitelabs/noise
derek-miller Jul 14, 2025
d40d5ff
v20250714.1: Fix bug causing entities to not be discovered on connect…
derek-miller Jul 14, 2025
bce6715
v20250715: Change v20250714.1 version to v20250715 to be compatible w…
derek-miller Jul 14, 2025
5025c28
Fix incorrect binding ID assignment in SwitchEntity:discovered functi…
derek-miller Aug 11, 2025
ff8130c
v20251019: Add OpenSSL support for "Encryption Key" authentication mo…
derek-miller Oct 19, 2025
042770c
v20251019: Update Protobuf schema and fix a bug with the authenticati…
derek-miller Oct 19, 2025
00101d1
Add missing entry to the changelog (#9)
derek-miller Oct 19, 2025
f8fbeaf
v20251022: Gracefully handle unknown proto fields (#10)
derek-miller Oct 22, 2025
2cb5d21
v20251031: Fix ESPHome 2025.10.0 passwordless device compatibility (#13)
derek-miller Nov 1, 2025
57548b1
Add Bluetooth proxy support with multi-proxy coordination and presenc…
derek-miller Feb 17, 2026
3cafe19
Release v20260217
derek-miller Feb 17, 2026
1ea8716
Add fan entity support with speed and direction variant system (#16)
derek-miller Mar 1, 2026
ddaf02f
Add Yale BLE lock driver and Bluetooth proxy enhancements (#17)
derek-miller Mar 14, 2026
9a952a2
Release v20260314
derek-miller Mar 14, 2026
7816f0a
Clean up test harness and remove sensitive data
derek-miller Mar 14, 2026
79e2e02
Fix BLE connection failures from address precision loss (#18)
derek-miller Mar 18, 2026
054fd15
Release v20260318
derek-miller Mar 18, 2026
833c52d
Fix sub-drivers staying Disconnected after parent connects (#19)
derek-miller Mar 19, 2026
c56acf2
Release v20260319
derek-miller Mar 19, 2026
6be87ec
Migrate to copier template v0.2.0 (#21)
svc-finitelabs[bot] Mar 22, 2026
b3e97f4
AGENT-30: Deduplicate DoorSense contact sensor notifications (#22)
svc-finitelabs[bot] Mar 23, 2026
4da3203
Add Unreleased changelog entry for AGENT-30 DoorSense dedup fix (#23)
svc-finitelabs[bot] Mar 23, 2026
78370a9
TPL-1: Update template to v0.3.0 (#24)
svc-finitelabs[bot] Mar 23, 2026
941e8f6
TPL-2: Copier update to v0.4.0 — GitHub Actions CI (#26)
svc-finitelabs[bot] Mar 23, 2026
186f53f
DRV-18: Copier update to template v0.4.2 (Lua 5.3+ vendor lib fixes) …
svc-finitelabs[bot] Mar 25, 2026
4d84e84
Deduplicate cover contact sensor notifications (#29)
derek-miller Mar 25, 2026
858f05f
Release v20260325
derek-miller Mar 25, 2026
1d131e9
Add GitHub Actions release workflow
derek-miller Mar 25, 2026
12f5b7d
chore: copier update to template v0.5.0 (release workflow) (#34)
svc-finitelabs[bot] Mar 26, 2026
51401fe
DRV-22: Fix leader instance pattern for property sync and update chec…
svc-finitelabs[bot] Mar 26, 2026
8ede704
Release v20260326
derek-miller Mar 26, 2026
adb250d
DRV-25: Add Select entity support (#45)
svc-finitelabs[bot] Mar 28, 2026
b59a664
DRV-31: Add Event entity support (#39)
svc-finitelabs[bot] Mar 28, 2026
54e55ed
DRV-30: Add Date, Time, and Datetime entity support (#40)
svc-finitelabs[bot] Mar 28, 2026
7db3c1e
DRV-35: Add Voice Assistant footnote to entity table (#35)
svc-finitelabs[bot] Mar 28, 2026
fa9d32c
DRV-33: Add Update entity support for ESPHome firmware updates
Mar 28, 2026
8646a29
Address review feedback on Update entity support
Mar 31, 2026
17f6297
fix: address PR review feedback for update entity (DRV-33)
svc-finitelabs[bot] Mar 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .copier-answers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Changes here will be overwritten by Copier
_commit: v0.5.0
_src_path: git@github.com:finitelabs/control4-driver-template.git
project_name: control4-esphome
project_description: Integrate ESPHome-based devices into Control4
github_org: finitelabs
distributions: drivercentral oss
readme_driver_slug: esphome
readme_build: oss
primary_color: "#17BCF2"
vendor_modules: json deferred drivers-common-public xml bitn bthome noiseprotocol protobuf
101 changes: 101 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: Build

on:
push:
branches: [main, master]
pull_request:
branches: [main, master]

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '22'

- name: Setup Lua
uses: leafo/gh-actions-lua@v12
with:
luaVersion: 'luajit-2.1'

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'

- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libxml2-dev \
libxslt-dev \
libssl-dev \
swig \
pandoc \
xmlstarlet \
xvfb \
libnss3 \
libatk1.0-0 \
libatk-bridge2.0-0 \
libcups2 \
libdrm2 \
libxkbcommon0 \
libxcomposite1 \
libxdamage1 \
libxrandr2 \
libgbm1 \
libpango-1.0-0 \
libcairo2 \
libasound2t64

- name: Initialize project
run: make init

- name: Build
run: xvfb-run make build
env:
ELECTRON_DISABLE_SANDBOX: '1'

- name: Verify PDFs were generated
run: |
for build in drivercentral oss; do
pdf_count=$(find "dist/$build" -name '*.pdf' 2>/dev/null | wc -l)
if [ "$pdf_count" -eq 0 ]; then
echo "::error::No PDF files found in dist/$build"
ls -la "dist/$build/" || true
exit 1
fi
echo "Found $pdf_count PDF(s) in dist/$build"
done

- name: Check for dirty tree
run: |
git diff --exit-code || { echo "::error::Uncommitted changes after build"; exit 1; }
UNTRACKED=$(git ls-files --others --exclude-standard)
if [ -n "$UNTRACKED" ]; then
echo "::error::Untracked files after build:"
echo "$UNTRACKED"
exit 1
fi

- name: Upload drivercentral artifacts
if: always()
uses: actions/upload-artifact@v7
with:
name: drivercentral
path: dist/drivercentral/*
if-no-files-found: error

- name: Upload oss artifacts
if: always()
uses: actions/upload-artifact@v7
with:
name: oss
path: dist/oss/*
if-no-files-found: error
57 changes: 57 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Release

on:
push:
tags: ['v*']

permissions:
contents: write
actions: read

jobs:
release:
runs-on: ubuntu-latest

steps:
- name: Wait for build and download oss artifacts
run: |
echo "Waiting for Build workflow to complete for $GITHUB_SHA..."
while true; do
run_id=$(gh run list \
--repo "$GITHUB_REPOSITORY" \
--workflow build.yml \
--commit "$GITHUB_SHA" \
--json databaseId,status,conclusion \
--jq '.[] | select(.status == "completed") | .databaseId' \
| head -1)
if [ -n "$run_id" ]; then
echo "Build run $run_id completed"
break
fi
echo "Build not finished yet, waiting 30s..."
sleep 30
done

conclusion=$(gh run view "$run_id" \
--repo "$GITHUB_REPOSITORY" \
--json conclusion --jq '.conclusion')
if [ "$conclusion" != "success" ]; then
echo "::error::Build run $run_id finished with: $conclusion"
exit 1
fi

gh run download "$run_id" \
--repo "$GITHUB_REPOSITORY" \
--name oss \
--dir dist/oss
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Create release
uses: softprops/action-gh-release@v2
with:
generate_release_notes: true
files: |
dist/oss/*.c4z
dist/oss/*.pdf
dist/oss/*.zip
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
/dist
/build
/.venv
/.lua
/node_modules
**/http-client.private.env.json
123 changes: 123 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# <span style="color:#17BCF2">Changelog</span>

<!-- prettier-ignore-start -->
[//]: # "## v[Version] - YYY-MM-DD"
[//]: # "### Added"
[//]: # "- Added"
Expand All @@ -9,6 +10,128 @@
[//]: # "- Changed"
[//]: # "### Removed"
[//]: # "- Removed"
<!-- prettier-ignore-end -->

## Unreleased

### Added

- Added Event entity support: stateless triggers (button presses, gestures,
doorbell rings) now create Control4 events for programming and track the last
event type in a variable
- Added Date, Time, and Datetime entity support: configurable date/time values
on the device are exposed as writable string variables (YYYY-MM-DD, HH:MM:SS,
YYYY-MM-DD HH:MM:SS)
- Added Update entity support: firmware update tracking with current/latest
version variables, update available flag, in-progress indicator, and automatic
device update option

## v20260328 - 2026-03-28

### Added

- Added Select entity support: STRING variable with current option, writable via
programming or variable writes
- Added "Set Select" programming command with dynamic Select and Option
dropdowns

## v20260326 - 2026-03-26

<!-- #ifndef DRIVERCENTRAL -->

### Fixed

- Fixed automatic driver updates not working when the leader instance is removed
from the project

<!-- #endif -->

## v20260325 - 2026-03-25

### Fixed

- Fixed cover contact sensors sending duplicate notifications during open/close
operations
- Fixed Yale DoorSense contact sensor sending duplicate "Closed" notifications
on every poll cycle by tracking the last known door status and only reporting
on actual state changes

## v20260319 - 2026-03-19

### Fixed

- Fixed an issue where entities were no longer being detected reliably on
connection

## v20260318 - 2026-03-18

### Fixed

- Fixed Bluetooth Coordinator failing to connect to active BLE devices
(SwitchBot, Yale locks) through proxies

## v20260314 - 2026-03-14

### Added

- Added fan support with on/off, speed control (1-6 speed variants), direction,
and oscillation
- Added ESPHome Yale sub-driver for Yale/August BLE smart locks with lock/unlock
control, door sense, and battery monitoring

## v20260217 - 2026-02-17

### Added

- Added Bluetooth proxy support with scanner infrastructure, advertisement
parsing, and GATT connection management
- Added ESPHome Bluetooth Coordinator driver for multi-proxy aggregation with
RSSI-based routing and connection failover
- Added room presence tracking with RSSI-based detection, anti-flapping, and
contact sensor bindings
- Added ESPHome BTHome sub-driver for Shelly BLU and BTHome v1/v2 sensors
- Added ESPHome Govee sub-driver for temperature, humidity, and meat thermometer
sensors
- Added ESPHome SwitchBot sub-driver for Bot, Plug Mini, Meter, Motion, and
Contact devices
- Added device log forwarding to the ESPHome driver

## v20251031 - 2025-10-31

### Fixed

- Fixed compatibility with ESPHome 2025.10.0 for devices configured without
passwords
- Improved password authentication failure detection and error reporting

## v20251022 - 2025-10-22

### Fixed

- Fixed an issue with parsing unknown fields in protobuf messages

## v20251019 - 2025-10-19

### Added

- Added support for OpenSSL with "Encryption Key" authentication mode across all
applicable algorithms

### Fixed

- Fixed a bug with the authentication flow in the latest 2025.10.0 firmware

## v20250811 - 2025-08-11

### Fixed

- Fixed switch entities not responding to bound relay proxies

## v20250715 - 2025-07-14

### Fixed

- Fixed bug causing entities to not be discovered on connect

## v20250714 - 2025-07-14

Expand Down
Loading
Loading