Hoe bouw je een automatische internetsnelheidstracker voor je thuisnetwerk
Heb je vaak problemen met je internetverbinding, maar tonen de resultaten van een internetsnelheidstest telkens dat je de snelheden krijgt die je internetprovider heeft beloofd? Als je je hierin herkent, overweeg dan om een automatische internetsnelheid-tracker en -logger te maken.
Je internetprovider wil niet dat je dit weet over je internetsnelheid
Feit: de internetsnelheden die door de meeste ISP's worden beloofd, zijn 'tot snelheden'. Met andere woorden, de internetsnelheid waarvoor je betaalt is de hoogste grens. Je zult zelden de geadverteerde snelheid de hele tijd krijgen. Bijvoorbeeld, als je betaalt voor een 'gigabit'-verbinding, zul je die snelheid niet consequent krijgen.
De 'tot' snelheden die door de meeste ISP's worden geadverteerd, verbergen de kleine lettertjes in uw internetdienstovereenkomst: die snelheden zijn het best mogelijke scenario, en er is geen garantie dat u altijd de maximale snelheid zult krijgen. Bovendien weerspiegelt de geadverteerde bandbreedte de snelheid die de ISP van plan is te leveren aan hun bedrade router, niet de snelheden die aan uw aangesloten apparaten worden geleverd.
Omdat de kleine lettertjes in het voordeel van je ISP zijn, is het, als je problemen met je internetsnelheid ervaart, het beste om je verbinding gedurende een periode van 1-4 weken te monitoren en alle uitvaltijden te registreren voordat je je ISP belt. Op deze manier, net zoals het voor Monica werkte toen haar ISP $1000 eiste om haar te laten vertrekken, zullen de ondersteunende gegevens je helpen een zaak op te bouwen, te heronderhandelen of je ISP-contract te beëindigen. Omdat eenmalige internetsnelheidstests via het web niet zo betrouwbaar zijn, volgt hier hoe je een automatische internetsnelheidstracker kunt maken die je internetsnelheid op vaste intervallen automatisch registreert.
Eerst en vooral: Trackingtools voorbereiden voor nauwkeurige internet snelheidsmetingen
Speedtest van Ookla is de meest gebruikte internetsnelheidstester. We zullen erop vertrouwen, maar in plaats van de opgeblazen browser-versie te gebruiken, zullen we de CLI-versie installeren. De eerste stap is het bijwerken van je systeem en vervolgens het installeren van speedtest-cli:
sudo apt update sudo apt install speedtest-cli -yNa het installeren van speedtest-cli, voer een handmatige test uit om te controleren of het werkt:
speedtest-cli --simpleDe resultaten moeten de pingtijd en uw download- en uploadsnelheden in megabit per seconde bevatten.
Dit bewijst dat speedtest-cli werkt. Het volgende onderdeel van het proces is het maken van de internetsnelheidstester en datalogger.
Een eenvoudige internetsnelheidstester en gegevenslogger maken
Gebruik het mkdir-commando om een map te maken die aan het project is gewijd, en gebruik vervolgens het cd-commando om erin te springen om te beginnen met het maken van het hulpmiddel.
mkdir -p ~/"Internet Speed Tracker Project"cd ~/"Internet Speed Tracker Project"Het gebruik van de aanhalingstekens zorgt ervoor dat de terminal de spaties als onderdeel van de mapnaam interpreteert. Als je ze liever niet gebruikt, maak dan een mapnaam zonder spaties.
Gebruik nano of een andere terminalteksteditor om een Python-bestand genaamd 'internet speed tracker' aan te maken, en kopieer-plak vervolgens het volgende 40-regelige script erin:
nano internet_speed_tracker.py#!/usr/bin/env python3
import subprocess
import csv
import os
from datetime import datetime
#--------------CONFIGURATIONs--------------
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
LOG_FILE = os.path.join(BASE_DIR, "speed_log.csv")
def run_speed_test():
try:
# Run speedtest in simple mode
result = subprocess.check_output(["speedtest-cli", "--simple"]).decode("utf-8")
# These settings parse the text. For example: Ping: 20 ms, Download: 50.5 Mbit/s, etc
lines = result.split('\n')
ping = lines[0].split()[1]
download = lines[1].split()[1]
upload = lines[2].split()[1]
return ping, download, upload
#These settings keep Speedtest from crashing by logging zeroes when the internet is totally down
except Exception:
return "0", "0", "0"
def main():
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
ping, download, upload = run_speed_test()
# Check if file exists to add headers if it doesn't
file_exists = os.path.isfile(LOG_FILE)
with open(LOG_FILE, mode='a', newline='') as f:
writer = csv.writer(f)
if not file_exists:
writer.writerow(["Timestamp", "Ping (ms)", "Download (Mbit/s)", "Upload (Mbit/s)"])
writer.writerow([timestamp, ping, download, upload])
if __name__ == "__main__":
main()Als je nano gebruikt, druk op Ctrl + O + Enter om de wijzigingen te schrijven en op te slaan, en vervolgens op Ctrl + X om terug te keren naar de terminal.
Je zult merken dat het script de logs opslaat in CSV-formaat. Dat is belangrijk omdat het een bestand aanmaakt dat je kunt openen in Google Sheets, LibreOffice en soortgelijke programma's.
Gebruik nu het chmod-commando om het bestand uitvoerbaar te maken:
chmod +x internet_speed_tracker.pyDe volgende stap is het maken van een systemd-timer om ervoor te zorgen dat de tool weet wanneer hij de internetsnelheid moet testen. Voordat je dat doet, is het het beste om de tool eerst testmatig uit te voeren met dit commando:
./internet_speed_tracker.pyHet uitvoeren van het script zou een nieuw logbestand in de projectmap moeten aanmaken. Je kunt LibreOffice gebruiken om dit bestand te openen:
Het gebruik van systemd om internetsnelheidstests te automatiseren, bij te houden en te registreren
Systemd is de beste manier om Linux-services te automatiseren en te beheren. Gebruik nano om een systemd-servicebestand te maken voor de internet snelheidstester en gegevensbeheerder, en plak vervolgens het onderstaande script. Vergeet niet je absolute paden bij te werken; anders zal het script falen.
sudo nano /etc/systemd/system/internet-speed-tracker.service[Service]
ExecStart=/usr/bin/python3 "home/htg/Internet Speed Tracker Project/internet_speed_tracker.py"
User=htgGebruik nano opnieuw om een persistent timer-eenheidsbestand voor het hulpmiddel te maken en kopieer en plak vervolgens het onderstaande script:
sudo nano /etc/systemd/system/internet-speed-tracker.timer[Timer]
OnBootSec=5min
OnUnitActiveSec=2min
Persistent=true
[Install]
WantedBy=timers.targetHet timer-eenheidsbestand bepaalt hoe vaak de internetsnelheidstest wordt uitgevoerd. Voor testdoeleinden heb ik het ingesteld op elke 2 minuten; pas het aan naar jouw behoeften. Bijvoorbeeld, je kunt het instellen om elke 1 uur te draaien.
Laad de daemon opnieuw en schakel vervolgens de timer in:
sudo systemctl daemon-reloadsudo systemctl enable --now internet-speed-tracker.timerDat is het: je hebt zojuist een internetsnelheidstester gemaakt die je internetsnelheid registreert op basis van de tijd die is gedefinieerd in het timerbestand.
Je internet-snelheidslogbestand lezen
Na een paar dagen of weken zal je internet-snelheidslogbestand genoeg gegevens bevatten die je kunt gebruiken om te weten hoe goed (of slecht) je internet is. De gegevens zullen ook helpen als je internet slecht genoeg is om een telefoontje naar je ISP te rechtvaardigen.
Bij het bekijken van het logbestand, let op dalingen tijdens piekuren zoals avonden en weekenden, vlakke lijnen en hoe lang ze duren, en nullen. Daling tijdens piekuren zijn gevallen waarin je internetsnelheid met 50% of meer daalt. Ze geven aan dat je ISP je lijn heeft overboekt of je internet vertraagt. Vlakke lijnen duiden meestal op fysieke verbindingsproblemen, terwijl nullen wijzen op een volledige internetstoring.
De volgende keer dat je internetprovider zegt: "Alles lijkt aan onze kant goed te werken," gebruik je het logbestand om je gelijk te bewijzen. Ze zullen je veel serieuzer nemen als je ze een bestand kunt sturen dat consequent lage internetsnelheden en chronische prestatieproblemen laat zien.