ESP Home Projekt AI Türgong

Moin zusammen,

wie das manchmal in der Smart-Home-Welt so ist, kommt man auf etwas ungewöhnliche Ideen.

Da meine Türklingel kaputtgegangen ist, wollte ich mir kurzerhand etwas Eigenes basteln: einen Türgong, der nicht nur ein Geräusch macht, sondern auch per KI mit mir spricht. Dazu verwende ich:

• einen ESP32-S3-AI mit Mikrofon und Lautsprecher •

einen kleinen WS2812-LED-Ring

Leider bekomme ich das Ganze aktuell nicht zum Laufen. Beim Code für den Sprachassistenten habe ich mich am fertigen ESPHome-Projekt für den M5Stack orientiert.

Die Ansteuerung des LED-Rings habe ich zusätzlich in Kombination mit der AI eingebaut. Der ESP wird von Home Assistant korrekt als Sprachassistent erkannt. Allerdings gibt es folgende Probleme:

• Audioausgabe über den Lautsprecher nur als Mediaplayer

• keine Reaktion vom Mikrofon

• keine LED-Anzeige am WS2812-Ring I

ch vermute also, dass entweder etwas Grundlegendes fehlt oder ein Fehler im Code steckt. Könnte bitte jemand einen Blick darauf werfen und mir einen Hinweis geben? Vielen Dank im Voraus!

captive_portal:

##########################################
# I²S Audio Bus 0 - Mikrofon (RX)
##########################################
i2s_audio:
  - id: i2s_in
    i2s_lrclk_pin: GPIO18
    i2s_bclk_pin: GPIO17

##########################################
# I²S Audio Bus 1 - Lautsprecher (TX)
##########################################
  - id: i2s_out
    i2s_lrclk_pin: GPIO7
    i2s_bclk_pin: GPIO8

##########################################
# Mikrofon SPH0645
##########################################
microphone:
  - platform: i2s_audio
    id: echo_microphone
    adc_type: external
    i2s_din_pin: GPIO16
    i2s_audio_id: i2s_in
    sample_rate: 16000
    bits_per_sample: 32bit
    pdm: false

##########################################
# Lautsprecher MAX98357A
##########################################
speaker:
  - platform: i2s_audio
    id: echo_speaker
    i2s_dout_pin: GPIO15
    i2s_audio_id: i2s_out
    dac_type: external
    bits_per_sample: 16bit
    sample_rate: 16000

    ##########################################
# Media Player
##########################################
media_player:
  - platform: speaker
    name: TürgongAI Player
    id: echo_media_player
    announcement_pipeline:
      speaker: echo_speaker
      format: WAV
    codec_support_enabled: false
    buffer_size: 6000
    volume_min: 0.4


##########################################
# WS2812B LED-Ring
##########################################
light:
  - platform: esp32_rmt_led_strip
    id: led
    name: TürgongAI LED
    pin: GPIO21
    default_transition_length: 0s
    chipset: WS2812
    num_leds: 8
    rgb_order: GRB
    #rmt_channel: 1 
    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%

##########################################
# Voice Assistant
##########################################
voice_assistant:
  id: va
  microphone: echo_microphone
  speaker: echo_speaker
  noise_suppression_level: 2
  auto_gain: 31dBFS
  volume_multiplier: 2.0

  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: echo_speaker
    - script.execute: reset_led

  on_error:
    - light.turn_on:
        id: led
        red: 100%
        green: 0%
        blue: 0%
        brightness: 100%
        effect: none
    - delay: 2s
    - script.execute: reset_led

##########################################
# Micro Wake Word
##########################################
micro_wake_word:
  on_wake_word_detected:
    - voice_assistant.start:
        wake_word: !lambda return wake_word;
  vad:
  models:
    - model: okay_nabu

##########################################
# Scripts
##########################################
script:
  - id: reset_led
    then:
      - light.turn_off: led

##########################################
# Test-Schalter
##########################################
switch:
  - platform: template
    name: "Test LED"
    turn_on_action:
      - light.turn_on:
          id: led
          red: 100%
          green: 0%
          blue: 0%
          brightness: 100%
    turn_off_action:
      - light.turn_off: led

binary_sensor:
  - platform: status
    name: "TürgongAI Status"