Satellite ESP32 Home Assistant Assist

Hello,

Ne sachant que faire par ce beau temps breton :sweat_drops:, j’ai fouillé dans ma malle à bazar, espérant y dénicher quelques composants pour attaquer un petit montage DIY flash.

Au menu des trouvailles, un esp32 mini, un microphone INMP441, et un ring led WS2812, vestiges d’une ancienne installation WLED audio-reactif.

Comme par coïncidence, déjà équipé d’un ANKER S330 pour Assist-Microphone, d’un RPI3 avec hat respeaker 4 mic pour HomeAssistant-Satellite, c’est tout ce qu’il ma fallait pour débuter avec ESPHome et créer un 2ème satellite pour Assist mais sur base d’ESP32.
N’ayant ni haut-parleur ni DAC-Amplifier sous la main, ce sera donc sans retour TTS, mais avec retour d’état sur le ring.

ESPHome étant très bien documenté et en me basant sur les nombreux exemples disponibles , il ne m’a pas fallut longtemps pour avoir quelques chose de fonctionnel et plutôt sympa (reste à lui créer un bel emballage :wink: )
Seul défaut, l’INMP441 dont je dispose n’est plus au top au niveau sensibilité/portée, il a pris une claque pendant son stockage , il sera rapidement remplacé par un ics-43434.

Donc, pour ceux qui veulent tester , voici le yaml pour la conception de ce satellite.
A noter que lorsque le wakeword est désactivé, on peut gérer la ring led WS2812 indépendamment.

esphome:
  name: satellite1
  friendly_name: Satellite1
  on_boot:
    - priority: -100
      then:
        - wait_until: api.connected
        - delay: 1s
        - voice_assistant.start_continuous:

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "XXXXXXXXX"

ota:
  password: "XXXXXXXXX"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Test Fallback Hotspot"
    password: "XXXXXXX"

captive_portal:




light:
  - platform: neopixelbus
    variant: WS2812
    pin: GPIO16
    num_leds: 16
    type: GRB
    name: "Neopixel Light"
    id: led
    effects:
      - pulse:
          name: Pulse
          transition_length: 0.5s
          update_interval: 0.5s
          min_brightness: 0%
          max_brightness: 100%
      - addressable_scan:
          name: Scan
          move_interval: 50ms
          scan_width: 4

i2s_audio:
  - id: i2s_in
    i2s_lrclk_pin: GPIO25
    i2s_bclk_pin: GPIO32

microphone:
  - platform: i2s_audio
    adc_type: external
    pdm: false
    id: mic_i2s
    channel: left
    bits_per_sample: 32bit
    i2s_audio_id: i2s_in
    i2s_din_pin: GPIO33


voice_assistant:
  id: va
  microphone: mic_i2s
  use_wake_word: true

  
  on_listening:
    - light.turn_on:
        id: led
        blue: 100%
        red: 0%
        green: 0%
        brightness: 100%
        effect: Scan

  on_tts_start:
    - light.turn_on:
        id: led
        blue: 0%
        red: 100%
        green: 0%
        brightness: 100%
        effect: Pulse

  on_end:
    - delay: 500ms
    - 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
   

    on_turn_off:
      - voice_assistant.stop
      - lambda: id(va).set_use_wake_word(false);

Amusez-vous bien :smiley:

@+

1 « J'aime »

Salut,

j’ai regardé en partie la vidéo de HA qui parlait de l’année de la voix, partie 4.
Et j’ai bien Assist commence à être plutôt pas mal!
En ajoutant la wake word ça bientôt pas mal concurrencer Alexa & co. en tous cas pour la domotique.

1 « J'aime »