What's new

spdMerlin spdMerlin v4.4.18 [2026-Mar-22] - Internet Speedtest and Monitoring Tool for AsusWRT Merlin

Auto server also.
Find you local Ookla server via the online speedtest and set that server as 'preferred' for your automatic tests.
I'm sure you've already checked your automatic speedtest are not over VPN.
 
There's something odd happening with my spdmerlin, and I can't figure out what 😅

Whenever I run a manual Speedtest (auto server), it uses correctly my upload speed (around 400mbps).
Whenever it runs unattended via Cronjob, it's capped around 150mbps. Every single time . Auto server also.
However, if I run /jffs/scripts/spdmerlin generate in terminal (the Cron command), the upload goes up to those 400mbps.
Download speed is correctly tested in both scenarios (around 1gbps)
Any ideas why?

Some things to try, might give some better ideas:

1. Run
Code:
top
from a second SSH window while doing both manual tests and when letting the cron job fire automatically.
Is there a difference on the CPU or RAM (VSZ) output between both runs?

2. You can also try manually running with a lower CPU priority to see if the issue is replicated:
Code:
nice -n 10 /jffs/scripts/spdmerlin generate

3. Do you have any other cron jobs scheduled to run at the same time?
You can check /verify with
Code:
cru l

4. Do you have any QoS / traffic shaping enabled?
If yes, have you tried disabling QoS to see if it resolves the issue? And do you have spdMerlin excluded from QoS using the option "q" from the menu? : "q. Toggle exclusion of spdMerlin speedtests from QoS"

5. Does swapping from to the built-in binary or the external binary improve the situation?
 
Last edited:
Some things to try, might give some better ideas:

1. Run
Code:
top
from a second SSH window while doing both manual tests and when letting the cron job fire automatically.
Is there a difference on the CPU or RAM (VSZ) output between both runs?

2. You can also try manually running with a lower CPU priority to see if the issue is replicated:
Code:
nice -n 10 /jffs/scripts/spdmerlin generate

3. Do you have any other cron jobs scheduled to run at the same time?
You can check /verify with
Code:
cru l

4. Do you have any QoS / traffic shaping enabled?
If yes, have you tried disabling QoS to see if it resolves the issue? And do you have spdMerlin excluded from QoS using the option "q" from the menu? : "q. Toggle exclusion of spdMerlin speedtests from QoS"

5. Does swapping from to the built-in binary or the external binary improve the situation?
Thank you for your prompt help!
1 - no. Exactly the same. (I did notice however that controld binary is always using 55% of RAM 😯)

2 - Even with an even lower priority, manually triggering it (both via generate or interactive menus), the results are the same, with 400mbps upload. I'll wait for next real Cron to check.

3 - No. This is the only one each 6h (00h, 06h, 12h, 18h)

4 - No QoS activated. Also, the option to exclude from QoS is activated, just to be sure.

5 - Almost same results, negligible difference. I, however, use the external binary (I think is newer than built in?)
 
Thank you for your prompt help!
1 - no. Exactly the same. (I did notice however that controld binary is always using 55% of RAM 😯)

2 - Even with an even lower priority, manually triggering it (both via generate or interactive menus), the results are the same, with 400mbps upload. I'll wait for next real Cron to check.

3 - No. This is the only one each 6h (00h, 06h, 12h, 18h)

4 - No QoS activated. Also, the option to exclude from QoS is activated, just to be sure.

5 - Almost same results, negligible difference. I, however, use the external binary (I think is newer than built in?)
I just set the Cron to run every 5 minutes (for the sake of debugging), and you know what? Correctly getting my upload speed. 🫣
Maybe the cron job I set to run every 6 hours just happens to coincide with peak usage times on the ISP’s side? Hard to tell… either way, thanks again for the help. I’ll keep monitoring it.
 
I just set the Cron to run every 5 minutes (for the sake of debugging), and you know what? Correctly getting my upload speed. 🫣
Maybe the cron job I set to run every 6 hours just happens to coincide with peak usage times on the ISP’s side? Hard to tell… either way, thanks again for the help. I’ll keep monitoring it.

Maybe ISP related, or could be the server as @Ripshod mentioned.

Setting it to every 5 minutes for debugging is a good test, I would keep an eye on the specific times of day you notice it slow down, and the specific server it uses when it slows down.

Let us know if you discover any patterns :)
 
