Steenderen.NET

Domoticz Speedtest – Versie 1.1

Status: Dit is de laatste versie van dit script.

Beschrijving

Script voor het automatisch controleren van je internet-aansluiting op de ping-, download- en upload-snelheid, en het weergeven hiervan in Domoticz.

Update

Verbeterde versie van versie 1.0 van dit script. De update van mijn Raspberry Pi naar de laatste versie van Raspbian zorgde ervoor dat diverse onderdelen van het script niet meer werkte. Deze versie zorgt dat alles weer werkt.

Setup variabelen aangepast zodat deze logischer en leesbaarder qua naamgeving zijn.

Code volledig opgeschoond, gestructureerd en verbeterd.

Tijdelijk bestand wordt aangemaakt op standaard tijdelijke locatie en aan het einde van het script voortaan ook opgeruimd.

Meer details in logging naar Domoticz toegevoegd.

LET OP! Onderstaand script gaat nu uit van speedtest-cli geïnstalleerd via PIP, aangezien de installatie via apt-get een verouderde versie installeert, waarbij de test-resultaten niet meer correct zijn. Zie installatie-instructie onderaan voor meer details.

Code

#!/bin/bash

# Setup variables.
DOMOTICZ_SERVER="x.x.x.x:yy"     # IP-adres:Poort van je Domoticz server
IDX_PING=1                       # IDX voor ping-snelheid
IDX_DOWNLOAD=2                   # IDX voor download-snelheid
IDX_UPLOAD=3                     # IDX voor upload-snelheid

# No need to edit below here.
echo "Start running speedtest script."

# Create temp-directory if it does not already exists.
TEMP_DIR="/home/pi/temp"

if [ -d $TEMP_DIR ] ; then
    echo "- Temp-directory already exists, no need to create it."
else
    echo "- Temp-directory does not exists, creating it now."
    /bin/mkdir $TEMP_DIR
fi

TEMP_FILE=$TEMP_DIR/speedtest.txt

# Perform speedtest.
echo "- Performing speedtest."
/home/pi/.local/bin/speedtest-cli --simple > $TEMP_FILE

# Handle results of speedtest.
PING=$(cat $TEMP_FILE | sed -ne 's/^Ping: \([0-9]*\.[0-9]*\).*/\1/p')
DOWNLOAD=$(cat $TEMP_FILE | sed -ne 's/^Download: \([0-9]*\.[0-9]*\).*/\1/p')
UPLOAD=$(cat $TEMP_FILE | sed -ne 's/^Upload: \([0-9]*\.[0-9]*\).*/\1/p')

echo "- Results of speedtest:"
echo "  - Ping =  $PING ms"
echo "  - Download = $DOWNLOAD Mbps"
echo "  - Upload =  $UPLOAD Mbps"

# Update download, upload and ping values in Domoticz.
echo "- Updating download, upload and ping values in Domoticz."
wget -q --delete-after "http://$DOMOTICZ_SERVER/json.htm?type=command&param=udevice&idx=$IDX_PING&svalue=$PING" >/dev/null 2>&1
wget -q --delete-after "http://$DOMOTICZ_SERVER/json.htm?type=command&param=udevice&idx=$IDX_DOWNLOAD&svalue=$DOWNLOAD" >/dev/null 2>&1
wget -q --delete-after "http://$DOMOTICZ_SERVER/json.htm?type=command&param=udevice&idx=$IDX_UPLOAD&svalue=$UPLOAD" >/dev/null 2>&1

# Remove temp file.
echo "- Removing temp file."
/bin/rm $TEMP_FILE

# Domoticz logging.
echo "- Writing log to Domoticz."
wget -q --delete-after "http://$DOMOTICZ_SERVER/json.htm?type=command&param=addlogmessage&message=Speedtest script finished with results: Ping: $PING ms, Download: $DOWNLOAD Mbps, Upload: $UPLOAD Mbps." >/dev/null 2>&1

# Done!
echo "Done running speedtest script."

Installatie-instructies

Oude versie speedtest-cli verwijderen

Deze stap mag worden overgeslagen wanneer je dit script voor het eerst installeert.

