Ereignishorizont
Lightning ATM

Lightning ATM

Bitcoin Lightning ATM – Pocket Edition

Dies ist ein Tutorial für den Bitcoin Lightning ATM – Pocket Edition. Das ist ein "Do It Youself" Projekt, bestehend aus einem Mini Computer (Raspberry Pi Zero), einem Münzprüfer, einen Display, einem Gehäuse aus dem 3D-Drucker und einem Bitcoin Lightning Wallet als Finanzierungsquelle. Der Automat übernimmt die Aufgabe des Geldwechslers. Er tauscht Fiat-Münzen in wertvolle Bitcoin Lightning ⚡ Satoshis 丰. Abholen kann sich der Benutzer die Satoshis per QR-Code (LNURL-withdraw) auf sein Handy Wallet. Es gibt bereits gute Anleitungen, auf die ich später verweise, aber mir fehlte eine Schritt für Schritt Anleitung, speziell für diese Pocket Edition mit Anbindung an ein LNTXBOT Wallet. Die Anbindung an einen BTCPayer Server ist auch möglich, wird hier aber nicht weiter erläutert. Ihr könnt Euch die Komponenten als Einzelteile beschaffen und das Gehäuse selber bauen. Alle notwendigen Daten findet ihr in den Anleitungen, auf die ich später verweise. Ich habe es mir allerdings einfach gemacht und den Bausatz von Fulmo.org bestellt. Im Shop kann man übrigens auch per Bitcoin und sogar Lightning ⚡ bezahlen.
Das ganz LightningATM Projekt beruht auf FOSS (free and open source software) nach MIT-Lizenz. Genauso werde ich hier alle Daten, Bilder und Informationen dieser Website veröffentlichen. Ihr dürft alles alles kopieren, verlinken und nach belieben weiter verwenden. Nur die Garantie und Haftung ist ausgeschlossen.
Ich denke, dass Projekt ist so mittelschwer, für versierte Einsteiger, die bereits Erfahrungen mit dem Command Line Interface (CLI) und dem Raspberry Pi haben. Falls ihr noch nicht so fit darin sein, kann ich als Einstieg das ebenfalls DIY-Projekt BTC-Ticker empfehlen. In dem Projekt werden ähnliche Komponenten und Befehle wie in diesem Tutorial verwendet, allerdings etwas weniger komplex und umfänglich.

Inhalt

  • (1.) Grundlagen des Projekts
  • (2.) Hardware Vorbereitung (Spannungswander, Münzprüfer und Verdrahtung)
  • (3.) SD Karte erstellen und mit WLAN Daten beschreiben
  • (4.) Software Grundeinstellungen und Updates durchführen
  • (5). Display einrichten und testen
  • (6.) Einstellung der config.ini und app.py Datei
  • (7.) Debugger und Monitoring System (tmux)
  • (8.) Autostart
  • (9.) Erweiterung LED-Button und Sperrrelais
  • (10.) Noch ein paar Tipps

Grundlagen des Projekts

Nachfolgend weitere Dokumentation, die man sich anschauen kann, zur Umsetzung aber nicht erforderlich sind:

Empfohlenes Werkzeug:

  • Schlitz Schraubendreher, Mulitimeter, Seitenschneider, Doppelseitiges Klebeband (dick/dünn), Isolierband, Spitzzange, Heißleim, Lupe, Lüsterklemmen, Lötkolben (falls vorhanden)

Geht nachfolgende Anleitung einfach Schritt für Schritt durch, dann kommt Ihr am schnellsten ans Zeil.

Hardware Vorbereitung

Spannungswander vorbereiten

  • Micro USB Kabel durchschneiden. Ca. 15 cm vom Micro USB Stecker
  • Beide Seiten abisolieren und parallel (++ / –) zusammen löten, wenn Lötkolben vorhanden
  • Beide Ende auf den Eingang des Spannungswandler verlegen und festschrauben
  • USB Stecker an Netzteil oder USB Powerpack anschließen
  • Auf der Ausgangsseite ein Spannungsmessgerät anschließen
  • Mit einem Schraubendreher das kleine Drehpotentiometer (siehe Bild) mehrfach drehen (vermutlich erst links), bis die Spannung 12,1 Volt anzeigt
  • Achtung: Die Anfangsspannung kann sehr hoch sein. Bei mir waren es 35 Volt. Also nicht direkt an den Münzprüfer anschließen und das Messgerät auf den richtigen Messbereich einstellen
  • Leitugen für die Ausgangsseite vorbereiten:
  • Plus und Minus (GND) vom Spannungswandler mit dem Münzprüfer verbinden
  • Eine Leitung vom GND des Spannungswandler mit der Klemme 25 des Raspberry Pi verbinden
  • Siehe dazu den Verdrahtungsplan unter den Bildern

