Ereignishorizont
LNPoS

LNPoS

LNPoS

Ein Bitcoin & Lightning ⚡ Point of Sale

Vollkommen autarker Point of Sale Terminal (Kassensystem). Sowohl online als auch offline Lightning ⚡ Zahlungen. Für offline Onchain Zahlungen und ein offline Lightning ATM für Auszahlungen. Free and open source Software, frei von Intermediäre, mit integrierten Akku, Wlan, zum Selbstbau, low Budget, nicht einmal 50 Euro.

Die LNPoS Funktionen:

  • LNPoS Online Lightning Zahlungen mit aktiver Interaktion
  • LNURLPoS Offline Lightning Zahlungen. Passive Interaktion, Austausch eines Geheimnisses als Nachweis
  • OnChain Für Onchain Zahlungen. Generiert eine Adresse und zeigt einen Link zur Überprüfung
  • LNURLATM Offline Lightning Auszahlungen. Generiert eine LNURLp Invoice zur Abhebung

1. Die Hardware

Es gibt einmal ein Set von fulmo.shop.org. Dort könnt ihr auch mit Lightning ⚡ bezahlen. Lieferung aus Deutschland und ihr unterstütz noch etwas die Community, da Fulmo viel für den Space tut und auch Lightning Hackdays veranstaltet.

Ansonsten gibt es aber auch Alternativen und die Möglichkeit alles in Einzelteile zu kaufen bzw. das Gehäuse selber zu drucken:

  • LNURLPoS hardware-neede
  • LILYGO® TTGO T-Display Keyboard Kit ESP32 Beispiel
  • TTGO T-Display ESP32 Beispiel
  • Controller Keyboard Beispiel
  • 3D Printcase zum selber drucken findet ihr hier
  • Schalter Beispiel
  • Akku 3,7V LiPo, nicht größer als 1100 mA und evtl. mit einem JST (2 Pin / 1,25mm) für das ESP32 Board. Ein Stecker wird sonst aber auch bei einem Set mitgeliefert. Beispiel

Für die Montage hat coincharge.io schon ein sehr gute Anleitung geschrieben. Dazu schaut mal hier.

2. Was man wissen sollte

Der LNPoS ist einem Mikrocontroller Board mit Display (Bezeichung: TTGO T-Display ESP32) und einer Tastatur. Das Board verfügt über 2,4 GHz Dual-Mode Wi-Fi und Bluetooth. Das Wi-Fi kann aktiv als Access Point betrieben werden, kann sich aber auch selber mit einem anderen WLAN Netzwerk verbinden. Es hat eine USB-Schnittstelle zur Spannungsversorgung und seriellen Datenübertragung. Damit kann man das Programm auf den internen Speicher flashen (schreiben). Die Einstellung des LNPoS erfolgt über ein WLAN Web Interface, nicht über die serielle Schnittstelle.

Das LNPoS kann als reines offline Gerät betrieben werden. Für LNURLPoS, LNURLATM und OnChain Zahlung muss man nur einmal über das Web Interface die LNURL Daten, in Form eines Strings (Zeichenkette) aus dem LNbits Wallet übertragen. Und wer auch OnChain Zahlungen empfangen möchte, muss noch den xPub bzw. yPub Key des OnChain Wallet angeben. Dann kann man mit dem LNPoS Invoices (LNURLw / LNURLp) und OnChain Adressen offline generieren.

Zusätzlich hat der LNPoS auch die Möglichkeit sich per WLAN mit dem Internet zu verbinden und klassische online Lightning ⚡ Zahlungen durchzuführen. Das hat den Vorteil einer aktiven Rückmeldung über den Zahlungseingang. Damit der LNPoS sich auch mit dem Internet verbinden kann, muss man über das Web Interface noch die Netzwerk Daten (SSID + Passwort) eingeben. Z.B. das des Heimnetzwerks. Und wenn man es auch mobile verwenden möchte, das eines Handy Hotspots.

