在Python中删除NFC标签

问题描述

我把手放在Lego Dimensions垫上,它实际上是三重NFC读取器。在github上找到了一些代码,可以开始与树莓派一起玩。到目前为止,我已经做到了,当在垫上放置小图时,它会向我的家庭助理发送一个网络挂钩以打开灯。卡住且Python编程技能不足的地方是,在删除标签时也发送了一个webhook。谁能指出我正确的方向? 谢谢!

#!/usr/bin/python

import usb.core
import usb.util
from time import sleep
import requests

TOYPAD_INIT = [0x55,0x0f,0xb0,0x01,0x28,0x63,0x29,0x20,0x4c,0x45,0x47,0x4f,0x32,0x30,0x31,0x34,0xf7,0x00,0x00]

# Colors
OFF   = [0,0]
RED   = [255,0]
GREEN = [0,255,0]
BLUE  = [0,255]
YELLOW = [255,0]
PURPLE = [128,128]

# Pad number
ALL_PADS   = 0
CENTER_PAD = 1
LEFT_PAD   = 2
RIGHT_PAD  = 3

# Actions
TAG_INSERTED = 0
TAG_REMOVED  = 1

# UIDs can be retrieved with Android App (most probably in hexadecimal)
uidBatman = [4,117,251,42,41,73,128] # Batman Lego
uidLucy = [4,66,84,114,82,129] # Lucy Lego
uidGandalf = [4,133,184,90,181,128] # Gandalf

# Webhook var
auth_token='[Token]'
hed = {'Authorization': 'Bearer ' + auth_token}
dataon = {"state": "on"}
dataoff = {"state": "off"}

def init_usb():
    global dev

    dev = usb.core.find(idvendor=0x0e6f,idProduct=0x0241)

    if dev is None:
        print("Device not found")
    else:
        if dev.is_kernel_driver_active(0):
            dev.detach_kernel_driver(0)

        print usb.util.get_string(dev,dev.iProduct)

        dev.set_configuration()
        dev.write(1,TOYPAD_INIT)

    return dev

def send_command(dev,command):

    # calculate checksum
    checksum = 0
    for word in command:
        checksum = checksum + word
        if checksum >= 256:
            checksum -= 256
        message = command+[checksum]

    # pad message
    while(len(message) < 32):
        message.append(0x00)

    # send message
    dev.write(1,message)

    return

def switch_pad(pad,colour):
    send_command(dev,[0x55,0x06,0xc0,0x02,pad,colour[0],colour[1],colour[2],])
    return

def main():
    init_usb()
    if dev != None :
        while True:
            try:
                in_packet = dev.read(0x81,32,timeout = 10)
                bytelist = list(in_packet)

                if not bytelist:
                    pass
                elif bytelist[0] != 0x56: # NFC packets start with 0x56
                    pass
                else:
                    pad_num = bytelist[2]
                    uid_bytes = bytelist[6:13]
                    action = bytelist[5]
                    if action == TAG_INSERTED :
                        print uid_bytes
                        if (uid_bytes == uidBatman) :
                            switch_pad(pad_num,RED)
                            url = '[URL]'
                            response = requests.post(url,json=dataon,headers=hed)
                            print(response)
                            print(response.json())
                        elif (uid_bytes == uidLucy) :
                            switch_pad(pad_num,PURPLE)
                            url = '[URL]'
                            response = requests.post(url,json=data,headers=hed)
                            print(response)
                            print(response.json())
                        elif (uid_bytes == uidGandalf) :
                            switch_pad(pad_num,YELLOW)
                            url = '[URL]'
                            response = requests.post(url,headers=hed)
                            print(response)
                            print(response.json())
                        else:
                            # some other tag
                            switch_pad(pad_num,GREEN)
                    else:
                        # some tag removed
                        switch_pad(pad_num,OFF)

            except usb.USBError,err:
                pass

        switch_pad(ALL_PADS,OFF)
    return

if __name__ == '__main__':
    main()
  

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)