Bandbreitenmonitor - Gunook
Bandbreitenmonitor - Gunook
Anonim
Bandbreitenmonitor
Bandbreitenmonitor
Bandbreitenmonitor
Bandbreitenmonitor
Bandbreitenmonitor
Bandbreitenmonitor

Da ich mich oft gefragt habe, welche Bandbreite mein ISP derzeit zur Verfügung stellt (ich verwende ein LTE-Modem für die Internetverbindung), dachte ich an ein Bandbreiten-Monitoring-System. Da das System kompakt und stromsparend sein soll, habe ich als zentrale Komponente einen Raspberry Pi Zero gewählt. Der Raspberry ist über WLAN mit dem Modem verbunden, daher können auch WLAN-Probleme erkannt werden.

Lieferungen

  • Raspberry Pi Zero WH
  • Waveshare E-Ink-Display (2,9 Zoll-E-Paper-Modul)
  • DC-DC-Wandler (z. B. DEBO DCDC 20W)
  • RGB-LED (aus einem alten Gerät entnommen)
  • Druckknopf
  • Schalter
  • Relaismodul (z. B. 2-Wege-Relaismodul2-Wege-Relaismodul)
  • Stecker + Buchse (beide passend für die Größe Ihres Modem-Netzsteckers)
  • 3D gedruckte Hülle

Schritt 1: Funktionen

Merkmale
Merkmale
Merkmale
Merkmale
Merkmale
Merkmale
  • Der Raspberry Pi Zero ist über WLAN verbunden, testet die Up- und Download-Geschwindigkeit und führt halbstündlich eine Ping-Messung durch. Als Basis für die Messungen dient eine Kommandozeilenversion von speedtest.net.
  • Das Ergebnis der Bandbreiten- und Ping-Messung wird auf einem E-Ink-Display angezeigt. Der Zeitpunkt der Messung wird ebenfalls angezeigt.
  • Unterschreitet die Download-Geschwindigkeit einen definierten Schwellwert, schaltet ein Relais das Modem kurzzeitig aus und wieder ein. Das Modem wird somit ohne Veränderung des Gerätes zurückgesetzt (nur die Stromversorgung wird unterbrochen).
  • Um die Bandbreitenmessung manuell auszulösen, steht eine Taste an der Gerätevorderseite zur Verfügung.
  • Die Messwerte werden auf einem Ubidots Dashboard (IOT Portal) angezeigt. In der Übersicht sehen Sie auch den zeitlichen Verlauf der Messwerte und die Gründe für die letzten Resets.
  • Im IOT-Portal finden Sie auch eine Schaltfläche zum Zurücksetzen des Modems aus der Ferne.
  • Der Bandbreitenmonitor verwendet die Stromversorgung des Modems. Keine zusätzliche Versorgung erforderlich. Das Relais unterbricht die Weiterleitung der Stromversorgung zum Modem - die Himbeere bleibt eingeschaltet.

Schritt 2: Verkabelung

Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung
Verdrahtung

Im ersten Bild sieht man den internen Aufbau des Bandbreitenmonitors:

Die wichtigsten Komponenten sind:

    1. Druckknopf
    2. E-Ink-Display
    3. Raspberry Pi Null
    4. Relaismodul
    5. RGB-LED + Widerstände (je nach verwendeter RGB-LED)
    6. Schalter
    7. DC / DC-Wandler
    8. Weiblicher Verbinder

Das zweite Bild zeigt eine schematische Darstellung der Verkabelung. Der Pluspol der Versorgungsspannung wird über den Schalter zum DC-DC Spannungswandler (der die 12V Versorgungsspannung des Routers auf 5V für den Raspberry umwandelt) und über das Relais (über den normal verbundenen Pin) zurück zum Ausgangsanschluss. Somit wird das Modem auch bei ausgeschaltetem Bandbreitenmonitor mit Strom versorgt.