Je nachdem wo ihr kauft, z.B. im Fulmo Shop, bekommt ihr das Set "mit Option" (pre installierer Software) oder "ohne" (ungeflashter Mikrocontroller). Das entscheidet darüber, ob ihr in diesem Tutorial ganz vorne bei Punkt 1. anfangen müsst, oder eben bei Punkt 13 (Kapitel 3.3), wenn die Software schon installiert ist. Für einen schnellen Einstieg ist sicherlich die vorinstallierte Version gut geeignet. Allerdings geht die Entwicklung des Projekts doch recht schnell voran und das GitHub Repository erfährt häufiger mal ein Update. So lohnt es sich deshalb hin und wieder mal ein Update zu machen, da damit Bugs behoben und neue Funktionen hinzugefügt werden.

3. Die Installation und Parametrierung

Eigentlich ist es ganz einfach. Man muss nur das Projekt auf den Mikrocontroller flashen, sich per WLAN verbinden und dann per Web Interface die Parametrierung vornehmen. Fertig! 😄 "Eigentlich.." 😉

Da alles immer einfach ist, wenn man weiß wie es geht und alles immer schwer ist, wenn man keinen Plan hat, habe ich einen Leitfaden 🧵 geschrieben.

Zur Übersicht habe ich das Ganze etwas gegliedert:

  • 3.1 Vorbereitung, Software Grundeinstellungen und Treiber Installation ( Schritt 1.-8.)
  • 3.2 Das LNPoS Projekt auf den Mikrocontroller flashen (Schritt 9.-12.)
  • 3.3 Mit dem Web Interface (Portal) verbinden und WLAN Daten festlegen (Schritt 13.-17.)
  • 3.4 Ein LNbits Wallet einrichten und die Verbindungsdaten ermitteln (Schritt 18.-22.)
  • 3.5 Konfiguration des LNPoS (Schritt 23.-24.)
  • 3.6 Der Test aller Funktionen (Schritt 25.-29.)

3.1 Vorbereitung, Software Grundeinstellungen und Treiber Installation (Schritt 1.-8.)

Vorbereitung: Arduino IDE Software herunter laden und installieren. Sie wird benötigt um das Programm auf den Mikrocontroller zu übertragen.

1. Arduino IDE Software starten und Verzeichnispfad ermitteln

Öffnet die Arduino IDE Software, geht unter "File/Preferences" und merkt euch den Verzeichnispfad der unter "Sketchbook location" steht. Öffnet ihn am besten schon in einem neuen Explorer Fenster, das wird gleich gebraucht. Dort werden vor allem die "Libraries", also die Bibliotheken für die Programm abgelegt.

2. Downloadet das GitHub Repository von https://github.com/arcbtc/LNPoS und entpackt die Zip Datei LNPoS-main.zip

3. Kopiert den Ordner ..\LNPoS-main\lnPoSTdisplay in den Ordner ..\Arduino von Punkt 1. Jetzt habt ihr das Projekt im Arduino Verzeichnis.

4. Kopiere die Libraries des Projektordners in die Arduino Libraries, damit die Arduino Software die Bibliotheken auch findet.

Den Inhalt von ..\Arduino\lnPoSTdisplay\libraries nach ..\Arduino\libraries kopieren.

5. LNPoS Projektdatei öffnen

Unter "File/Open" im Verzeichnis ..\Arduino\lnPoSTdisplay die Datei lnPoSTdisplay.ino öffnen. Sollte das Verzeichnis nicht automatisch geöffnet werden, könnt ihr die "lnPoSTdisplay.ino" Projektdatei auch einfach per Doppelklicken öffnen. Sie startet dann in einem Arduino IDE Fenster.

6. ESP32 Board Support – vorbereiten

In der Arduino Software unter "File/Preferences" und im Feld "Additional Boards Manager URLs: " folgende Zeile einfügen und mit OK bestätigen, um das Treiberverzeichnis festzulegen.

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json  

