Created
January 27, 2024 17:57
-
-
Save amorfinvdev/a93556503e9ce7456287e6b1067a2ab5 to your computer and use it in GitHub Desktop.
godice-voiceassistant.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
substitutions: | |
name: m5stack-atom-echo-1017b0 | |
friendly_name: dice_voiceassistant | |
dashboard_import: | |
package_import_url: github://esphome/firmware/voice-assistant/m5stack-atom-echo.yaml@main | |
esphome: | |
name: ${name} | |
friendly_name: ${friendly_name} | |
name_add_mac_suffix: false | |
project: | |
name: m5stack.atom-echo-voice-assistant | |
version: "1.0" | |
min_version: 2023.11.1 | |
esp32: | |
board: m5stack-atom | |
framework: | |
type: esp-idf | |
logger: | |
api: | |
ota: | |
wifi: | |
ssid: !secret wifi_ssid | |
password: !secret wifi_password | |
on_connect: | |
- delay: 5s # Gives time for improv results to be transmitted | |
- ble.disable: | |
on_disconnect: | |
- ble.enable: | |
improv_serial: | |
esp32_improv: | |
authorizer: none | |
button: | |
- platform: factory_reset | |
id: factory_reset_btn | |
name: Factory reset | |
i2s_audio: | |
i2s_lrclk_pin: GPIO33 | |
i2s_bclk_pin: GPIO19 | |
microphone: | |
- platform: i2s_audio | |
id: echo_microphone | |
i2s_din_pin: GPIO23 | |
adc_type: external | |
pdm: true | |
speaker: | |
- platform: i2s_audio | |
id: echo_speaker | |
i2s_dout_pin: GPIO22 | |
dac_type: external | |
mode: mono | |
voice_assistant: | |
id: va | |
microphone: echo_microphone | |
speaker: echo_speaker | |
noise_suppression_level: 2 | |
auto_gain: 31dBFS | |
volume_multiplier: 2.0 | |
vad_threshold: 3 | |
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 | |
binary_sensor: | |
- platform: gpio | |
pin: | |
number: GPIO39 | |
inverted: true | |
name: Button | |
disabled_by_default: true | |
entity_category: diagnostic | |
id: echo_button | |
on_multi_click: | |
- timing: | |
- ON for at least 250ms | |
- OFF for at least 50ms | |
then: | |
- if: | |
condition: | |
switch.is_on: use_wake_word | |
then: | |
- if: | |
condition: voice_assistant.is_running | |
then: | |
- voice_assistant.stop: | |
- script.execute: reset_led | |
else: | |
- voice_assistant.start: | |
else: | |
- voice_assistant.stop | |
- delay: 1s | |
- script.execute: reset_led | |
- script.wait: reset_led | |
- voice_assistant.start_continuous: | |
- timing: | |
- ON for at least 10s | |
then: | |
- button.press: factory_reset_btn | |
# dice selection | |
select: | |
- platform: template | |
entity_category: config | |
name: Dice cutoff | |
id: dice_cutoff | |
options: | |
- "1" | |
- "2" | |
- "3" | |
- "4" | |
- "5" | |
- "6" | |
initial_option: "3" | |
optimistic: true | |
set_action: | |
- logger.log: | |
format: "Chosen cutoff: %s" | |
args: ["x.c_str()"] | |
text_sensor: | |
- platform: homeassistant | |
internal: True | |
id: dice_state | |
entity_id: sensor.dice_bleclient_dice_state | |
on_value: | |
then: | |
- if: | |
condition: | |
lambda: |- | |
return id(dice_state).state >= id(dice_cutoff).state; | |
then: | |
- if: | |
condition: | |
not: voice_assistant.is_running | |
then: | |
- voice_assistant.start: | |
light: | |
- platform: esp32_rmt_led_strip | |
id: led | |
name: None | |
disabled_by_default: true | |
entity_category: config | |
pin: GPIO27 | |
default_transition_length: 0s | |
chipset: SK6812 | |
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% | |
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 | |
red: 100% | |
green: 89% | |
blue: 71% | |
brightness: 60% | |
effect: none | |
else: | |
- light.turn_off: 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(va).set_use_wake_word(true); | |
- if: | |
condition: | |
not: | |
- voice_assistant.is_running | |
then: | |
- voice_assistant.start_continuous | |
- script.execute: reset_led | |
- switch.turn_off: use_dice | |
on_turn_off: | |
- voice_assistant.stop | |
- lambda: id(va).set_use_wake_word(false); | |
- script.execute: reset_led | |
- 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 | |
- platform: template | |
name: Use dice throw | |
id: use_dice | |
optimistic: true | |
entity_category: config | |
restore_mode: RESTORE_DEFAULT_OFF | |
on_turn_on: | |
- switch.turn_off: use_wake_word | |
external_components: | |
- source: github://pr#5230 | |
components: | |
- esp_adf | |
refresh: 0s | |
esp_adf: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Voice assistant adapted from ESPHOME ready made projects. See here.