Speedtest binding - values not stored

Hi,

Anyone with an idea why speedtest is not storing values automatically?
speedtest-cli is installed on the container where openhab is running and I would expect the values to be stored according to the thing configuration (refresh interval). Manual trigger does work and stores the values.

Thank you,

Martin

If a Thing’s Channels are not linked to Items, the Thing does nothing with the values. You must link the Channels you want to store to Items. Once linked to Items, what gets stored under what circumstances depends on your persistence configuration. The default persistence strategy for most of the persistence add-ons is everyChange and restoreOnStartup. rrd4j also has an everyMinute strategy.

@rlkoshak - Thank you for trying to help!

All channels have items.
rrd4j is configured as “every minute”.
the logs seems to be ok:

2025-09-29 16:44:38.497 [DEBUG] [.speedtest.internal.SpeedtestHandler] - Passing to shell for parsing command.
2025-09-29 16:44:38.498 [DEBUG] [.speedtest.internal.SpeedtestHandler] - OS: *NIX (Linux)
2025-09-29 16:44:38.499 [DEBUG] [.speedtest.internal.SpeedtestHandler] - The command to be executed will be ‘[sh, -c, /usr/local/bin/speedtest -f json --accept-license --accept-gdpr]’
2025-09-29 16:44:58.845 [DEBUG] [.speedtest.internal.SpeedtestHandler] - Exec [OUTPUT]: ‘{“type”:“result”,“timestamp”:“2025-09-29T14:44:58Z”,“ping”:{“jitter”:0.018,“latency”:1.063,“low”:1.040,“high”:1.080},“download”:{“bandwidth”:65320435,“bytes”:966661632,“elapsed”:15010,“latency”:{“iqm”:1.141,“low”:0.926,“high”:211.124,“jitter”:2.933}},“upload”:{“bandwidth”:58785859,“bytes”:229555870,“elapsed”:3910,“latency”:{“iqm”:8.053,“low”:1.167,“high”:9.693,“jitter”:0.733}},“packetLoss”:0,“isp”:“AMA netwoRX”,“interface”:{“internalIp”:“172.18.0.9”,“name”:“eth0”,“macAddr”:“xx:xx:xx:xx:xx:xx”,“isVpn”:false,“externalIp”:“xxx.xxx.xxx.xxx”},“server”:{“id”:16472,“host”:“``speedtest.ama-networx.net``”,“port”:8080,“name”:“AMA netwoRX GmbH”,“location”:“Vienna”,“country”:“Austria”,“ip”:“xxx.xxx.xxx.xxx”},“result”:{“id”:“whatever”,“url”:“ Speedtest by Ookla - The Global Broadband Speed Test }}’
2025-09-29 16:44:58.847 [DEBUG] [.speedtest.internal.SpeedtestHandler] - Downloading result image from: Speedtest by Ookla - The Global Broadband Speed Test
2025-09-29 16:44:59.692 [DEBUG] [.speedtest.internal.SpeedtestHandler] - Updating channels
2025-09-29 16:44:59.692 [DEBUG] [.speedtest.internal.SpeedtestHandler] - timestamp: 2025-09-29T16:44:58.000+0200
2025-09-29 16:44:59.693 [DEBUG] [.speedtest.internal.SpeedtestHandler] - pingJitter: 0.000017999999999999997 s
2025-09-29 16:44:59.694 [DEBUG] [.speedtest.internal.SpeedtestHandler] - pingLatency: 0.001063 s
2025-09-29 16:44:59.695 [DEBUG] [.speedtest.internal.SpeedtestHandler] - downloadBandwidth: 522.56348 Mbit/s
2025-09-29 16:44:59.695 [DEBUG] [.speedtest.internal.SpeedtestHandler] - downloadBytes: 966661632 B
2025-09-29 16:44:59.696 [DEBUG] [.speedtest.internal.SpeedtestHandler] - downloadElapsed: 15.01 s
2025-09-29 16:44:59.697 [DEBUG] [.speedtest.internal.SpeedtestHandler] - uploadBandwidth: 470.286872 Mbit/s
2025-09-29 16:44:59.698 [DEBUG] [.speedtest.internal.SpeedtestHandler] - uploadBytes: 229555870 B
2025-09-29 16:44:59.699 [DEBUG] [.speedtest.internal.SpeedtestHandler] - uploadElapsed: 3.91 s
2025-09-29 16:44:59.700 [DEBUG] [.speedtest.internal.SpeedtestHandler] - interfaceExternalIp: xxx.xxx.xxx.xxx
2025-09-29 16:44:59.700 [DEBUG] [.speedtest.internal.SpeedtestHandler] - interfaceInternalIp: 172.18.0.9
2025-09-29 16:44:59.701 [DEBUG] [.speedtest.internal.SpeedtestHandler] - isp: AMA netwoRX
2025-09-29 16:44:59.701 [DEBUG] [.speedtest.internal.SpeedtestHandler] - resultUrl: Speedtest by Ookla - The Global Broadband Speed Test
2025-09-29 16:44:59.702 [DEBUG] [.speedtest.internal.SpeedtestHandler] - resultImage:
2025-09-29 16:44:59.703 [DEBUG] [.speedtest.internal.SpeedtestHandler] - server: AMA netwoRX GmbH (16472) Vienna

Please use code fences instead of quotes for logs and code.

```
code goes here
```

It really doesn’t matter what the binding is doing. What are the Items doing? Are they updating? Are they changing? Are they updating to the same value?

Since you have everyMinute, that means that there should be values in rrd4j so long as the Items themselves are not NULL or UNDEF. So what state are the Items?

I can see the current value but a chart only gives me a horizontal line without any values but the current one.

So, yes, the values are updating but I cannot see that they are stored when running automatically. They are stored when I trigger them manually.

When the binding does the test on it’s own, do the Items change state? You’ll only see different values if the binding is changing the Item’s state. Otherwise you get a straight line.

The fact that it’s storing values when you manually run the speed test and that you can get any graph at all indicates that there’s nothing wrong with persistence. Persistence is very simple and straight forward. With an everyMinute strategy, rrd4j will save the current state of the Item, what ever it happens to be, every minute. There’s not logic that could make it fail for Items linked to one binding and not others. It’s the same logic for all Items, all of the time.

But there might be a problem with your Items updating or they are updating to NULL or UNDEF. Those states do not get saved to the database and rrd4j will continue to use the last valid state everyMinute.

So you need to watch the states of the Items. That’s the only thing that matters right now.

In the items I see the values which I see in the log (e.g. downloadBandwidth). So they change every 15 minutes. But looking at a chart of the item these 15 minutes datapoints are not there.

Please show a bit of the relevant logs and post your persistence configuration for rrd4j.

Logs: Where could I find something useful apart from openhab.log (see above)?

Persistence config:

configurations:
  - items:
      - "*"
    strategies:
      - everyChange
    filters: []
aliases: {}
cronStrategies:
  - name: everyMinute
    cronExpression: "* * * * * * *"
defaultStrategies:
  - restoreOnStartup
  - everyChange
  - everyMinute
thresholdFilters: []
timeFilters: []
equalsFilters: []
includeFilters: []

events.log will show Items changing states.