我有一些关于如何设置温度或湿度的最大值/最小值的问题,因为有时就像在重启期间,湿度值突然飙升至 >5000% 或有时温度 >100C 所以,我想确保这些数据未插入到 SQL 并使用添加到 .py 的 python 脚本进行过滤
我应该改变这条线吗?
if temp is not and hum is not None:
import serial
import time
import pymysql.cursors
#Connect to database
connection = pymysql.connect(host='localhost',
user='ubuntu',
password='testing',
database='Blabla',
cursorclass=pymysql.cursors.DictCursor)
arduino = serial.Serial('/dev/ttyACM0', 9600)
print('Established serial connection to Arduino')
with connection:
while True:
arduino_data = arduino.readline()
decoded_values = str(arduino_data[0:len(arduino_data)].decode("utf-8"))
list_values = decoded_values.split(' ')
print(f'Collected readings from Arduino: {list_values}')
arduino_data = 0
temp = list_values[0]
hum = list_values[1]
#Here we are going to insert the data into the Database
if temp is not and hum is not None:
with connection.cursor() as cursor:
cursor.execute("INSERT INTO `SensorTest` (`Temperature`, `Humidity`) VALUES (%s,%s)", (temp,hum))
connection.commit()
cursor.close()
else:
print('Failed to read the sensor')
time.sleep(60)
当然,您可以向此行添加更多过滤器以确保值没有错误。
我建议在脚本开始时(导入后)为 temp 和 hum 设置 const 有效的最小值和最大值,例如:
MIN_VALID_TEMP = -20
MAX_VALID_TEMP = 90
MIN_VALID_HUM = 10
MAX_VALID_HUM = 1000
接下来,我建议将 temp 和 hum 验证拆分为辅助函数,例如:
def validate_reading(temp, hum):
if not temp or not hum:
return false
if (temp > MIN_VALID_TEMP and temp < MAX_VALID_TEMP and
hum > MIN_VALID_HUM and hum < MAX_VALID_HUM):
return true
return false
并在以下情况下切换您的原件:
if temp and hum is not None:
到:
if validate_reading(temp, hum):
此外,您接下来可以做的是在读数无效时添加不同的打印!
最终文件将如下所示:
import serial
import time
import pymysql.cursors
# define valid temp and hum
MIN_VALID_TEMP = -20
MAX_VALID_TEMP = 90
MIN_VALID_HUM = 10
MAX_VALID_HUM = 1000
def validate_reading(temp, hum):
if not temp or not hum:
return False
if temp > MIN_VALID_TEMP and temp < MAX_VALID_TEMP and hum > MIN_VALID_HUM and hum < MAX_VALID_HUM:
return True
return False
# Connect to database
connection = pymysql.connect(
host="localhost", user="ubuntu", password="testing", database="Blabla", cursorclass=pymysql.cursors.DictCursor
)
arduino = serial.Serial("/dev/ttyACM0", 9600)
print("Established serial connection to Arduino")
with connection:
while True:
arduino_data = arduino.readline()
decoded_values = str(arduino_data[0 : len(arduino_data)].decode("utf-8"))
list_values = decoded_values.split(" ")
print(f"Collected readings from Arduino: {list_values}")
arduino_data = 0
temp = list_values[0]
hum = list_values[1]
# Here we are going to insert the data into the Database
if validate_reading(temp, hum):
with connection.cursor() as cursor:
cursor.execute("INSERT INTO `SensorTest` (`Temperature`, `Humidity`) VALUES (%s,%s)", (temp, hum))
connection.commit()
cursor.close()
else:
print("Failed to read the sensor")
time.sleep(60)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句