diff --git a/service/sensor/RealSensor.py b/service/sensor/RealSensor.py index e37c7e3..b31947c 100644 --- a/service/sensor/RealSensor.py +++ b/service/sensor/RealSensor.py @@ -3,6 +3,7 @@ from awscrt import mqtt from service.simulation.SimulatorInterface2 import SimulatorInterface2 from mqtt_util.publish import AwsMQTT +import serial.tools.list_ports class RealSensor(SimulatorInterface2): def __init__(self, idx, zone_id, equip_id, interval, msg_count, conn=None, stop_event=None): @@ -21,7 +22,7 @@ def __init__(self, idx, zone_id, equip_id, interval, msg_count, conn=None, stop_ self.topic_name_temp = self._build_topic(self.zone_id, self.equip_id, self.sensor_id, "temp") self.topic_name_humid = self._build_topic(self.zone_id, self.equip_id, self.sensor_id, "humid") # 시리얼 포트 설정 - self.serial_port = 'COM3' # Windows COM 포트 + self.serial_port = self._find_serial_port() # Windows COM 포트 self.baudrate = 9600 # 바우드 ######## 오버라이딩은 하되 내용은 필요없는 메서드 ######## @@ -51,6 +52,27 @@ def start_publishing(self): thread.start() return thread + def _find_serial_port(self): + """USB Serial Device 포트를 자동으로 찾습니다""" + + # 사용 가능한 모든 포트 가져오기 + ports = list(serial.tools.list_ports.comports()) + + # 포트 정보 출력 (디버깅용) + print(f"Available ports: {len(ports)}") + for port in ports: + print(f"- {port.device}: {port.description} (manufacturer: {port.manufacturer})") + + # "USB Serial Device"라는 설명이 있는 포트 찾기 + for port in ports: + if "USB Serial Device" in port.description: + print(f"Found USB Serial Device at {port.device}") + return port.device + + # 찾지 못한 경우 기본값 'COM3' 반환 + print("USB Serial Device not found. Falling back to COM3.") + return 'COM3' + def _read_and_publish_loop(self): try: # 1) 시리얼 열고 대기 diff --git a/simulation_cconfig.json b/simulation_cconfig.json index bb9dc3a..17a759f 100644 --- a/simulation_cconfig.json +++ b/simulation_cconfig.json @@ -3,7 +3,7 @@ { "count": 5, "interval": 3, - "equip_id": "20250507171316-389", + "equip_id": "20250507165750-827", "zone_id": "20250507165750-827", "simulator": "real_sensor", "sensor_num": 1 diff --git a/streamlit_app/app.py b/streamlit_app/app.py index 4bf7dd2..4c7b0eb 100644 --- a/streamlit_app/app.py +++ b/streamlit_app/app.py @@ -135,7 +135,7 @@ def main(): ) # real_sensor가 선택된 경우 경고 메시지 표시 if device["simulator"] == "real_sensor": - st.warning("⚠️ 'real_sensor'는 로컬 환경에서만 사용 가능하며, 센서를 USB 포트(COM3)에 연결해야 합니다.") + st.warning("⚠️ 'real_sensor'는 로컬 환경에서만 사용 가능하며, 센서를 USB 포트에 연결해야 합니다.") # 센서 갯수 입력 device["sensor_num"] = st.number_input(f"Sensor Num (Device {i + 1})", value=device["sensor_num"], key=f"sensor_num_{i}")