Das benötigt Arduino IDE um später die entsprechenden Treiber zu finden. Die Auswahl an möglichen Boards ist groß und so muss dieses vorher definiert werden. Weiter Infos dazu findet ihr hier.

7. ESP32 Board Support (Treiber) – Version 2.0.1 (!!!) installieren

Hinweis: Höher Versionen können vielleicht funktionieren, auf der GitHub Seite wird aber explizit empfohlen die Version 2.0.1 zu installieren. Es ändern sich auch die Typenbezeichnung bei der Auswahl des Board Managers, wenn man einen hörer Version nimmt. Welche Version funktionieren könnte, kann ich aktuell nicht sagen.

8. ESP32 Board im Board Manager auswählen

Unter "Tools/Board:../ESP32_Arduino/" den TTGO LoRa32-OLED V1 einstellen

3.2 Das LNPoS Projekt auf den Mikrocontroller flashen (Schritt 9.-12.)

9. Schließt den LNPoS an euren Computer per USB an

10. Den vergebenen COM Port des Schnittstellenwandlers "USB to serial converter" ermitteln

Unter Windows öffnet dazu euren Geräte-Manager (Win+X => Geräte-Manager) und prüft unter "Anschlüsse (COM & LPT)" welchen COM Port Nummer er dem CH9102 (Kommunikations-Chip) vergeben hat. Unter Windows wird der Treiber mit der Arduino IDE Software geliefert.

Unter Mac muss man noch einen extra Treiber herunter laden. Den Link dafür findet ihr in dieser Dokumentation ganz unten. Sehr aufschlussreich ist auch diese Video Dokumentation.

11. Den richtigen COM Port unter "Tools/Port" einstellen

12. Das Projekt auf den Mikrocontroller (LNPoS) "flashen" mit "Sketch/Upload"

Der ganze Schreibvorgang dauert ziemlich lange, bis zu mehreren Minuten, also habt Geduld. Zum Schluss zeigt er Euch Done uploading. und dadrunter Leaving... Hard resetting via RTS pin.... Das ist keine Fehlermeldung, sondern nur der Hinweis, dass die Schnittstelle zurück gesetzt wurde.

3.3 Mit dem Web Interface (Portal) verbinden und WLAN Daten festlegen (Schritt 13.-17.)

13. Das LNPoS Konfigurationsportal (Portalverbindung) starten

Nach einen (Neu)start zeigt das Display Euch NO METHODS Restart & Run Portal an. Das heißt nur, dass ihm die nötigen Parameter fehlen. Jetzt den das Mikrocontroller Board (den LNPoS) einmal von der Spannung trennen, eine beliebige Taste gedrückt halten und wieder mit dem USB Stecker verbinden. Im Display wird dann AP LAUNCHED When Finish Reset angezeigt. Jetzt könnt ihr die Taste wieder loslassen. Wenn ihr schon ein Akku mit Schalter habt, einmal ausschalten, Taste gedrückt halten und wieder einschalten. Jetzt sollte der LNPoS bereit sein einen WLAN Teilnehmer zum empfangen.

14. Mit dem Handy (oder einen Laptop) könnt ihr euch jetzt auf den LNPoS per WLAN anmelden.

Das Standardpasswort ist: ToTheMoon1. Ihr findet das WLAN Netzwerk unter den Namen LNPoS-...

15. Im Portal die WLAN Einstellungen für euer Heimnetzwerk einstellen

Er zeigt jetzt die IP Adresse an, über der ihr das LNPoS Konfigurationsportal aus eurem Heimnetzwerk erreichen könnt. Wenn ihr z.B. einen PC ohne WLAN Anschluss habt, könnt ihr den LNPoS darüber erreichen und konfigurieren. Deswegen bitte die IP Adresse merken. Wenn ihr den LNPoS aber direkt mit einem Notebook oder nur über das Handy konfigurieren möchtet, dann braucht ihr das nicht.

Hinweis: Wenn ihr nur mit dem Laptop oder Handy arbeitet, könnt ihr hier auch gleich über Configure new AP die WLAN Daten für den Handy Hotspot einstellen und den Punkt 16. und 17. überspringen.

