[App] DigitalHouses Speedtest — preferred Ookla servers, dual connectivity checks, and performance thresholds
Hi everyone!
I would like to share DigitalHouses Speedtest, a Home Assistant App that runs internet speed tests using the official Ookla Speedtest CLI and automatically creates all entities through MQTT Device Discovery.
Why I created this App
Before developing this App, I used the built-in Speedtest.net integration together with a separate ping sensor to monitor my internet connection.
In my installation, automatic server selection sometimes sent tests to distant servers, including servers in another country. In some cases, a server in Poland was selected even though I am located in Kazakhstan.
As a result, download and upload measurements could vary significantly between tests and did not always represent the actual performance of my connection to local providers.
I would sometimes receive a Home Assistant notification saying that my internet speed had dropped, but a manual Speedtest on my computer would show normal results. The problem was often not the internet connection itself, but the use of a different server or region.
I also wanted to use several servers operated by local providers in a defined priority order. If the first server was unavailable, the test should try the next one and optionally fall back to automatic Ookla server selection.
Separately, I used a ping check against a single Google address to determine whether the internet connection was available. Occasionally, that address would briefly appear unreachable even though the internet connection was still working. Using a single endpoint as the only source of internet availability was not reliable enough for my automations.
That is why I created DigitalHouses Speedtest.
What the App provides
Official Ookla Speedtest CLI
The App uses the official Ookla CLI and publishes the following data to Home Assistant:
- Download speed
- Upload speed
- Ping
- Jitter
- Packet loss, when returned by the selected Ookla server
- Internet service provider
- Public external IP address
- Selected server and server ID
- Ookla result URL
The external IP address and ISP information are updated after each successful test.
Some Ookla servers do not return packet-loss information. In that case, the Packet loss sensor shows unknown; this does not mean 0% packet loss.
Multiple preferred servers
You can configure one or several Ookla server IDs in priority order:
server_ids:
- 68000
- 5818
- 54491
The App tries the configured servers sequentially and stops after the first successful result.
If all preferred servers fail and automatic_server_fallback is enabled, the App performs one additional test using automatic Ookla server selection.
When server_ids is empty, automatic server selection is used immediately.
Nearby Ookla server discovery
The App retrieves the nearby servers returned by the official:
speedtest --servers
command.
The available-server entity includes:
- Server ID
- Server operator
- City
- Country
The server list can be refreshed from Home Assistant using a dedicated button. The required server IDs can then be copied into the App configuration.
This is the nearby-server list returned by the official Ookla CLI, not a complete directory of every Speedtest server in the country.
Two independent connectivity checks
The App creates two connectivity binary sensors:
- Google DNS connectivity —
8.8.8.8 - Cloudflare DNS connectivity —
1.1.1.1
These are ICMP reachability checks against the two IP addresses. They do not perform DNS queries and therefore do not verify DNS resolution itself.
The internet connection is treated as available when at least one of the two endpoints responds.
If neither endpoint responds, the scheduled Speedtest is skipped instead of starting a bandwidth-intensive test while the connection appears to be unavailable.
This avoids relying on a single connectivity endpoint.
Manual and scheduled tests
A speed test can be started manually from Home Assistant or run automatically on a schedule.
The periodic test interval can be changed directly from Home Assistant:
- From 5 to 720 minutes
- 5-minute UI step
- No App restart required
- Changing the interval immediately starts a new countdown to the next scheduled test
Automatic tests can also be completely disabled in the App configuration.
Configurable performance thresholds
The App creates three configurable Number entities:
- Minimum download speed
- Minimum upload speed
- Maximum ping
These values are used to calculate the following binary sensors:
- Low download speed
- Low upload speed
- High ping
- Internet performance problem — an aggregate sensor for any of the three conditions
The comparison rules are:
Low download speed = ON when download < minimum download
Low upload speed = ON when upload < minimum upload
High ping = ON when ping > maximum ping
A result equal to the configured threshold is considered normal.
Thresholds can be changed directly in Home Assistant without restarting the App. The current problem sensors are immediately recalculated using the latest successful, non-expired result.
The App does not send notifications itself. The binary sensors can be used in any Home Assistant notification or automation.
Recent successful results
The App stores between 5 and 50 recent successful tests.
Each history entry contains:
- Date and time
- Selected server and server ID
- Download
- Upload
- Ping
- Jitter
- Packet loss, when available
- Ookla result URL
- Thresholds that were active at the time of the test
- Low download, low upload, and high ping flags
- Aggregate performance-problem status
The external IP address is intentionally not copied into the history.
A failed test or missing connectivity:
- Does not overwrite the latest successful measurements
- Does not create a new history entry
- Does not automatically create a false low-speed warning
- Does not incorrectly clear an existing performance problem
The previous successful result remains valid until the configured expire_after_seconds period ends. After expiration, measurement and performance-problem entities become unavailable until the next successful test.
What appears in Home Assistant
The App creates one MQTT device named Internet Speedtest.
It contains:
- Download, Upload, and Ping
- Jitter and Packet loss
- Internet provider and External IP
- Speedtest server, server ID, and result URL
- Google DNS connectivity
- Cloudflare DNS connectivity
- Three individual performance-problem binary sensors
- Aggregate Internet performance problem
- Manual Run speed test button
- Refresh server list button
- Configurable periodic test interval
- Three configurable performance thresholds
- Nearby Ookla server list
- Recent successful results
- Diagnostic entities and timestamps
No MQTT sensors or template entities need to be created manually.
Requirements
- Home Assistant OS, or a supervised Home Assistant installation that provides Apps support
- MQTT broker exposed through Home Assistant Supervisor
amd64architecture
Installation
Add the DigitalHouses repository to Home Assistant:
Then:
- Open the DigitalHouses repository in the App store.
- Select DigitalHouses Speedtest.
- Install the App.
- Review the configuration.
- Start the App.
- After the first successful run, enable Start on boot and Watchdog.
Manual repository installation
If the button above does not work:
- Open Settings → Apps → App store.
- Open the menu in the upper-right corner.
- Select Repositories.
- Add:
https://github.com/DigitalHouses/home-assistant-apps
- Find and install DigitalHouses Speedtest.
The repository also contains:
- Full configuration documentation
- Recorder package example
- Ready-to-use Lovelace dashboard
- Dashboard built only with standard Home Assistant cards
Looking for users and feedback
I am currently looking for users who can test the App:
- With different internet service providers
- In different countries and cities
- On connections with different bandwidths
- With automatic server selection
- With several preferred local server IDs
- When individual Ookla servers are temporarily unavailable
- With unstable internet connections
- With different download, upload, and ping thresholds
Feedback about installation, server selection, scheduled-test stability, entity naming, the Home Assistant UI, and possible automation use cases would be very helpful.
When sharing screenshots or logs, please remove MQTT credentials, access tokens, public IP addresses, and unique Ookla result URLs.
Links
GitHub repository
Questions, user experience, and examples
Confirmed bugs and feature requests
If you find the project useful, please consider giving the repository a Star on GitHub. It helps other Home Assistant users discover the App.
DigitalHouses Speedtest is free and independently developed. You can optionally support continued development, testing, maintenance, and documentation through Ko-fi:
Support is entirely optional. All public features remain available to everyone.
This is an independent community project and is not affiliated with Home Assistant or Ookla.
Thank you to everyone who tests the App and shares feedback!