Die Bandbreitenmessung kann manuell über eine Schaltfläche gestartet werden. Zur Visualisierung der verschiedenen Betriebszustände dient eine RGB-LED.

Die Verbindung zwischen Raspberry Pi und E-Ink-Display ist im Schaltplan nicht dargestellt. Schließen Sie das Display gemäß der Tabelle und der Pinbelegung oben an.

Schritt 3: 3D-Druck und Aufbau der Chase

3D-Druck und Aufbau des Chase
3D-Druck und Aufbau des Chase
3D-Druck und Aufbau des Chase
3D-Druck und Aufbau des Chase
3D-Druck und Aufbau des Chase
3D-Druck und Aufbau des Chase
3D-Druck und Aufbau des Chase
3D-Druck und Aufbau des Chase

Folgende Teile werden für das Gehäuse benötigt (siehe Bild oben):

    1. unterer Teil
    2. oberer Teil
    3. Vorderseite
    4. zurück
    5. 4x Halterung

Alle Teile können ohne Stützen gedruckt werden. Sie können die Dateien und einige meiner anderen Designs auch auf Thingiverse finden:

Das Display kann mit den Halterungen und einem doppelseitigen Klebeband an der Frontplatte befestigt werden. Taster und Buchse sind mit Rück- und Rückwand verschraubt. Ich habe 3x20mm Schrauben verwendet, um die beiden Hälften des Gehäuses zu verbinden. Die Toleranzen der Nuten für die Vorder- und Rückwand sind relativ eng. Gegebenenfalls müssen Vorder- und Rückwand am Rand angeschliffen werden (innenseitig, um eine Zerstörung der Oberfläche zu vermeiden).

Schritt 4: Einrichten des Raspberry PI

Einrichten des Raspberry PI
Einrichten des Raspberry PI
Einrichten des Raspberry PI
Einrichten des Raspberry PI

Diese Setup-Anleitung basiert auf der Zusammenstellung mehrerer Installationsanleitungen aus verschiedenen Quellen (Hersteller von e-Ink-Displays, …). Bei mir hat die Anleitung zum gewünschten Ergebnis geführt. Da ich kein Linux-Experte bin, wurden keine Optimierungen oder ähnliches vorgenommen. Mir ist bewusst, dass es sicherlich bessere und effizientere Lösungen gibt.

Nehmen wir an, Sie haben Raspbian bereits auf Ihrem Pi installiert (es gibt viele Tutorials zur Installation des Basisbetriebssystems) und Sie haben ein Display (über miniHDMI), Maus und Tastatur angeschlossen. Eine korrekt eingerichtete WLAN-Verbindung zum Router oder zum Internet wird ebenfalls vorausgesetzt. Sofern nicht anders angegeben, werden alle Installationsvorgänge im Terminal durchgeführt.

Remotedesktop installieren (um von Ihrem Computer auf den PI zuzugreifen):

sudo apt-get update

sudo apt-get

xrdp installieren