Om bovenstaand script goed te laten werken, dient speedtest-cli geïnstalleerd te zijn op je Raspberry Pi. Bij het oude script werd gebruik gemaakt van de versie die werd geïnstalleerd via APT-GET. Mocht je die versie nog geïnstalleerd hebben staan, dan kan je deze het beste eerst deïnstalleren met het volgende commando;

sudo apt-get uninstall speedtest-cli

PIP installeren

PIP is een package manager uit de hoek van Python. Zonder duidelijke reden wordt vanuit PIP wel de nieuwste versie van speedtest-cli geïnstalleerd. Om PIP hiervoor te kunnen gebruiken, dient dit eerst geïnstalleerd te worden via de volgende twee commando’s;

sudo apt-get update
sudo apt-get install python-pip

Nieuwe versie speedtest-cli installeren

Als PIP is geïnstalleerd, dan kan speedtest-cli vervolgens geïnstalleerd worden middels het volgende commando;

pip install speedtest-cli

Rebooten

En na het installeren van de nodige nieuwe packages is het altijd goed om even te rebooten;

sudo reboot

Virtuele sensoren aanmaken in Domoticz

Deze stap mag worden overgeslagen wanneer je de oude versie van dit script al gebruikte.

In Domoticz dienen drie virtuele sensoren aangemaakt te worden. Deze zullen met bovenstaand script worden gevuld met de waardes van de speedtest-resultaten.

Ga in Domoticz naar Instellingen en vervolgens naar Hardware. Maak onder aan de pagina een nieuw item aan met de naam Speedtest van het type Dummy.

Als je deze hebt aangemaakt kan je in hetzelfde scherm vervolgens op de knop Maak virtuele sensoren klikken. Doe dit drie keer en maak sensoren aan het type “Custom”. Geef deze de namen Ping, Download en Upload.

Ga nu naar Instellingen en vervolgens naar Apparaten en zoek in dit scherm de zojuist aangemaakte sensoren op. Deze hebben alle drie een eigen IDX-nummer (eerste kolom in de tabel). Deze IDX-nummers heb je zo nodig om in te vullen in het script.

Script plaatsen en configureren

Inmiddels hanteer ik de standaard om alle script t.b.v. Domoticz te plaatsen in de folder /home/pi/domoticz/scripts. Dus ik adviseer je om hetzelfde te doen met dit script, maar verplicht is het natuurlijk niet. Sla het bestand op onder de naam speedtest.sh.

In het begin van het script zijn er vier variablen die je zelf dient in te vullen;

Bij DOMOTICZ_SERVER vul je op de plaats van x.x.x.x:yy het IP-adres en de gebruikte poort in van Domoticz. Draai je dit script op de Raspberry Pi waarop je ook Domoticz draait en werkt je op de standaard poort van Domoticz, dan kan je hier localhost:8080 invullen.

Bij IDX_PING, IDX_DOWNLOAD en IDX_UPLOAD vul je de IDX-nummers in die je in de vorige stap hebt aangemaakt en opgezocht.

Schedulen van het script

Om het script op gezette tijden te laten draaien en dus met regelmaat je internet-aansluiting te testen, dien je deze als laatste nog te schedulen (dat is goed Nederlands voor inplannen).

Mocht je niet bekend zijn met crontab, dan adviseer ik je hier even op te Googlen. Voor het aanpassen van je cronjobs gebruik je het volgende commando;

crontab -e

Bij mijzelf laat ik het script 1 keer per uur draaien, precies in het midden van elk uur. De regel hiervoor in crontab ziet er alsvolgt uit;

30 * * * * /home/pi/domoticz/scripts/speedtest.sh

Hoe jij dit wilt inplannen moet je uiteraard zelf weten, maar vaker dan 1 keer per uur heeft in ieder geval weinig zin.

Testen en wachten

Als je alle stappen goed hebt uitgevoerd, dan ben je klaar. Binnen een uur zou je de eerste resultaten in Domoticz moeten zien verschijnen. Mocht je nou niet kunnen wachten (kan ik mij zo maar voorstellen), dan kan je met het volgende commando handmatig het script draaien;

bash /home/pi/domoticz/scripts/speedtest.sh

Zodra het script klaar is (duurt onveer 30 seconden), zou je de eerste waardes in Domoticz moeten terugzien.

