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])

который я думаю, будет отправлять последние данные, которые вы получили от последовательного порта.

Другие вопросы по тегам