DigitalHouses Speedtest — preferred Ookla servers, dual connectivity checks, and performance thresholds

[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
  • amd64 architecture

Installation

Add the DigitalHouses repository to Home Assistant:

Open your Home Assistant instance and show the add App repository dialog with the repository URL pre-filled.

Then:

  1. Open the DigitalHouses repository in the App store.
  2. Select DigitalHouses Speedtest.
  3. Install the App.
  4. Review the configuration.
  5. Start the App.
  6. After the first successful run, enable Start on boot and Watchdog.

Manual repository installation

If the button above does not work:

  1. Open Settings → Apps → App store.
  2. Open the menu in the upper-right corner.
  3. Select Repositories.
  4. Add:
https://github.com/DigitalHouses/home-assistant-apps
  1. 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 DigitalHouses on 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!