Deine Lösung sieht gut aus @willi9974, hast du die irgendwo genauer beschrieben oder gibt es dazu irgendwo mehr zu lesen?
Läuft alles auf einen RasperryPi
Ich hole mir die Daten mit einem Python Skript vom ckpool ab (alle 5 Minuten) und speichere es in eine Influx Datenbank.
Auf dem Raspi ist Grafana drauf, welches es dann aus der Datenbank ausliest und grafisch darstellt.
Wenn du mehr wissen willst sag bescheid.

Skript get.data.py
import requests
from influxdb import InfluxDBClient
from datetime import datetime
import pytz
# Funktion zum Parsen der Hashrate-Einheiten
def parse_hashrate(hashrate_str):
if "G" in hashrate_str:
return float(hashrate_str.replace("G", ""))
elif "T" in hashrate_str:
return float(hashrate_str.replace("T", "")) * 1000
elif "M" in hashrate_str:
return float(hashrate_str.replace("M", "")) / 1000
elif "P" in hashrate_str:
return float(hashrate_str.replace("P", "")) * 1000000
else:
return 0.0
# URL und Datenbankinformationen
url = "https://solo.ckpool.org/users/37XwW2eTKWCvRYK3B7fiLid8Zdtt7p7pwg"
database_name = "blockparty"
influxdb_host = "localhost"
# JSON von der URL abrufen
response = requests.get(url)
data = response.json()
# Zeitzone für die Umrechnung
local_tz = pytz.timezone("Europe/Berlin")
# InfluxDB-Client initialisieren
client = InfluxDBClient(host=influxdb_host, port=8086, database=database_name)
# InfluxDB-Daten vorbereiten
influx_data = [
{
"measurement": "pool_stats",
"tags": {},
"time": datetime.utcfromtimestamp(data["lastshare"]).replace(tzinfo=pytz.utc).astimezone(local_tz),
"fields": {
"hashrate1m": parse_hashrate(data["hashrate1m"]),
"hashrate5m": parse_hashrate(data["hashrate5m"]),
"hashrate1hr": parse_hashrate(data["hashrate1hr"]),
"hashrate1d": parse_hashrate(data["hashrate1d"]),
"hashrate7d": parse_hashrate(data["hashrate7d"]),
"workers": data["workers"],
"shares": data["shares"],
"bestshare": data["bestshare"],
"bestever": data["bestever"],
},
}
]
# Worker-Daten hinzufügen
for worker in data["worker"]:
influx_data.append(
{
"measurement": "worker_stats",
"tags": {"workername": worker["workername"]},
"time": datetime.utcfromtimestamp(worker["lastshare"]).replace(tzinfo=pytz.utc).astimezone(local_tz),
"fields": {
"hashrate1m": parse_hashrate(worker["hashrate1m"]),
"hashrate5m": parse_hashrate(worker["hashrate5m"]),
"hashrate1hr": parse_hashrate(worker["hashrate1hr"]),
"hashrate1d": parse_hashrate(worker["hashrate1d"]),
"hashrate7d": parse_hashrate(worker["hashrate7d"]),
"lastshare": worker["lastshare"],
"shares": worker["shares"],
"bestshare": worker["bestshare"],
"bestever": worker["bestever"],
},
}
)
# Debugging-Ausgaben
#print("InfluxDB-Daten:")
#for data_point in influx_data:
# print(data_point)
# Daten in die InfluxDB schreiben
client.write_points(influx_data)
# Verbindung schließen
client.close()