request() в python, кажется, блокирует обновление переменной, которую я хочу отправить в моем коде
Так что у меня есть этот код, который постоянно получает данные через радиоприемник.
key = 'my api key'
ser = serial.Serial('/dev/ttyUSB0',9600)
def rfWaterLevel():
rfWaterLevelArray = ser.readline().strip().split()
if len(rfWaterLevelArray) == 5:
rfWaterLevelVal = float(rfWaterLevelArray[4])
params = urllib.urlencode({'field1':rfWaterLevelVal, 'key':key})
headers = {"Content-typZZe" : "application/x-www-form-urlencoded","Accept":"text/plain"}
conn = httplib.HTTPConnection("api.thingspeak.com:80")
conn.request("POST", "/update", params, headers)
response = conn.getresponse()
data = response.read()
conn.close()
while True:
try:
rfWaterLevel()
time.sleep(3)
except KeyboardInterrupt:
print "caught keyboard interrupt"
sys.exit()
С точки зрения отправки данных и обновления вещи говорят о его работе. Однако есть большой недостаток. Пересылаемая переменная rfWaterLevelVal вообще не обновляется в соответствии с полученными данными. Таким образом, если первоначально полученные RF-данные равны 30, таким образом, делая rfWaterLevelVal 30, то следующий раунд данных равен 40, отправляемые данные по-прежнему застряли на 30.
Я попытался закомментировать за строкой код, чтобы увидеть, как это происходит, и кажется, что это "замораживание" при обновлении переменной rfWaterLevelArray & rfWaterLevelVal происходит в строке...
conn.request("POST", "/update", params, headers)
любая помощь в том, почему моя переменная rfWaterLevelArray или rfWaterLevelVal вообще не обновляется после того, как этот код выполняется один раз?
Заранее спасибо!
1 ответ
Значение rfWaterLevel
не обновляется, потому что вы не обновляете его. Каждый раз, когда вы звоните rfWaterLevel
(функция) вы выполняете это утверждение:
rfWaterLevel = float(rfWaterLevelTemp[4])
Затем вы делаете что-то с этим значением, но вы не показываете, где rfWaterLevelTemp[4]
происходит от. Если он не будет изменен где-то, он всегда будет таким же. Вы будете отправлять одно и то же значение снова и снова. Возможно, вы хотели написать:
rfWaterLevel = float(rfWaterLevelArray[4])
который я думаю, будет отправлять последние данные, которые вы получили от последовательного порта.