Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
6631430
Add LED strip test config on exposed IO1 header
Bunton33 Oct 13, 2026
a19290c
Add LED strip controls, Music Mode and runtime strip settings
Bunton33 Oct 13, 2026
be4dd79
Move LED strip into Core.yaml, disable by default, split RMT memory
Bunton33 Oct 13, 2026
d3027b4
Merge pull request #90 from ApolloAutomation/led-test
Bunton33 Oct 13, 2026
c39b17b
Make Music Mode follow stop quickly and stop stray LEDs staying lit
Bunton33 Oct 13, 2026
edfcc40
Clear the whole strip at boot and after turn-off
Bunton33 Oct 13, 2026
07ee10e
Merge pull request #93 from ApolloAutomation/fix/led-strip-music-mode
Bunton33 Oct 13, 2026
6938926
Add CAST-1 product photo to the README
Bunton33 Oct 13, 2026
294532e
Merge pull request #94 from ApolloAutomation/docs/readme-image
Bunton33 Oct 13, 2026
b1ea458
Center the README product photo
Bunton33 Oct 13, 2026
41e72a6
Merge pull request #95 from ApolloAutomation/docs/center-readme-image
Bunton33 Oct 13, 2026
e27ad3c
Auto-assign new PRs and issues to WestwardWinds
Bunton33 Oct 14, 2026
d3b5748
Merge pull request #96 from ApolloAutomation/ci/autoassign-westwardwinds
Bunton33 Oct 14, 2026
2f9a2f9
Use native ESP32 options, fix WizMote log format, pin release ESPHome
Bunton33 Oct 14, 2026
38426d1
Merge pull request #97 from ApolloAutomation/chore/cleanup-26.10.14
Bunton33 Oct 14, 2026
37ab007
Unpin release ESPHome and keep Dependabot on main
Bunton33 Oct 14, 2026
ad75075
Merge pull request #98 from ApolloAutomation/ci/unpin-esphome
Bunton33 Oct 14, 2026
d3cd6aa
Restore the Voice PE flash mode and PSRAM options
Bunton33 Oct 14, 2026
09709be
Merge pull request #99 from ApolloAutomation/fw/restore-voice-pe-options
Bunton33 Oct 14, 2026
25e5d7c
Revert auto-assign change from #96
Bunton33 Oct 14, 2026
568b4ef
Merge pull request #100 from ApolloAutomation/ci/revert-autoassign
Bunton33 Oct 14, 2026
603e612
Move LED strip code into led_strip.yaml and auto-assign to Trevor
Bunton33 Oct 14, 2026
6444b4e
Merge pull request #101 from ApolloAutomation/fw/led-strip-package
Bunton33 Oct 14, 2026
c9343bf
Use the AUTO_ASSIGNEE org variable for auto-assign
Bunton33 Oct 16, 2026
76a4093
Merge pull request #104 from ApolloAutomation/ci/autoassign-org-variable
Bunton33 Oct 16, 2026
cc05286
Build on ESPHome 2026.10 and rename esp32_improv to improv_ble
Bunton33 Oct 25, 2026
595d0e9
Unmute before WizMote Volume Up
Bunton33 Oct 25, 2026
362b662
led support
WestwardWinds Oct 27, 2026
25761d6
led support
WestwardWinds Oct 27, 2026
d9a6e59
Merge branch 'beta' of https://github.com/WestwardWinds/CAST-1 into beta
WestwardWinds Oct 27, 2026
0e7068e
fix cast error
WestwardWinds Oct 27, 2026
6ad0e3d
Move LED segments and count into the device YAML
WestwardWinds Oct 27, 2026
1255db3
Remove the Intensity setting from the LED effects
WestwardWinds Oct 27, 2026
5cba2f6
Make announcement ducking and LED brightness configurable
WestwardWinds Oct 28, 2026
6745b10
Make the external LED strip an opt-in package
WestwardWinds Oct 28, 2026
7865e96
Added blueprints for 3 different sensors and README
WestwardWinds Oct 28, 2026
088de87
Enlarge the blueprint import buttons in the README
WestwardWinds Oct 29, 2026
f04dc2b
Move the blueprint import buttons out of the README table
WestwardWinds Oct 29, 2026
938e21a
Add step-by-step instructions for adding the LED strip package
WestwardWinds Oct 29, 2026
53fda69
Expose LED strip and announcement settings in Home Assistant
WestwardWinds Oct 30, 2026
5d9d9fd
Move the porch blueprints to the ApolloAutomation/Projects repo
WestwardWinds Oct 30, 2026
d655c0b
Merge remote-tracking branch 'origin/fw/esphome-2026.10' into release…
Bunton33 Oct 30, 2026
7d6163b
Fix review findings and bump to 26.10.30.1
Bunton33 Oct 30, 2026
bdad8e6
Merge pull request #107 from ApolloAutomation/release/26.10.30
Bunton33 Oct 30, 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
9 changes: 3 additions & 6 deletions .github/workflows/autoassign.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
name: Auto Assign