Verder Bericht

Vorige Bericht

44 Reacties

  1. Richard 19 augustus 2020

    Bedankt voor het script en ik heb hem geprobeert te instaleren maar op een of andere manier wil het script de waarde niet updaten via wget, als ik het rechtstreeks in de browser doet werkt het wel.
    Enig idee wat dat kan zijn?

  2. Richard 19 augustus 2020

    Laat maar ik heb het probleem gevonden, wachtwoord stond nog aan voor het lokale netwerk.

  3. Buba 4 oktober 2020

    Dank voor het script. Bij de handmatige test moet de map scripts nog worden toegevoegd.

  4. Ivo 23 oktober 2020

    Ik krijg geen waardes door 3x 0 🙁
    Ik heb geen idee waar de fout zit, had ik ook met de CLI script

    Pi zit op wifi, is dat het misschien?

    • jos 24 oktober 2020 — Berichtauteur

      WiFi zal geen verschil maken voor de werking, wel voor de eventuele gemeten snelheid als de wifi-verbinding niet heel snel is. 3 x 0 suggereerde dat je Pi überhaupt geen verbinding met internet heeft. Zou dat kunnen kloppen?

  5. Ivo 24 oktober 2020

    zeker wel verbinding via SSH, domoticz, intern als extern 🙂

    • Ivo 24 oktober 2020

      pi@raspberrypi:~ $ bash /home/pi/domoticz/scripts/speedtest.sh
      Start running speedtest script.
      – Temp-directory already exists, no need to create it.
      – Performing speedtest.
      – Results of speedtest:
      – Ping = ms
      – Download = Mbps
      – Upload = Mbps
      – Updating download, upload and ping values in Domoticz.
      – Removing temp file.
      – Writing log to Domoticz.
      Done running speedtest script.

      • Ivo 26 oktober 2020

        Het is opgelost, ik had wat wisselend hoofdlettegebruik in mijn script

        • Jos 26 oktober 2020

          He wat goed dat je het hebt kunnen oplossen! Heb je nog interessante wijzigingen gedaan aan het script dan? Ben ik uiteraard altijd in geïnteresseerd!

  6. Rob 27 oktober 2020

    Geweldig idee, leuke extra functie! Helaas levert die regex-regel bij mij ook niets op 🙁

    Script loopt goed, ik zie ook waarden weggeschreven worden naar speedtest.txt

    Ping: 9.394 ms
    Download: 88.39 Mbit/s
    Upload: 39.22 Mbit/s

    maar vervolgens krijg ik
    Start running speedtest script.
    – Temp-directory already exists, no need to create it.
    – Performing speedtest.
    – Results of speedtest:
    – Ping = ms
    – Download = Mbps
    – Upload = Mbps
    – Updating download, upload and ping values in Domoticz.
    – Removing temp file.
    – Writing log to Domoticz.
    Done running speedtest script.

    Ook in de logging van Domoticz:
    2020-10-27 15:30:27.421 Status: Incoming connection from:
    2020-10-27 15:30:27.462 Status: Speedtest script finished with results: Ping: ms, Download: Mbps, Upload: Mbps.

    Tot nu toe wist ik weinig van regex of sed dus ik heb het e.e.a. opgezocht en nagekeken maar ik krijg die regex-regel niet zo dat die alleen het getal weergeeft.

    • jos 27 oktober 2020 — Berichtauteur

      Bedoel je bijvoorbeeld de regel => cat $TEMP_FILE | sed -ne ‘s/^Ping: \([0-9]*\.[0-9]*\).*/\1/p’

      Wanneer ik de temp-file tijdelijk niet laat verwijderen en via de command line deze cat over de temp-file laat uitvoeren, dan krijg ik netjes output in de command line.

      Dus eerst voor de regel /bin/rm $TEMP_FILE een # zetten.
      Dan vanuit de command het script uitvoeren met: bash speedtest.sh
      Daarna commando: cat /home/pi/temp/speedtest.txt | sed -ne ‘s/^Ping: \([0-9]*\.[0-9]*\).*/\1/p’

      Kan je eens uitproberen wat dat doet?

      • Rob 27 oktober 2020

        Geweldig! Nu loopt alles perfect. Dank je wel!

        • Mathijs 29 oktober 2020

          Beste Jos,

          Ik zit met het zelfde probleem als Rob, op het moment dat ik de cat regel met de hand uitvoer, krijg ik wel het correcte getal te zien.

          Echter krijg ik ook geen log regel in Domoticz
          Enige wat ik gewijzigd heb is http:// weggehaald, en dit veranderd naar https:// aangezien ik de https verbinding vereis. Alsook het juiste raspberrypi account ingevoerd.
          Ik heb lokaal geen wachtwoord nodig om op domoticz in te loggen.

          Heb je nog tips?
          Alvast bedankt,
          Mathijs

          • jos 29 oktober 2020 — Berichtauteur

            Heb je ‘m wel gedraaid met HTTP? HTTPS werkt waarschijnlijk prima vanaf je computer/telefoon, maar hoeft niet correct te werken vanaf de Raspberry zelf.

          • Mathijs 29 oktober 2020

            Hoi Jos,

            Bedankt voor je snelle reactie.

            Als ik het script draai via http, dan blijft deze zeer lang laden. Maar blijft het probleem dat de cat / sed -ne lijn geen data uit het tekst bestand ophaalt.
            Daar waar dit wel lukt op het moment dat ik het handmatig uitvoer & het .txt bestand tijdelijk niet laat verwijderen.

          • Mathijs 29 oktober 2020

            Beste Jos,

            het is inmiddels gelukt om de waardes zichtbaar te krijgen.
            In het script op de site staat de cat sed -ne op het einde van de regel als:
            //p; dit heb ik gewijzigd naar /\1/p.

            Verder is het ook gelukt om de waardes in domoticz te krijgen. door de http poort te gebruiken (kleinigheidje houdt je toch.

            Nogmaals bedankt voor het script en de snelle reacties.

          • Jos 30 oktober 2020

            Hoi Matthijs,

            Je hebt een heel interessant issue op m’n site gevonden 😉 Door de caching plugin werd op één of andere manier de \1 weggefilterd… ik heb de cache nu uitgezet, en nu is ie wel weer zichtbaar in het script.

            Top het dat nu bij jou ook werkt!

  7. Tim 18 november 2020

    Het script draait en de waardes komen netjes terug, alleen de sensors blijven in Domoticz op 0 staan.

    De IDX nummers van de sensors staan correct in mijn script. Wat zou er mis kunnen zijn?

    • jos 18 november 2020 — Berichtauteur

      Heb je Domoticz toevallig beveiligd met een username en wachtwoord? Het script roept een API aan via HTTP en moet dus wel toegang krijgen.

      • Tim 19 november 2020

        Hoi Jos,

        Jazeker, maar ik heb in de settings ook de volgende adressen toegestaan (Local Networks (no username/password):)

        127.0.0.*;192.168.1.*,localhost

        Dit zou voldoende moeten zijn toch?

        • jos 19 november 2020 — Berichtauteur

          Ik weet niet of je localhost zo mag opnemen eerlijk gezegd. Hij staat bij mij alsvolgt ingesteld, en dat werkt zonder probleem: 192.168.1.*;127.0.0.*

          • Tim 20 november 2020

            Hmm. De poort die ik moet hanteren is (in mijn geval 8080) ook de poort waarmee ik de interface via een browser benader?

  8. Tim 20 november 2020

    Nevermind, het was mijn eigen fout. Ik had de quotes om het DOMOTICZ_SERVER adres laten staan (just getting started ;))

    Bedankt voor je hulp! Het werkt nu.

  9. Bas 9 januari 2021

    Leuke toevoeging aan domoticz en werkt in één keer hier. Bedankt Jos!

  10. Geert Jan 22 januari 2021

    Hoi Jos,

    Eventueel heb ik een RPI 3b gekocht daarop ook Domoticz. In eerste instantie voor het uitlezen van mijn slimmen meter. Sinds dien zie ik steeds meer nieuwe en leuke dingen, zoals het script voor het bijhouden van de internet snelheid. Alles lijkt ook te werken, behalve de planningregel van Cronjob. Als ik het script handmatig start komt alles keurig in Domoticz. Daarna blijft het stil. Moet de aangemaakte Cronjob op een specifieke plek staan om te werken?

  11. Geert Jan 22 januari 2021

    Hoi Jos,

    De regel wordt opgeslagen in: /tpm/crontab.(dit verschilt bij elke keer opslaan)14DE9Y/crontab
    Mijn crontab heeft de volgende inhoud:
    # m h dom mon dow. Command
    20 * * * * /home/pi/domoticz/scripts/speedtest.sh

    • Geert Jan 22 januari 2021

      Zonder punt tussen dow en command

    • jos 22 januari 2021 — Berichtauteur

      Hoe bedoel je precies “/tpm/crontab.(dit verschilt bij elke keer opslaan)14DE9Y/crontab”? Met crontab -e bewerk je in principe rechtstreeks. Nu lijkt het of je iets op een verkeerde of tijdelijk locatie hebt staan.

      • Geert Jan 22 januari 2021

        Elke keer als ik de crontab op sla na een aanpassing veranderd de lettercombinatie. Het blijft in /tmp. De combi die dan volgt is altijd anders. Dan weer een /crontab

        Wat zou een logische plek zijn om het op te slaan?
        Is een crontab automatisch actief? Ik heb veel gelezen over hoe je het in moet vullen maar niet hoe het zich verhoud binnen het OS. Dat maakt het voor mij lastig te begrijpen.

        • jos 22 januari 2021 — Berichtauteur

          Gebruik je wel het commando “crontab -e”? Welke editor gebruik je hiervoor? En zijn je aanpassingen wel opgeslagen als je deze opnieuw opent?

          Crontab is het standaard mechanisme voor het inplannen van scripts. Dit is standaard actief.

          • Geert Jan 24 januari 2021

            Via het commando crontab-e kom ik in de GNU nano 3.2 editor.
            daarin heb ik de regel geplakt uit de tekst boven, zonder hekje er voor. In deze editor worden de wijzigingen goed opgeslagen. Net nog ff getest.
            met het commande sudo crontab -l krijg ik de melding, “no crontab for root.

          • jos 24 januari 2021 — Berichtauteur

            Crontab -e met een spatie tussen de b en de – neem ik aan? Staat hierboven zonder, dus even voor de check!

            Klopt dat als je een sudo crontab draait dat je ‘m daar dan niet ziet. Je draait dan crontab .er sudo rechten, dus dat levert een aparte lijst op.

            Probeer maar een crontab -l zonder de Audi ervoor. Dan zou je de taak die je hebt toegevoegd netjes moeten terug zien.

  12. Geert Jan 31 januari 2021

    Hoi Jos,

    het duurde een poosje maar daar ben ik weer. Ben er inmiddels achter dat de crontab werkt. In de syslog kan ik zien dat er geregeld een opdracht loopt voor de speedtest.

    Weet jij of er ook verschil zit in het uitvoeren van de opdracht via crontab of via de bash opdracht via de terminal? Via de bash opdracht wordt de data wel in Domoticz geupdated, dat kan ik zien in UI van Domoticz. Als de crontab draait volgt er geen update. Ik kan wel in de Domoticz database kijken via SQL maar daar begrijp ik geen hout van.
    Zoals ik het nu zie lijkt het er op dat het script op een of ander manier niet een update kan uitvoeren via de crontab maar wel mbv een directe opdrachtregel in de terminal. Kan dit met met rechten te maken hebben?
    Weet jij waar ik de letterlijke output van de crontab-speedtest opdracht zou moeten zien en hoe?

    • jos 21 februari 2021 — Berichtauteur

      Hi, sorry voor de late reactie. Het maakt niet uit of je het script rechtstreeks vanaf een prompt draait of via een cronjob. Mits uiteraard de rechten gelijk zijn waarmee wordt uitgevoerd.

      In het script wordt aan het einde het txt bestand verwijderd, je zou deze regel even kunnen uitzetten door de inhoud van het bestand in te zien.

  13. Geert Jan 24 februari 2021

    thanks, ga ik proberen

  14. frans 8 april 2021

    Het script heeft het altijd gedaan maar ineens loopt het in een foutmelding. Geen idee waardoor. Iemand een idee?

    bash /home/pi/domoticz/scripts/speedtest.sh

    Traceback (most recent call last):
    File “/usr/bin/speedtest-cli”, line 11, in
    load_entry_point(‘speedtest-cli==2.0.2’, ‘console_scripts’, ‘speedtest-cli’) ()
    File “/usr/lib/python3/dist-packages/speedtest.py”, line 1887, in main
    shell()
    File “/usr/lib/python3/dist-packages/speedtest.py”, line 1783, in shell
    secure=args.secure
    File “/usr/lib/python3/dist-packages/speedtest.py”, line 1027, in __init__
    self.get_config()
    File “/usr/lib/python3/dist-packages/speedtest.py”, line 1113, in get_config
    map(int, server_config[‘ignoreids’].split(‘,’))
    ValueError: invalid literal for int() with base 10: ”
    Download = Mbps
    Upload = Mbps
    Ping = ms

    • Frans 9 april 2021

      Niemand?

    • Boris 16 april 2021

      Had hetzelfde na Ziggo bandbreedte update, draaide ook nog met de speedtest-cli 2.02 versie, nu met 2.1.3.
      Opgelost met navolgende commando’s :

      cd /home/pi/domoticz/scripts
      sudo cp speedtest.sh speedtest_v1old.sh

      cd /usr/bin
      sudo rm speedtest-cli
      sudo rm speedtest

      sudo apt-get update
      sudo apt-get install python-pip

      pip install speedtest-cli (voor pi user, bash commando)
      sudo pip install speedtest-cli (voor root, crontab sh commando)
      sudo reboot

      cd /home/pi/domoticz/scripts
      sudo nano speedtest.sh

      plak/knip 1.1 script deze site
      Vervang waarden met eerdere (uit voorgaann script te halen)
      DOMOTICZ_SERVER
      IDX_DOWNLOAD
      IDX_UPLOAD
      IDX_PING
      Verander als gewenst tempdir naar:
      TEMP_DIR=”/home/pi/domoticz/scripts”

      test of alles weer werkt :
      bash /home/pi/domoticz/scripts/speedtest.sh
      sudo sh /home/pi/domoticz/scripts/speedtest.sh

    • David 18 april 2021

      hier hetzelfde probleem vanaf 1 april. ik vermoed een update die ergens is geïnstalleerd

  15. Rob 18 april 2021

    Gebruik je v1.1 van het script al?
    Als je upgrade doet van 1.0 wel even goede commando van apt-get gebruiken: sudo apt-get remove speedtest-cli

  16. Wim Bre 16 mei 2021

    Goedemorgen Jos,

    Allereerst complimenten voor de duidelijke instructie hoe dit script in Domoticz te implementeren.

    Ik heb de stappen doorlopen en ben er bijna. Wat nog niet werkt is de update van de info in Domoticz.

    Ik zie in het log van Domoticz dat ieder uur de speedtest wordt uitgevoerd:
    2021-05-16 07:30:04.547 Status: Speedtest script finished with results: Ping: ms, Download: Mbps, Upload: Mbps.

    Doe ik het handmatig met bash command dan ziet de regel in het log er zo uit:
    2021-05-16 07:58:09.645 Status: Speedtest script finished with results: Ping: 53.155 ms, Download: 209.09 Mbps, Upload: 17.77 Mbps.

    Ik heb daarna een # voor de /bin/rm $TEMP_FILE command line gezet en gewacht tot na de automatische uitvoering van het script.

    Daarna in de file ” speedtest.txt” gekeken of er waarden in staan maar die was leeg.

    Hieruit trek ik de conclusie dat bij de automatische uitvoer van het script er geen info overgaat naar Domoticz omdat die er op dat moment niet is (speedtest.txt is leeg). Het probleem zit dus niet aan de kant van Domoticz maar blijkbaar wordt het script niet goed uitgevoerd als die via crontab wordt opgestart.

    Enig idee wat de oorzaak hiervan zou kunnen zijn?

  17. Wim Bre 16 mei 2021

    Ik heb de crontab line aangepast van
    30 * * * * /home/pi/domoticz/scripts/speedtest.sh
    naar
    */2 * * * * /home/pi/domoticz/scripts/speedtest.sh
    en nu werkt het wel.

Laat een reactie achter

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.

© 2021 Steenderen.NET

Thema door Anders Norén