# Speedtest_Display_Rasberry_Pi

<img src="Bilder/IMG_0144.jpeg" width="500">


## 1. Raspberry Pi OS installieren

Empfohlen:

- Raspberry Pi OS Lite (64 Bit)

Mit Raspberry Pi Imager auf die SD-Karte schreiben.

Während des Flashens direkt konfigurieren:

- WLAN
- SSH aktivieren
- Hostname setzen

---

## 2. System aktualisieren

```bash
sudo apt update
sudo apt full-upgrade -y
sudo reboot
```

---

## 3. SPI aktivieren

```bash
sudo raspi-config
```

Dann:

```text
Interface Options
→ SPI
→ Enable
```

Neustarten:

```bash
sudo reboot
```

---

## 4. Prüfen ob SPI aktiv ist

```bash
ls /dev/spi*
```

Erwartet:

```text
/dev/spidev0.0
/dev/spidev0.1
```

---

## 5. TFT-Display aktivieren

Datei öffnen:

```bash
sudo nano /boot/firmware/config.txt
```

Ganz unten ergänzen:

```ini
dtparam=spi=on

dtoverlay=piscreen,speed=16000000,rotate=270
```

---

## 6. Framebuffer aktivieren

Neustart:

```bash
sudo reboot
```

Danach prüfen:

```bash
ls /dev/fb*
```

Erwartet:

```text
/dev/fb0
```

---

## 7. Testbild auf Framebuffer

```bash
sudo apt install -y fbi
```

Test:

```bash
sudo fbi -T 1 -d /dev/fb0 -noverbose test.jpg
```

---

## 8. Python installieren

```bash
sudo apt install -y python3 python3-pip python3-pil python3-numpy
```

---

## 9. DejaVu Fonts installieren

```bash
sudo apt install -y fonts-dejavu-core
```

Prüfen:

```bash
ls /usr/share/fonts/truetype/dejavu/
```

---

## 10. InfluxDB Python Client installieren

```bash
pip3 install --break-system-packages influxdb-client
```

---

## 11. Python-Datei anlegen

```bash
nano /home/hubobel/down.py
```

Python-Code einfügen und speichern.

---

## 12. Testlauf

```bash
python3 /home/hubobel/down.py
```

Jetzt sollte sichtbar sein:

- Downloadrate
- Uploadrate
- Ping
- WLAN-IP
- WAN-IP
- Verlaufsgrafik

---

## 13. systemd Service anlegen

```bash
sudo nano /etc/systemd/system/down.service
```

Inhalt:

```ini
[Unit]
Description=Framebuffer Speedtest Display
After=network-online.target

[Service]
Type=simple
User=hubobel
WorkingDirectory=/home/hubobel
ExecStart=/usr/bin/python3 /home/hubobel/down.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
```

---

## 14. Service aktivieren

```bash
sudo systemctl daemon-reload
sudo systemctl enable down.service
sudo systemctl start down.service
```

---

## 15. Status prüfen

```bash
systemctl status down.service
```

Live-Log:

```bash
journalctl -u down.service -f
```

---

## 16. Nach Reboot testen

```bash
sudo reboot
```

---

# Ergebnis

Das System läuft danach:

- ohne Desktop
- direkt auf `/dev/fb0`
- rebootfest über systemd
- ressourcenschonend
- ideal für Embedded-Statusanzeigen


## Dashboard-Umschaltung per GPIO-Taster

Das Display unterstützt drei unterschiedliche Dashboards, die direkt über GPIO-Taster am Raspberry Pi ausgewählt werden können.

### Verwendete GPIOs

| Funktion | GPIO | Pin |
|---|---|---|
| Dashboard 2 | GPIO5 | Pin 29 |
| Dashboard 3 | GPIO21 | Pin 40 |
| Masse (GND) | — | Pin 39 |

Die Taster werden jeweils zwischen GPIO und GND angeschlossen.  
Die internen Pull-Up-Widerstände des Raspberry Pi werden per `gpiozero` verwendet, daher sind keine zusätzlichen Widerstände notwendig.

<img src="Bilder/Schema_GPIO.png" width="500">

### Logik

| Zustand | Anzeige |
|---|---|
| kein Taster aktiv | Dashboard 1 |
| GPIO5 gegen GND | Dashboard 2 |
| GPIO21 gegen GND | Dashboard 3 |

## Hinweise zur Konfiguration

Die dargestellten Werte werden nicht direkt durch das Projekt ermittelt, sondern aus bereits vorhandenen Datenquellen abgerufen.

Voraussetzung ist, dass die benötigten Messwerte über ioBroker und/oder InfluxDB bereitgestellt werden. Die verwendeten Datenpunkte, Measurements, URLs, Zugangsdaten und Abfragen müssen daher an die jeweilige Umgebung angepasst werden.

Das Projekt dient als Beispiel für die Visualisierung von Infrastruktur-, Netzwerk- und Systemdaten. Welche Werte angezeigt werden, hängt von den in der eigenen Installation verfügbaren Datenquellen ab.

Aktuell werden die Daten unter anderem aus folgenden Quellen bezogen:

- InfluxDB (z. B. Speedtest-, Proxmox- und Sensordaten)
- ioBroker Simple-API (`/getPlainValue/...`)
- UniFi Controller / UniFi Network über ioBroker
- Linux-Control Adapter für Systemdaten

Vor der Inbetriebnahme müssen die verwendeten Datenpunkte und URLs entsprechend der eigenen Umgebung angepasst werden.
## Displaysteuerung

Die Hintergrundbeleuchtung des Displays kann über einen ioBroker-Datenpunkt gesteuert werden:

```text
javascript.0.Variablen.Server_Display
```

Mögliche Werte:

- `true` → Dashboard aktiv
- `false` → Display wird schwarz geschaltet

Bei deaktiviertem Display werden keine Dashboards erzeugt und keine Datenabfragen durchgeführt. Das Skript prüft lediglich in regelmäßigen Abständen den Schaltzustand und aktiviert die Anzeige automatisch wieder, sobald der Datenpunkt auf `true` gesetzt wird.



# Screenshots


## Dashboard 2 – Hubobels Netzwerk
Übersicht über die UniFi-Infrastruktur mit:

- Aktive Clients (LAN / WLAN)
- UXG Max CPU- und RAM-Auslastung
- US24 CPU- und RAM-Auslastung
- US24 Temperatur
- Gateway-Uptime

<img src="Bilder/Dashboard_2.png" width="500">


## Dashboard 3 – Proxmox Monitoring
Übersicht über den Proxmox-Host mit:

- Aktuelle CPU-Frequenz
- CPU-Auslastung
- Load Average (1 / 5 / 15 Minuten)
- RAM-Auslastung inkl. absolutem Verbrauch
- CPU-Temperatur
- Serverraumtemperatur

<img src="Bilder/Dashboard_3.png" width="500">

## Lizenz

Dieses Projekt steht unter der MIT-Lizenz. Details siehe Datei `LICENSE`.



