Beispiel #1
0
def button_pushed():
    """Actions button pushes by number
    """
    if config.PUSHES == 1:
        if config.FIAT == 0:
            display.update_nocoin_screen()
            time.sleep(3)
            display.update_startup_screen()
        else:
            display.update_qr_request(config.SATS)
            config.INVOICE = qr.scan()
            while config.INVOICE is False:
                display.update_qr_failed()
                time.sleep(1)
                display.update_qr_request(config.SATS)
                config.INVOICE = qr.scan()
            update_payout_screen()

    if config.PUSHES == 2:
        if config.FIAT == 0:
            display.update_nocoin_screen()
            time.sleep(3)
            display.update_startup_screen()
        else:
            lntxbot.process_using_lnurl(config.SATS)

    if config.PUSHES == 3:
        display.update_lntxbot_scan()
        lntxcreds = lntxbot.scan_creds()
        utils.update_config("LNTXBOTCRED", lntxcreds)
        importlib.reload(config)
        balance = lntxbot.get_lnurl_balance()
        display.update_lntxbot_balance(balance)
        GPIO.cleanup()
        os.execv("/home/pi/LightningATM/app.py", [""])

    if config.PUSHES == 4:
        logger.info("Button pushed three times (add coin)")
        print("Button pushed three times (add coin)")
        config.PULSES = 2

    if config.PUSHES == 5:
        logger.warning("Button pushed three times (restart)")
        print("Button pushed three times (restart)")
        GPIO.cleanup()
        os.execv("/home/pi/LightningATM/app.py", [""])

    if config.PUSHES == 6:
        display.update_shutdown_screen()
        GPIO.cleanup()
        logger.info("ATM shutdown (5 times button)")
        os.system("sudo shutdown -h now")
    config.PUSHES = 0
Beispiel #2
0
def main():
    global FIAT
    global SATS
    global PULSES
    global PUSHES
    global INVOICE

    ## Initiating logging instance
    logging.basicConfig(filename='/home/pi/LightningATM/resources/debug.log',
                            format='%(asctime)s %(name)s %(levelname)s %(message)s',
                            datefmt='%Y/%m/%d %I:%M:%S %p',
                            level=logging.INFO)

    logging.info('Application started')

    ## Display startup startup_screen
    display.update_startup_screen()

    ## Defining GPIO BCM Mode
    GPIO.setmode(GPIO.BCM)

    ## Setup GPIO Pins for coin acceptor and button
    GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
    GPIO.setup(6,GPIO.IN, pull_up_down=GPIO.PUD_UP)

    ## Setup coin interrupt channel (bouncetime for switch bounce)
    GPIO.add_event_detect(5, GPIO.RISING,callback=buttonevent, bouncetime=200)
    GPIO.add_event_detect(6,GPIO.FALLING,callback=coinevent)

    while True:
        time.sleep(0.5)
        ## Detect when coins are being inserted
        if((time.time() - LASTIMPULSE > 0.5) and (PULSES > 0)):
            if (PULSES == 2):
                FIAT += 0.02
                SATS = FIAT * 100 * SATPRICE
                logging.info('2 cents added')
                update_amount_screen(PAPIRUS)
            if (PULSES == 3):
                FIAT += 0.05
                SATS = FIAT * 100 * SATPRICE
                logging.info('5 cents added')
                update_amount_screen(PAPIRUS)
            if (PULSES == 4):
                FIAT += 0.1
                SATS = FIAT * 100 * SATPRICE
                logging.info('10 cents added')
                update_amount_screen(PAPIRUS)
            if (PULSES == 5):
                FIAT += 0.2
                SATS = FIAT * 100 * SATPRICE
                logging.info('20 cents added')
                update_amount_screen(PAPIRUS)
            if (PULSES == 6):
                FIAT += 0.5
                SATS = FIAT * 100 * SATPRICE
                logging.info('50 cents added')
                update_amount_screen(PAPIRUS)
            if (PULSES == 7):
                FIAT += 1
                SATS = FIAT * 100 * SATPRICE
                logging.info('100 cents added')
                update_amount_screen(PAPIRUS)
            PULSES = 0

        ## Detect if the buttons has been pushed
        if((time.time() - LASTPUSHES > 0.5) and (PUSHES > 0)):
            if (PUSHES == 1):
                if FIAT == 0:
                    display.update_nocoin_screen()
                    time.sleep(3)
                    display.update_startup_screen()
                else:
                    display.update_qr_request()
                    INVOICE = qr.scan()
                    while INVOICE == False:
                        display.update_qr_failed()
                        time.sleep(1)
                        display.update_qr_request()
                        INVOICE = qr.scan()
                    update_payout_screen(PAPIRUS)

            if (PUSHES == 2):
                logging.info('Button pushed twice (add coin)')
                print('Button pushed twice (add coin)')
                PULSES = 2

            if (PUSHES == 3):
                logging.warning('Button pushed three times (restart)')
                print('Button pushed three times (restart)')
                os.execv('/home/pi/LightningATM/app.py', [''])
                GPIO.cleanup()

            if (PUSHES == 4):
                display.update_shutdown_screen()
                GPIO.cleanup()
                logging.info('ATM shutdown (4 times button)')
                os.system('sudo shutdown -h now')
            PUSHES = 0
