Ereignishorizont
Lightning ATM

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 LNbits 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.

1. 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.

2. Hardware Vorbereitung

2.1 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

2.2 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

2.3 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.

2.4 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!

3. SD Karte erstellen und mit WLAN Daten beschreiben

3.1 Das Raspberry Pi Image auf SD Karte schreiben

  • Downloaded das Image vom raspberrypi.org Archive
  • Das Image "2023-05-03-raspios-bullseye-armhf.img.xz" funktioniert auf jeden Fall. Bei einer neueren Version hatte ich Probleme, bleibt also lieber bei der 2023-05-03. 😉
  • Eine SD Karten Image mit Balena Etcher schreiben
  • https://www.balena.io/etcher/
  • SD Karte rausnehmen und beiseite legen

3.2 WLAN für den Raspberry Pi vorbereiten

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
  • Stellen den Ländercode ISO-3166-1 ein, du nicht schon in Deutschland = DE bist.
  • 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!

3.3 Frisch geflashte SD vorbereiten

Die SD Karte muss jetzt noch mit drei Dateien bespielt werden.

1.) Mit der WLAN Konfigurationsdatei "wpa_supplicant.conf", die ihr gerade erzeugt habt.

2.) Mit einer einfachen Datei die nur "SSH" heißt (nicht "SSH.txt"!). Damit bekommt ihr später ihr Zugang zu eurem Raspberry Pi über eine SSH Verbindung, also die Verbindung über Wifi mit Komandozeile.

3.) Erzeuge eine Datei namens "userconf.txt" und befüll sie mit:

pi:$6$gUTh.xbNW9Ascyjs$xM4whEiad2GXu3wffSDgb8W77Zgv6BWENQ226goAF93ltX.bOJOktLqOLouaO0/SW5jKye10HjOGH6Y/5.VF90

Mit dieser Datei sagt ihr dem neuen Raspberry Pi Image das ihr einen User "pi" mit dem Passwort "raspberry" anlegen wollt. Die Zeichen hinter dem pi:.. sehen etwas merkwürdigt aus. Das liegt daran, dass es der Hash des Passwort "raspberry" ist. Auf dem Pi wird nur der Hash gespeichert, damit ist sichergestellt, dass falls der Raspberry mal kompromitiert wird, nicht das Passwort im Klartext sichtbar ist. Für weitere Informationen siehe hier.

Jetzt steckt die frisch geflashte SD Karte wieder in euren Computer und es sollte sich ein neues Laufwerk erscheinen das "bootfs" heißt. Das ist das Boot Laufwerk, von dem der Raspberry Pi später startet. Die drei Dateien helfen den Raspberry Pi beim ersten Start neu zu initialisieren. Ohne die hättet ihr kein Wlan, kein SSH Zugang und kein User "pi" mit dem Passwort "raspberry".

Jetzt könnte ihr die SD Karte wieder aus dem Laufwerk nehmen.

Hinweis: Nach dem ersten Start des Raspberry Pi verschwinden die drei Dateien aus dem Verzeichnis. Also nicht wundern.

Die Wlan Konfigurationsdatei könnt ihr auch nachträglich noch mit der Befehlszeile ändern:

    $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

4. 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 (falls gewünscht) und bitte merken!

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

Das SPI interface für die Waveshare Displays aktivieren

Geht dazu in die raspi-config mit

	$ sudo raspi-config

Dann wählt ihr Interface Options - Configure.. -> SPI - enable/disable.. und aktiviert es mit Yes.

Das wars, jetzt könnt ihr mit der Installation beginnen.

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

5. Display einrichten und testen

5.1 Display Software herunterladen und installieren

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

5.2 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.

Achtung: Wenn ihr ein anderen Display Typen habt, dann müsst ihr hier auch eine andere Testfunktion als "epd_2in13_V2_test.py" verwenden. Z.B. "epd_2in13_V3_test.py" für die neue Version, siehe dazu die Rückseite des Displays. Oder "epd_2in13d_test.py", für die flexible (goldfarbig) (D-)Version.

6. Einstellungen über die config.ini

In der config.ini werden Grundeinstellungen vorgenommen.

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

6.1 ATM einmal starten um die config.ini zu erzeugen

$ cd ~/LightningATM/
$ ./app.py
  • Beim ersten Start wird die Meldung No display configuration matched. Exiting... kommen, da ihr ja noch kein passendes Display vorgegeben habt. Die könnt ihr also ignorieren. Die config.ini die wir jetzt brauchen, wurde dadurch aber im Hintergrund erstellt.
  • Jetzt wie bitte wie nachfolgend beschrieben die config.ini bearbeiten

6.2 Die config.ini Datei öffnen

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

6.3 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 = lnbits
Unter [lnbits] die Daten für die Schnittstelle zum LNbits Wallet angeben
[lnbits]
# api credentials
url = https://demo.lnbits.com/api/v1
apikey = DeinAdminKey
# One of "invoice" or "lnurlw"
method = lnurlw
# only for lnurlw - seconds to redeem the lnurlw
timeout = 90

Hinweis: Hier musst du nur den apikey = Admin key angeben. Diesen erhälst du vom LNbits Wallet, z.B. Admin key = apikey = 8682516eaf0c457…

Bild: Beispiel LNbits Wallet. Die Extension LNURLw müsst ihr nur aktivieren (-> ENABLE).

Hinweis: Falls ihr für einen bestehenden ATM nur das obsolete LNTXBOT Wallet durch ein LNbits Wallet ersetzten möchtet, müsst ihr noch ein paar weitere Schritte unternehmen. Schaut euch das zu diese Anleitung auf dem orignal Github an.

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

7. 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

8. 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

9. 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

10. 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:
  • Telegram: @AxelHamburch
  • Twitter: @AxelHamburch

11. 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:

Falls dir der Artikel gefallen hat, freue ich ich über eine Nachricht. 📨
Meine⚡️Lightning Adresse: axelhamburch@ereignishorizont.xyz

Tipp: Mit dem LightningTipBot geht das übrigens auch.
Syntax: /send <Betrag> <LightningAdresse> <Nachricht>

Erstellt mit Liebe! 🧡 Block 720899 / 843728 aktualisiert