dashboard
dashboard copied to clipboard
ESPHome Builder displays VISIT for non web server devices
Version
2025.7.1
What type of installation are you using?
Home Assistant Add-on
Browser
Chrome
What happened?
Since upgrading to 2025.7 devices compiled under 2025.7 show VISIT in the devices status window:
Note that devices compiled with previous version do not show the VISIT button. This means this may be an ESPHome issue rather than a Dashboard issue.
Sample yaml:
esphome:
name: office
esp8266:
board: nodemcuv2
wifi:
ssid:
password:
output_power: 15dB
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid:
password:
captive_portal:
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
- platform: esphome
safe_mode:
How to reproduce
Compile in 2025.7 and upload - visit dashboard.
Expected behavior
Devices without web_server: should not show VISIT.
Relevant log output
Screenshots
Same here.
captive_portal seems to be the culprit. Disabling it makes the "Visit" button disappear.
Yep, agreed, I recently updated to 2025.7.4, and updated all my devices. They all now show the VISIT button, but it leads nowhere. Removing captive_portal removes the VISIT button.
I noted during the logs for compilation, these popped up:
Compiling .pioenvs/glass-cabinet/src/esphome/components/web_server/ota/ota_web_server.cpp.o
Compiling .pioenvs/glass-cabinet/src/esphome/components/web_server_base/web_server_base.cpp.o
web_server_base is required for the captive portal. Do you have ota enabled on the captive portal?
I believe I do have OTA on the captive portal, I just don't have the web server enabled.
This is probably the relevant config section:
ota:
platform: esphome
password: !secret ota_password
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
fast connect: true
ap:
ssid: "Fallback Hotspot"
password: !secret ap_password
captive_portal:
(Note that I copied that code block on my phone so it may not be 100% correct lol)
So the real issue here is that loaded_integrations in the storage json file that the dashboard uses contains web_server because of the captive portal OTA code, which lives under web_server/ota/....
I think we need to rework the loaded_integrations list of items in that json file to not include integrations where only a specidif platform is loaded. We can see the platforms in loaded_platforms.
I think we can make this a bit simpler. web_port appears to only be set when web_server is truely configured