Münzprüfer konfigurieren (6 Stück, 5 Cent bis 2 Euro)

  • Schalter am Münzprüfer auf "NO" und "Medium" stellen
  • Die 12V an den Münzprüfer anlegen (ohne Raspberry Pi)
  • Taste ADD und MINUS gleichzeitig drücken und halten, bis A im Display erscheint
  • Wenn B erscheint mit einer Taster wieder zu A wechseln
  • Die Taste SET drücken und kurz halten, dann erscheint E im Display
  • Das zeigt an, dass man jetzt im Menü für die Anzahl der verschiedenen Münztypen ist
  • Mit ADD (bzw. MINUS) auf 6 (Münzen = 5 Cent bis 2 Euro) einstellen und SET drücken
  • Jetzt steht im Display H1 (für erste Münze) und die erste von 6 LEDs ist angegangen
  • Jetzt angeben werden, wie oft die Münze zum Kalibrieren eingeworfen werden soll
  • Mit ADD (bzw. MINUS) auf 20 stellen und dann SET drücken
  • Im Display steht jetzt P1 für weitere Einstellungen der Münze 1 und man kann das Ausgangssignal definieren
  • 5 Cent = 2 Impulse / 10 Cent = 3 / 20 Cent = 4 / 50 Cent = 5 / 10 Euro = 6 / 2 Euro = 7
  • Mit ADD (bzw. MINUS) auf 2 Impulse (für 5 Cent) stellen und dann SET drücken
  • Als letztes steht F1 im Display und steht für die Genauigkeit der Münzerkennung. Der Wert 8 hat gut funktioniert.
  • Mit ADD (bzw. MINUS) auf 8 stellen und dann SET drücken
  • Die Parametrierungen für die erste Münze ist damit erfolgt und es müssen die 5 weiteren folgen
  • Jetzt ist die zweit LED angegangen und im Display steht H2
  • Die gleichen Schritte jetzt noch mal für die zweite Münze bis 6 Münze wiederholen
  • Sind alle Coins eingestellt, blinken kurz alle LEDs zur Bestätigung und im Display steht wieder A
  • Nach kurzer Zeit steht dort auch wieder 0 (Null) im Display

Münzprüfer mit Münzen kalibrieren

  • Die Taste SET 2x drücken
  • Die erst LED Leuchte und A1 steht im Display
  • Jetzt die erste Münze (5 Cent) 20x einwerfen
  • Es versteht sich hier möglichst viele verschiedene Münzen vom gleichen Typ zu verwenden
  • Danach blinken zur Bestätigung alles LEDs und im Display steht A2
  • Das ganze für die übrigen Münzen wiederholen
  • Alle LEDs blinken wieder kurz zur Bestätigung und es wird wieder 0 (Null) Display angezeigt
  • Der Münzprüfer ist jetzt bereit.

Hardware verdrahten

  • Nach Plan (siehe Bilder) die Hardware verdrahten, aber noch nicht in das Gehäuse das ATM einbauen
  • Schalter am e-Paper Display HAT auf A und 0 stellen
  • Beim einstecken des feinen Display Flachbandkabels ist vorsicht geboten!
  • Die Klemmung hat eine kleine Arretierung die vorher gelöst sein muss. Siehe Bild!

SD Karte erstellen und mit WLAN Daten beschreiben

Image herunter laden und auf die SD Karte schreiben

WLAN am Raspberry Pi einrichten

Eine Datei mit dem Name wpa_supplicant.conf erstellen, die mit folgend Inhalt beschrieben wird:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE

network={
	ssid="Home"
	scan_ssid=1
	psk="XXXXXXXXXXXX"
	id_str="Home"
}

