Edelmetall Dashboard — Live State
Zuletzt aktualisiert: 24.02.2026
Services
Zugang
ssh root@100.122.56.60 # pve1 Kambodscha (Tailscale)
pct exec 136 -- bash
systemctl status edelmetall-dashboard # Streamlit
systemctl status edelmetall-telegram # Telegram Bot
systemctl status cloudflared # Tunnel
# Logs
pct exec 136 -- tail -f /opt/edelmetall/logs/scraper.log
pct exec 136 -- journalctl -u edelmetall-telegram -f
# Scraper manuell
pct exec 136 -- bash -c "source /opt/edelmetall/venv/bin/activate && python3 /opt/edelmetall/scrape.py"
Code-Struktur (CT 136: /opt/edelmetall/)
core/
db.py DB-Verbindung + Schema
prices.py Spot + Händler, COALESCE(buy_price, sell_price)
portfolio.py Portfolio-Berechnung (Krügerrand-Ankaufspreis)
scrapers/
proaurum.py Selenium — CSS Modules [class*='product-root'] (gefixt 2026-02-24)
degussa.py requests Fallback
dashboard/
app.py, tab_*.py Streamlit Dashboard
bot.py Telegram Bot V3
scrape.py Haupt-Scraper (PA → Degussa Fallback bei 0 Ergebnissen)
fetch_spot.py Spot-Preis alle 30min
data/edelmetall.db SQLite
Cron-Jobs (CT 136)
*/30 * * * * python3 /opt/edelmetall/fetch_spot.py
0 7 * * * python3 /opt/edelmetall/scrape.py
0 13 * * * python3 /opt/edelmetall/scrape.py
0 21 * * * python3 /opt/edelmetall/scrape.py
Telegram Bot
| Info |
Wert |
| Token |
8262992299:AAEf8YHPsz42ZdP85DV7JqC4822Ts75GqF4 |
| Service |
edelmetall-telegram.service |
| Befehle |
/start /portfolio /preise /ratio /status |
Portfolio-Konfiguration
| Parameter |
Wert |
| Gold |
33 oz Krügerrand |
| Silber |
500 oz Silbermünzen |
| Startdatum |
2025-12-28 |
| Einkauf Gold |
3.774 EUR/oz |
| Einkauf Silber |
66,80 EUR/oz |
Datenbank (Stand 24.02.2026)
| Tabelle |
Einträge |
Zeitraum |
| spot_prices |
2.031 |
2025-12-18 bis heute |
| gold_prices |
16.776 |
2025-12-18 bis heute |
| silver_prices |
14.033 |
2025-12-18 bis heute |
Scraper-Logik
- Pro Aurum (Selenium) — primär
- Selektor:
[class*='product-root'] (CSS Modules, Stand 2026-02-24)
- Preise:
[class*='buySellSection-price'] — Index 0 = Kaufpreis, Index 1 = Ankaufspreis
- Fallback bei 0 Ergebnissen → Degussa (nicht nur bei Exception!)
- Degussa (requests) — Fallback
- Portfolio nutzt Ankaufspreis (buy_price) für Bewertung
- COALESCE(buy_price, sell_price) in SQL falls Ankaufspreis fehlt
Fixes 24.02.2026
| Problem |
Ursache |
Fix |
| Scraper: 0 Produkte |
Pro Aurum CSS Modules → alter Selektor |
[class*='product-root'] |
| Fallback nie aktiv |
Exception nur bei Fehler, nicht bei leer |
raise ValueError bei 0 Ergebnissen |
| Bot: "Keine Preise" |
SQLite 'localtime' → +7h Versatz |
'localtime' entfernt |
| Portfolio zu hoch |
buy/sell Preise vertauscht (10% Fehler) |
buySellSection-price Index-Reihenfolge |
| buy_price NULL |
Neuer Selektor fand Ankauf nicht |
COALESCE(buy_price, sell_price) |
Konnektivität CT 136
| Typ |
Wert |
| Cloudflare Tunnel |
c94b28f3-f473-475a-87da-b87c1806ecd8 |
| Tailscale |
100.72.230.87 |