Bitcoin-Preis Tracker mit Raspberry Pi, Sense Hat und Python basteln

Kein Kommentar Autor: Jürgen (jdo)

Mit dem Sense Hat kann man richtig Spaß haben, mitunter eine eigene Wetterstation basteln. Hängt der Zusatz an einem Raspberry Pi 4 und Du betreibst den Pi headless, dann startet die Kombination vielleicht nicht. Die Lösung findest Du hier. Nun habe ich mir gedacht, dass man damit doch auch einen Bitcoin-Preis Tracker basteln kann. Es geht natürlich auch für andere Kryptowährungen. Funktioniert hat die Sache, aber es gab ein paar Stolperfallen. Ich möchte hier einfach den Weg zu meiner Lösung beschreiben, wie Du mit dem Raspberry Pi und Python 3 den Bitcoin-Preis abfragen kannst.

Mit diesem T-Shirt kannst Du übrigens angeben, dass sich Deine ₿-Investition gelohnt hat.

₿in rentner

₿in rentner

Wahrscheinlich packen Programmier-Gurus mein Vorhaben in einen Einzeiler. Ich programmiere aber nicht so viel und meine Lösung funktioniert. Von daher bin ich zufrieden damit. Ich gehe Schritt für Schritt durch, was ich gemacht habe. Das komplette Script findest Du am im Laufe des Beitrags.

Bitcoin-Preis mit Python und Raspberry Pi abfragen

Da gibt es nun etliche Websites, die man anzapfen kann. Ich habe mich für cryptonator.com entschieden, weil es den gewünschten Wert praktisch im JSON-Format liefert. Außerdem unterstützt der Anbieter eine Menge Währungen und Kryptowährungen und Du kannst kombinieren, wie Du willst. Auch ein Euro-Dollar-Paar ist möglich. Hinzu kommt noch, dass Du Werte von mehreren Exchanges bekommst und wenn Du willst, kannst Du Dir den Wert von einer bestimmten Börse anzeigen lassen.

Bitcoin-Preis von Cryptonator.com

Bitcoin-Preis von Cryptonator.com

Mir reicht aber der Ticker und deswegen werde ich das als URL benutze (der Unterschied ist, dass in der URL full gegen ticker getauscht wird):

https://api.cryptonator.com/api/ticker/btc-usd

Damit bekomme ich die gleiche Ausgabe wie im Screenshot, aber ohne die Märkte. Hole ich mir die URL über Pythons requests, dann stoße ich direkt auf das erste Problem.

Cloudflare funkt dazwischen

Ich wollte mir die JSON-Daten ausgeben lassen und habe eine Fehlermeldung bekommen.

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Nun habe ich mir anzeigen lassen, was ich mir da eigentlich von der Website hole und das kam dabei heraus:

Irgendwas passt Cloudflare nicht – da müssen wir etwas basteln

Irgendwas passt Cloudflare nicht – da müssen wir etwas basteln

Anders gesagt funkt Cloudflare dazwischen und macht eine Bot-Prüfung. Ein Aufruf mit curl hat aber funktioniert. Nun gibt es zwei Optionen.

  • Ich hole mir die Daten mit curl und verarbeite sie weiter
  • Ich verwende cfscrape – das habe ich nach etwas Recherche gefunden

Letzteres ist ein einfaches Python-Modul, dass die Anti-Bot-Seite von Cloudflare umgeht. Es scheint mir an dieser Stelle eleganter und deswegen habe ich mich dafür entschieden. Du installierst das Modul auf dem Raspberry Pi via pip. Vielleicht musst Du das Programm selbst erst installieren:

sudo apt install python3-pip

Danach folgt ein

pip3 install cfscrape

Nun komme ich an die Daten, kann das JSON-Format verarbeiten und den Preis heraussuchen. Da ich persönlich keine Nachkommastellen brauche, nehme ich nur der Wert vor dem Punkt:

import json
import cfscrape
scraper = cfscrape.create_scraper()

url = 'https://api.cryptonator.com/api/ticker/btc-usd'
cfurl = scraper.get(url).content
data = json.loads(cfurl)
price = data['ticker']['price']
rounded = price.partition('.') # Der Punkt ist der Trenner
print(rounded[0]) # Preis vor dem Komma