network={
	ssid="Mobil"
	scan_ssid=1
	psk="12345678"
	id_str="Mobil"
}
  • Die Datei enthält zwei WLAN Netzwerk. Die Home ist für zu Hause und die Mobil für den Unterwegs
  • Man kann z.B. ein Hotspot am Handy einrichten und ist mit dem ATM somit auch mobil
  • Die Werte für SSID und PSK nach belieben anpassen
  • Falls benötigt, können noch mehr Netzwerk hinzugefügt werden
  • Achtet darauf, dass die Datei auch auf .conf und nicht auf .conf.txt endet
  • Windows hat in der Grundeinstellung die Angewohnheit bekannte Endungen von Dateitypen auszublenden
  • Siehe dazu "Ordneroptionen/Ansicht/Erweiterte Einstellungen"
  • -> "Erweiterungen bei bekannten Dateitypen ausblenden" muss abgewählt sein!
  • Die neu beschriebene SD-Karte wieder in den Slot schieben
  • -> Es wird wird das Verzeichis BOOT der SD-Karte angezeigt
  • Dort die neue Datei wpa_supplicant.conf hineinkopieren
  • Hinweis: Nach dem ersten Starten des Raspberry Pi verschwindet die ".conf" Datei aus dem Verzeichnis
  • Editiert werden kann sie nachträglich dann per CLI mit dem Befehl:
  • $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Software Grundeinstellungen und Updates durchführen

  • SD-Karte in den Raspberry Pi einstecken
  • Verdrahtung noch einmal genau kontrollieren und dann Spannung anlegen
  • Eine Zeit lang warten und dann die vergebenen WLAN IP im eigenen WLAN Router suchen
  • Login auf Raspberry Pi über CLI: ssh pi@192.168.x.x
  • The authenticitiy.. mit yes bestätigen
  • Bei der Passwortabfrage "raspberry" eingeben
  • Wenn ihr korrekt eingeloggt seit seht ihr jetzt: pi@raspberrypi:~ $

Passwort anpassen und bitte merken!

	$ passwd
  • Hinweis: $ steht für pi@raspberrypi:~ $ im CLI und muss nicht eingeben werden

Ein Update durchführen, das ATM Github kopiert und notwendige Zusatzoptionen installieren

	$ sudo apt update && sudo apt upgrade
	$ git clone https://github.com/21isenough/LightningATM.git
	$ cd LightningATM
	$ pip3 install -r requirements.txt
  • Hinweis: Beim Update muss man hin und wieder mit y oder q bestätigen
  • Jetzt einmal die Spannungsversorgung trennen und wieder über SSH mit dem neuen Passwort anmelden

Display einrichten und testen

Display Software Updaten

$ cd ~
$ git clone https://github.com/waveshare/e-Paper
$ cd ~/e-Paper/RaspberryPi*/python
$ sudo python3 setup.py install

Test des Displays

$ cd ~
$ cd e-Paper/RaspberryPi_JetsonNano/python/examples
$ sudo python3 ./epd_2in13_V2_test.py

Wenn alles korrekt angeschlossen und installiert wurde, dann zeigt das Display jetzt ein Demonstration und löscht dann wieder den Screen.

Einstellung der config.ini und app.py Datei

In der config.ini werden Grundeinstellungen vorgenommen und in der app.py wird das Programm etwas angepasst.

  • Neuer Login auf Raspberry Pi über CLI: ssh pi@192.168.x.x

ATM einmal starten um die config.ini zu erzeugen

$ cd ~/LightningATM/
$ ./app.py
  • Beim ersten Start werdet ihr wahrscheinlich eine Fehlermeldung bekommen, weil der voreingestellte Display Typ nicht stimmt. Aber die Meldung könnt ihr ignorieren. Die config.ini wurde jetzt im Hintergrund erstellt.
  • Der Prozess "app.py" kann jetzt mit STRG+C gestoppt werden
  • Nach kurzer Zeit wird Manually Interrupted angezeigt
  • Jetzt wie bitte wie nachfolgend beschrieben die config.ini bearbeiten

Die config.ini Datei öffnen

$ nano ~/.lightningATM/config.ini
  • Nicht wundern, die Schreibweise ist wirklich ~/.lightningATM/config.ini mit Punkt und klein geschrieben

Die config.ini Datei einstellen

Unter [atm] Display Typ angeben
	display = waveshare2in13v2

Hinweis: Bitte den Display Typ vergleichen. Eurer kann eine abweichende Einstellungen notwendig machen.

Verzögerungzeit (von 0 auf 12 Sekunden setzen. 0 ist nur für ATM mit Taster)
	payoutdelay = 12 
Wallet Typen aktivieren
	activewallet = lntxbot
  • Hinweis: Eine gute Anleitung zum Einstieg in den LNTXBOT findet ihr hier: coincharge.io
  • Wenn du ein BTCPayServer-Wallet einrichten möchtest, bekommst du hier weitere Informationen: BTCPayServer
