From 9ceb01879b9c150a17931349a7270449a06f3d7b Mon Sep 17 00:00:00 2001 From: KwanghoKim Date: Thu, 30 Nov 2023 14:31:59 +0900 Subject: [PATCH] first commit --- README.md | 0 cnt_collector_232.py | 277 ++++++++++++++++++++++++++++++++++++++ cnt_collector_232.service | 10 ++ connect_info.json | 10 ++ control.json | 8 ++ install.sh | 9 ++ 6 files changed, 314 insertions(+) create mode 100644 README.md create mode 100644 cnt_collector_232.py create mode 100644 cnt_collector_232.service create mode 100644 connect_info.json create mode 100644 control.json create mode 100755 install.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/cnt_collector_232.py b/cnt_collector_232.py new file mode 100644 index 0000000..9c3dec9 --- /dev/null +++ b/cnt_collector_232.py @@ -0,0 +1,277 @@ +import sys, os, time, json +import serial +import paho.mqtt.client as mqtt +import argparse + +if os.system("lsmod | grep max7301") == 0: + os.system("rmmod gpio-max7301") + os.system("rmmod gpio-max730x") + os.system("rmmod gpio-pisosr") + os.system("insmod /lib/modules/5.4.31/extra/max3109test.ko") + +serial_MFC = serial.Serial('/dev/ttyMAX0', baudrate=115200, bytesize=8, + parity='N', stopbits=1, timeout=0.5) + +serial_TEMP = serial.Serial('/dev/ttyMAX3', baudrate=9600, bytesize=8, + parity='N', stopbits=1, timeout=0.5) + +serial_WINDER = serial.Serial('/dev/ttyMAX2', baudrate=9600, bytesize=8, + parity='N', stopbits=1, timeout=0.5) + +parser = argparse.ArgumentParser() +parser.add_argument('-config',help='') +args = parser.parse_args() + +ROOT_PATH = f'/usr/local/sdt/app/{args.config}' + +with open(f'{ROOT_PATH}/connect_info.json') as f: + info = json.load(f) + +MQTT_TOPIC = info['mqtt']['topic'] +# MQTT_TOPIC = "/axrcnt/device-test/S0NQ0R223090003" +MQTT_ID = info['mqtt']['id'] +MQTT_PW = info['mqtt']['pw'] +MQTT_HOST_IP = info['mqtt']['host_ip'] +MQTT_PORT = info['mqtt']['port'] + +mqtt_client = mqtt.Client(info['mqtt']['assetCode']) +mqtt_client.username_pw_set(MQTT_ID, MQTT_PW) + +def MFC_Read_Flow(client): + command_hex = '235246310D' # '#RF1' + command_bytes = bytes.fromhex(command_hex) + + client.write(command_bytes) + time.sleep(0.02) + ch1 = client.readline() + # print(ch1) + ch1 = str(ch1, 'utf-8') + # print(ch1) + if ch1 != '': + ch1 = float(ch1[:-1]) + else: + ch1 = None + time.sleep(0.02) + + command_hex = '235246320D' # '#RF2' + command_bytes = bytes.fromhex(command_hex) + + client.write(command_bytes) + time.sleep(0.02) + ch2 = client.readline() + # print(ch2) + ch2 = str(ch2, 'utf-8') + # print(ch2) + if ch2 != '': + ch2 = float(ch2[:-1]) + else: + ch2 = None + + time.sleep(0.02) + + data = { + "assetCode": info['mqtt']['assetCode'], + "timestamp": int(time.time()), + "dataType": "DATA", + "data": { + } + } + + if ch1 != None: + data['data']['hydrogen1'] = ch1 + + if ch2 != None: + data['data']['hydrogen2'] = ch2 + + # print(f'MFC: {data}') + Publish_mqtt(data) + +def MFC_Write(client, cmd, ch, subcmd=None, value=None): + send_data = ['#', 'S'] + if cmd == 'SetPoint': + send_data.append('S') + elif cmd == 'SetFlow': + send_data.append('F') + + if ch == 'hydrogen1': + send_data.append('1') + else: # ch == 'hydrogen2 + send_data.append('2') + + if subcmd != None: + send_data.append(' ') + if subcmd == 'On': + send_data.append('1') + else: # subcmd = 'Off' + send_data.append('0') + + if value != None: + send_data.append(' ') + send_data.append(value) + + send_data.append('\r') + send_data = ''.join(send_data) + send_data = send_data.encode() + + send_data_hex = send_data.hex() + send_data_hex = bytes.fromhex(send_data_hex) + + client.write(send_data_hex) + time.sleep(0.02) + + result = client.readline() + +def Temp_Hum_Press_Read(client): + ch1_temp, ch1_humi, ch1_pres, ch2_temp, ch2_humi = None, None, None, None, None + command_hex = '410030305A53300D' + command_bytes = bytes.fromhex(command_hex) + + client.write(command_bytes) + time.sleep(0.3) + ch1 = client.readline() + #time.sleep(0.02) + # print(f'Receive: 00 {ch1}') + parts = ch1.split() + if len(parts) > 7: + if b'\xf8C' in parts[2]: + ch1_temp = float(parts[2][:-2]) + else: + ch1_temp = None + + if b'RH%' in parts[3]: + ch1_humi = float(parts[3][:-3]) + else: + ch1_humi = None + + if b'hPa' in parts[7]: + ch1_pres = float(parts[7][:-3]) + + #time.sleep(5) + + command_hex = '410030315A53300D' + command_bytes = bytes.fromhex(command_hex) + + client.write(command_bytes) + time.sleep(0.3) + ch2 = client.readline() + #time.sleep(0.02) + # print(f'Receive: 01 {ch2}') + parts = ch2.split() + + if len(parts) > 7: + if b'\xf8C' in parts[2]: + ch2_temp = float(parts[2][:-2]) + else: + ch2_temp = None + + if b'RH%' in parts[3]: + ch2_humi = float(parts[3][:-3]) + else: + ch2_humi = None + + data = { + "assetCode":info['mqtt']['assetCode'], + "timestamp": int(time.time()), + "dataType": "DATA", + "data": { + } + } + if ch1_temp != None: + data['data']['tempOn'] = ch1_temp + + if ch1_humi != None: + data['data']['humiOn'] = ch1_temp + + if ch1_pres != None: + data['data']['presOn'] = ch1_pres + + if ch2_temp != None: + data['data']['tempSb'] = ch2_temp + + if ch2_humi != None: + data['data']['humiSb'] = ch2_humi + + # print(data) + + Publish_mqtt(data) + +def Set_WinderSpeed(client, value): + return 0 + +def Publish_mqtt(data): + send_mqtt_data = json.dumps(data, indent=4) + + while True: + try: + mqtt_client.connect(host=MQTT_HOST_IP, port=MQTT_PORT) + break + except: + continue + + mqtt_client.publish(topic=MQTT_TOPIC, payload=send_mqtt_data) + + while True: + try: + mqtt_client.disconnect() + break + except: + continue + +def Command_Read(): + with open(f'{ROOT_PATH}/control.json', 'r', encoding='UTF-8') as f: + cmd = json.load(f) + + # print(cmd) + if cmd['type'] != 'null': + if 'start' in cmd['type']: + if cmd['cmd']['hydrogen1'] != 'null': + MFC_Write(client=serial_MFC, ch='hydrogen1', cmd='SetPoint', value=cmd['cmd']['hydrogen1']) + MFC_Write(client=serial_MFC, ch='hydrogen1', cmd='SetFlow', subcmd='On') + + if cmd['cmd']['hydrogen2'] != 'null': + MFC_Write(client=serial_MFC, ch='hydrogen2', cmd='SetPoint', value=cmd['cmd']['hydrogen2']) + MFC_Write(client=serial_MFC, ch='hydrogen2', cmd='SetFlow', subcmd='On') + + if cmd['cmd']['speedRol'] != 'null': + Set_WinderSpeed(serial_WINDER, value=cmd['cmd']['speedRol']) + + elif 'change' in cmd['type']: + if cmd['cmd']['hydrogen1'] != 'null': + MFC_Write(client=serial_MFC, ch='hydrogen1', cmd='SetPoint', value=cmd['cmd']['hydrogen1']) + + if cmd['cmd']['hydrogen2'] != 'null': + MFC_Write(client=serial_MFC, ch='hydrogen2', cmd='SetPoint', value=cmd['cmd']['hydrogen2']) + + if cmd['cmd']['speedRol'] != 'null': + Set_WinderSpeed(serial_WINDER, value=cmd['cmd']['speedRol']) + + else: # 'stop' in cmd['type] + MFC_Write(client=serial_MFC, ch='hydrogen1', cmd='SetFlow', subcmd='Off') + MFC_Write(client=serial_MFC, ch='hydrogen2', cmd='SetFlow', subcmd='Off') + Set_WinderSpeed(serial_WINDER, value=cmd['cmd']['speedRol']) + + cmd = { + 'type': 'null', + 'cmd': { + 'hydrogen1': 'null', + 'hydrogen2': 'null', + 'speedRol': 'null' + } + } + with open(f'{ROOT_PATH}/control.json', 'w') as f: + json.dump(cmd, f) + +while True: + start = time.time() + + Command_Read() + + MFC_Read_Flow(serial_MFC) + + Temp_Hum_Press_Read(serial_TEMP) + + end = time.time() + diff = end - start + # print(diff) + if diff < 3: + time.sleep(3 - diff) \ No newline at end of file diff --git a/cnt_collector_232.service b/cnt_collector_232.service new file mode 100644 index 0000000..370dc2c --- /dev/null +++ b/cnt_collector_232.service @@ -0,0 +1,10 @@ +[Unit] +Description=cnt_collector_232 + +[Service] +ExecStart=/usr/bin/python3 /usr/local/sdt/app/cnt_collector_232/cnt_collector_232.py -config cnt_collector_232 +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/connect_info.json b/connect_info.json new file mode 100644 index 0000000..abad3dc --- /dev/null +++ b/connect_info.json @@ -0,0 +1,10 @@ +{ + "mqtt":{ + "topic":"/axrcnt/device-data/S0NQ0R223090003", + "id":"sdt", + "pw":"251327", + "host_ip":"13.209.39.139", + "port":32259, + "assetCode" : "S0NQ0R223090003" + } +} diff --git a/control.json b/control.json new file mode 100644 index 0000000..43e9fd2 --- /dev/null +++ b/control.json @@ -0,0 +1,8 @@ +{ + "type": "null", + "cmd": { + "hydrogen1": "null", + "hydrogen2": "null", + "speedRol": "null" + } +} \ No newline at end of file diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..28309d9 --- /dev/null +++ b/install.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -e + +sudo sed -i "s/appName/$1/g" /usr/local/sdt/app/$1/cnt_collector_232.service +sudo cp /usr/local/sdt/app/$1/cnt_collector_232.service /etc/systemd/system/$1.service +sudo systemctl start $1 +sudo systemctl enable $1 +