Conversation
4 tasks
balloob
approved these changes
Nov 10, 2025
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes an issue where the VISIT button incorrectly appears for devices that don't have the
web_servercomponent configured, due toloaded_integrationsincludingweb_serverwhen components likecaptive_portalare enabled.Problem
When a device configuration includes
captive_portal:ota.web_serverplatform for its OTA functionalityloaded_integrationsin the storage JSON includesweb_servereven though the user never explicitly configured itloaded_integrationsto determine whether to show the VISIT buttonThis affects all devices compiled with ESPHome 2025.7+ that have
captive_portalenabled but no explicitweb_serverconfiguration.Solution
Changed the VISIT button visibility logic to check the
web_portfield instead of theloaded_integrationsarray.The
web_portproperty in ESPHome core (esphome/core/__init__.py:652-662) checksCONF_WEB_SERVER in self.configrather than relying on integration loading state. This is the source of truth for explicit user configuration:web_port: 80(or other port number) = web server is explicitly configured by userweb_port: null= no web server configured (even ifweb_serverappears inloaded_integrations)This provides a reliable indicator of whether the device has an accessible web interface.
Unit tests were added in esphome/esphome#11811 to prevent regression of the
web_portproperty behavior.Changes
this.device.loaded_integrations?.includes("web_server")tothis.device.web_port != null