我有一些使用Blynk库和pyblynk库的代码。但是,在底部使用if语句时,当我更改任何变量时,它似乎不会在运行脚本时进行更新。它仍然将其输出为默认值。
这是我的剧本:
import sys
import os
sys.path.append(
os.path.join(
os.path.dirname(__file__),
'..'
)
)
import pigpio
from gpiozero import Button, OutputDevice
auth_token = 'b3e6cf1a32c54bdd87018f91cfb71e85'
addr = '127.0.0.1'
import lib.hw as blynk_hw
import lib.client as blynk_client
class myHardware(blynk_hw.Hardware):
"""
you'll probably have to overload the On* calls,
see lib/hw.py
"""
pass
cConnection=blynk_client.TCP_Client(addr)
if not cConnection.connect():
print('Unable to connect')
sys.exit(-1)
if not cConnection.auth(auth_token):
print('Unable to auth')
cHardware=myHardware(cConnection)
try:
while True:
cHardware.manage()
except KeyboardInterrupt:
raise
def OnVirtualWrite(self,pin,val):
if pin == 1:
print('Lightbulb On')
elif pin == 1 and val == '0':
print('Lightbulb Off')
else:
print('dawdawda',pin,val)输出:
(20, 18, 6)
('OnVirtualWrite', 1, u'1')
(20, 19, 6)
('OnVirtualWrite', 1, u'0')发布于 2017-09-15 15:31:37
Python方法需要在它们的类中。若要重写OnVirtualWrite方法,而不是将其放在文件末尾,您需要删除class myHardware下的pass语句,然后将其放在class下缩进
class myHardware(blynk_hw.Hardware):
"""
you'll probably have to overload the On* calls,
see lib/hw.py
"""
def OnVirtualWrite(self,pin,val):
if pin == 1 and val == u'1':
print('Lightbulb On')
elif pin == 1 and val == u'0':
print('Lightbulb Off')
else:
print('dawdawda',pin,val)这告诉Python,OnVirtualWrite是myHardware的一部分,而不是一个无关的函数。
我还将and val == u'1'添加到if语句的第一个分支中,因为否则即使val是'0',灯泡也将始终处于打开状态,并且我将字符串文字更改为Unicode,因为这是作为输入提供的,您应该尝试将字节字符串和字符串保持为不同的概念。
https://stackoverflow.com/questions/46242668
复制相似问题