3 - No. This is the only one each 6h (00h, 06h, 12h, 18h)
Just to make sure you got the reason behind @ExtremeFiretop's original question. You need to check for any cron jobs that run at minute 00 of any hour of the day, as it runs at the exact same time of 00:00, 06:00, 12:00, and 18:00, which might interfere with your internet speed test, especially if the cron is internet connection related.
It's very important to note that this includes any cron jobs that run like every 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 minutes (all divisors of 60), and also includes any cron jobs that runs every (divisors of 6) hours, which -also- collide with your own scheduled spdMerlin cron jobs.
So, the golden rule is find all divisors when looking for colliding cron jobs.
 
Just to make sure you got the reason behind @ExtremeFiretop's original question. You need to check for any cron jobs that run at minute 00 of any hour of the day, as it runs at the exact same time of 00:00, 06:00, 12:00, and 18:00, which might interfere with your internet speed test, especially if the cron is internet connection related.
It's very important to note that this includes any cron jobs that run like every 1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30 minutes (all divisors of 60), and also includes any cron jobs that runs every (divisors of 6) hours, which -also- collide with your own scheduled spdMerlin cron jobs.
So, the golden rule is find all divisors when looking for colliding cron jobs.
Thank you for your alert, and no, I haven't got the reason behind that...

I checked and whenever a cron runs different from minute 00, upload is OK. Whenever it runs at minute 00 it caps the upload speed.
There are many crons running at 00 minute, of course.
So maybe the suggestion I have is an option to choose to run this cron X minutes after hour.
 
Thank you for your alert, and no, I haven't got the reason behind that...

I checked and whenever a cron runs different from minute 00, upload is OK. Whenever it runs at minute 00 it caps the upload speed.
There are many crons running at 00 minute, of course.
So maybe the suggestion I have is an option to choose to run this cron X minutes after hour.
Use Custom option when setting automatic speed tests to choose minutes after hour.
 
I checked and whenever a cron runs different from minute 00, upload is OK. Whenever it runs at minute 00 it caps the upload speed.
There are many crons running at 00 minute, of course.
There you go, reason found! Best solution provided by visortgw.
I'm wondering how many more people have this issue in their setup!
 
Release Notes for spdMerlin v4.4.17 production version now available
[2026-Jan-06]


1) FIXED: In some rare scenarios, the setting for the automatic speed test schedule was "missing" from the configuration file, so the value could no longer be modified by the user.

2) FIXED: In some situations, the exclusion of an interface from automatic speed tests was not being honored.

3) IMPROVED: Modified the CLI top Main Menu to separate some groups of options and settings into their own sub-menus.
This is an effort to make the top Main Menu shorter, more manageable, more user-friendly, and to improve the user experience.​

4) Miscellaneous code improvements.

Sample screenshots:

spdMerlin_v4.4.17_CLI_MainMenu.jpg


spdMerlin_v4.4.17_CLI_SpeedTestOptions.jpg


spdMerlin_v4.4.17_CLI_DatabaseOptions.jpg



The fork from @Jack Yaz's spdMerlin add-on is now hosted on the AMTM-OSR GitHub repo:
 
Is it possible to get the notification options like in connmon (i.e email, Discord, etc) for spdMerlin when the connection speed drops to a certain threshold?
 
Is it possible to get the notification options like in connmon (i.e email, Discord, etc) for spdMerlin when the connection speed drops to a certain threshold?
It's certainly possible, but it would be a relatively long and "time-consuming" project to port and adapt all the relevant pieces of code from connmon to spdMerlin. IME, we're talking about 8-10 man-days (person-days?? 🤔😉) which, when spread over my spare time during some evenings and weekends, could mean at least 2 months or more; and at this moment, I wouldn't want to commit such a long time to one single project. However, I can add only email notifications since that would be a much shorter task and doable within a more reasonable time frame. Any other notification methods might be added later, if time permits.

Would having only email notifications meet your needs?
 
It's certainly possible, but it would be a relatively long and "time-consuming" project to port and adapt all the relevant pieces of code from connmon to spdMerlin. IME, we're talking about 8-10 man-days (person-days?? 🤔😉) which, when spread over my spare time during some evenings and weekends, could mean at least 2 months or more; and at this moment, I wouldn't want to commit such a long time to one single project. However, I can add only email notifications since that would be a much shorter task and doable within a more reasonable time frame. Any other notification methods might be added later, if time permits.

Would having only email notifications meet your needs?
Definitely, thank you! Just something to let me know if my router might need to be checked out/rebooted. Much appreciated 🙏
 
Release Notes for spdMerlin v4.4.18 production version now available
[2026-Mar-22]


1) NEW: Added code to support "Automatic Script Updates" via AMTM.
This new functionality requires AMTM 6.4 or a later version.​




The fork from @Jack Yaz's spdMerlin add-on is now hosted on the AMTM-OSR GitHub repo:
 
