From 28a86212f28b39139a51392f2e6ded284f2b44aa Mon Sep 17 00:00:00 2001 From: xyj <10908227994@qq.com> Date: Tue, 5 Dec 2023 18:35:06 +0800 Subject: [PATCH] update --- MQTT.py | 3 +- ceshi.py | 2 +- sensor_to_local.py | 22 +---- sensor_to_server.py | 194 +++++++++++++++++++++++++++++++++++++++----- tool.py | 5 +- 5 files changed, 178 insertions(+), 48 deletions(-) diff --git a/MQTT.py b/MQTT.py index fd8154f..04480d3 100644 --- a/MQTT.py +++ b/MQTT.py @@ -58,11 +58,10 @@ if __name__ == '__main__': client.on_message = on_message # Establish a connection # ceshi-mqtt.lihaink.cn - client.connect('192.168.1.27', 1883) + client.connect('ceshi-mqtt.lihaink.cn', 1883) # Publish a message client.loop_forever() except: - print("等待30秒重新连接客户端") time.sleep(30) if times != 0: times -= 1 diff --git a/ceshi.py b/ceshi.py index 3b5d4e3..40368d1 100644 --- a/ceshi.py +++ b/ceshi.py @@ -35,7 +35,7 @@ if __name__ == '__main__': client.on_connect = on_connect client.on_connect_fail = on_connect_fail # Establish a connection - client.connect('192.168.1.27', 1883) + client.connect('ceshi-mqtt.lihaink.cn', 1883) # Publish a message client.loop_forever() except Exception as e: diff --git a/sensor_to_local.py b/sensor_to_local.py index 70351fb..a38468b 100644 --- a/sensor_to_local.py +++ b/sensor_to_local.py @@ -5,7 +5,6 @@ import serial from api import add from db.models.log_data_model import LOT_DATA - if __name__ == '__main__': temp_send = '06 03 01 F4 00 02 85 B2 ' # 温湿度查询指令 co2_send = '06 03 01 F7 00 02 75 B2 ' # 二氧化碳查询指令 @@ -181,24 +180,5 @@ if __name__ == '__main__': 'wind_direction': winddirection_data, 'create_time': int(time.time()) } - data = {'ambient_temperature': 1, - 'ambient_humidity': 1, - 'carbon_dioxide': 1, - 'ambient_air_pressure': 1, - 'ambient_lighting': 1, - 'soil_moisture': 1, - 'soil_temperature': 1, - 'soil_conductivity': 1, - 'soil_PH': 1, - 'soil_potassium_phosphate_nitrogen': 1, - 'soil_potassium_phosphate_phosphorus': 1, - 'soil_potassium_phosphate_potassium': 1, - 'rainfall': 1, - 'wind_speed': 1, - 'wind_direction': 1, - 'create_time': int(time.time()) - } t = LOT_DATA(**data) - # add(t) - print(t) - time.sleep(1) + add(t) diff --git a/sensor_to_server.py b/sensor_to_server.py index 9f526a1..8b3ad73 100644 --- a/sensor_to_server.py +++ b/sensor_to_server.py @@ -10,29 +10,183 @@ from db.models.log_data_model import LOT_DATA def t(): + 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) while True: - data = {'ambient_temperature': 2, - 'ambient_humidity': 2, - 'carbon_dioxide': 2, - 'ambient_air_pressure': 12, - 'ambient_lighting': 12, - 'soil_moisture': 12, - 'soil_temperature': 12, - 'soil_conductivity': 12, - 'soil_PH': 12, - 'soil_potassium_phosphate_nitrogen': 12, - 'soil_potassium_phosphate_phosphorus': 12, - 'soil_potassium_phosphate_potassium': 12, - 'rainfall': 2, - 'wind_speed': 2, - 'wind_direction': 2, + # if ser.is_open: + ser.write(temp_send) + time.sleep(1) + # 获取返回的缓冲data,获取的是buffer_data的长度 9 + tempbuffer_data = ser.in_waiting + if tempbuffer_data: + # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8' + return_data = ser.read(tempbuffer_data) + # 二进制转换为16进制:010304010802307b79 + return_data_hex = str(return_data.hex()) + # 对返回的数据进行解析,获取温度和湿度数据 + airtemp_data = int(return_data_hex[6:10], 16) / 10 + airhumi_data = int(return_data_hex[10:14], 16) / 10 + time.sleep(5) + ser.write(co2_send) + time.sleep(1) + # 获取返回的缓冲data,获取的是buffer_data的长度 9 + co2buffer_data = ser.in_waiting + if co2buffer_data: + return_data = ser.read(co2buffer_data) + # 二进制转换为16进制:010304010802307b79 + return_data_hex = str(return_data.hex()) + # 对返回的数据进行解析,获取温度和湿度数据 + co2_data = int(return_data_hex[6:10], 16) + time.sleep(5) + ser.write(pressure_send) + time.sleep(1) + # 获取返回的缓冲data,获取的是buffer_data的长度 9 + pressurebuffer_data = ser.in_waiting + if pressurebuffer_data: + # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8' + return_data = ser.read(pressurebuffer_data) + # 二进制转换为16进制:010304010802307b79 + return_data_hex = str(return_data.hex()) + # 对返回的数据进行解析,获取温度和湿度数据 + pressure_data = int(return_data_hex[6:10], 16) / 10 + time.sleep(5) + ser.write(sun_send) + time.sleep(1) + # 获取返回的缓冲data,获取的是buffer_data的长度 9 + sunbuffer_data = ser.in_waiting + if sunbuffer_data: + # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8' + return_data = ser.read(sunbuffer_data) + # 二进制转换为16进制:010304010802307b79 + return_data_hex = str(return_data.hex()) + 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) + # 二进制转换为16进制:010304010802307b79 + return_data_hex = str(return_data.hex()) + # 对返回的数据进行解析,获取温度和湿度数据 + 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()) + # # 对返回的数据进行解析,获取温度和湿度数据 + 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) + 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, 'create_time': int(time.time()) } - t = LOT_DATA(**data) + t2 = LOT_DATA(**data) client.publish('demo', payload=json.dumps(data, ensure_ascii=False), qos=0) - # add(t) - print(t) - time.sleep(10) + add(t2) def on_connect(client, userdata, flags, rc): @@ -46,6 +200,6 @@ if __name__ == '__main__': client.on_connect = on_connect # Establish a connection # ceshi-mqtt.lihaink.cn - client.connect('192.168.1.27', 1883) + client.connect('ceshi-mqtt.lihaink.cn', 1883) # Publish a message client.loop_forever() diff --git a/tool.py b/tool.py index 4c2b846..627f74d 100644 --- a/tool.py +++ b/tool.py @@ -61,7 +61,4 @@ def get_record(msg, client): client.publish('error', payload='没有该文件', qos=1) return files = {filename: open(os.path.join(mp4_path, filename), 'rb'), "Content-Type": "application/octet-stream"} - requests.post("https://shop.lihaink.cn/api/index/upload", files=files) - -def sensor_data_upload(client): - p = subprocess.Popen(['/bin/bash update.sh'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + requests.post("https://shop.lihaink.cn/api/index/upload", files=files) \ No newline at end of file