16. An eurem Handy ein WLAN Hotspot einstellen

17. Vom PC/Laptop aus auf das LNPoS Konfigurationsportal mit der gemerkten IP von Punkt 15 und einem Explorer über das Heimnetzwerk auf den LNPoS einloggen. Jetzt könnt ihr hier die Daten für den Handy Hotspot eingeben.

Am Ende wird die Verbindung getrennt, da ihr jetzt über den Hotspot verbunden seid. Schaltet jetzt den Handy Hotspot aus und verbindet Euch noch einmal über den PC/Laptop.

Hinweis: Habt ihr ein Notebook oder verwendet nur das Handy, braucht ihr nicht über das Heimnetzwerk gehen, ihr könnt Euch direkt mit dem LNPoS verbinden.

Hinweis: Ihr müsst für ein Portalverbindung über das Heimnetzwerk immer erst die Verbindung über euer Handy/Laptop "aktivieren". D.h., der LNPoS muss "freigeschaltet" (das WLAN Netzwerk im Portal aktiv angewählt) werden, wenn die Verbindung nicht über das eigene aktive WLAN des LNPoS geschieht. Für die normal "online" Verbindung eures LNPoS mit dem Internet braucht ihr das später nicht mehr. Zum Abrufen von Daten verbindet er sich automatisch mit einem Netzwerk.

3.4 Ein LNbits Wallet einrichten und die Verbindungdaten ermitteln (Schritt 18.-22.)

18. Ein LNbits Wallet anlegen

19. LNbits "Wallet invoice key" ermitteln

20. LNbits Erweiterung "LNURLDevices" laden

21. LNbits LNURLPoS String ermitteln

22. LNbits LNURLATM String ermitteln

Hinweis: Für den Master Public Key (xPub, yPub oder zPub Key) um OnChain Zahlungen empfangen zu können, kann man z.B. ein Wallet aus in BlueWallet erstellen und dort den Key auslesen. Das hat den Vorteil, dass man den Zahlungseingang dort auch gleich kontrollieren und das Wallet mit den 24 Wörter sichern kann.

3.5 Konfiguration des LNPoS (Schritt 23.-24.)

23. Erneut die Portalverbindung für den PC/Laptop aktivieren

*Hinweis:* Falls ihr keine Verbindung bekommt, prüft die Punkt 13 und 17 nochmal

24. Konfigurationsdaten eingeben und speichern, jetzt seid ihr fertig! 🎉

3.6 Der Test aller Funktionen (Schritt 25.-29.)

25. Der Test – LNPoS, online Zahlung

26. Der Test – LNURLPoS, offline Zahlung

27. Der Test – OnChain Zahlung (offline)

28. Der Test – LNURLPoS, offline Auszahlung

29. Der Test – Die Buchungen im LNbits Web Wallet

4. Ergänzungen

LNbits ist ein Wallet und Account System. Schaut mal hier. Ich habe dazu schon vor einiger Zeit mal ein Video gemacht. Wichtig zu verstehen ist, dass LNbits nichts anderes als eine Datenbank ist. Und somit kommuniziert das LNPoS Terminal mit einer Datenbank. Die echten Werte in Form von Satoshis liegen auf dem darunterliegenden Lightning Node. Der Node ist auch für die eigentlichen online Transaktionen im Hintergrund zuständig. Der LNPoS, mit dem Lnbits Wallet, ist nur ein Interface. Sollte der LNPoS kaputt oder verloren gehen, oder LNbits selber abstürzen, sind eure Funds trotzdem sicher, da sie von dem darunter liegenden Lightning Node verwaltet werden. Dort müssen auch gut verbundene Lightning Kanäle mit genügen Inbound Liquidität vorhanden sein. Legt ihr also ein Wallet bei LNbits an und verliert die Keys, bzw. den Links zum Wallet, sind die Sataoshis nicht weg, es ist nur ein Spende an den Betreiber des da drunter liegenden Lightning Nodes.

