ookla-speedtest-mqtt

ookla-speedtest-mqtt

Docker app from ccmpbll's Repository

Overview

A simple container designed to send Ookla speedtest results over MQTT.

ookla-speedtest-mqtt

Image Build Status Docker Image Size Docker Pulls License

A simple container designed to send JSON formatted Ookla speed test results over MQTT. Uses Ookla's Speedtest CLI tool.

Required environment variables:

MQTT_SERVER: IP address of MQTT server

MQTT_TOPIC: Topic for speed test results

CRON: Cron schedule expression - "0 * * * *" - define how often tests are run

TZ: Set timezone - Uses standard tz database format - America/New_York

Optional environment variables:

SERVER_ID: Specify a server using its numeric ID

MQTT_USER: MQTT username

MQTT_PASS: MQTT password

Example:

docker run -d -e MQTT_TOPIC='ookla-speedtest/results' -e MQTT_SERVER_='192.168.1.10' -e CRON='0 * * * *' -e TZ='America/New_York' ccmpbll/ookla-speedtest-mqtt:latest

Telegraf Config Example:

I used Telegraf to get this data into an InfluxDB instance. Below is an excerpt from my Telegraf config that demonstrates how I accomplish this. If there is a better way to do this, I am very open to suggestions.

[[inputs.mqtt_consumer]]
        name_override = "<WHAT YOU WANT THE INFLUXDB TABLE TO BE CALLED>"
        servers = ["tcp://<YOUR MQTT SERVER IP>:1883"]
        topics = ["<YOUR MQTT TOPIC>"]
        data_format = "json_v2"
[[inputs.mqtt_consumer.json_v2]]
[[inputs.mqtt_consumer.json_v2.field]]
        path = "ping.jitter"
        rename = "ping_jitter"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "ping.latency"
        rename = "ping_latency"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "ping.low"
        rename = "ping_low"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "ping.high"
        rename = "ping_high"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "download.bandwidth"
        rename = "download_bandwidth"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "download.latency.iqm"
        rename = "download_latency_iqm"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "download.latency.low"
        rename = "download_latency_low"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "download.latency.high"
        rename = "download_latency_high"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "download.latency.jitter"
        rename = "download_latency_jitter"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "upload.bandwidth"
        rename = "upload_bandwidth"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "upload.latency.iqm"
        rename = "upload_latency_iqm"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "upload.latency.low"
        rename = "upload_latency_low"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "upload.latency.high"
        rename = "upload_latency_high"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "upload.latency.jitter"
        rename = "upload_latency_jitter"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "packetLoss"
        rename = "packet_loss"
        type = "float"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "isp"
        rename = "isp"
        type = "string"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "interface.externalIp"
        rename = "external_ip"
        type = "string"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "server.id"
        rename = "server_id"
        type = "string"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "server.name"
        rename = "server_name"
        type = "string"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "server.location"
        rename = "server_location"
        type = "string"
[[inputs.mqtt_consumer.json_v2.field]]
        path = "server.country"
        rename = "server_country"
        type = "string"

Install ookla-speedtest-mqtt on Unraid in a few clicks.

Find ookla-speedtest-mqtt in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for ookla-speedtest-mqtt Review the template variables and paths Click Install

Download Statistics

204
Total Downloads

Related apps

Details

Repository
ccmpbll/ookla-speedtest-mqtt
Last Updated2026-05-16
First Seen2024-11-09

Runtime arguments

Network
bridge
Shell
sh
Privileged
false

Template configuration

MQTT_SERVERVariable
MQTT_TOPICVariable
Value
ookla-speedtest/result
SLEEPVariable
Value
3600
TZVariable
Value
America/New_York
SERVER_IDVariable
MQTT_USERVariable
MQTT_PASSVariable