Voice Preview Edition - substandard wifi?

Does wifi work well on your device(s)?

I’ve found that the Voice PE’s wifi performance seems to be below par.

I’ve got one sitting next to my desktop PC - which streams Spotify fine via wifi - but using Spotify via Music Assistant on the Voice PE in the same location stutters and then cuts out entirely, making it unusable for music playback.

I don’t know how to check signal strength on a device like the Voice PE but testing ping to the device from my Windows PC shows very high latency. On a typical run the average is 448ms (compared with 108ms on my Samsung Galaxy phone), sometimes over 2 seconds on a packet - with occasional packet loss, something I haven’t seen with any other device on our internal network. I know the Voice PE supports only 2.4GHz but it might help to clarify that the signal is strong enough in this location to receive 5GHz on my PC.

Could this be down to the Voice PE’s software rather than hardware? Is there anything I can adjust to improve things?

There is a big difference between a pc antennae and an esp32. I have it next to several other esp32 wled nodes. The voice pe signal is almost 10db lower.

Thanks @Mikefila. I suppose I’d have to have some skill in electronics (which I don’t) to consider attaching an external antenna to the grove port.

Idk if that is an option with the grove port, I’ve never looked into it. If it’s not an option there is a diy way to add an external antenna to an esp32.

It seems this is a hardware limitation but, sadly, I can’t see a simple external antenna with a grove port interface advertised on line. I think this would solve the problem.

As I said in another comment, I’m not an electronics expert (or a wizard with the soldering iron), otherwise I might risk trying a DIY solution.

It might be worth considering attacking the problem from the other direction and improving the WiFi strength at that location. A good repeater halfway between it and the router, or setting up a mesh network, or something. Just spitballing ideas.

Thanks @JonnyG. I already have a Mesh system and the satellite on the floor below gives me a good enough signal to get 5GHz (known for its shorter range) on my other devices. I realise that the Voice PE only supports 2.4, but had thought at that frequency the chip would perform better than it seems to.

hi, i am having similar issues, playing music from music assistant stutters and then cuts out randomly, my device is next the to the router and the signal strength is excellent (-26 db) maybe its something else and not the WIFI performance ?

They released a patch yesterday that says it has audio playback fixes in it. What firmware is your VPE on?

I have two PE devices and according to the information page (the subpage for each device), one of them is on firmware 25.1.0 and the other on 25.1.1. (I’m on the latest HA core available - currently 2025.2.5.)

I thought updating was meant to be automatic, so I guess this isn’t working. Any ideas on how to force an update?

I know an old post but thought I’d answer your question in case you are still struggling. I found this after having issues with my VPE wifi signal. The device is so close to the AP but still struggling.
Anyway, one of the ways to force a new version is to re-flash the firmware of the device. The down side is you need to set it up again in HA but that isn’t a complex process (after I’ve done it about 20 times in the last couple months, thinking I had more fundamental issues but it looks like it may just be the wifi signal… my bad for missing the basics). Anyway, go to the site below and follow the instructions.
https://support.nabucasa.com/hc/en-us/articles/25800241218717-Reinstalling-the-firmware-on-Home-Assistant-Voice-Preview-Edition

This isn’t a solution, but might provide more info to help debug wi-fi issue.

I’ve been looking at wi-fi signal with my other ESP32 devices. When testing in my study they have trouble connecting to wi-fi … anyway I modified my VoicePE’s yaml to add my own _common_wifi.yaml with extra debugging fields, some of which you might find useful to provide extra info …

substitutions:
  name: ha-voice-pe-0a4050
  friendly_name: HA Voice PE 0a4050
#v Dons additional parameters
  devicename:     $name
  deviceIP: 88                        # last octet of static IP address
  update_interval_network: "10 min"   # How often to report network quality values
#^

packages:
  Nabu Casa.Home Assistant Voice PE: github://esphome/home-assistant-voice-pe/home-assistant-voice.yaml
#v
  common_wifi: !include _common_wifi.yaml
#^

esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}

#api:
#  encryption:
#    key: HgoRlyg+sp+PXuiZ0h8fcSCxq+HxVp9hvmCAPwzMnW8=

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

and of course you’ll want to know the _common_wifi.yaml

