问题描述
我把手放在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 (将#修改为@)