Unter [lntxbot] die Daten für die API zum lntxbot eingeben
[lntxbot]
# base64 encoded lntxbot api credentials
url = https://lntxbot.com
creds = abc..xyz==
  • Hinweis: url und creds liefert Dir der LNTXBOT in Telegram. Dazu im Bot den Befehl /lightningATM eingeben
  • Die Antwort des Bot ist wie folgt aufgebaut: <creds>@<url>
Die Coins zu den Impulsen festlegen
[coins]
# Pulsecount, fiat value, name
coin_types = 2,0.05,5  eur cent
             3,0.10,10 eur cent
             4,0.20,20 eur cent
             5,0.50,50 eur cent
             6,1.00,1 eur
             7,2.00,2 eur
  • Zum Speichern und Verlassen des Editors: STRG+x -> y -> ENTER

Die Einstellungen (bzw. den ganzen ATM) einmal testen

$ cd ~/LightningATM/
$ ./app.py
  • Das Display müsste jetzt LightningATM anzeigen
  • Wenn alles korrekt eingegeben ist, dann müsste der ATM jetzt einsatzbereit sein
  • Am besten einfach mal mit ein paar Cent testen
  • Sollte es nicht funktionieren, kommt später noch das Kapitel mit tmux. Da kann man eine Diagnose machen
  • Zum stoppen des ATM einfach STRG+C drücken
  • Nach kurzer Zeit wird Manually Interrupted angezeigt und man sieht auf dem Display das der ATM turned off ist

Einstellungen in der app.py Datei

Die app.py öffnen
$ cd ~/LightningATM/
$ nano app.py
Optional Einstellung: Übspringen der Seite "Prepare for LNURL":
  • Mit STRG+W nach display.update_lnurl_cancel_notice() suchen. (Sie ist zweimal vorhanden)
  • An einer Stelle steht wo drüber if activewallet == "lntxbot" steht, bitte die zwei Zeilen bearbeiten
Die zwei nachfolgenden Zeilen mit # auskommentieren
	# display.update_lnurl_cancel_notice()
	# time.sleep(5)

-> Damit wird die LNURL "Abfrage Seite" übersprungen, da sie für die Pocket Version (ohne Druckknopft) nicht relevant ist.

Debugger und Monitoring System (tmux)

Der einfachste Weg mehrere Prozesse gleichzeitig zu überwachen, besteht darin, mehrere Fenster zu öffnen. Die kannst also eine für die "app.py" und eine für den Debug-Logger $ tail -f ~/.lightningATM/debug.log öffnen und sie dann nebeneinander anzeigen. Aber um beide Prozesse gleichzeitig in einem Fenster zu sehen, kannst du auch "tmux" (Terminal Multiplexer) verwenden.

Terminal-Multiplexer (tmux) Befehlsübersicht:
STRG + b -> % = Fenster teilen
STRG + b -> Pfeil rechtes oder links = Wechsel des Fensters
STRG + b -> STRG + Pfeil rechts oder links = Trennlinie versch.
STRG + b -> d = zurück zum Einfachfenster

Damit kann das CLI Fenster vertikal gesplittet und zwei Prozesse gleichzeitig betrachtet werden. -> Siehe Bild!

tmux installieren
$ cd ~
$ sudo apt install tmux    
tmux starten und verwenden
$ tmux
  • tmux Fenster aufteilen: STRG+b -> %
Den app.py Prozess (ATM) starten
	$ cd ~/LightningATM
	$ ./app.py
  • In das rechte Fenster wechseln: STRG+b -> Pfeil rechts
  • Hinweis: Wenn der Geldautomat bereits gestartet ist (mit $ sudo systemctl status LightningATM.service prüfen), sollten Sie ihn stoppen (mit $ sudo systemctl stop LightningATM.service), bevor Sie ihn manuell (mit ./app.py) im tmux-Terminal Fenster starten. Andernfalls können seltsame Phänomene auftreten. Danach bitte nicht vergessen den LightningATM.Service wieder zu starten (mit $ sudo systemctl start LightningATM.service). Damit kann der ATM dann auch beim nächsten Neustart auch automatisch starten.
debug.log starten
	$ tail -f ~/.lightningATM/debug.log
  • Ggf. Trennlinie verschieben: STRG+b -> STRG+Pfeil rechts bzw. links
  • Zurück zum Einfachfenster: STRG+b -> d

Autostart

