Edit esp-bedside-panel.yaml

This commit is contained in:
ESPHome Device Builder
2026-07-20 14:46:50 +12:00
parent 14d65a8cf1
commit 809f9ada66
+41 -25
View File
@@ -6,6 +6,7 @@
# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-bedside-panel.yaml # https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-bedside-panel.yaml
#:########################################################################################:# #:########################################################################################:#
# VERSIONS: # VERSIONS:
# V1.46 2026-07-20 Raised the alarm tone to 6000 Hz, limited volume to 5-100%, and remapped 100% to the previous displayed 30% level
# V1.45 2026-07-20 Shortened the project description to remain within ESPHome's 255-byte string limit # V1.45 2026-07-20 Shortened the project description to remain within ESPHome's 255-byte string limit
# V1.44 2026-07-20 Added a classic 4096 Hz digital-clock triplet alarm and remapped displayed 0-100% volume to a quieter 0-30% output ceiling # V1.44 2026-07-20 Added a classic 4096 Hz digital-clock triplet alarm and remapped displayed 0-100% volume to a quieter 0-30% output ceiling
# V1.43 2026-07-20 Raised alarm-test pitch and capped volume at the proven 40% maximum # V1.43 2026-07-20 Raised alarm-test pitch and capped volume at the proven 40% maximum
@@ -146,13 +147,13 @@
# - The Snooze duration is a persistent Home Assistant configuration entity. # - The Snooze duration is a persistent Home Assistant configuration entity.
# - Alarm speaker volume is persistent and adjustable from Home Assistant or the display. # - Alarm speaker volume is persistent and adjustable from Home Assistant or the display.
# - The ES8311 remains at its 75% / 0 dB reference while local PCM amplitude # - The ES8311 remains at its 75% / 0 dB reference while local PCM amplitude
# follows a perceptual curve across the displayed 0-100% volume range. # follows a perceptual curve across the displayed 5-100% volume range.
# - Displayed 100% is calibrated to the previous internal 30% sound level, so # - Displayed 100% now matches approximately the previous displayed 30% level.
# the full user-facing range remains useful without exposing excessive volume. # - The previous displayed 5-30% loudness range is spread across the new 5-100% scale.
# - Displayed 0% produces silent PCM; 5-100% spans a smooth 24 dB range. # - Zero volume is unavailable so an alarm cannot be silenced accidentally.
# - The Alarm Clock page provides local Beep, repeating Alarm and Stop hardware tests. # - The Alarm Clock page provides local Beep, repeating Alarm and Stop hardware tests.
# - Beep is a short 4096 Hz electronic tone. # - Beep is a short 6000 Hz electronic tone.
# - Alarm repeats a quick 4096 Hz beep-beep-beep group followed by a pause. # - Alarm repeats a quick 6000 Hz beep-beep-beep group followed by a pause.
# - Speaker tests generate audio locally and do not require Home Assistant or media files. # - Speaker tests generate audio locally and do not require Home Assistant or media files.
#:########################################################################################:# #:########################################################################################:#
# OFFLINE NOTES: # OFFLINE NOTES:
@@ -172,12 +173,12 @@ substitutions:
# Device Naming # Device Naming
device_name: "esp-bedside-panel" device_name: "esp-bedside-panel"
friendly_name: "ESP Bedside Panel" friendly_name: "ESP Bedside Panel"
description_comment: "Guition JC1060P470C_I_W_Y ESP32-P4 bedside panel with four alarms, a 4096 Hz triplet alarm, quiet mapped 0-100% volume and a 24-hour roller time editor. (Layout V1.1)" description_comment: "Guition JC1060P470C_I_W_Y ESP32-P4 bedside panel with four alarms, a 6000 Hz triplet alarm, limited 5-100% volume and a 24-hour roller time editor. (Layout V1.1)"
device_area: "Bedroom" device_area: "Bedroom"
# Project Naming # Project Naming
project_name: "Guition.JC1060P470C_I_W_Y" project_name: "Guition.JC1060P470C_I_W_Y"
project_version: "v1.45" project_version: "v1.46"
# Passwords & Secrets # Passwords & Secrets
api_key: !secret esp-api_key api_key: !secret esp-api_key
@@ -256,21 +257,22 @@ substitutions:
# The ES8311 uses 75% as its 0 dB reference. Keep the codec at that # The ES8311 uses 75% as its 0 dB reference. Keep the codec at that
# reference and apply the user volume to the generated PCM samples. # reference and apply the user volume to the generated PCM samples.
# #
# The display and Home Assistant expose a normal 0-100% range. Internally, # The display and Home Assistant expose 5-100%. The previous displayed
# displayed 100% is calibrated to the previous 30% sound level. Lower user # 5-30% loudness range is stretched across this complete user-facing range,
# settings then follow the configured perceptual attenuation range. # so the new 100% is approximately equal to the old displayed 30%.
alarm_dac_reference_volume: "0.75" alarm_dac_reference_volume: "0.75"
alarm_pcm_max_amplitude: "28000" alarm_pcm_max_amplitude: "28000"
alarm_output_ceiling_percent: "30" alarm_output_ceiling_percent: "30"
alarm_volume_attenuation_db: "24" alarm_volume_attenuation_db: "24"
alarm_previous_ui_min_percent: "5"
alarm_previous_ui_max_percent: "30"
# 4096 Hz is the characteristic electronic-timepiece alarm frequency. # A 6000 Hz bipolar square wave gives a sharper bedside clock character.
# A bipolar square wave gives it the sharper digital-clock character. alarm_beep_frequency_hz: "6000"
alarm_beep_frequency_hz: "4096"
alarm_beep_duration_ms: "120" alarm_beep_duration_ms: "120"
# Default alarm pattern: beep-beep-beep, pause, repeat. # Default alarm pattern: beep-beep-beep, pause, repeat.
alarm_tone_frequency_hz: "4096" alarm_tone_frequency_hz: "6000"
alarm_tone_beep_ms: "100" alarm_tone_beep_ms: "100"
alarm_tone_gap_ms: "80" alarm_tone_gap_ms: "80"
alarm_tone_beeps_per_group: "3" alarm_tone_beeps_per_group: "3"
@@ -1067,7 +1069,7 @@ number:
restore_value: true restore_value: true
initial_value: "${alarm_volume_default}" initial_value: "${alarm_volume_default}"
unit_of_measurement: "%" unit_of_measurement: "%"
min_value: 0 min_value: 5
max_value: 100 max_value: 100
step: 5 step: 5
mode: slider mode: slider
@@ -2466,12 +2468,18 @@ script:
if (isnan(ui_volume)) { if (isnan(ui_volume)) {
ui_volume = ${alarm_volume_default}.0f; ui_volume = ${alarm_volume_default}.0f;
} }
ui_volume = fminf(fmaxf(ui_volume, 0.0f), 100.0f); ui_volume = fminf(fmaxf(ui_volume, 5.0f), 100.0f);
// Stretch the former displayed 5-30% loudness range across the
// new 5-100% control. New 100% therefore equals old 30%.
const float effective_ui_volume =
${alarm_previous_ui_min_percent}.0f +
((ui_volume - 5.0f) / 95.0f) *
(${alarm_previous_ui_max_percent}.0f -
${alarm_previous_ui_min_percent}.0f);
// Displayed 100% equals the previous internal 30% loudness point.
// The full displayed range then spans a perceptual attenuation curve.
float peak_amplitude = 0.0f; float peak_amplitude = 0.0f;
if (ui_volume > 0.0f) { {
const float ceiling_position = const float ceiling_position =
fminf(fmaxf( fminf(fmaxf(
(${alarm_output_ceiling_percent}.0f - 5.0f) / 95.0f, (${alarm_output_ceiling_percent}.0f - 5.0f) / 95.0f,
@@ -2480,7 +2488,8 @@ script:
const float ceiling_attenuation_db = const float ceiling_attenuation_db =
-${alarm_volume_attenuation_db}.0f * -${alarm_volume_attenuation_db}.0f *
(1.0f - ceiling_position); (1.0f - ceiling_position);
const float user_position = ui_volume / 100.0f; const float user_position =
effective_ui_volume / 100.0f;
const float user_attenuation_db = const float user_attenuation_db =
-${alarm_volume_attenuation_db}.0f * -${alarm_volume_attenuation_db}.0f *
(1.0f - user_position); (1.0f - user_position);
@@ -2595,7 +2604,7 @@ script:
return id(alarm_audio_test_active); return id(alarm_audio_test_active);
then: then:
# A classic digital-clock triplet: three short 4096 Hz square-wave # A sharp digital-clock triplet: three short 6000 Hz square-wave
# beeps followed by a longer pause. The direct write loop prevents # beeps followed by a longer pause. The direct write loop prevents
# truncation when the clip is larger than the free ring-buffer area. # truncation when the clip is larger than the free ring-buffer area.
- lambda: |- - lambda: |-
@@ -2619,10 +2628,16 @@ script:
if (isnan(ui_volume)) { if (isnan(ui_volume)) {
ui_volume = ${alarm_volume_default}.0f; ui_volume = ${alarm_volume_default}.0f;
} }
ui_volume = fminf(fmaxf(ui_volume, 0.0f), 100.0f); ui_volume = fminf(fmaxf(ui_volume, 5.0f), 100.0f);
const float effective_ui_volume =
${alarm_previous_ui_min_percent}.0f +
((ui_volume - 5.0f) / 95.0f) *
(${alarm_previous_ui_max_percent}.0f -
${alarm_previous_ui_min_percent}.0f);
float peak_amplitude = 0.0f; float peak_amplitude = 0.0f;
if (ui_volume > 0.0f) { {
const float ceiling_position = const float ceiling_position =
fminf(fmaxf( fminf(fmaxf(
(${alarm_output_ceiling_percent}.0f - 5.0f) / (${alarm_output_ceiling_percent}.0f - 5.0f) /
@@ -2632,7 +2647,8 @@ script:
const float ceiling_attenuation_db = const float ceiling_attenuation_db =
-${alarm_volume_attenuation_db}.0f * -${alarm_volume_attenuation_db}.0f *
(1.0f - ceiling_position); (1.0f - ceiling_position);
const float user_position = ui_volume / 100.0f; const float user_position =
effective_ui_volume / 100.0f;
const float user_attenuation_db = const float user_attenuation_db =
-${alarm_volume_attenuation_db}.0f * -${alarm_volume_attenuation_db}.0f *
(1.0f - user_position); (1.0f - user_position);