Das war im Prinzip schon die gesamte Magie. Wie hier beschrieben kannst Du auf dem Raspberry Pi (Raspbian) oder einem System mit Python den Bitcoin-Preis abfragen. Da ich nun den Wert habe, kann ich ihn auf dem Sense HAT anzeigen lassen oder auf dem Raspberry Pi verarbeiten, wie ich möchte.

Bitcoin-Preis auf dem Sense HAT ausgeben

Ab hier sind der Fantasie echt keine Grenzen gesetzt. Ich habe mich passend zur momentanen Situation entschieden, den Wert rot ausgeben zu lassen, wenn Bitcoin unter 10.000 US-Dollar ist und grün, wenn es die psychologische wichtige Marke wieder knackt.

Dafür definiere ich auch die Farben für den Sense HAT und importiere die Bibliothek natürlich. Die Zeile mit der Rotation brauche ich nur, weil mein Sense HAT so an der Wand hängt. Das gesamte Script sieht wie folgt aus:

from sense_hat import SenseHat
import json
import cfscrape

scraper = cfscrape.create_scraper()
sense = SenseHat()
blue = (0, 0, 255)
yellow = (255, 255, 0)
red = (255, 0, 0)
green = (0, 255, 0)

url = 'https://api.cryptonator.com/api/ticker/btc-usd'
cfurl = scraper.get(url).content
data = json.loads(cfurl)

price = data['ticker']['price']
rounded = price.partition('.')

sense.set_rotation(90) #optional, weil mein Sense Hat an der Wand hängt

if int(rounded[0]) >= 10000:
    sense.show_message(rounded[0], text_colour=green, scroll_speed=0.1)
else:
    sense.show_message(rounded[0], text_colour=red, scroll_speed=0.1)

sense.clear() # brauchst Du nur, wen Du die gesamte Matrix löschen willst

Mögliche Variationen

Als Idee könntest Du rot und grün auch wie bei den Börsen verwenden und damit anzeigen, ob sich der Wert nach unten oder oben verändert hat. Den Wert dafür hast Du aus change:

data['ticker']['change']

Ist er negativ, ging es nach unten (rot). Ist er positiv, zeigen wir die Sache grün an. Das Ende des Scripts könnte dann so aussehen:

if float(data['ticker']['change']) >= 0:
    sense.show_message(rounded[0], text_colour=green, scroll_speed=0.1)
else:
    sense.show_message(rounded[0], text_colour=red, scroll_speed=0.1)

sense.clear()

Oder Du lässt Dir den Wert ausgeben, änderst aber den Hintergrund je nach change. Die Hintergrundfarbe beim Sense HAT änderst Du mit back_colour – habe mir noch die Farbe Schwarz definiert – black = (0, 0, 0):

if float(data['ticker']['change']) >= 0:
    sense.show_message(rounded[0], text_colour=black, back_colour=green, scroll_speed=0.1)
else:
    sense.show_message(rounded[0], text_colour=yellow, back_colour=red, scroll_speed=0.1)

sense.clear() # hier nutze ich es, sonst würde die Hintergrundfarbe nach Ablauf des Scripts weiter leuchten

Den Wert in Binärform auf der Sense-Hat-Matrix anzuzeigen, lasse ich lieber. Da wird der Platz früher oder später nicht mehr ausreichen. 😉

Was sind Deine Ideen? Gerne als Kommentar!

Bitcoin-Preis alle 5 Minuten auf dem Sense HAT anzeigen lassen

Möchtest Du den Bitcoin-Preis zum Beispiel alle 5 Minuten über Deinen Sense HAT flimmern lassen, dann ist das einfach. Ich gehe davon aus, dass Du den Code in einer Datei mit Namen btc-ticker.py gespeichert hast und sie im Verzeichnis /home/pi liegt. Erstelle auf Deinem Raspberry Pi nun einen Cronjob. Zunächst öffnest Du mit nachfolgendem Befehl die sogenannte crontab:

crontab -e

Danach fügst Du so eine Zeile ein:

*/5 * * * * /usr/bin/python3 /home/pi/btc-ticker.py  >> /dev/null 2>&1

Der Befehl wird alle 5 Minuten ausgeführt. Zum Beispiel 14:00, 14:05, 14:10 und so weiter.

Nette Pi-Konstellation

Suchst Du ein VPN für den Raspberry Pi? NordVPN* bietet einen Client, der mit Raspberry Pi OS (32-Bit / 64-Bit) und Ubuntu für Raspberry Pi (64-Bit) funktioniert.




 Alle Kommentare als Feed abonnieren

Kommentare sind geschlossen.