回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>首先,这是我第一次使用python,所以请耐心等待:)</p>
<p>我试图从亚马逊上破解一个破折号按钮来切换我的飞利浦色调灯,我设法找到所有需要的元素和代码,并编辑它以满足我的需要。在</p>
<p>我现在遇到的问题是,如果我运行脚本,我想运行的python函数会立即执行,而不是等待按钮被按下。。。在</p>
<p>下面是一些代码:</p>
<pre><code>from pydhcplib.dhcp_network
import *
import requests, json
bridgeIP = "{{mybridgeIP}}"
user = "{{philipsUserID}}"
dashMac = "{{dashMacAddress}}"
lightID = "4"
def do_something():
print("button has been pressed")
def toggleLight(lightID):
url = "http://" + bridgeIP + "/api/" + user + "/lights/" + lightID
r = requests.get(url)
data = json.loads(r.text)
if data["state"]["on"] == False:
r = requests.put(url + "/state", json.dumps({
'on': True
}))
elif data["state"]["on"] == True:
r = requests.put(url + "/state", json.dumps({
'on': False
}))
netopt = {'client_listen_port':"68", 'server_listen_port':"67", 'listen_address':"0.0.0.0"}
class Server(DhcpServer):
def __init__(self, options, dashbuttons):
DhcpServer.__init__(self, options["listen_address"],
options["client_listen_port"],
options["server_listen_port"])
self.dashbuttons = dashbuttons
def HandleDhcpRequest(self, packet):
mac = self.hwaddr_to_str(packet.GetHardwareAddress())
self.dashbuttons.press(mac)
def hwaddr_to_str(self, hwaddr):
result = []
hexsym = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
for iterator in range(6) :
result += [str(hexsym[hwaddr[iterator]/16]+hexsym[hwaddr[iterator]%16])]
return ':'.join(result)
class DashButtons():
def __init__(self):
self.buttons = {}
def register(self, mac, function):
self.buttons[mac] = function
def press(self, mac):
if mac in self.buttons:
self.buttons[mac]()
return True
return False
dashbuttons = DashButtons()
dashbuttons.register(dashMac, do_something)
dashbuttons.register(dashMac, toggleLight(lightID))
server = Server(netopt, dashbuttons)
while True :
server.GetNextDhcpPacket()
</code></pre>
<p>我的问题是<code>do_something()</code>被正确地调用(当我按下按钮时),但是{<cd2>}在我运行脚本后立即被调用。。在</p>
<p>我不明白为什么,他们看起来和我一模一样。。在</p>
<p>你能帮我理解吗?谢谢</p>