Das online LNbits Wallet "legend.lnbits.com" ist toll und funktioniert super. Die Nutzung ist erlaubnisfrei und kostenlos, aber der Server ist unter Gewahrsam eines anderen und nicht dafür gedacht große Werte auf Dauer zu speichern. Es ist mehr eine experimentelle Umgebung, um es Menschen einfach zu machen, mit LNbits zu experimentieren. Es gibt keine Garantie, dass der LNbits Server auch auf Dauer funktioniert und es ist unwahrscheinlich, dass die Entwickler und altruistischen Betreiber für Verluste auf Grund von technischen Probleme oder Hacks aufkommen. Also, sichert eure Funds immer schnellstmöglich auf ein Wallet eurer Wahl und prüft, ob ihr LNbits nicht selber hosten könnt. Auf dem RaspiBlitz ist das möglich und über eine IP2Tor Verbindung funktionieren auch die offline Funktionen LNURLPoS und LNURLATM, und die Generierung der OnChain Adressen. Was aber noch nicht funktioniert, ist die online Lightning Zahlung mit LNPoS. Dann bekommt man die Fehler Meldung "fetching fiat rate failed", was so viel heißt, es konnte keine Verbindung zum LNbits Server hergestellt werden. Das Problem ist bekannt und es wird daran gearbeitet.

Falls ihr euer RaspiBlitz als soveräne Finanzierungsquelle und als Host für eine LNbits Instanz verwenden wollt, dann müsst ihr wie im Absatz vorher beschrieben über eine IP2Tor Verbindung gehen. Wie das geht, das habe ich in einem anderen Artikel schon einmal beschrieben. Schaut euch den Artikel BTCPayWall an und speziell die Absätze mit IP2Tor, LetsEncrypt und DuckDNS. Das wäre hier identisch zu machen, nur das man nicht "BTCPay Server Webinterface" anwählt, sondern "LNbits Webinterface". Damit bekommt ihr eine Clearnet Domain, über die ihr euer LNbits Wallet erreichen könnte, um die nötigen Daten für den LNPoS auszulesen. Ein Hinweis noch. Ihr könnte mit einer DuckDNS Domain mehrer Subscription Services nutzen. Also, sowohl der BTCPay Server als auch die LNbits Instanz könnt ihr über eine und die selbe Domain laufen lassen. Jeder Dienst bekommt aber eine eigenen Portnummer vom IP2Tor Server vergeben, die ihr an die Domain anhängen müsst. DuckDNS leitet das mit der Portnummer nur weiter und LetsEncrypt stellt das SSL Zertifikat für die Verbindung.

Wer möchte, kann auf das LNbits Wallet des LNPoS auch über die Erweiterung LndHub für BlueWallet und Zeus zugreifen. Man kann es als (Notfall-) Alternative zum LNPoS mit voller Kontrolle (LNDHUB ADMIN) verwenden, oder als "read only / nur Invoices" (LNDHUB INVOICE). Damit kann zum Beispiel der Angestellte die Transaktionen überprüfen, falls es mal zu Unstimmigkeiten kommt. Auch kann es ja mal passieren, dass der Kunde oder Angestellte aus versehen das "Geheimnis" (die vierstellige PIN) einer LNURLPoS offline Zahlung weg gedrückt hat. Ein weiterer Vorteil zu dem LNbits Web Wallet selber ist, dass man mit diesen LndHub Wallets in BlueWallet oder Zeus einerseits ein read only Wallet einrichten kann, anderseits aber auch keinen Zugriff auf die Einstellungen und Erweiterungen hat. Damit kann also keiner etwas kaputt machen. Das LNbits Web Wallet sollte deswegen nur vom Admin des Kontos verwendet werden.

LndHub für BlueWallet oder Zeus

Quellen und weiterführende Information

Erstellt mit Liebe 🧡 Block 735952 / 759209 aktualisiert

– Lightning ⚡ (er)leben –