Rename to NecroHash, add remote, enhance dashboard for multi-device stats
Some checks failed
Docker Build & Push / build-and-push (push) Failing after 6s
Some checks failed
Docker Build & Push / build-and-push (push) Failing after 6s
This commit is contained in:
74
README.md
74
README.md
@@ -1,77 +1,43 @@
|
||||
# Gridseed WebGUI
|
||||
# NecroHash
|
||||
|
||||
Ein modernes Web-Interface für den Betrieb von Gridseed ASIC Minern am Raspberry Pi 1 (oder neuer). Inspiriert von Klassikern wie MinePeon und Scripta, aber mit moderner Technologie und Optik.
|
||||
**NecroHash** ist eine moderne, leichtgewichtige Web-Oberfläche zur Steuerung und Überwachung von Gridseed ASIC Minern. Entwickelt für den Raspberry Pi (ab Gen 1), verbindet es den Retro-Charme alter Mining-Hardware mit moderner Web-Technologie.
|
||||
|
||||
## Features
|
||||
|
||||
- **Dashboard:** Echtzeit-Überwachung von Hashrate, Hardware-Fehlern, Shares und Temperaturen.
|
||||
- **Visualisierung:** Live-Graph der Hashrate und übersichtliche Status-Karten.
|
||||
- **Steuerung:** Neustart des Miners und Anpassung der Konfiguration über das Web-Interface.
|
||||
- **Modern UI:** Responsive Dark-Mode Design basierend auf Bootstrap 5.
|
||||
- **Leichtgewichtig:** Optimiert für Raspberry Pi 1 (Python Flask Backend, kein Docker notwendig).
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Raspberry Pi (ab Version 1)
|
||||
- Python 3.7+
|
||||
- Installierter `cgminer` mit Gridseed-Support (muss separat installiert werden, z.B. dmaxl's fork).
|
||||
- **Multi-Device Support:** Erkennt und überwacht automatisch alle angeschlossenen Gridseed-Einheiten.
|
||||
- **Echtzeit-Dashboard:**
|
||||
- Aggregierte Hashrate (MH/s)
|
||||
- Hardware-Fehler & Shares
|
||||
- Temperatur-Überwachung pro Gerät
|
||||
- Interaktiver Verlaufsgraph
|
||||
- **Steuerung:**
|
||||
- Pool-Konfiguration (URL, Worker, Passwort)
|
||||
- Frequenz-Einstellung (Global für alle Units)
|
||||
- Restart-Funktion
|
||||
- **Tech Stack:** Python Flask, Bootstrap 5 (Dark Mode), Vanilla JS.
|
||||
|
||||
## Installation
|
||||
|
||||
1. Repository klonen:
|
||||
```bash
|
||||
git clone <URL_ZUM_REPO> /opt/gridseed-gui
|
||||
cd /opt/gridseed-gui
|
||||
git clone https://git.klenzel.net/admin/NecroHash.git /opt/necrohash
|
||||
cd /opt/necrohash
|
||||
```
|
||||
|
||||
2. Abhängigkeiten installieren & Starten:
|
||||
Das `start_gui.sh` Skript kümmert sich um das Python Virtual Environment.
|
||||
2. Starten:
|
||||
```bash
|
||||
./start_gui.sh
|
||||
```
|
||||
|
||||
3. Zugriff:
|
||||
Öffnen Sie im Browser `http://<IP-DES-PI>:5000`
|
||||
3. Browser öffnen: `http://<IP>:5000`
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### cgminer Setup
|
||||
Damit die GUI mit dem Miner kommunizieren kann, muss der `cgminer` mit API-Support gestartet werden.
|
||||
Die GUI erwartet, dass sie die Konfigurationsdatei `cgminer.conf` lesen und schreiben kann.
|
||||
NecroHash nutzt den `cgminer` API-Server. Starten Sie `cgminer` mit der Konfiguration im Projektordner:
|
||||
|
||||
Starten Sie Ihren Miner idealerweise so:
|
||||
```bash
|
||||
cgminer -c /opt/gridseed-gui/cgminer.conf
|
||||
cgminer -c /opt/necrohash/cgminer.conf
|
||||
```
|
||||
|
||||
Stellen Sie sicher, dass in der `cgminer.conf` folgende API-Einstellungen gesetzt sind (passiert automatisch bei Nutzung der Standard-Config):
|
||||
```json
|
||||
"api-listen": true,
|
||||
"api-allow": "W:127.0.0.1"
|
||||
```
|
||||
|
||||
### Autostart
|
||||
Um die GUI beim Booten zu starten, fügen Sie einen Eintrag in die `/etc/rc.local` oder erstellen Sie einen systemd Service.
|
||||
|
||||
**Systemd Beispiel (`/etc/systemd/system/gridseed-gui.service`):**
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Gridseed Web GUI
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
User=pi
|
||||
WorkingDirectory=/opt/gridseed-gui
|
||||
ExecStart=/opt/gridseed-gui/start_gui.sh
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
## Screenshots
|
||||
|
||||
Das Interface bietet eine übersichtliche Seitenleiste und ein Dashboard im Dark-Mode.
|
||||
|
||||
## Lizenz
|
||||
MIT
|
||||
MIT
|
||||
2
app.py
2
app.py
@@ -5,7 +5,7 @@ import os
|
||||
import subprocess
|
||||
|
||||
app = Flask(__name__)
|
||||
app.secret_key = 'gridseed_miner_control_secret'
|
||||
app.secret_key = 'necrohash_miner_control_secret'
|
||||
|
||||
miner_api = CgminerAPI()
|
||||
config_mgr = ConfigManager()
|
||||
|
||||
@@ -13,7 +13,7 @@ else
|
||||
source venv/bin/activate
|
||||
fi
|
||||
|
||||
echo "Starting Gridseed WebGUI..."
|
||||
echo "Starting NecroHash WebGUI..."
|
||||
# Run with gunicorn for production or python directly for dev.
|
||||
# Using python for simplicity as requested on Pi 1
|
||||
python app.py
|
||||
|
||||
@@ -61,6 +61,11 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
document.getElementById('stat-accepted').innerText = formatNumber(summary['Accepted'] || 0);
|
||||
document.getElementById('stat-hw').innerText = formatNumber(summary['Hardware Errors'] || 0);
|
||||
}
|
||||
|
||||
// Update Device Count
|
||||
if (devs) {
|
||||
document.getElementById('stat-devices').innerText = devs.length;
|
||||
}
|
||||
|
||||
// Update Max Temp
|
||||
let maxTemp = 0;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Gridseed Control</title>
|
||||
<title>NecroHash</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
|
||||
<link href="{{ url_for('static', filename='css/style.css') }}" rel="stylesheet">
|
||||
@@ -16,7 +16,7 @@
|
||||
<div class="d-flex flex-column align-items-center align-items-sm-start px-3 pt-3 text-white min-vh-100">
|
||||
<a href="/" class="d-flex align-items-center pb-3 mb-md-0 me-md-auto text-white text-decoration-none">
|
||||
<i class="fa-solid fa-microchip fa-2x me-2"></i>
|
||||
<span class="fs-4 d-none d-sm-inline">GridseedPi</span>
|
||||
<span class="fs-4 d-none d-sm-inline">NecroHash</span>
|
||||
</a>
|
||||
<ul class="nav nav-pills flex-column mb-sm-auto mb-0 align-items-center align-items-sm-start w-100" id="menu">
|
||||
<li class="nav-item w-100">
|
||||
|
||||
@@ -10,7 +10,16 @@
|
||||
|
||||
<!-- Top Stats Cards -->
|
||||
<div class="row mb-4 g-3">
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-2">
|
||||
<div class="card bg-dark border-secondary h-100">
|
||||
<div class="card-header border-secondary">Devices</div>
|
||||
<div class="card-body">
|
||||
<h2 class="card-title display-6 fw-bold text-white" id="stat-devices">0</h2>
|
||||
<p class="card-text text-muted">Active</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<div class="card text-bg-primary h-100">
|
||||
<div class="card-header">Hashrate (5s)</div>
|
||||
<div class="card-body">
|
||||
@@ -37,7 +46,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-md-2">
|
||||
<div class="card text-bg-warning h-100 text-dark">
|
||||
<div class="card-header">Max Temp</div>
|
||||
<div class="card-body">
|
||||
|
||||
Reference in New Issue
Block a user