Skip to content

Instantly share code, notes, and snippets.

@aallan
Last active May 29, 2022 15:50
Show Gist options
  • Save aallan/bafc70a347f3b9526d30 to your computer and use it in GitHub Desktop.
Save aallan/bafc70a347f3b9526d30 to your computer and use it in GitHub Desktop.
Modified version of Henrik Bengtsson's speedtest-cli code which will dispatch the test results to the IFTTT Maker Channel.
#!/usr/bin/env bash
###########################################################################
# Originally written by: Henrik Bengtsson, 2014
# https://github.com/HenrikBengtsson/speedtest-cli-extras
# Modified to use IFTTT by: Alasdair Allan, 2015
# License: GPL (>= 2.1) [http://www.gnu.org/licenses/gpl.html]
###########################################################################
# Character for separating values
# (commas are not safe, because some servers return speeds with commas)
sep=";"
# Temporary file holding speedtest-cli output
user=$USER
if test -z $user; then
user=$USERNAME
fi
log=/tmp/$user/speedtest-csv.log
# Local functions
function str_extract() {
pattern=$1
# Extract
res=`grep "$pattern" $log | sed "s/$pattern//g"`
# Drop trailing ...
res=`echo $res | sed 's/[.][.][.]//g'`
# Trim
res=`echo $res | sed 's/^ *//g' | sed 's/ *$//g'`
echo $res
}
# Display header?
if test "$1" = "--header"; then
start="start"
stop="stop"
from="from"
from_ip="from_ip"
server="server"
server_dist="server_dist"
server_ping="server_ping"
download="download"
upload="upload"
share_url="share_url"
else
mkdir -p `dirname $log`
start=`date +"%Y-%m-%d %H:%M:%S"`
if test -n "$SPEEDTEST_CSV_SKIP" && test -f "$log"; then
# Reuse existing results (useful for debugging)
1>&2 echo "** Reusing existing results: $log"
else
# Query Speedtest
/usr/local/bin/speedtest-cli --share > $log
fi
stop=`date +"%Y-%m-%d %H:%M:%S"`
# Parse
from=`str_extract "Testing from "`
from_ip=`echo $from | sed 's/.*(//g' | sed 's/).*//g'`
from=`echo $from | sed 's/ (.*//g'`
server=`str_extract "Hosted by "`
server_ping=`echo $server | sed 's/.*: //g'`
server=`echo $server | sed 's/: .*//g'`
server_dist=`echo $server | sed 's/.*\\[//g' | sed 's/\\].*//g'`
server=`echo $server | sed 's/ \\[.*//g'`
download=`str_extract "Download: "`
upload=`str_extract "Upload: "`
share_url=`str_extract "Share results: "`
fi
# Standardize units?
if test "$1" = "--standardize"; then
download=`echo $download | sed 's/Mbits/Mbit/'`
upload=`echo $upload | sed 's/Mbits/Mbit/'`
fi
# Send to IFTTT
secret_key="SECRET_KEY"
value1=`echo $server_ping | cut -d" " -f1`
value2=`echo $download | cut -d" " -f1`
value3=`echo $upload | cut -d" " -f1`
json="{\"value1\":\"${value1}\",\"value2\":\"${value2}\",\"value3\":\"${value3}\"}"
curl -X POST -H "Content-Type: application/json" -d "${json}" https://maker.ifttt.com/trigger/speedtest/with/key/${secret_key}
@RandomSnake
Copy link

@JeremyDurnell Ran into the same issue on the same date but only noticed now. I found that IFTTT was not at fault as the webhook and the speadsheet update commands had not changed.

The issue I found was due to an update on the speedtest side which was failing due to some server changes. The error I receive when running the command manually is:
ValueError: invalid literal for int() with base 10

There are 2 solutions I have found.

  1. Setup your speed tests from scratch with the updated configs (not from aallan at the time of this post)

  2. Modify the speedtest.py file manually by;
    Open up speedtest.py file (Mine was located: /usr/local/lib/python2.7/dist-packages/speedtest.py)
    Head to line 1174
    Comment it out and replace with the new line from the below article:
    sivel/speedtest-cli@6e9a667

Hopefully this helps you or the next person that runs into this

Copy link

ghost commented May 26, 2021

Hey! What IFTTT applets are you using? I can't find "speedtest" nor "Log Speedtest results to Spreadsheet"...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment