21isenough / lightningatm Goto Github PK
View Code? Open in Web Editor NEWThis ATM sends bitcoin over the Lightning Network - pretty fun.
License: MIT License
This ATM sends bitcoin over the Lightning Network - pretty fun.
License: MIT License
Actual Behavior:
Currently the LightningATM works with two different wallets; LND through a BTCPayServer setup (lndrest.py) and Lntxbot (lntxbot.py).
Expected Behavior:
More wallets and Lightning Node implementations should be supported through their API endpoint.
Just a little check needed if coins have been inserted before generating the Qr-code
So was thinking this might be a great way to get some more use of this.
Add a few buttons with pre set recipient. That way you cud set one up to send to for example different charitable organisations.
Imagine putting one in a grocery store so people can easily donate their loose change to f.ex. Red Cross, UN etc by just dropping in a few coins and pushing the correctly labelled button that have the organisations associated wallet specified to it. or add it to their own bitcoin wallet.
Hi all,
When printing the STLs, it looks like there is a custom infill that causes issues with printing:
(You'll notice the curled edges, most likely due to overhanging I guess).
In the slicer we can see:
There is also some oddness in the layers:
I would suggest that it is built as a solid object, and you let the slicer deal with the infill. This would most likely significantly improve print times as well.
Would also be good if original design files are added to source control (do not seem to be correct files located in https://github.com/21isenough/LightningATM/tree/master/resources/3dmodels/LightningATM%20-%20Pocket%20Edition).
Great work though.
Ben
I think we can delete this part as nobody will install the Waveshare lib and it lets to confusion.
If you follow the article and instal the compatible library (https://github.com/AxelHamburch/e-Paper/) you are not going to see the spidev
error on screen, so I would delete it to make it more clear.
Cud be kind of cool to add a coin recycler to get it two way operation.
Something like this.
https://www.alibaba.com/product-detail/Coin-recycler-CF7000-Coin-Payout-5_62594436162.html
Would love the ATM to be useful while idle.
Especially using one of the power efficient e-ink displays an always on bitcoin clock could be nice.
The idea is that after some configurable time it could display some info refreshed in about every 5 mins like:
Similar examples using other hardware:
Actual Behavior:
Currently the ATM relies on the python library "pycoingecko" for the exchange rate. It's a (quick and dirty) replacement for the recently closed API of bitcoinaverage.com
Expected Behavior:
Since this is only one simple GET request to the CoinGecko API, this could simply be done in python and does not need a library. Remove and use the "requests" package in python.
Line 53 in 8f81224
Actual Behavior:
Currently the bitcoin price is fetched once the first coin has been inserted.
Expected Behavior:
Might gain some response time if the price is fetched in a regular interval rather than after the first coin.
Actual Behavior:
Papirus screen size variable is only checked for presence but not for correct size.
Expected Behavior:
Add evaluation for 2" E-Ink size
Line 23 in 8f81224
Actual Behavior:
Currently the LightningATM works only with one screen - PaPiRus Zero - ePaper / eInk Screen (display.py). It is hard to procure and expensive.
Expected Behavior:
The ATM shall work with a variety of different screens. Not only E-Ink but also TFT and LCD screens.
Hello,
i've followed all the steps to configure the ATM. When i execute ./app.py i recieve this error: AttributeError: module 'requests' has no attribute 'get'.
Traceback (most recent call last):
File "./app.py", line 12, in <module>
import config
File "/home/pi/LightningATM/config.py", line 192, in <module>
BTCPRICE = utils.get_btc_price(conf["atm"]["cur"])
File "/home/pi/LightningATM/utils.py", line 51, in get_btc_price
price = requests.get(
AttributeError: module 'requests' has no attribute 'get'
Can you help me?
Thanks
Actual Behavior:
Each of 6 different coins sends a certain amount of pulses to the RaspberryPi, that are then registered on a GPIO pin.
A variable is set to the amount of pulses and regularly read to determine the inserted coin. This leads to slight delays and coins can't be inserted too fast after one another.
Expected Behavior:
I imagine, it would be better to continuously populate an array with pulses (a representation thereof) and evaluate this array in a thread. This should allow for faster "coin insertions" and make the user experience smoother.
Actual Behavior:
The ATM currently does not "know" to which wallet it is connected. Depending on the wallet that it is connected to, certain features must be deactivated (e.g. LNURL for LND).
Expected Behavior:
Make use of the "activewallet" variable in config.ini to set the currently active wallet and allow/restrict certain functions based on it. It would be best to set the "activewallet" variable when the user scans their API credentials.
When ATM is setup and ./app.py
is run for the first time after config.ini
is setup, the console returns:
Display test runs with positive results. I am running waveshare2in13v3
display
Steps to reproduce
a) clean SD image etched
b) go trough update and upgrade
c) runn ./app.py to setup config.ini
d) setup config.ini
e) run ./app.py
once more and it wont run
I am not sure why console displays blink error.
Would like to suggest a modification for the Pocket Edition
At present there is no visual indication on the screen to indicate when the atm is paired with the router.
A simple symbol to indicate connectivity (T) would be useful.
If the wifi connection fails due to no signal from the router (power out or internet down) it would be useful to have a OUT OF SERVICE screen image.
The Rpi will automatically try to reconnect with the router and when the connection is restablished the screen changes to display the WELCOME message.
This should ensure that a user will not put in coins or attempt to use the atm when there is no connectivity, and would improve user experience.
Is there a solution for using this display?
https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT#Raspberry_Pi
Line 125 in 31b11b4
Actual Behavior:
Currently we can only access different functions on the ATM with "multiple button presses" (e.g. button 3 times pressed, starts the Lntxbot scanning process).
Expected Behavior:
There shall be an "Admin Menu" that can be controlled with only one button. It could be a menu with all the menu points and an arrow next to the first point.
Seems like if I'm able to insert coins fast enough in sequence, impulses for coins are accumulating. For example let's say I do have 3 similar coins, which are mapped to impulse number 2 on coins acceptor. I do insert them very fast in sequence. Then ATM will detect 3 coins corresponding to impulses 2, 4 and 6.
While building the ATM for Turkish lira during theβ‘ Hackdays in Istanbul I noticed some issues due to the currently implemented rounding of exchange rates that would defraud users by up to 50% of the exchange rate.
π Analysis
The exchange rate is currently calculated as follows:
https://github.com/21isenough/LightningATM/blob/master/config.py#L193
SATPRICE = math.floor((1 / (BTCPRICE * 100)) * 1e8)
This means that currently you would get 1.80 sats for 1 kurus which is then rounded down to 1 sat.
πͺ² Possible solution
My fix was to only round the result but not the variable SATPRICE
.
Also the display implementations (e.g. https://github.com/21isenough/LightningATM/blob/master/displays/waveshare2in13v2.py#L449) would have to be changed to handle the increased precision.
I'll submit a PR for those changes so we can discuss them there.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.