chore: initial baseline before refactoring

Initial snapshot of Home Assistant config (HAOS 2026.4.4)
prior to dashboard restructuring and helper YAML migration.

Pre-commit cleanup applied:
- Removed blueprints/switch_manager/ (9.4 MB stale, component already gone)
- Removed .storage/switch_manager
- Removed home-assistant.log.{1,old,fault}
- Removed zigbee2mqtt/configuration_backup_v{1..4}.yaml
- Removed zigbee2mqtt/database.db.tmp.2024-09-27 (1.5y old)
- Created empty themes/ to satisfy configuration.yaml include

.gitignore uses allowlist strategy for .storage/ to keep
all tokens, keys, and PINs out of version control.
This commit is contained in:
2026-05-02 14:24:53 +02:00
commit 5f01411780
149 changed files with 47886 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
# Gitignore settings for ESPHome
# This is an example and may include too much for your use-case.
# You can modify this file to suit your needs.
/.esphome/
/secrets.yaml
@@ -0,0 +1,17 @@
substitutions:
name: esp32-bluetooth-proxy-0951c0
friendly_name: Bluetooth Proxy Küche
packages:
esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic/esp32-generic.yaml@main
esphome:
name: ${name}
name_add_mac_suffix: false
friendly_name: ${friendly_name}
api:
encryption:
key: tCgIpe235uTVcMc/je7gVaUud7xStoBXLfr28XPCR7U=
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
@@ -0,0 +1,42 @@
substitutions:
name: home-assistant-voice-0911a0
friendly_name: Home Assistant Voice
packages:
Nabu Casa.Home Assistant Voice PE: github://esphome/home-assistant-voice-pe/home-assistant-voice.yaml
esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic/esp32-generic.yaml@main
esphome:
name: ${name}
name_add_mac_suffix: false
friendly_name: ${friendly_name}
esp32:
board: esp32-s3-devkitc-1
cpu_frequency: 240MHz
variant: esp32s3
flash_size: 16MB
framework:
type: esp-idf
version: recommended
sdkconfig_options:
CONFIG_ESP32S3_DATA_CACHE_64KB: "y"
CONFIG_ESP32S3_DATA_CACHE_LINE_64B: "y"
CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB: "y"
# Moves instructions and read only data from flash into PSRAM on boot.
# Both enabled allows instructions to execute while a flash operation is in progress without needing to be placed in IRAM.
# Considerably speeds up mWW at the cost of using more PSRAM.
CONFIG_SPIRAM_RODATA: "y"
CONFIG_SPIRAM_FETCH_INSTRUCTIONS: "y"
CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST: "y"
CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY: "y"
CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC: "y"
CONFIG_MBEDTLS_SSL_PROTO_TLS1_3: "y" # TLS1.3 support isn't enabled by default in IDF 5.1.5
api:
encryption:
key: Aq3VMHZJ7q0FpT3pvWAW/DjbYERV4ABDio3oke3McHE=
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
+77
View File
@@ -0,0 +1,77 @@
packages:
# This is an inline package to prefix the on_client_connected with the wait_until action
# It must appear before the actual package so it becomes the orignal config and the
# on_client_connected list from the package config is appended onto this one.
va_connected_wait_for_ble:
voice_assistant:
on_client_connected:
- wait_until:
not: ble.enabled
- delay: 2s
wifi:
on_disconnect:
- ble.enable:
home-assistant-voice: !include home-assistant-voice.yaml
esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic/esp32-generic.yaml@main
esphome:
project:
name: Nabu Casa.Home Assistant Voice PE
version: dev
ota:
- platform: http_request
id: ota_http_request
http_request:
update:
- platform: http_request
name: None
id: update_http_request
source: https://firmware.esphome.io/home-assistant-voice-pe/home-assistant-voice/manifest.json
dashboard_import:
package_import_url: github://esphome/home-assistant-voice-pe/home-assistant-voice.yaml
wifi:
on_connect:
- delay: 5s # Gives time for improv results to be transmitted
- ble.disable:
- script.execute: control_leds
improv_serial:
esp32_ble:
name: ha-voice-pe
esp32_improv:
authorizer: center_button
on_start:
- lambda: id(improv_ble_in_progress) = true;
- script.execute: control_leds
on_provisioned:
- lambda: id(improv_ble_in_progress) = false;
- script.execute: control_leds
on_stop:
- lambda: id(improv_ble_in_progress) = false;
- script.execute: control_leds
switch:
- platform: template
id: beta_firmware
name: Beta firmware
icon: "mdi:test-tube"
disabled_by_default: true
entity_category: config
optimistic: true
restore_mode: RESTORE_DEFAULT_OFF
on_turn_on:
- logger.log: "OTA updates set to use Beta firmware"
- lambda: id(update_http_request).set_source_url("https://firmware.esphome.io/home-assistant-voice-pe/home-assistant-voice/manifest-beta.json");
- component.update: update_http_request
on_turn_off:
- logger.log: "OTA updates set to use Production firmware"
- lambda: id(update_http_request).set_source_url("https://firmware.esphome.io/home-assistant-voice-pe/home-assistant-voice/manifest.json");
- component.update: update_http_request
+199
View File
@@ -0,0 +1,199 @@
esphome:
name: esp32s3
friendly_name: ReSpeakerv3
platformio_options:
board_build.flash_mode: dio
board_build.mcu: esp32s3
# on_boot:
# then:
# - if:
# condition:
# switch.is_on:
# then:
# - voice_assistant.start_continuous:
esp32:
board: esp32-s3-devkitc-1
variant: esp32s3
framework:
type: esp-idf
version: recommended
logger:
level: VERY_VERBOSE
api:
wifi:
ssid: "nuclide"
password: "tapirnase"
captive_portal:
external_components:
- source: github://QingWind6/ESPHome_XIAO-ESP32S3
i2s_audio_xiao:
i2s_lrclk_pin: GPIO7
i2s_bclk_pin: GPIO8
i2s_mclk_pin: GPIO9
microphone:
- platform: i2s_audio_xiao
id: xiao_mic
adc_type: external
i2s_din_pin: GPIO44
pdm: false
bits_per_sample: 32bit
channel: left
speaker:
- platform: i2s_audio_xiao
id: xiao_speaker
dac_type: external
i2s_dout_pin: GPIO43
mode: stereo
voice_assistant:
microphone: xiao_mic
use_wake_word: true
noise_suppression_level: 0
auto_gain: 0dBFS
volume_multiplier: 1
speaker: xiao_speaker
id: assist
on_listening:
- light.turn_on:
id: led
blue: 100%
red: 0%
green: 0%
effect: "Slow Pulse"
on_stt_vad_end:
- light.turn_on:
id: led
blue: 100%
red: 0%
green: 0%
effect: "Fast Pulse"
on_tts_start:
- light.turn_on:
id: led
blue: 100%
red: 0%
green: 0%
brightness: 100%
effect: none
on_end:
- delay: 100ms
- wait_until:
not:
speaker.is_playing:
- script.execute: reset_led
on_error:
- light.turn_on:
id: led
red: 100%
green: 0%
blue: 0%
brightness: 100%
effect: none
- delay: 1s
- script.execute: reset_led
on_client_connected:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.start_continuous:
- script.execute: reset_led
on_client_disconnected:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.stop:
- light.turn_off: led
light:
- platform: esp32_rmt_led_strip
id: led
name: None
disabled_by_default: true
entity_category: config
pin: GPIO1
default_transition_length: 0s
chipset: ws2812
num_leds: 1
rgb_order: grb
rmt_channel: 0
effects:
- pulse:
name: "Slow Pulse"
transition_length: 250ms
update_interval: 250ms
min_brightness: 50%
max_brightness: 100%
- pulse:
name: "Fast Pulse"
transition_length: 100ms
update_interval: 100ms
min_brightness: 50%
max_brightness: 100%
output:
- platform: ledc
id: light_output
pin: GPIO21
inverted: true
script:
- id: reset_led
then:
- if:
condition:
- switch.is_on: use_wake_word
- switch.is_on: use_listen_light
then:
- light.turn_on:
id: led
effect: none
else:
- light.turn_off:
id: led
switch:
- platform: template
name: Use wake word
id: use_wake_word
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
entity_category: config
on_turn_on:
- lambda: id(assist).set_use_wake_word(true);
- if:
condition:
not:
- voice_assistant.is_running
then:
- voice_assistant.start_continuous
on_turn_off:
- voice_assistant.stop
- lambda: id(assist).set_use_wake_word(false);
- platform: template
name: Use Listen Light
id: use_listen_light
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
entity_category: config
on_turn_on:
- script.execute: reset_led
on_turn_off:
- script.execute: reset_led
+201
View File
@@ -0,0 +1,201 @@
esphome:
name: esp32s3
friendly_name: ReSpeakerv3
platformio_options:
board_build.flash_mode: dio
board_build.mcu: esp32s3
# on_boot:
# then:
# - if:
# condition:
# switch.is_on:
# then:
# - voice_assistant.start_continuous:
esp32:
board: esp32-s3-devkitc-1
variant: esp32s3
framework:
type: esp-idf
version: recommended
logger:
# level: VERY_VERBOSE
api:
ota:
- platform: esphome
wifi:
ssid: "nuclide"
password: "tapirnase"
captive_portal:
external_components:
- source: github://QingWind6/ESPHome_XIAO-ESP32S3
i2s_audio_xiao:
i2s_lrclk_pin: GPIO7
i2s_bclk_pin: GPIO8
i2s_mclk_pin: GPIO9
microphone:
- platform: i2s_audio_xiao
id: xiao_mic
adc_type: external
i2s_din_pin: GPIO44
pdm: false
bits_per_sample: 32bit
channel: left
speaker:
- platform: i2s_audio_xiao
id: xiao_speaker
dac_type: external
i2s_dout_pin: GPIO43
mode: stereo
voice_assistant:
microphone: xiao_mic
use_wake_word: true
noise_suppression_level: 0
auto_gain: 0dBFS
volume_multiplier: 1
speaker: xiao_speaker
id: assist
on_listening:
- light.turn_on:
id: led
blue: 100%
red: 0%
green: 0%
effect: "Slow Pulse"
on_stt_vad_end:
- light.turn_on:
id: led
blue: 100%
red: 0%
green: 0%
effect: "Fast Pulse"
on_tts_start:
- light.turn_on:
id: led
blue: 100%
red: 0%
green: 0%
brightness: 100%
effect: none
on_end:
- delay: 100ms
- wait_until:
not:
speaker.is_playing:
- script.execute: reset_led
on_error:
- light.turn_on:
id: led
red: 100%
green: 0%
blue: 0%
brightness: 100%
effect: none
- delay: 1s
- script.execute: reset_led
on_client_connected:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.start_continuous:
- script.execute: reset_led
on_client_disconnected:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.stop:
- light.turn_off: led
light:
- platform: esp32_rmt_led_strip
id: led
name: None
disabled_by_default: true
entity_category: config
pin: GPIO1
default_transition_length: 0s
chipset: ws2812
num_leds: 1
rgb_order: grb
rmt_channel: 0
effects:
- pulse:
name: "Slow Pulse"
transition_length: 250ms
update_interval: 250ms
min_brightness: 50%
max_brightness: 100%
- pulse:
name: "Fast Pulse"
transition_length: 100ms
update_interval: 100ms
min_brightness: 50%
max_brightness: 100%
output:
- platform: ledc
id: light_output
pin: GPIO21
inverted: true
script:
- id: reset_led
then:
- if:
condition:
- switch.is_on: use_wake_word
- switch.is_on: use_listen_light
then:
- light.turn_on:
id: led
effect: none
else:
- light.turn_off:
id: led
switch:
- platform: template
name: Use wake word
id: use_wake_word
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
entity_category: config
on_turn_on:
- lambda: id(assist).set_use_wake_word(true);
- if:
condition:
not:
- voice_assistant.is_running
then:
- voice_assistant.start_continuous
on_turn_off:
- voice_assistant.stop
- lambda: id(assist).set_use_wake_word(false);
- platform: template
name: Use Listen Light
id: use_listen_light
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
entity_category: config
on_turn_on:
- script.execute: reset_led
on_turn_off:
- script.execute: reset_led
+53
View File
@@ -0,0 +1,53 @@
substitutions:
name: esp32-bluetooth-proxy-bb4b84
friendly_name: Bluetooth Proxy Garage
packages:
esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic/esp32-generic.yaml@main
esphome:
name: ${name}
name_add_mac_suffix: false
friendly_name: ${friendly_name}
api:
encryption:
key: 0QWYS2snebtCGQCUxJiCSbRiSoKP1q57J80uCelH1xM=
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
logger:
level: DEBUG # This is critical to see the raw hex codes
esp32_ble_tracker:
scan_parameters:
active: true # We need active scanning to "see" the controller better
esp32_ble:
max_connections: 4
ble_client:
# - mac_address: D5:E9:5E:AF:FB:65
# id: vLinker_MC_IOS
- mac_address: 80:F1:B2:B3:B6:48
id: spider_farmer
on_connect:
then:
- lambda: |-
ESP_LOGD("custom", "Connected to Spider Farmer! Exploration starting...");
# This part below is a 'sniffer' that will dump the services to logs
on_passkey_request:
- lambda: ESP_LOGD("custom", "Passkey requested");
# sensor:
# # RSSI based on MAC address
# - platform: ble_rssi
# mac_address: D5:E9:5E:AF:FB:65
# name: "VLinker MC IOS RSSI"
# binary_sensor:
# - platform: ble_presence
# mac_address: D5:E9:5E:AF:FB:65
# name: "VLinker MC IOS Presence"
+53
View File
@@ -0,0 +1,53 @@
substitutions:
name: esp32-bluetooth-proxy-bb4b84
friendly_name: Bluetooth Proxy Garage
packages:
esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/esp32-generic/esp32-generic.yaml@main
esphome:
name: ${name}
name_add_mac_suffix: false
friendly_name: ${friendly_name}
api:
encryption:
key: 0QWYS2snebtCGQCUxJiCSbRiSoKP1q57J80uCelH1xM=
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
logger:
level: DEBUG # This is critical to see the raw hex codes
esp32_ble_tracker:
scan_parameters:
active: true # We need active scanning to "see" the controller better
esp32_ble:
max_connections: 4
ble_client:
# - mac_address: D5:E9:5E:AF:FB:65
# id: vLinker_MC_IOS
- mac_address: 80:F1:B2:B3:B6:48
id: spider_farmer
on_connect:
then:
- lambda: |-
ESP_LOGD("custom", "Connected to Spider Farmer! Exploration starting...");
# This part below is a 'sniffer' that will dump the services to logs
on_passkey_request:
- lambda: ESP_LOGD("custom", "Passkey requested");
# sensor:
# # RSSI based on MAC address
# - platform: ble_rssi
# mac_address: D5:E9:5E:AF:FB:65
# name: "VLinker MC IOS RSSI"
# binary_sensor:
# - platform: ble_presence
# mac_address: D5:E9:5E:AF:FB:65
# name: "VLinker MC IOS Presence"