###########################################################
#
# Start with the Wi-fi connection
#
#   Sept 2025 Added more sensors, esp for debugginhg which WAP
#             a device has connected to.  prefix all with wifi-
#
#  As at Sept 2025 ESPHome still DOES NOT SUPPORT WI-FI ROAMING,
#    When an ESPHome device boots up it scans for the allowable 
#    network (SSID) with highest signal strength. Having made 
#    the connection it does not check for a stronger signal, 
#    even though a stronger signal may later become available. 
#
###########################################################

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.1.${deviceIP}
    gateway: 192.168.1.1
    subnet: 255.255.255.0
#  fast_connect: True
  output_power: 10.5      # 8.5-20.5 reduce output power MAY improve Wi-fi in study
##### add some debugging - will only be seen if USB debugging
#  on_connect:
#    then:
#      lambda: |-
#        ESP_LOGI("TEST", "#####     >>>>>>>>>>> WIFI CONNECT");
#  on_disconnect:
#    then:
#      lambda: |-
#        ESP_LOGI("TEST", "#####     >>>>>>>>>>> WIFI DISCONNECT");

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "$devicename Fallback"
    password: !secret wifi_ap_password

ota:
  platform: esphome
  password: !secret esphome_ota_password

captive_portal:

# this displays the device's status at http:IP_Address
web_server:
  port: 80

# Enable Home Assistant API
api:
  encryption:
    key: !secret esphome_api_encryption
##### add some debugging 
#  on_client_connected:
#    - logger.log:
#        format: "#####     >>>>>>>>>>  API Client '%s' connected with IP %s"
#        args: ["client_info.c_str()", "client_address.c_str()"]
#  on_client_disconnected:
#    - logger.log: "#####     >>>>>>>>>> API client disconnected!"

###########################################################
#
#   Add some common sensors - wi-fi signal strength, 
#       uptime, ESPHome version & compile date/time
#
###########################################################

sensor:
  - platform: wifi_signal                 # Reports the WiFi signal strength/RSSI in dB
    name: $devicename "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: $update_interval_network
    entity_category: "diagnostic"

  - platform: copy                        # Reports the WiFi signal strength in %
    source_id: wifi_signal_db
    name: $devicename "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"
    device_class: ""

  - platform: template
    id: wifi_channel
    name: $devicename "Wifi connected channel"
    entity_category: "diagnostic"

  # human readable uptime sensor output to the text sensor 
  - platform: uptime
    id: uptime_sensor
    name: $devicename Uptime
    type: seconds
    update_interval: $update_interval_network

text_sensor:
  - platform: version
    name: $devicename ESPHome Version
    hide_timestamp: False

  - platform: template
    id: wifi_node
    name: $devicename Wifi connected to WAP
    update_interval: $update_interval_network

  - platform: wifi_info
    ip_address:
      name: $devicename Wifi IP Address
    mac_address:
      name: $devicename Wifi Mac Address
    ssid:
      name: $devicename Wifi Connected SSID
    scan_results:
      name: $devicename Wifi Latest Scan Results
      update_interval: $update_interval_network
    dns_address:
      name: $devicename Wifi DNS Address
    bssid:
      id: esp_connected_bssid
      name: $devicename Wifi Connected BSSID
      on_value:
        then:
          # lookup friendly name indicating which WAP we connected to
          - lambda: |-
              if ( x == "A0:36:BC:0E:29:38") {
                id(wifi_node).publish_state("LivingRoom");    // ASUS RT-AX55    192.168.1.1
                id(wifi_channel).publish_state(8);
              } else if ( x == "30:5A:3A:C5:B4:20") {
                id(wifi_node).publish_state("Laundry");       // ASUS RT-68U     192.168.1.2
                id(wifi_channel).publish_state(3);
              } else if ( x == "64:66:B3:ED:08:C4") {
                id(wifi_node).publish_state("Study");         // TP-Link WR743   192.168.1.4
                id(wifi_channel).publish_state(13);
              } else {
                id(wifi_node).publish_state("Unknown");
                id(wifi_channel).publish_state(-99);
              }

# get the current time from the Home Assistant server
time:
  - platform: homeassistant
    id: homeassistant_time
    update_interval: "12h"         # update from Home Assistant every 12 hours

binary_sensor:
  - platform: status
    name: $devicename "Status"

It doesn’t really help with Voice PE … but if you connect an ESP32 via serial or USB you can see debug logs while the ESP is trying to establish the wi-fi connection.