Aktivieren:
$ cd ~/LightningATM
$ sudo cp LightningATM.service /etc/systemd/system/LightningATM.service
$ sudo systemctl enable LightningATM.service
$ sudo reboot
Weitere Befehle zur Kontrolle des Service:
$ sudo systemctl status LightningATM.service
$ sudo systemctl stop LightningATM.service
$ sudo systemctl start LightningATM.service

Erweiterung LED-Button und Sperrrelais

LED Taster

Ein LED Taster bereichert den ATM ungemein. Dadurch sind viele weiter Funktionen möglich. Er macht die Bedienung angenehmer und sieht dabei auch noch ganz gut aus. Hier habe ich mal ein Konstruktionsset zusammen gestellt, so das man nicht einmal löten muss und alles einfach Steckbar ist. Schaut Euch dazu am besten meine separate Seite dazu an: LED-Button-CSet

Sperrrelais (elektromagnetische Tor)

Das elektromagnetische Tor ist ein Sperrstift, der die Münzen zum Auswurf umleitet. Bei stromlosem Münzprüfer bleibt der Stift immer verriegelt und wirft alle Münzen aus. Erst bei richtiger Münzerkennung wird der Sperrstift durch eine Magnetspule zurückgezogen. Erst dann fallen die Coins in die Fiat-Hölle. Dieses elektromagnetische Tor kann von außen gesteuert oder blockiert werden. Die Funktion kann verwendet werden, um Mehrfachimpulse (bei schnellem Münzeinwurf hintereinander) oder Münzeinwurf über einen bestimmten Zeitraum (einen Displaystand oder bei AMT offline) auszuschließen.

Wer mehr über das Sperrelais erfahren will, auf der GitHub Seite habe ich ausführliche Dokumentation (englisch) dazu geschrieben. Sperrelais

Well done, das wars!

  • Ich hoffe es hat geklappt und alles funktioniert 🙂
  • Weitere Hilfe bekommt ihr in der Telegram Gruppe: https://t.me/lightningatm_building
  • Falls ihr noch Fehler in der Dokumentation findet, oder sonstige Anregungen habt, erreicht ihr mich unter:
  • Email: axel@ereignishorizont.xyz
  • Telegram: @AxelHamburch
  • Twitter: @AxelHamburch

Noch ein paar Tipps

  • Bei Eingaben im Command Line Interface (CLI) die Befehle am besten per Copy & Past übertragen:
  • -> Dazu den Befehl mit STRG+C in die Zwischenablage kopieren und dann im CLI Fenster auf den blinkenden Cursor zeigen und die rechte Maustaste drücken, um die Zwischenablagen in das CLI einzufügen.
  • Tooltips zu den Bildern findet ihr beim betrachten mit der Desktop Version der Website. Zeigt dazu auf die Bilder.
  • Oder wenn ihr die Zip-Datei der Bilder herunter lädt, dann seht ihr die Namen der Bilder.
  • Wenn ihr den Fehler bash: $: command not found bekommt, dann habt ihr das Dollarzeichen $ vor dem Befehl mitkopiert.
  • Wenn ihr den Fehler bash: cd: too many arguments bekommt, müsst ihr evtl. wieder eine Ebene mit $ cd ~ zurück.
  • Beim Login per SSH darauf achten, den richtigen Benutzer pi zu verwenden. Nehmt ihr versehentlich admin, oder verschreibt Euch, dann wird Euch kein Fehler angezeigt, aber das Passwort wird nicht akzeptiert.
  • WLAN Parameter nachträglich ändern könnt ihr mit dem Befehl:
  • $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
  • Sollte er Euch beim "clonen" eines Repository nach einem Benutzer und Passwort fragen, einmal den PC + Raspberry Pi neu starten. Hat zumindest bei mir funktioniert.
  • SSH Login Probleme mit Windows: Prüfen ob unter Einstellungen / Apps / Apps & Features bzw. Optionale Features OpenSSH-Client UND OpenSSH-Server installiert ist.
  • Wer noch nicht so fit ist mit dem CLI und dem Raspberry Pi, dem empfehle ich mit einem etwas kleiner Projekt anzufangen, zum Beispiel dem BTC-Ticker.
  • Noch ein keine Hinweis: Ich versuche dieses deutschsprachige Tutorial up-to-date zu halten. Priorität hat bei mir aber aktuell die englische sprachige Github Version. Falls also etwas nicht ganz klar sein sollte, prüft das bitte mal hier.

Anbei noch das Video zum Tutorial:

Erstellt mit Liebe! 🧡 Block 720899 / 732111 aktualisiert