Skip to main content

iPerf3 smart home integration, free and open source

iPerf3 integration for Gladys Assistant

Measure your local network speed (Wi-Fi, powerline, NAS link) against your own iperf3 servers.

Measure the speed of your local network from Gladys: the Wi-Fi link to the office, the powerline adapters to the garage, the cable to the NAS. The integration runs the iperf3 client against iperf3 servers you run on your machines, on a schedule and on demand, and keeps the history of each link.

It does not measure your internet connection: for that, see the Speedtest.net integration. Here, every measurement stays on your network.

What you get​

  • One device per iperf3 server, with download and upload speeds (Mbit/s, with history), TCP retransmissions (or jitter and packet loss in UDP), and "last measurement succeeded".
  • Automatic measurements every 1 to 24 hours (6 by default), or on demand only.
  • A dashboard widget: the last speeds of every server, or the tiles and the week chart of one, with a button to measure again.
  • Two scene triggers: a server becomes unreachable, a speed drops below a threshold.
  • A scene action: measure a server and use the speeds in the next steps.

Requirements​

  • Gladys Assistant 5.1.0 or later.
  • An iperf3 server on each machine to measure: iperf3 -s (port 5201 by default). iperf3 exists for Linux, Windows, macOS, most NAS (Synology and QNAP packages, Docker image networkstatic/iperf3) and OpenWrt routers. Start it as a service so it survives a reboot.
  • The server must be reachable from the Gladys machine on its TCP port (and UDP port in UDP mode).

The iperf3 client is included in the integration image: nothing to install on the Gladys side. The integration never starts an iperf3 server.

Configuration​

FieldMeaning
iperf3 serversComma-separated list: address, or name=address, with :port when it is not 5201.
Automatic measurementNever (on demand only), every 1, 2, 3, 6, 12 hours, or once a day. Default: 6 hours.
ProtocolTCP (real throughput, retransmissions) or UDP (fixed bitrate, jitter and packet loss).
Duration per direction (s)3 to 20 seconds, 5 by default. A measurement lasts about twice that, plus 2 seconds.
Parallel streams1 to 8. Several streams fill fast links (2.5 Gbit/s and up) better.
UDP bitrate (Mbit/s)UDP only: the bitrate sent. Above what the link carries, the loss rises.
Low speed threshold (Mbit/s)For the "Speed below the threshold" trigger. 0 turns it off.
Language of the namesLanguage of the feature names and of the messages. Default: French.

Example: NAS=192.168.1.10, Office=192.168.1.20:5202, [fd00::30]. Up to 10 servers. A wrong entry is ignored and listed in the answer of the Measure all servers now button and in the logs.

Then open the Discovery tab of the integration and add the devices you want to follow. Only the devices added to Gladys are measured automatically; the Measure all servers now button measures every server of the list, which lets you check the configuration first.

Devices​

Each server gives a device named after it ("iPerf3 192.168.1.10" without a name), with:

FeatureTypeNotes
DownloadRate (Mbit/s)Server → Gladys, measured by the receiver.
UploadRate (Mbit/s)Gladys → server, measured by the receiver.
TCP retransmissionsCounterTCP only: segments sent again, both directions summed.
JitterDuration (ms)UDP only: the worst of the two directions.
Packet lossPercentageUDP only: the worst of the two directions.
Last measurement succeededBinary0 when the last measurement failed (speeds are kept).

The values are updated after each measurement, never polled by Gladys. Changing the protocol changes the features: the Discovery tab then offers to Update the devices.

Dashboard widget​

Add the Local network speed widget. Without a setting it lists every server with its last download and upload speeds (or why the last measurement failed), with a Measure all button. Choose one server in its settings (or have only one) to see its live download and upload tiles, the chart of the last week, the time of the last measurement and a Measure now button. The buttons start the measurement in the background; the widget updates when it ends.

Scene triggers​

  • iperf3 server unreachable: a measurement could not reach a server (refused, no answer, unknown name). It fires once per outage, again only after a successful measurement. A server busy with another test does not count. Filter: the server. Variables: server name, address, reason.
  • Speed below the threshold: the download or upload speed of a measurement is below the threshold of the configuration. It fires once per direction, and again only after the speed went back above. Filters: the server, the direction. Variables: server name, speed, threshold.

