177 lines
6.3 KiB
YAML
177 lines
6.3 KiB
YAML
####################################################################################################
|
|
##### TX Ultimate Easy for ESPHome #####
|
|
##### Repository: https://github.com/edwardtfn/TX-Ultimate-Easy #####
|
|
####################################################################################################
|
|
##### Purpose: ESPHome - Add-on - Speaker #####
|
|
####################################################################################################
|
|
##### Author: edwardtfn - https://github.com/edwardtfn - https://buymeacoffee.com/edwardfirmo #####
|
|
####################################################################################################
|
|
##### NOTE: #####
|
|
##### - Make changes ONLY if absolutely necessary and you have the required knowledge. #####
|
|
##### - For normal system use, modifications to this file are NOT required. #####
|
|
####################################################################################################
|
|
---
|
|
substitutions:
|
|
# RTTTL format: name:d=duration,o=octave,b=tempo:notes
|
|
# d=32 (32nd note), o=5 (octave 5), b=100 (tempo 100)
|
|
tone_volume_change: "scale_up:d=32,o=5,b=100:c,c#,d#,e,f#,g#,a#,b" # Use "none" to disable sound
|
|
|
|
click_sound: |-
|
|
[
|
|
0x01,0x02,0x04,0x06,0x07,0x08,0x08,0x06,0x01,0xFA,0xF4,0xEF,0xEE,0xF1,0xF7,0xFF,0x07,0x0E,
|
|
0x11,0x11,0x10,0x0C,0x06,0xFF,0xF8,0xF1,0xEC,0xEA,0xEC,0xF2,0xF9,0xFF,0x05,0x0A,0x10,0x14,
|
|
0x17,0x17,0x14,0x0B,0xFD,0xED,0xE0,0xD9,0xDB,0xE6,0xF7,0x0A,0x19,0x20,0x1E,0x14,0x05,0xF4,
|
|
0xE5,0xDF,0xE4,0xF4,0x0C,0x24,0x36,0x3D,0x35,0x20,0xFF,0xDD,0xC0,0xAE,0xA9,0xB0,0xC4,0xE0,
|
|
0x03,0x26,0x48,0x62,0x70,0x6D,0x59,0x35,0x08,0xD8,0xAC,0x8D,0x80,0x85,0x9C,0xC1,0xF0,0x21,
|
|
0x4E,0x6F,0x7F,0x7A,0x63,0x3D,0x0F,0xE0,0xB7,0x9B,0x90,0x96,0xAC,0xCE,0xF6,0x1D,0x3C,0x50,
|
|
0x55,0x4D,0x3A,0x20,0x04,0xEC,0xD8,0xCC,0xC9,0xCD,0xD8,0xE8,0xF9,0x0A,0x17,0x1F,0x20,0x1C,
|
|
0x12,0x07,0xFC,0xF2,0xEC,0xEB,0xED,0xF3,0xFA,0x02,0x0A,0x10,0x12,0x12,0x0E,0x07,0xFE,0xF5,
|
|
0xED,0xEA,0xEB,0xEF,0xF7,0x00,0x0A,0x10,0x13,0x12,0x0F,0x09,0x02,0xFB,0xF5,0xF3,0xF2,0xF3,
|
|
0xF6,0xFB,0xFF,0x03,0x05,0x07,0x08,0x07,0x05,0x03,0x01,0xFF,0xFE,0xFC,0xFB,0xFB,0xFC,0xFC,
|
|
0xFD,0xFE,0xFF,0x00,0x01,0x02,0x02,0x01
|
|
]
|
|
|
|
packages:
|
|
core_hw_audio: !include TX-Ultimate-Easy-ESPHome_core_hw_audio.yaml
|
|
|
|
api:
|
|
actions:
|
|
- action: rtttl_play
|
|
variables:
|
|
# The RTTTL string for the melody to be played.
|
|
# It should follow the RTTTL format, including the melody's name,
|
|
# default settings, and a sequence of notes.
|
|
tone: string
|
|
then:
|
|
- lambda: |-
|
|
rtttl_speaker->stop();
|
|
if (rtttl_speaker_gain->state > 0) {
|
|
ESP_LOGI("api", "Play tone: '%s'", tone.c_str());
|
|
rtttl_speaker->play(tone.c_str());
|
|
}
|
|
|
|
esphome:
|
|
platformio_options:
|
|
build_flags:
|
|
- -D TX_ULTIMATE_EASY_ADDON_SPEAKER
|
|
|
|
number:
|
|
- id: rtttl_speaker_gain
|
|
name: Sound - Volume
|
|
platform: template
|
|
max_value: 100
|
|
min_value: 0
|
|
step: 1
|
|
initial_value: 100
|
|
unit_of_measurement: "%"
|
|
internal: false
|
|
disabled_by_default: true
|
|
entity_category: config
|
|
device_class: sound_pressure
|
|
restore_value: true
|
|
optimistic: true
|
|
set_action:
|
|
then:
|
|
- lambda: |-
|
|
rtttl_speaker->set_gain((100-(x/10.0f))/100.0f);
|
|
std::string tone_volume_change = "${tone_volume_change}";
|
|
// Play sound if tone_volume_change is not "none"
|
|
if (x > 0 and !tone_volume_change.empty() and tone_volume_change != "none")
|
|
rtttl_speaker->play(tone_volume_change);
|
|
rtttl_speaker->dump_config();
|
|
|
|
rtttl:
|
|
- id: rtttl_speaker
|
|
speaker: speaker_embedded
|
|
|
|
script:
|
|
- id: !extend dump_config
|
|
then:
|
|
- lambda: |-
|
|
// Check for requirements
|
|
#if !defined(TX_ULTIMATE_EASY_CORE)
|
|
#error "The package TX-Ultimate-Easy-ESPHome_core.yaml is required."
|
|
#endif
|
|
#if !defined(TX_ULTIMATE_EASY_CORE_HW_AUDIO)
|
|
#error "The package TX-Ultimate-Easy-ESPHome_core_hw_audio.yaml is required."
|
|
#endif
|
|
|
|
// Identify itself
|
|
ESP_LOGCONFIG("addon_speaker", "Add-on Speaker installed");
|
|
|
|
- id: speaker_play_click
|
|
then:
|
|
- if:
|
|
condition:
|
|
not:
|
|
- speaker.is_playing: speaker_embedded
|
|
then:
|
|
- speaker.play:
|
|
id: speaker_embedded
|
|
data: !lambda return std::vector<uint8_t>(${click_sound});
|
|
- wait_until:
|
|
condition:
|
|
not:
|
|
- speaker.is_playing: speaker_embedded
|
|
- speaker.stop: speaker_embedded
|
|
|
|
- id: !extend touch_on_multi_touch_release
|
|
then:
|
|
- script.execute: touch_on_multi_touch_release_speaker
|
|
|
|
- id: touch_on_multi_touch_release_speaker
|
|
mode: restart
|
|
then:
|
|
- lambda: |-
|
|
if (sl_touch_speaker_feedback->state != "Disabled")
|
|
vibrate->execute();
|
|
|
|
- id: !extend touch_on_press
|
|
then:
|
|
- script.execute: touch_on_press_speaker
|
|
|
|
- id: touch_on_press_speaker
|
|
mode: restart
|
|
then:
|
|
- lambda: |-
|
|
if (sl_touch_speaker_feedback->state == "On press" or sl_touch_speaker_feedback->state == "Always")
|
|
vibrate->execute();
|
|
|
|
- id: !extend touch_on_release
|
|
then:
|
|
- script.execute: touch_on_release_speaker
|
|
|
|
- id: touch_on_release_speaker
|
|
mode: restart
|
|
then:
|
|
- lambda: |-
|
|
if (sl_touch_speaker_feedback->state == "On release" or sl_touch_speaker_feedback->state == "Always")
|
|
vibrate->execute();
|
|
|
|
select:
|
|
- id: sl_touch_speaker_feedback
|
|
name: Touch - Speaker feedback
|
|
platform: template
|
|
options:
|
|
- "Disabled"
|
|
- "On press"
|
|
- "On release"
|
|
- "Always"
|
|
initial_option: "Disabled"
|
|
optimistic: true
|
|
restore_value: true
|
|
internal: false
|
|
entity_category: config
|
|
disabled_by_default: false
|
|
icon: mdi:vibrate
|
|
|
|
speaker:
|
|
- id: speaker_embedded
|
|
platform: i2s_audio
|
|
dac_type: external
|
|
i2s_dout_pin: GPIO15
|
|
i2s_audio_id: if_i2s_audio
|
|
i2s_comm_fmt: stand_msb
|
|
channel: mono
|
|
...
|