From adc497629bed541be71702e92cffec21f48ddec5 Mon Sep 17 00:00:00 2001 From: xyj <10908227994@qq.com> Date: Tue, 5 Dec 2023 16:21:08 +0800 Subject: [PATCH] update --- MQTT.py | 5 +- __pycache__/api.cpython-310.pyc | Bin 0 -> 1184 bytes ceshi.py | 422 ++---------------- ceshi2.py | 38 ++ conf/sensor_to_local.conf | 13 + conf/sensor_to_server.conf | 13 + db/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 176 bytes db/__pycache__/base.cpython-310.pyc | Bin 0 -> 814 bytes db/__pycache__/session.cpython-310.pyc | Bin 0 -> 1337 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 183 bytes db/models/__pycache__/base.cpython-310.pyc | Bin 0 -> 1255 bytes .../log_data_model.cpython-310.pyc | Bin 0 -> 3264 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 223 bytes .../lot_data_repository.cpython-310.pyc | Bin 0 -> 1860 bytes sensor_to_local.py | 204 +++++++++ sensor_to_server.py | 50 +++ tool.py | 3 + 17 files changed, 352 insertions(+), 396 deletions(-) create mode 100644 __pycache__/api.cpython-310.pyc create mode 100644 ceshi2.py create mode 100644 conf/sensor_to_local.conf create mode 100644 conf/sensor_to_server.conf create mode 100644 db/__pycache__/__init__.cpython-310.pyc create mode 100644 db/__pycache__/base.cpython-310.pyc create mode 100644 db/__pycache__/session.cpython-310.pyc create mode 100644 db/models/__pycache__/__init__.cpython-310.pyc create mode 100644 db/models/__pycache__/base.cpython-310.pyc create mode 100644 db/models/__pycache__/log_data_model.cpython-310.pyc create mode 100644 db/repository/__pycache__/__init__.cpython-310.pyc create mode 100644 db/repository/__pycache__/lot_data_repository.cpython-310.pyc create mode 100644 sensor_to_local.py create mode 100644 sensor_to_server.py diff --git a/MQTT.py b/MQTT.py index b4ef189..adc17ef 100644 --- a/MQTT.py +++ b/MQTT.py @@ -9,7 +9,8 @@ class MQTT: def on_connect(self, client, userdata, flags, rc): if rc == 0: client.subscribe('lot_mqtt') - + def on_connect_fail(self): + pass # Message receiving callback def on_message(self, client, userdata, msg): data = json.loads(msg.payload.decode('utf-8'))["msg"] @@ -33,7 +34,7 @@ class MQTT: get_record(msg, self.client) elif data == "status": # 查看运行状态 - get_status(client) + get_status(self.client) else: # 错误类型 client.publish('success', payload='No Such Type', qos=0) diff --git a/__pycache__/api.cpython-310.pyc b/__pycache__/api.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a01e94b6a6f1812c3c66c2a2e30b4a42cc3a17c4 GIT binary patch literal 1184 zcmZ`&&u`N(6t?uMu5gRThC=W%v*^YCj=A+G}7FZ6%6-#9mws! zO_bg|cxPOe=p@Cqrr981EtPNJQ(G_%1C2&#j4{%9jE>PEa*-y3XBb^VY#3?G@CY+< zLynP$J^^u;_zIv-?FGI-6K5~`4LK&nxT#>=IECso9JvIyOPkMBcD|&%uQSn`5NWd; z%qK{$!RpWZR#z0fm1o@~YaI;IZX$~VDNcE+RjWVHUD2Dl54>FHxJY_QhszhOq@OkW z1LFXZ5!|ZkFcBQUuZ}lx@Rj_Pk0F%Wa^}PK%qlm&*VRl}@BCwW9&=v2rC>?J>*4bb16U<4u*d_0DjFcX6yk zJcaLe+>>;UV~j3A&=I_Z8+Yu>NfM$^u8?qEj%crz8-2qZU hD#Zw1LYDKKzp{@=**^pb+KNPY1sW?Nbted-;2+xr0>1zN literal 0 HcmV?d00001 diff --git a/ceshi.py b/ceshi.py index cbd7c10..bab7d7f 100644 --- a/ceshi.py +++ b/ceshi.py @@ -7,406 +7,40 @@ import paho.mqtt.client as mqtt from api import add from db.models.log_data_model import LOT_DATA - -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)) - - -def run_with_client(): - 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: - # 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) - # TODO 判断数据是否正常 - # 发送给服务器 - client.publish('demo', payload=json.dumps(data, ensure_ascii=False), qos=0) - add(t) - - -def run_no_client(): - 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: - 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: - # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8' - 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) - - ser.write(soil_send) - time.sleep(1) - # 获取返回的缓冲data,获取的是buffer_data的长度 9 - soilbuffer_data = ser.in_waiting - 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) - - ser.write(danlinjia_send) - time.sleep(1) - # 获取返回的缓冲data,获取的是buffer_data的长度 9 - danlinjiabuffer_data = ser.in_waiting - if danlinjiabuffer_data: - # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8' - return_data = ser.read(danlinjiabuffer_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) - - ser.write(rainfall_send) - time.sleep(1) - # 获取返回的缓冲data,获取的是buffer_data的长度 9 - rainfallbuffer_data = ser.in_waiting - if rainfallbuffer_data: - # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8' - return_data = ser.read(rainfallbuffer_data) - # 二进制转换为16进制:010304010802307b79 - return_data_hex = str(return_data.hex()) - # # 对返回的数据进行解析,获取温度和湿度数据 - 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 - if windspeedbuffer_data: - # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8' - return_data = ser.read(windspeedbuffer_data) - # 二进制转换为16进制:010304010802307b79 - return_data_hex = str(return_data.hex()) - speedwind_data = int(return_data_hex[6:10], 16) / 10 - time.sleep(5) - - ser.write(winddirection_send) - time.sleep(1) - # 获取返回的缓冲data,获取的是buffer_data的长度 9 - winddirectionbuffer_data = ser.in_waiting - if winddirectionbuffer_data: - # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8' - return_data = ser.read(winddirectionbuffer_data) - # 二进制转换为16进制:010304010802307b79 - return_data_hex = str(return_data.hex()) - winddirection_data = int(return_data_hex[10:14], 16) - time.sleep(5) - 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} - data = LOT_DATA(**data, create_time=int(time.time())) - # TODO 判断数据是否正常 - add(data) - - -times = 3 +import subprocess +import time +import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): global times - from threading import Thread if rc == 0: - # print("连接成功,执行数据推送和本地存储") - Thread(target=t1).start() - else: - if times != 0: - times -= 1 - client.reconnect() - else: - # print("3次失败,执行本地存储") - Thread(target=t2).start() + print("连接成功,执行数据推送和本地存储") + subprocess.Popen(["supervisorctl stop sensor_to_local && supervisorctl start sensor_to_server"]) + times = 3 -def t2(): - run_no_client() +def on_connect_fail(client, userdata): + print("失败,执行本地存储") + subprocess.Popen(["supervisorctl stop sensor_to_server && supervisorctl start sensor_to_local"]) -def t1(): - run_with_client() - - -client = mqtt.Client(transport="websockets") -client.username_pw_set("demo", "123456") -# Specify callback function -client.on_connect = on_connect -# Establish a connection -client.connect('ceshi-mqtt.lihaink.cn', 8083) -# Publish a message -client.loop_forever() +times = 3 +if __name__ == '__main__': + while True: + try: + client = mqtt.Client(transport="websockets") + client.username_pw_set("demo", "123456") + # Specify callback function + client.on_connect = on_connect + client.on_connect_fail = on_connect_fail + # Establish a connection + client.connect('ceshi-mqtt.lihaink.cn', 8083) + # Publish a message + client.loop_forever() + except Exception as e: + print("等待5秒重新连接客户端") + time.sleep(5) + if times != 0: + times -= 1 + on_connect_fail(None, None) diff --git a/ceshi2.py b/ceshi2.py new file mode 100644 index 0000000..95f6a88 --- /dev/null +++ b/ceshi2.py @@ -0,0 +1,38 @@ +import subprocess +import time +import paho.mqtt.client as mqtt + + +def on_connect(client, userdata, flags, rc): + global times + if rc == 0: + print("连接成功,执行数据推送和本地存储") + subprocess.Popen(["supervisorctl stop sensor_to_local && supervisorctl start sensor_to_server"]) + times = 3 + + +def on_connect_fail(): + print("失败,执行本地存储") + subprocess.Popen(["supervisorctl stop sensor_to_server && supervisorctl start sensor_to_local"]) + + +times = 3 +if __name__ == '__main__': + + while True: + try: + client = mqtt.Client() + client.username_pw_set("demo", "123456") + # Specify callback function + client.on_connect = on_connect + client.on_connect_fail = on_connect_fail + # Establish a connection + client.connect('127.0.0.1', 1883) + # Publish a message + client.loop_forever() + except Exception as e: + print("等待5秒重新连接客户端") + time.sleep(5) + if times != 0: + times -= 1 + on_connect_fail() diff --git a/conf/sensor_to_local.conf b/conf/sensor_to_local.conf new file mode 100644 index 0000000..d82049a --- /dev/null +++ b/conf/sensor_to_local.conf @@ -0,0 +1,13 @@ +[program:sensor_to_local] +directory=/home/pi/lot_manager +command=/usr/bin/python sensor_to_local.py +user=pi +;是否随开机自启 或者reload自启动 +autostart=false +;失败重启 +autorestart=true +;重启次数 +restart_times=3 +redirect_stderr=true +stopsignal=TERM +stopasgroup=True diff --git a/conf/sensor_to_server.conf b/conf/sensor_to_server.conf new file mode 100644 index 0000000..e633819 --- /dev/null +++ b/conf/sensor_to_server.conf @@ -0,0 +1,13 @@ +[program:sensor_to_server] +directory=/home/pi/lot_manager +command=/usr/bin/python sensor_to_server.py +user=pi +;是否随开机自启 或者reload自启动 +autostart=false +;失败重启 +autorestart=true +;重启次数 +restart_times=3 +redirect_stderr=true +stopsignal=TERM +stopasgroup=True diff --git a/db/__pycache__/__init__.cpython-310.pyc b/db/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..371f42c75a2c2f1e269cc5bf9a5699f2b536b375 GIT binary patch literal 176 zcmd1j<>g`kg0h;>R1p0bL?8o3AjbiSi&=m~3PUi1CZpd5q!&A5D9}mzA>~nho|k*bX8QHxRcz z0YZW!Jknk{@d_Lec3Y_tBh7fmGduI`H&)$ljGWM)a~KkYe)(WiA{RV!YCb!2i8$g| zAnH#duq2dV?*}4~Aq{0jqnkJs4cVm48y|}nZSjb<0nOuY9cc5$cR~~1gyakQN@y1d zba{)nKOr7p6PiMkcX$UidoLM&H({*g# ziqgW%F+P~=SEd^#Fuhm zTslzG`46N$_kT`r0f=(O%Is`a%$SyETFs%bCR?oROjUQ`f00KkS;ekEKgsws^Zz?s ztm@XbU~XmHIJQ%Q9}AS!7UQv6vvnlf*ZK; IH;uN)KYcvjfdBvi literal 0 HcmV?d00001 diff --git a/db/__pycache__/session.cpython-310.pyc b/db/__pycache__/session.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..431ef68794fa882e2c2b2ae77b0906110f5a6fee GIT binary patch literal 1337 zcmZWp&1>976rVTx+_iRXLh2+frGfTPLGZRcmJkAgo{9-EG;}GrT8-@8WVG7OXxXlj zp~*URNQu)z2;`Q89PA#NV?%rB|DkK_*!~k*66kx9Hnr0cntAWd%=`GgpOiEjb%x`Y z@i)<*24gQsIXX;KF5;`N;Ut&<$zo^&kjy2IjkZz9hBRZVZ56U9?bvBMz#>Cfk+Z^u zEu0N=0&Q2gqPD@>HMCo3uZx)tvt6$=Pc%@Q5zQs$&mLktwgb5}Qo%s`kT=7mpGM!O zanKJ|BZXVuQlxb+>3^Aofy5I|rRTPa(xK{yMwA*!BRG1>ul}JS}kK= zF<=>c1dnmO%K9$gT39$)ZlVo$4Uz>cy^%-E=fls@+3xc@yU%}m`CxPZx5xWG|G4*X zd;k9S?jKtRo4@Ye**@6%eed3bvsHTM&K}(0TZ3`hP5PDk zmL`*Qxx(+Wmgux9zYBwL-l*hd9VUaw!7%zHPW%VkFu?{7Ul%y=*YlQ|#f^{voequy zF$EdK^l6+@cAHILldXUN!8hCqtV4#t`Nrb0uFxgw$_I4uTb!sT_dZ8>V;MY!Em$`)UiK(6u3}F(($K_bf+SojI)**tkE))1%CtX1s?zf{bq>$$z@l#y z1*jT^Q^bDX%*{Zp>fF9QqE&flBogVNOp#}>Qoyd7WOj&;gGkMzQXu4V4)chO33IP( zi!eI*_uBiTUfNxr!h2p4L-mD)>aHTZe6HTXrEpaGC%nrb-qGuHN)ttFXo6W+r%*fw z;xTG}jJt2BT`!4Ukhh>VK`^EHh^aX|jCqiAHG>lt%SETmhL~1nW3NW(vgmw-22FS& zC$LHv=DB(o)&J!}`COVFEg`kg0h;>R1p0bL?8o3AjbiSi&=m~3PUi1CZpd9DKma#AYYOPNt5d5>Ay0 z5)$eS(L*IrZ*V~zDumiEz-RCkc45B)C!U=ttpH1YdcXIc-+TV$Iqh_sBUqcZ6bK{q zn*%Se2*6d?-De;;;(f9A#`KPNbw=wsXxjDv1JbWK-HE?GT&`Osma<-#_44LW ztxK(L>h`v%Ot;(&X5BVh_%9?|!&KRnz~JR2UoD|EA-m-YZnwV~bOFgHusZ@GM@3Ks z^T1pG!)XE$S6%2wAf9vjf>9oF%%cYpuo?lc%=P{Y|0pKEBLsMIqi;^N~-UmI7h0U;mx8=u7yI%$+n}L^&sVg5x^X`r;WwjP+7`yjPyKcsN?D5t9I7$1m vJ!S3Qi2L;-2GimO{%*C-UFF`Old%_uiQ~ z$FY;im?SpeoKCfrB>fIMYqx;dc~pFy2_ZxxvLTsrSvGxTpA7px!+!|A{YJnHmV>hN zltcm~cv2!kDxdI|Lt;Nf!eT#6gJM5SA_t{HbV+2B3O*ivTyyAtn^1!XpVX;A3Nn}P z7ZQL26^L59t&C<;mLw{bWg?Y*&q>rzWa1;UJkvxJ?|d$`q0aJ-X`?=(c8RR+*NT;w(!Wl1BcYT zj~#k!vOXwQy?Oe4^T(^L_rF_u|C{Zduh!|yg}k^saYCI6(`&A7TRdK2RCB57>Ly+8 z6DKZRIJjF<< z0MQw(K;GqE5!62Wb@Q_mtt*$BSHBPme>-`CXEk$Lrko z2o}yY&%S}dBcsYQQyR~8Q)@a?Ym7P$j3W*cJAZL$?ky2(nmocZ-8!rp#`3)@xtgb5 zZ=d=Sat-esA0HdvSAY5X;(29wRQcn|oY+|%wV}^cUEP|&Q8z#QxOw68m8BSdKsolH z0t=FMY~5J58Zd4zyt^98@Q9+ok|Z(Ov~>p;?w*y<_PKAHUoW=L&f&;L#gZu377rFH zCePq0726_pac5qHWfY~tyTa7O!(+!DnwsEYjGCHQR#uL+FMPjr>dMkPKZ}&Dg|FHl zoNRqE*PMH;d3>??;l+^$#GFUR&6(m0Gkg=CU9(-yarC;W)~dEstHNVt=`OQpsCARP z;u<&P9p43W#k50w%T4oku3)pebCb+s+&5$%QFacGjCWG=%{R~7okd}QM^x3)Osc9p zrmCh*>IQH^Rgcy+qjQA$#e%Vj5boD4m-ncuW?3Q!yakS`GN{lzc-XKtmn9$;R-eH; z#NZuaIgox3c)Hm}kUK%{2FZhL2H6S%&*3GB4FiMx{d}=%o3v=?RZTBW%~q-!GpCq+ zM7)Jgu{P^gZOhxeVb8E#)zmC)hO*HjnJ$XiQNt-3_KZq2SA*G7V@GY4g~Vmx@T0p1h`=AAoz?ncH+HgCryxLPT(sgpp&& z5#%^>6ghz$Lrx;ckyFSCoI&nE?nO=`XOT0=IpkjCKIANNKXMLv0J#r& zko1#*lTvvD85D(i15b4ev%3Gl-Y53e;iZk`#nyiP(x0!MYyULgdUv69=Bw7lPn#dT zfkzH;-_v^wejcwe-PG8u`U0KhNv-bMx+UthDGDeLS8NlY4iDAZYG07qn6OwB1WFo9 zg7ko7K(ZiE>KT+8wgKc0kh?%&cx)5M7LaX1DxzPnY{1aT_lS>kO$d=ck!HkiiFx@I z>4qzS_!{J z9cmn2t(a_wcx0ilGg@P+3hmDE3ArXW2G-y79o?A8!bWzV2w~en3PN~TRf%0u)pAl* zU2WQ+UYiK*v5mTE@$l1@OGRmAyWkY;4#6j}1wcEvJ#%9ZL8_Hj&>@%|D++g`kg6!^?RAnIj7{oyaOhAqU5Et_Ri4=wu#vFzah7_h?22JLdj6fkx##@Y9 zewvI?!a4aR@hOQViSb3L1^LC9CHX~_D;bKIfoj0SuQ>gT{M=OioXm{GO#Oh$C|tkmR^V*P^3l8pR3C>M&ryk0@&Ee@O9 S{FKt1R6CHfib3w?VE_P$-#udh literal 0 HcmV?d00001 diff --git a/db/repository/__pycache__/lot_data_repository.cpython-310.pyc b/db/repository/__pycache__/lot_data_repository.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fbcd7ad3de9f3c69742cffaa40022c4e43844b8 GIT binary patch literal 1860 zcmah~&u<$=6yBNHwKp5vB!!kz3jF~>?8QciV-!&}+)7%hIaxxhwPzA01S8Gc_r^1C-uJyX&t(iI#tl)iKh`wNCi`*}Qe!x5xNMDJ4E(6&(_206711n7#o_f%m z(AQ+-^bq>GY&m@mdRum!9zlOkZa95ivX@@G`6ur7c4KZk&z|okJ5TnWB;P;Z`R&MKDl1f!oRvuYjrY0S7IyfH!UqbT~v-%Xm08QrA?2!G=eqkrP_Re_C&l%yt zt$g>wi-jf^HcS$k4Na0*kxCg0+nnE{!I@|Ic%U0locKHIjmkpx@@$l5y%*ErDAmOa zT^_2Tsd|&C8I?zK^O}{HCMnXR^g!vadvegzYEo92DfP5RKM|s2xz?RbZ41#P<3VD| zL=KvWpdy4DqQi6x$~*Xp1Bd@hD8TC(cFqoY%_RGoor!Y~EO31bzxZ<|IG7N-pqFQI zFAi+*>R9RNjFq+hEH_FggQ*SnGhG?mkSbS3fwnbVpxY#~X0>BwZ;D8|cDbl%vLL(S1@D&G?N=nm9%)jnK z9Kgj7(FsE(c*{!omA}H_3+95p;F|8#MD7K*y!(}9@;aPoE6*x3EQ`tZJ@QQ#-S^%+ zI#7lnN@db4?{4MgFwLuND2v@7ih$4P6ltE%nX@5umvC2L*Y9huIQ|eGD#F#_9U|@% zs6z^RF{nmqKEB)v`!4YiB}Myf)bMz>PCu!D-<& zI+C*;lnRrdj zNYkZy6C(C!kLMvRJR)(I#44Tk?(zlA%4@+Py=>P79#hDl!&(V>r5090Ho~x)y~WcR zqYIvhTDV$p+1Hf1cY?M}@Ru5+S8{+}pmJ%0*J+MkK`?DYtLiv6*FkI&{jRN{0Nkk_ zMNd%g@sMgcrfXZ)r|JOaLANLYyz1uV!R(;3-TQIxv>##5qBm1|Tpx73#JvlbL&u79 oeI+2ruWL@>7MvdEYMYvm`=