Beispiel #3
0
def button_pushed():
    """Actions button pushes by number
    """
    if config.PUSHES == 1:
        """If no coins inserted, update the screen.
        If coins inserted, scan a qr code for the exchange amount
        """
        if config.FIAT == 0:
            display.update_nocoin_screen()
            time.sleep(3)
            display.update_startup_screen()
        else:
            display.update_qr_request()
            qrcode = qr.scan()
            config.INVOICE = lndrest.evaluate_scan(qrcode)
            while config.INVOICE is False:
                display.update_qr_failed()
                time.sleep(1)
                display.update_qr_request()
                qrcode = qr.scan()
                config.INVOICE = lndrest.evaluate_scan(qrcode)
            display.update_payout_screen()
            lndrest.handle_invoice()
            softreset()

    if config.PUSHES == 2:
        """If no coins inserted, update the screen.
        If coins are inserted, return a lnurl for the exchange amount
        """
        if config.FIAT == 0:
            display.update_nocoin_screen()
            time.sleep(3)
            display.update_startup_screen()
        else:
            lntxbot.process_using_lnurl(config.SATS)
            # Softreset and startup screen
            softreset()

    if config.PUSHES == 3:
        """Store new lntxbot credential via a QR code scan
        """
        display.update_lntxbot_scan()

        # scan the credentials
        lntxcreds = lntxbot.scan_creds()

        # save them to the current config and reload config file
        config.update_config("lntxbot", "creds", lntxcreds)
        if config.check_dangermode():
            importlib.reload(config)

        # return the current balance to the user on the screen
        balance = lntxbot.get_lnurl_balance()
        display.update_lntxbot_balance(balance)
        softreset()

    if config.PUSHES == 4:
        """Simulates adding a coin
        """
        logger.info("Button pushed four times (add coin)")
        print("Button pushed four times (add coin)")
        config.PULSES = 2

    if config.PUSHES == 5:
        """Restarts the application
        """
        logger.warning("Button pushed five times (restart)")
        print("Button pushed five times (restart)")
        utils.softreset()

    if config.PUSHES == 6:
        """Shutdown the host machine
        """
        display.update_shutdown_screen()
        GPIO.cleanup()
        logger.warning("ATM shutdown (6 times button)")
        os.system("sudo shutdown -h now")
    config.PUSHES = 0
Beispiel #4
0
def button_pushed():
    """Actions button pushes by number
    """
    if config.PUSHES == 1:
        """If no coins inserted, update the screen.
        If coins inserted, scan a qr code for the exchange amount
        """
        if config.FIAT == 0:
            display.update_nocoin_screen()
            time.sleep(3)
            display.update_startup_screen()

        if not config.conf["atm"]["activewallet"]:
            logger.error("No wallet has been configured for the ATM.")
            # Softreset and startup screen
            softreset()

        if config.conf["atm"]["activewallet"] == "btcpay_lnd":
            display.update_qr_request()
            qrcode = qr.scan()
            config.INVOICE = lndrest.evaluate_scan(qrcode)
            while config.INVOICE is False:
                display.update_qr_failed()
                time.sleep(1)
                display.update_qr_request()
                qrcode = qr.scan()
                config.INVOICE = lndrest.evaluate_scan(qrcode)
            display.update_payout_screen()
            lndrest.handle_invoice()
            softreset()
        elif config.conf["atm"]["activewallet"] == "lntxbot":
            lntxbot.process_using_lnurl(config.SATS)
            # Softreset and startup screen
            softreset()
            # lntxbot.payout(config.SATS, config.INVOICE)
        else:
            pass

    if config.PUSHES == 3:
        """Scan and store new wallet credentials
        """
        # Delete current wallet flag and credentials
        config.update_config("atm", "activewallet", "")
        config.update_config("lntxbot", "creds", "")
        config.update_config("lnd", "macaroon", "")

        display.update_wallet_scan()
        qr.scan_credentials()
        importlib.reload(config)

        if config.conf["atm"]["activewallet"] == "btcpay_lnd":
            display.update_btcpay_lnd()
        elif config.conf["atm"]["activewallet"] == "lntxbot":
            balance = lntxbot.get_lnurl_balance()
            display.update_lntxbot_balance(balance)
        else:
            logger.error("Saving of wallet credentials failed.")

        # scan the credentials
        # lntxcreds = lntxbot.scan_creds()

        # save them to the current config and reload config file
        # config.update_config("lntxbot", "creds", lntxcreds)
        # if config.check_dangermode():
        #     importlib.reload(config)

        # return the current balance to the user on the screen

        softreset()

    if config.PUSHES == 4:
        """Simulates adding a coin
        """
        logger.info("Button pushed four times (add coin)")
        print("Button pushed four times (add coin)")
        config.PULSES = 2

    if config.PUSHES == 6:
        """Shutdown the host machine
        """
        display.update_shutdown_screen()
        GPIO.cleanup()
        logger.warning("ATM shutdown (6 times button)")
        os.system("sudo shutdown -h now")
    config.PUSHES = 0