lot_manager/ceshi.py

293 lines
13 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#cd demo/ceshi-1/
#python ceshi.py
import serial
import time
import struct
import json
import requests
def hex_to_float(hex_str):
hex_int = int(hex_str, 16)
return struct.unpack('!f', struct.pack('!I', hex_int))[0]
def print_json(data):
print(json.dumps(data, sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False))
temp_send = '06 03 01 F4 00 02 85 B2 '#温湿度查询指令
co2_send = '06 03 01 F7 00 02 75 B2 '#二氧化碳查询指令
pressure_send = '06 03 01 F9 00 02 14 71 '#气压查询指令
sun_send = '06 03 01 FA 00 02 E4 71 '#光照查询指令
soil_send = '02 03 00 00 00 04 44 3A'#土壤查询指令
danlinjia_send ='02 03 00 04 00 03 44 39'#氮磷钾查询指令
rainfall_send = '03 03 00 00 00 01 85 E8'#雨量查询指令
windspeed_send = '04 03 00 00 00 02 C4 5E'#风速查询指令
winddirection_send = '05 03 00 00 00 02 C5 8F'#风向查询指令
ser = serial.Serial("/dev/ttyS2", 9600)
# 发送的数据转为2进制b'\x01\x03\x00\x00\x00\x02\xc4\x0b'
temp_send = bytes.fromhex(temp_send)
co2_send = bytes.fromhex(co2_send)
pressure_send = bytes.fromhex(pressure_send)
sun_send = bytes.fromhex(sun_send)
soil_send = bytes.fromhex(soil_send)
danlinjia_send = bytes.fromhex(danlinjia_send )
rainfall_send = bytes.fromhex(rainfall_send)
windspeed_send = bytes.fromhex(windspeed_send)
winddirection_send = bytes.fromhex(winddirection_send)
# print(temp_send)
# print(co2_send)
# print(pressure_send)
# print(sun_send)
# print(soil_send)
# print(danlinjia_send)
# print(rainfall_send)
# print(windspeed_send)
# print(winddirection_send)
# print('{"name":%s,"name1":%s}', temp_send,temp_send)
# if __name__ == '__main__':
# data = {
# "aaa": {
# "bbb":
# {
# "vvv": ['541454154', '152125', '151515', {"521515": ""}],
# "ccc": "i5452126541rl",
# "cccd": 10
# }
# },
# "12222": {
# "fhvhgvh": "",
# "nbvghngvc": "",
# "nbvg h": "nvhvhv",
# }
# }
while True:
# if ser.is_open:
print('start')
ser.write(temp_send)
time.sleep(1)
# 获取返回的缓冲data,获取的是buffer_data的长度 9
tempbuffer_data = ser.in_waiting
# print(buffer_data, 'buffer_data')
if tempbuffer_data:
# 返回的数据为2进制b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
return_data = ser.read(tempbuffer_data)
# print('返回的数据2进制:', return_data)
# 二进制转换为16进制010304010802307b79
return_data_hex = str(return_data.hex())
# print('返回的数据转换为16进制:', return_data_hex)
# 对返回的数据进行解析,获取温度和湿度数据
# print("当前湿度为:", int(return_data_hex[6:10], 16)/10)
# print("当前温度为:", int(return_data_hex[10:14], 16)/10)
airtemp_data=int(return_data_hex[6:10], 16)/10
airhumi_data=int(return_data_hex[10:14], 16)/10
time.sleep(5)
# print('send co2 directives')
ser.write(co2_send)
time.sleep(1)
# 获取返回的缓冲data,获取的是buffer_data的长度 9
co2buffer_data = ser.in_waiting
# print(buffer_data, 'buffer_data')
if co2buffer_data:
# 返回的数据为2进制b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
return_data = ser.read(co2buffer_data)
# print('返回的数据2进制:', return_data)
# 二进制转换为16进制010304010802307b79
return_data_hex = str(return_data.hex())
# print('返回的数据转换为16进制:', return_data_hex)
# 对返回的数据进行解析,获取温度和湿度数据
# print("当前co2为", int(return_data_hex[6:10], 16))
co2_data=int(return_data_hex[6:10], 16)
time.sleep(5)
# print('send pressure directives')
ser.write(pressure_send)
time.sleep(1)
# 获取返回的缓冲data,获取的是buffer_data的长度 9
pressurebuffer_data = ser.in_waiting
# print(buffer_data, 'buffer_data')
if pressurebuffer_data:
# 返回的数据为2进制b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
return_data = ser.read(pressurebuffer_data)
# print('返回的数据2进制:', return_data)
# 二进制转换为16进制010304010802307b79
return_data_hex = str(return_data.hex())
# print('返回的数据转换为16进制:', return_data_hex)
# 对返回的数据进行解析,获取温度和湿度数据
# print("当前气压为:", int(return_data_hex[6:10], 16)/10)
pressure_data=int(return_data_hex[6:10], 16)/10
time.sleep(5)
# print('send sun directives')
ser.write(sun_send)
time.sleep(1)
# 获取返回的缓冲data,获取的是buffer_data的长度 9
sunbuffer_data = ser.in_waiting
# print(buffer_data, 'buffer_data')
if sunbuffer_data:
# 返回的数据为2进制b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
return_data = ser.read(sunbuffer_data)
# print('返回的数据2进制:', return_data)
# 二进制转换为16进制010304010802307b79
return_data_hex = str(return_data.hex())
# print('返回的数据转换为16进制:', return_data_hex)
# sun=round(hex_to_float(return_data_hex[6:14])*6, 2)
# print("当前光照为:", sun)#单位lux
# print("当前光照为:", int(return_data_hex[6:14], 16))
sun_data=int(return_data_hex[6:14], 16)
time.sleep(5)
# print('send soil directives')
ser.write(soil_send)
time.sleep(1)
# 获取返回的缓冲data,获取的是buffer_data的长度 9
soilbuffer_data = ser.in_waiting
# print(buffer_data, 'buffer_data')
if soilbuffer_data:
# 返回的数据为2进制b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
return_data = ser.read(soilbuffer_data)
# print('返回的数据2进制:', return_data)
# 二进制转换为16进制010304010802307b79
return_data_hex = str(return_data.hex())
# print('返回的数据转换为16进制:', return_data_hex)
# 对返回的数据进行解析,获取温度和湿度数据
# print("当前湿度值为:", int(return_data_hex[6:10], 16)/10)
# print("当前温度值为:", int(return_data_hex[10:14], 16)/10)
# print("当前电导率为:", int(return_data_hex[14:18], 16)/10)
# print("当前PH值为", int(return_data_hex[18:22], 16)/10)
humidity_data=int(return_data_hex[6:10], 16)/10
temperature_data=int(return_data_hex[10:14], 16)/10
electrical_data=int(return_data_hex[14:18], 16)/10
PH_data=int(return_data_hex[18:22], 16)/10
time.sleep(5)
# print('send danlinjia directives')
ser.write(danlinjia_send)
time.sleep(1)
# 获取返回的缓冲data,获取的是buffer_data的长度 9
danlinjiabuffer_data = ser.in_waiting
# print(buffer_data, 'buffer_data')
if danlinjiabuffer_data:
# 返回的数据为2进制b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
return_data = ser.read(danlinjiabuffer_data)
# print('返回的数据2进制:', return_data)
# 二进制转换为16进制010304010802307b79
return_data_hex = str(return_data.hex())
# print('返回的数据转换为16进制:', return_data_hex)
# # 对返回的数据进行解析,获取温度和湿度数据
# print("当前氮含量为:", int(return_data_hex[6:10], 16)/10)
# print("当前磷含量为:", int(return_data_hex[10:14], 16)/10)
# print("当前钾含量为:", int(return_data_hex[14:18], 16)/10)
dan_data=int(return_data_hex[6:10], 16)/10
lin_data=int(return_data_hex[10:14], 16)/10
jia_data=int(return_data_hex[14:18], 16)/10
time.sleep(5)
# print('send rainfall directives')
ser.write(rainfall_send)
time.sleep(1)
# 获取返回的缓冲data,获取的是buffer_data的长度 9
rainfallbuffer_data = ser.in_waiting
# print(buffer_data, 'buffer_data')
if rainfallbuffer_data:
# 返回的数据为2进制b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
return_data = ser.read(rainfallbuffer_data)
# print('返回的数据2进制:', return_data)
# 二进制转换为16进制010304010802307b79
return_data_hex = str(return_data.hex())
# print('返回的数据转换为16进制:', return_data_hex)
# # 对返回的数据进行解析,获取温度和湿度数据
# print("当前雨量值为:", int(return_data_hex[6:10], 16)/10)#单位mm
rainfall_data=int(return_data_hex[6:10], 16)/10
time.sleep(5)
# print('send sun directives')
# ser.write(sun_send)
# time.sleep(1)
# # 获取返回的缓冲data,获取的是buffer_data的长度 9
# sunbuffer_data = ser.in_waiting
# # print(buffer_data, 'buffer_data')
# if sunbuffer_data:
# # 返回的数据为2进制b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
# return_data = ser.read(sunbuffer_data)
# # print('返回的数据2进制:', return_data)
# # 二进制转换为16进制010304010802307b79
# return_data_hex = str(return_data.hex())
# print('返回的数据转换为16进制:', return_data_hex)
# # 对返回的数据进行解析,获取温度和湿度数据
# # print("当前光照强度为:", int(return_data_hex[6:14], 16))#单位lux
# sun=hex_to_float(return_data_hex[6:14])
# print("当前光照强度为为:", sun)#单位m/s
# time.sleep(5)
# print('send windspeed directives')
ser.write(windspeed_send)
time.sleep(1)
# 获取返回的缓冲data,获取的是buffer_data的长度 9
windspeedbuffer_data = ser.in_waiting
# print(buffer_data, 'buffer_data')
if windspeedbuffer_data:
# 返回的数据为2进制b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
return_data = ser.read(windspeedbuffer_data)
# print('返回的数据2进制:', return_data)
# 二进制转换为16进制010304010802307b79
return_data_hex = str(return_data.hex())
# print('返回的数据转换为16进制:', return_data_hex)
# print("当前风速为:", int(return_data_hex[6:10], 16)/10)#单位mm
speedwind_data=int(return_data_hex[6:10], 16)/10
time.sleep(5)
# print('send winddirection directives')
ser.write(winddirection_send)
time.sleep(1)
# 获取返回的缓冲data,获取的是buffer_data的长度 9
winddirectionbuffer_data = ser.in_waiting
# print(buffer_data, 'buffer_data')
if winddirectionbuffer_data:
# 返回的数据为2进制b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
return_data = ser.read(winddirectionbuffer_data)
# print('返回的数据2进制:', return_data)
# 二进制转换为16进制010304010802307b79
return_data_hex = str(return_data.hex())
# print('返回的数据转换为16进制:', return_data_hex)
# print("当前风向为:", int(return_data_hex[10:14], 16))#单位mm
winddirection_data=int(return_data_hex[10:14], 16)
time.sleep(5)
# print('{"name":"%d","name1":"%d"}', 123,456)
# data = [{'ngvhgv': airtemp_data}, {'nvjgvjvj':airhumi_data}]
data = {'ambient_temperature': airtemp_data,
'ambient_humidity': airhumi_data,
'carbon_dioxide': co2_data,
'ambient_air_pressure': pressure_data,
'ambient_lighting': sun_data,
'soil_moisture': humidity_data,
'soil_temperature': temperature_data,
'soil_conductivity': electrical_data,
'soil_PH': PH_data,
'soil_potassium_phosphate_nitrogen': dan_data,
'soil_potassium_phosphate_phosphorus': lin_data,
'soil_potassium_phosphate_potassium': jia_data,
'rainfall': rainfall_data,
'wind_speed': speedwind_data,
'wind_direction': winddirection_data}
# print('stop')
# print("请求:")
print_json(data)
# requests.post("http://192.168.1.27:8000/add/lot_data/123", json=data)
r=requests.post("http://192.168.1.27:8000/add/lot_data/123", json=data)
print('返回的数据结果:', r)