You can also use the usual Gladys trigger "a device value changes" on the Download or Upload feature.

Scene action​

Measure an iperf3 server measures the chosen server right away (before any scheduled measurement) and returns success (1 or 0), download_mbps and upload_mbps for the next steps: a "Continue only if" on success, a message with the speeds. A failed measurement returns success = 0 rather than an error, so the scene can react to it.

Scene examples​

  • Powerline watch: when "Speed below the threshold" fires for the garage adapter, send a message "Powerline slow" with the speed variable.
  • NAS down: when "iperf3 server unreachable" fires for the NAS, send a Telegram message with the reason.
  • Nightly check: every night at 3:00, measure the office Wi-Fi, then send the result in a message.

Troubleshooting​

  • "server unreachable": check that iperf3 -s runs on the server, that its port (5201 by default) is open in its firewall, and that the address is right. From another machine, iperf3 -c <address> must work.
  • "server busy with another test": an iperf3 server serves one client at a time. The integration tries again after 5 seconds; another client (or a second Gladys) is probably testing at the same time.
  • Low speeds on a fast link: raise the parallel streams to 4, and the duration. The Gladys machine itself (a Raspberry Pi, for example) may be the bottleneck.
  • UDP shows heavy loss: the UDP bitrate is above what the link carries; lower it.
  • More details with LOG_LEVEL=debug in the logs of the integration.

Limits​

  • One measurement at a time, servers one after the other: 10 servers take a few minutes.
  • A measurement loads the measured link: keep the automatic interval reasonable on a busy Wi-Fi.
  • The speeds are those between the Gladys machine and the server, not between two other machines.
  • The Gladys container runs on a bridged network: an IPv6 server needs IPv6 enabled in Docker.
  • With "Never", values do not change by themselves and Gladys may show them as not recent after 48 hours.

Configuration settings​

These are the settings iPerf3 asks for in its configuration screen in Gladys.

SettingTypeRequiredDescription
How it workssectionNoRun an iperf3 server (iperf3 -s) on the machines to measure: NAS, PC, a device behind Wi-Fi or powerline. Gladys measures upload then download, one server at a time, and creates one device per server.
iperf3 serversstringNoSeparated by commas: address, or name=address, with :port when it is not 5201. 10 servers at most.
Automatic measurementselectNoEach measurement loads the link for a few seconds: keep it occasional.
ProtocolselectNoTCP measures the real throughput. UDP sends at a fixed bitrate and measures jitter and packet loss.
Duration per direction (s)numberNoLonger is steadier, but loads the network longer.
Parallel streamsnumberNoMore streams fill fast links (2.5 Gbit/s and up) better.
UDP bitrate (Mbit/s)numberNoUDP only: the bitrate sent. Above what the link carries, the loss rises.
Low speed threshold (Mbit/s)numberNoThe "Speed below the threshold" trigger fires when a speed drops below it. 0 = off.
Language of the namesselectNoLanguage of the feature names and of the messages sent by the integration.

How to install iPerf3 in Gladys​

  1. In Gladys, open Integrations: iPerf3 appears in the catalog, next to the native integrations, with a community badge.
  2. Click Install. Gladys pulls the Docker image (ghcr.io/guim31/gladys-iperf3:1.0.0), starts it in a sandbox isolated from the core, and generates the integration's interface (devices, discovery and configuration).
  3. Open the Configuration screen of the integration, fill in the settings, and save.
  4. You can also install it directly from its repository URL: https://github.com/guim31/gladys-iperf3.

iPerf3 requires Gladys >=5.1.0. The catalog inside Gladys refreshes every hour, so a new version becomes available at most one hour after its release.

Not running Gladys yet? It is free and open source: follow the installation guide to get started.

About external integrations​

iPerf3 is an external integration: a community integration packaged as a Docker container and published on GitHub, that Gladys installs in one click and runs in a sandbox isolated from its core. It is published and maintained by guim31, not by the Gladys core team.

Subscribe to the Gladys Assistant newsletter

A few emails per month about new releases and project news. Sent by Pierre-Gilles Leymarie, founder of the project. Unsubscribe anytime 🙂