# pull_request_target (not pull_request) so auto-assign works on
# fork-submitted PRs; fork pull_request runs only get a read-only token.
# pull_request_target (not pull_request) so assignment works on
# fork-submitted PRs; fork pull_request runs get a read-only token.
# Safe because this workflow never checks out or executes PR code.
# The assignee comes from the AUTO_ASSIGNEE organization variable.
on:
issues:
types: [opened]
Expand All @@ -16,6 +16,3 @@ permissions:
jobs:
auto-assign:
uses: ApolloAutomation/Workflows/.github/workflows/autoassign.yml@main
with:
assignees: bharvey88
num-of-assignees: 1
2 changes: 1 addition & 1 deletion .github/workflows/build-beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
matrix:
include:
- { yaml: Integrations/ESPHome/CAST-1.yaml, name: firmware }
uses: esphome/workflows/.github/workflows/build.yml@9f6577fd37b5cf773ab1b9be929714a0dcd15661 # 2026.7.0
uses: esphome/workflows/.github/workflows/build.yml@cc3e76de337dc59bc1cba8da58d963cd23b873f1 # 2026.9.0
with:
files: ${{ matrix.yaml }}
esphome-version: stable
Expand Down
Binary file added CAST_Card.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
83 changes: 70 additions & 13 deletions Integrations/ESPHome/Core.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
substitutions:
version: "26.9.21.1"
version: "26.10.30.1"
stable_manifest_base: "https://apolloautomation.github.io/CAST-1"
beta_manifest_base: "https://github.com/ApolloAutomation/CAST-1/releases/download/beta-fw"
stable_manifest_dir: "firmware"
Expand All @@ -8,16 +8,17 @@ substitutions:

packages:
wizmote: !include wizmote.yaml
led_strip: !include led_strip.yaml

esphome:
friendly_name: Apollo CAST-1
comment: Apollo CAST-1
name_add_mac_suffix: true
# network: priority: (WiFi + Ethernet in one firmware) needs 2026.8
min_version: 2026.8.0
# improv_ble (renamed from esp32_improv) needs 2026.10
min_version: 2026.10.0
platformio_options:
board_build.flash_mode: dio
# List form so package on_boot entries (wizmote.yaml) merge
# List form so package on_boot entries (wizmote.yaml, led_strip.yaml) merge
on_boot:
- priority: 800
then:
Expand Down Expand Up @@ -61,6 +62,19 @@ esphome:
- priority: -100
then:
- script.execute: apply_ota_source
# Firmware before ESPHome 2026.10 saved volume 0 as muted, and volume no
# longer clears mute; unmute that once (silent at volume 0)
- priority: -100
then:
- if:
condition:
and:
- lambda: "return !id(zero_volume_mute_fixed);"
- media_player.is_muted: external_media_player
- lambda: "return id(external_media_player).volume < 0.001f;"
then:
- media_player.unmute: external_media_player
- lambda: "id(zero_volume_mute_fixed) = true;"
# Ethernet never came up, so bring WiFi back for rejoin or provisioning
- priority: -100
then:
Expand Down Expand Up @@ -209,8 +223,8 @@ captive_portal:
improv_serial:
id: improv_serial_1

esp32_improv:
id: esp32_improv_1
improv_ble:
id: improv_ble_1
authorizer: none

esp32:
Expand Down Expand Up @@ -251,6 +265,11 @@ api:
encryption:

globals:
# Set after the one-time volume-0 unmute check on first boot
- id: zero_volume_mute_fixed
type: bool
restore_value: yes
initial_value: 'false'
- id: cycleCounter
type: int
restore_value: no
Expand Down Expand Up @@ -458,6 +477,9 @@ light:
default_transition_length: 0s
chipset: WS2812
num_leds: 4
# The S3 has 192 RMT TX symbols in total and each strip defaults to all of
# them, so split them or the second strip's channel fails
rmt_symbols: 48
channel_colors: GRB
effects:
- pulse:
Expand All @@ -473,6 +495,37 @@ light:
min_brightness: 50%
max_brightness: 100%

number:
# How far music drops while an announcement plays (0 = no ducking)
- platform: template
id: announcement_ducking
name: "Announcement Ducking"
icon: mdi:volume-minus
entity_category: config
unit_of_measurement: "dB"
mode: slider
min_value: -80
max_value: 0
step: 1
optimistic: true
restore_value: true
initial_value: -40

# Onboard LED brightness while an announcement plays (0 = LED stays off)
- platform: template
id: announcement_led_brightness
name: "Announcement LED Brightness"
icon: mdi:brightness-percent
entity_category: config
unit_of_measurement: "%"
mode: slider
min_value: 0
max_value: 100
step: 1
optimistic: true
restore_value: true
initial_value: 50

select:
- platform: template
id: firmware_channel
Expand Down Expand Up @@ -588,15 +641,19 @@ media_player:
- lambda: return (!id(announcement_triggered));
then:
- lambda: id(announcement_triggered) = true;
- light.turn_on:
id: rgb_light
blue: 100%
red: 0%
green: 100%
brightness: 50%
- if:
condition:
lambda: "return id(announcement_led_brightness).state > 0;"
then:
- light.turn_on:
id: rgb_light
blue: 100%
red: 0%
green: 100%
brightness: !lambda "return id(announcement_led_brightness).state / 100.0f;"
- mixer_speaker.apply_ducking:
id: media_mixer_input
decibel_reduction: 40
decibel_reduction: !lambda "return (uint8_t) -id(announcement_ducking).state;"
duration: 0.0s
- wait_until:
media_player.is_announcing: external_media_player
Expand Down
Loading
Loading