oder man kann auch Headless per ssh arbeiten (siehe z. B.

Passwort ändern:

www.raspberrypi.org/forums/viewtopic.php?t=193620

Speedtest installieren:

sudo

apt-get install python-pip

sudo pip install speedtest-cli

um zu testen, ob die Installation erfolgreich war, führen Sie Speedtest im Terminal aus:

speedtest-cli

Wenn alles richtig ist, sollten Sie etwas wie im ersten Bild oben erhalten.

Verkabelung installierenPI

sudo apt-get install git-core

git-Klon git://git.drogon.net/wiringPi

CD-VerkabelungPi

./bauen

(siehe auch

Alternativ:

sudo apt-get install wiringpi

(siehe

BCM2835 installieren

(siehe

bcm2835-1.60.tar.gz herunterladen (oder eine neuere Version, falls verfügbar)

tar zxvf bcm2835-1.60.tar.gz

cd bcm2835-1.60

./konfigurieren

machen

sudo machen check

sudo machen installieren

Installieren Sie die Python-Imaging-Bibliothek

sudo apt-get install python-imaging

Alternativ:

sudo apt-get install python-pil

Aktivieren Sie die I2C-Funktion.

Führen Sie den folgenden Befehl aus, um Ihr Raspberry Pi-Board zu konfigurieren:

sudo raspi-config

Wählen Sie Schnittstellenoptionen -> I2C -> Ja, um den I2C-Kerntreiber zu starten. Dann müssen Sie auch die Konfigurationsdatei ändern. Führen Sie den folgenden Befehl aus, um die Konfigurationsdatei zu öffnen:

sudo nano /etc/modules

Fügen Sie der Konfigurationsdatei die folgenden zwei Zeilen hinzu

i2c-bcm2708

i2c-dev

Siehe auch

Aktivieren Sie die SPI-Funktion

Führen Sie den folgenden Befehl aus, um Ihr Raspberry Pi-Board zu konfigurieren:

sudo raspi-config

Wählen Sie Schnittstellenoptionen -> SPI -> Ja, um den SPI-Kerntreiber zu starten.

Installieren Sie zusätzliche Schriftarten:

sudo apt-get install ttf-mscorefonts-installer

Schriftarten herunterladen und installieren (Roboto + Droid)

gksudo

pcmanfm

Um den Dateimanager mit Root-Rechten zu starten und TrueType-Schriften in den Ordner /usr/share/fonts/truetype zu kopieren

Alternativ:

Kopieren Sie die Schriftarten mit WinSCP in den Downloads-Ordner (ssh muss aktiviert sein, um WinSCP zu verwenden)

sudo cp -r /home/pi/Downloads/droid /usr/share/fonts/truetype

sudo cp -r /home/pi/Downloads/roboto /usr/share/fonts/truetype

Sie benötigen Root-Rechte, um auf den Schriftartenordner zuzugreifen. Vielleicht gibt es bessere Möglichkeiten, dies zu tun (wie bereits erwähnt, ich bin kein Linux-Experte), aber beide Wege haben für mich funktioniert.

Python-Dateien:

Verwenden Sie den Dateimanager, um einen neuen Ordner "bandwidth_monitor" zu erstellen

Kopieren Sie alle Dateien in das Verzeichnis Bandbreite_monitor

Python-Dateien und Skripte ausführbar machen

chmod +x *.py

chmod +x speedtest-cron.sh

crontab konfigurieren

crontab -e

Crontab wird verwendet, um die Programmausführung zu planen, z. Geschwindigkeitstest alle 30 min. Fügen Sie Ihrer crontab folgende Zeilen hinzu (siehe auch zweite Abbildung):

@reboot /usr/bin/python /home/pi/bandwidth_monitor/post_restart_message.py &

@reboot sleep 30 && /usr/bin/python /home/pi/bandwidth_monitor/poll_test_now_button.py */30 * * * * /home/pi/bandwidth_monitor/speedtest-cron.sh */3 * * * * /usr/ bin/python /home/pi/bandwidth_monitor/poll_killswitch.py 13 03 * * * /usr/bin/python /home/pi/bandwidth_monitor/refresh_display.py

Beschreibung der geplanten Aufgaben:

  • Beim Neustart wird die Neustartnachricht in das IOT-Dashboard geschrieben
  • beim Neustart wird die Umfrage test_now_button gestartet
  • alle 30 Minuten wird eine Bandbreitenmessung durchgeführt
  • alle 3 Minuten wird der Status der Remote-Reset-Taste (auf dem IOT-Dashboard) überprüft
  • einmal täglich wird ein Anzeigeaktualisierungszyklus gestartet.

Eine kurze Beschreibung der Programme finden Sie im Abschnitt Software.

Schritt 5: Software

Software
Software

Die Software ist in mehrere Dateien/Programme aufgeteilt:

Bandbreite_monitor_0_4.py ist das Hauptprogramm, das von Crontab jede halbe Stunde aufgerufen wird. Es führt einen Bandbreitentest durch (über die Befehlszeilenversion von speedtest.net). Während des Tests leuchtet die RGB-LED blau. Wenn die Bandbreite über dem ausgewählten Schwellenwert liegt, wird der Wert auf dem E-Ink-Display (zusammen mit einem Zeitstempel) angezeigt und in das Ubidots-Dashboard exportiert. Liegt die Bandbreite unter dem Schwellwert, leuchtet die LED rot und die Messung wird nach kurzer Verzögerung wiederholt. Nach 3 negativen Versuchen wird das Relais aktiviert und damit die Stromversorgung des Modems unterbrochen. Reset-Code (Wert=2) wird in den Log-Bereich geschrieben.

poll_killswitch.py liest den Status einer booleschen Variablen auf dem Dashboard. Wenn killswitch_state true ist, wird das Relais aktiviert und die Stromversorgung des Modems unterbrochen. Während der Abfrage des Killswitches wird die RGB-LED grün. Nach dem Reset wird der killswitch_state auf false gesetzt und ein Eintrag im Log-Bereich des Dashboards generiert (Wert=1).

poll_test_now_button.py wartet darauf, dass der Druckknopf auf der Vorderseite des Gehäuses gedrückt wird. Durch Aktivieren des Buttons wird manuell eine Bandbreitenmessung ausgelöst. Beim Programmstart (beim Neustart des Raspberry Pi) blinkt die RGB-LED rot.

post_restart_message.py schreibt den Reset-Code (value=3) in den Log-Bereich des Dashboards. Dies zeigt an, dass der Bandbreitenmonitor neu gestartet wurde. Während des Programmstarts blinkt die RGB-LED blau.

test_LED.py und test_relay.py sind einfache Skripte, mit denen die Hardwarefunktion der RGB-LED und des Relais getestet werden kann.

epdconfig.py und epd2in9.py sind Gerätetreiber für das von Waveshare bereitgestellte E-Ink-Display.

Damit die Programme auf das Ubidots-Dashboard zugreifen können, müssen Sie Ihre individuellen Token und Geräte- oder Variablennamen hinzufügen (wenn Sie unterschiedliche Notationen verwenden). Suchen Sie nach einem Abschnitt wie dem im Bild oben gezeigten (ersetzen Sie XXXXXXXX durch Ihren Token).

Umfassende Tutorials zum Aufbau des Dashboards und zur Integration des Dashboards in ein Python-Programm finden Sie direkt auf der Ubidots-Seite (https://help.ubidots.com/de/) oder über Google.

Schritt 6: IOT-Dashboard

IOT-Dashboard
IOT-Dashboard

Das von Ubidots gehostete Dashboard (siehe https://ubidots.com) enthält mehrere Bereiche, die im Folgenden kurz beschrieben werden.

    1. Zeitlicher Ablauf der Up- und Download-Geschwindigkeit. Jede halbe Stunde wird ein neuer Wert in das Diagramm eingefügt.
    2. Zeitverlauf der gemessenen Ping-Zeit. Jede halbe Stunde wird ein neuer Wert in das Diagramm eingefügt.
    3. Zeitlicher Ablauf der durchschnittlichen Download-Geschwindigkeit. Der Mittelwert über 24 Stunden wird berechnet und in das Diagramm geschrieben.
    4. Tabellenkalkulation der aktuellen Messwerte inklusive Zeitstempel.
    5. Fernbedienungstaste zum Zurücksetzen des Modems über das Internet. Die Abfrage erfolgt alle 3 Minuten, d.h. es kann einige Zeit dauern, bis die Aktion ausgeführt wird.
    6. Protokollierung der letzten Resets inklusive des Resetgrundes (Fernauslösung, Abschalten oder Spannungsverlust, Unterschreiten der Mindestbandbreite)

Umfassende Tutorials zum Aufbau des Dashboards und zur Integration des Dashboards in ein Python-Programm finden Sie direkt auf der Ubidots-Seite (https://help.ubidots.com/de/) oder über Google.