Last edited:
I had a script, up until upgrading spdMerlin v4.4.18 today, that would perform internet speed test on the active WireGuard client every 3 hrs and if the download speed and ping didn't meet the thresholds, the script would disable the current WireGuard client, enable the next WireGuard client, then perform internet speed test on the next WireGuard client. It would loop through all five (5) WireGuard clients until it found one that met the thresholds. However, after upgrading when script runs, it is performing internet speed test on the WAN and not the on the WireGuard client (e.g. wgc2). The line of code on the script that executes the internet speed test is provided below. The variable iface is incremented from 1 to 5 (wgc1 to wgc5) as the script loops through the tests. Did something change in this update? Any help would be appreciated.

/jffs/scripts/spdmerlin generate $iface > wglogfile.tmp​
 
I had a script, up until upgrading spdMerlin v4.4.18 today, that would perform internet speed test on the active WireGuard client every 3 hrs and if the download speed and ping didn't meet the thresholds, the script would disable the current WireGuard client, enable the next WireGuard client, then perform internet speed test on the next WireGuard client. It would loop through all five (5) WireGuard clients until it found one that met the thresholds. However, after upgrading when script runs, it is performing internet speed test on the WAN and not the on the WireGuard client (e.g. wgc2). The line of code on the script that executes the internet speed test is provided below. The variable iface is incremented from 1 to 5 (wgc1 to wgc5) as the script loops through the tests. Did something change in this update? Any help would be appreciated.
No code changes were made to the spdMerlin v4.4.18 release version WRT running and handling speed tests.

/jffs/scripts/spdmerlin generate $iface > wglogfile.tmp
Unless you have explicitly modified and customized the original spdMerlin shell script to accept and handle a 2nd parameter ($iface), the above call will *not* do what you think it does.

The unmodified/original spdMerlin code has never taken a 2nd parameter with the generate call, so the $iface is completely and absolutely ignored. Instead, the call runs the speed test(s) as it was intended and per design, based on the configuration parameters previously set up by the user for automatic speed test runs, such as:

- Using only the interfaces tagged as *active* and *not* excluded.
- Using a preferred speed test server (if any) for each *active* interface.
- Checking for the upper and lower thresholds set up for auto bandwidth.

At this point, I can only suggest you double-check your current spdMerlin speed test configuration settings and take a closer look at how your own custom script interacts with the original/unmodified spdMerlin script.
 
No code changes were made to the spdMerlin v4.4.18 release version WRT running and handling speed tests.


Unless you have explicitly modified and customized the original spdMerlin shell script to accept and handle a 2nd parameter ($iface), the above call will *not* do what you think it does.

The unmodified/original spdMerlin code has never taken a 2nd parameter with the generate call, so the $iface is completely and absolutely ignored. Instead, the call runs the speed test(s) as it was intended and per design, based on the configuration parameters previously set up by the user for automatic speed test runs, such as:

- Using only the interfaces tagged as *active* and *not* excluded.
- Using a preferred speed test server (if any) for each *active* interface.
- Checking for the upper and lower thresholds set up for auto bandwidth.

At this point, I can only suggest you double-check your current spdMerlin speed test configuration settings and take a closer look at how your own custom script interacts with the original/unmodified spdMerlin script.
I appreciate the response and the clarification.
 
I appreciate the response and the clarification.
You could use the installed ookla speedtest that spdmerlin uses to possibly get what you are looking for.

agagne@rt-be88u:/jffs# /jffs/addons/spdmerlin.d/ookla/speedtest wgvpn1

Speedtest by Ookla

Server: Netafy Broadband - Manchester, NH (id: 72757)
ISP: Fidium Fiber
Idle Latency: 3.09 ms (jitter: 0.32ms, low: 2.93ms, high: 3.43ms)
Download: 110.38 Mbps (data used: 53.9 MB)
20.23 ms (jitter: 1.18ms, low: 2.42ms, high: 23.20ms)
Upload: 111.80 Mbps (data used: 50.5 MB)
24.78 ms (jitter: 2.37ms, low: 5.03ms, high: 45.50ms)
Packet Loss: 0.0%
Result URL: https://www.speedtest.net/result/c/8af6068c-54ba-42dc-9051-f3482a2e53f3

Not sure what your script needs.
 

Similar threads

Latest threads

Support SNBForums w/ Amazon

If you'd like to support SNBForums, just use this link and buy anything on Amazon. Thanks!

Sign Up For SNBForums Daily Digest

Get an update of what's new every day delivered to your mailbox. Sign up here!
Back
Top