2016-11-14 83 views
0

我有一个python脚本轮询5个温度传感器,并通过http发布结果给mysql。其中一个传感器的精度不如其他4,因此我想在发布到数据库之前通过将其乘以1.02来修改avgtemperatures [2]。操作Python int /字符串

如何在系列中修改传感器int/string?

import requests 
import hashlib 
import time 
import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

sensorids = ["28-05168023f3ee", "28-0516803623ee", "28-0416807d93ee", "28-0516801a63ee", "28-0516801b03ee"] 
avgtemperatures = [] 
for sensor in range(len(sensorids)): 
    temperatures = [] 
    for polltime in range(0,3): 
      text = ''; 
      while text.split("\n")[0].find("YES") == -1: 
        tfile = open("/sys/bus/w1/devices/"+ sensorids[sensor] +"/w1_slave") 
        text = tfile.read() 
        tfile.close() 
        time.sleep(1) 
      secondline = text.split("\n")[1] 
      temperaturedata = secondline.split(" ")[9] 
      temperature = float(temperaturedata[2:]) 
      temperatures.append(temperature/1000) 
      avgtemperatures.append(sum(temperatures)/float(len(temperatures))) 

print avgtemperatures[0] 
print avgtemperatures[1] 
print avgtemperatures[2] 
print avgtemperatures[3] 
print avgtemperatures[4] 

session = requests.Session() 

nonce = session.get(url='http://server.local/saveTemp.php?step=nonce').text 

response = hashlib.sha256(nonce + 'password' + str(avgtemperatures[0]) + str(avgtemperatures[1]) + str(avgtemperatures[2]) + str(avgtemperatures[3]) + str(avgtemperatures[4])).hexdigest() 

post_data = {'response':response, 'temp1':avgtemperatures[0], 'temp2': avgtemperatures[1], 'temp3': avgtemperatures[2], 'temp4': avgtemperatures[3], 'temp5': avgtemperatures[4]} 

post_request = session.post(url='http://server.local/saveTemp.php', data=post_data) 

if post_request.status_code == 200 : 
    print post_request.text 

回答

0

使用带权重因子,zip列表的第二列表,并相应地乘以每个值:

avgtemperatures = [1.0, 2.0, 3.0, 4.0, 5.0] 
weights = [1.0, 1.0, 1.02, 1.0, 1.0] 
weightedaverages = [a * w for a, w in zip(avgtemperatures, weights)] 
print(weightedaverages) 
# [1.0, 2.0, 3.06, 4.0, 5.0] 
+0

感谢。这很好,让我可以根据需要轻松调整其他传感器。 – Harri