mysql - 使用 Python 设置将插入 MySQL 的温度和湿度的最大值和最小值
问题描述
我对如何设置温度或湿度的最大值/最小值有一些疑问,因为有时在重新启动期间,湿度值突然飙升至 >5000% 或有时温度 >100C。
所以,我想确保这些数据没有插入到 SQL 中,并使用添加到.py
我应该改变这条线吗?
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)
推荐阅读
- azure - Azure Service Fabric 上的 Signalr 问题:WebSocket 握手期间出错
- python - 有没有办法对齐两个单独的 Excel 文件,以便一个文件中的每个项目在另一个文件中都有一个唯一的匹配项?代码几乎可以工作
- android - 在 BottomTabNavigator 上打开一个模式单击 react-native
- java - 如何在 Visual Studio Code 中启用 Java 断言
- android - ionic Android 构建问题 - transformClassesWithDesugarForDebug
- c# - 如何将数字值插入到 oracle db
- php - 在 Laravel 中上传后如何获取实际文件?
- appium - 如何在 Appium 应用中查看保存的页面源
- c++ - 来自 void 的多态铸造*
- php - Laravel nova 资源更新/创建忽略模型连接