Skip to content

Fac2Real/monitory-scenario-simulator

Repository files navigation

Monitory Scenario Simulator

공장 통합 모니터링 시스템 Monitory의 시나리오 기반 센서 데이터 시뮬레이션을 위한 레포지토리입니다.


🏭 레포지토리 소개

Monitory Scenario Simulator는 공장 내 이상 상황을 시나리오 기반으로 시뮬레이션하는 시스템입니다.
CSV 파일로 정의된 시나리오 데이터를 통해 정상→이상→정상 상태 전환을 재현하며, AWS IoT Core를 통해 MQTT 프로토콜로 센서 데이터를 전송합니다.

  • 시나리오 기반 시뮬레이션: CSV 파일로 정의된 정상/이상 시나리오 데이터 재생
  • 상태 전환 시뮬레이션: 정상→이상, 이상→정상 전환 과정 시뮬레이션
  • 실시간 데이터 전송: AWS IoT Core를 통한 MQTT 기반 데이터 송신
  • 공정별 시나리오: 중합공정, 탈휘공정 등 다양한 공정 시나리오 지원
  • 웹 기반 제어: Streamlit을 통한 직관적인 시나리오 제어 인터페이스
  • 멀티 센서 동기화: 여러 센서의 동시 상태 전환 및 데이터 전송

📁 폴더 구조

monitory-scenario-simulator/
├── service/
│   ├── ZoneScenario.py          # Zone 센서 시나리오 관리
│   ├── EquipScenario.py         # Equipment 센서 시나리오 관리
│   └── CsvScenarioInterface.py  # 시나리오 인터페이스
├── mqtt/
│   └── publish.py               # AWS IoT Core MQTT 연결
├── data/
│   ├── scenario1_중합공정/      # 중합공정 시나리오 데이터
│   │   ├── 공간/               # Zone 센서 데이터
│   │   │   ├── 온도센서/
│   │   │   └── voc센서/
│   │   └── 설비/               # Equipment 센서 데이터
│   │       ├── 온도센서/
│   │       ├── 습도센서/
│   │       ├── 압력센서/
│   │       ├── 진동센서/
│   │       ├── active/
│   │       └── reactive/
│   └── scenario2_탈휘공정/      # 탈휘공정 시나리오 데이터
│       ├── 공간/
│       │   ├── 온도센서/
│       │   ├── voc센서/
│       │   ├── 습도센서/
│       │   └── 먼지센서/
│       └── 설비/
│           ├── 온도센서/
│           ├── 습도센서/
│           ├── 압력센서/
│           ├── 진동센서/
│           ├── active/
│           └── reactive/
├── config/
│   ├── scenario_configs.py     # 시나리오 설정 파일
│   └── ui_components.py        # UI 컴포넌트
├── utils.py                    # 유틸리티 함수
├── app_main.py                 # Streamlit 메인 앱 (최신)
├── app.py                      # 레거시 앱
└── app2.py                     # 확장 앱

🚀 주요 기능

1. 시나리오 기반 데이터 재생

  • CSV 파일 기반: 시간순으로 정렬된 센서 데이터 시나리오
  • 상태별 데이터: 정상, 정상→이상, 이상, 이상→정상 4가지 상태
  • 루프 재생: 안정 상태(정상/이상) 데이터의 순환 재생
  • 전환 데이터: 상태 변경 시 일회성 전환 데이터 재생

2. 공정별 시나리오 관리

  • 중합공정(Polymerization): 고온/고압 화학반응 시나리오
    • Zone 센서: 온도, VOC
    • Equipment 센서: 온도, 습도, 압력, 진동, 유효전류, 무효전류
  • 탈휘공정(Devolatilization): 고온 휘발성 제거 시나리오
    • Zone 센서: 온도, VOC, 습도, 먼지
    • Equipment 센서: 온도, 습도, 압력, 진동, 유효전류, 무효전류

3. 실시간 상태 전환

  • 동기화된 상태 변경: 모든 센서의 동시 상태 전환
  • 비동기 처리: asyncio 기반 멀티 센서 비동기 실행
  • 전환 보호: 전환 중 중복 상태 변경 방지 메커니즘
  • 안전한 중지: 모든 센서의 안전한 종료 처리

4. 웹 기반 시나리오 제어

  • 탭 기반 UI: 공정별 독립적인 제어 인터페이스
  • 실시간 모니터링: 각 센서별 현재 상태 및 값 표시
  • 버튼 제어: 시나리오 실행, 정상→이상, 이상→정상, 중지
  • 상태 표시: Zone 센서와 Equipment 센서 구분 표시

🛠️ 기술 스택

  • Python 3.13+
  • AWS IoT Core, MQTT
  • Streamlit (웹 인터페이스)
  • Asyncio (비동기 처리)
  • Threading (백그라운드 실행)
  • Pandas (CSV 데이터 처리)

⚡️ 시뮬레이터 사이트 링크


📡 MQTT 토픽 구조

  • Zone 센서 (ZoneId == EquipId)
sensor/zone/ZONE-001/ZONE-001/UA10T-TEM-24060890/temp
sensor/zone/ZONE-001/ZONE-001/UA10V-VOC-24060891/voc
  • Equipment 센서 (ZoneId != EquipId)
sensor/equip/ZONE-001/EQUIP-001/UA10T-TEM-24060890/temp
sensor/equip/ZONE-001/EQUIP-001/UA10H-HUM-24060891/humidity
sensor/equip/ZONE-001/EQUIP-001/UA10P-PRS-24060892/pressure
sensor/equip/ZONE-001/EQUIP-001/UA10V-VIB-24060893/vibration
sensor/equip/ZONE-001/EQUIP-001/UA10A-ACT-24060894/active
sensor/equip/ZONE-001/EQUIP-001/UA10R-REA-24060895/reactive
  • Shadow 등록 토픽
$aws/things/Sensor/shadow/name/{sensorId}/update

📝 데이터 포맷

  • 기본 센서 데이터
{
    "zoneId": "ZONE-001",
    "equipId": "EQUIP-001", 
    "sensorId": "UA10T-TEM-24060890",
    "sensorType": "temp",
    "val": 85.2
}
  • Shadow 등록 데이터
{
    "state": {
        "reported": {
            "sensorId": "UA10T-TEM-24060890",
            "zoneId": "ZONE-001",
            "equipId": "EQUIP-001",
            "type": "temp",
            "status": "ON"
        }
    }
}

📊 CSV 시나리오 파일 구조

시나리오 CSV 파일은 다음 컬럼을 포함해야 합니다:

zoneId,equipId,sensorId,sensorType,val
ZONE-001,EQUIP-001,UA10T-TEM-24060890,temp,25.4
ZONE-001,EQUIP-001,UA10T-TEM-24060890,temp,26.1
...

파일 명명 규칙:

  • {공정명}_{센서타입}_정상.csv: 정상 상태 데이터
  • {공정명}_{센서타입}_정상_이상.csv: 정상→이상 전환 데이터
  • {공정명}_{센서타입}_이상.csv: 이상 상태 데이터
  • {공정명}_{센서타입}_이상_정상.csv: 이상→정상 전환 데이터

🔄 시나리오 실행 흐름

  1. 시나리오 실행: 모든 센서가 정상 상태 데이터 루프 재생 시작
  2. 정상→이상: 전환 데이터 재생 후 이상 상태 데이터 루프로 변경
  3. 이상→정상: 전환 데이터 재생 후 정상 상태 데이터 루프로 복귀
  4. 중지: 모든 센서 안전 종료 및 상태 초기화

🚨 주의사항

  • CSV 파일 경로: 데이터 파일이 올바른 경로에 위치해야 함
  • 전환 중 보호: 전환 진행 중 중복 상태 변경 시도 시 무시됨
  • AWS 비용: 대량 시나리오 실행 시 AWS IoT Core 요금 발생 가능
  • 메모리 관리: 장시간 실행 시 메모리 사용량 모니터링 필요
  • 브라우저 리소스: Streamlit 자동 새로고침으로 인한 브라우저 부하 주의

📋 지원 시나리오 유형

공정 타입 설명 Zone 센서 Equipment 센서
중합공정 단량체 결합 고분자 생성 온도, VOC 온도, 습도, 압력, 진동, 유효전류, 무효전류
탈휘공정 고온 휘발성 성분 제거 온도, VOC, 습도, 먼지 온도, 습도, 압력, 진동, 유효전류, 무효전류

⚙️ 설정 파일 구조

scenario_configs.py에서 시나리오 설정을 관리:

polymerization_config = {
    "mqtt_connections": {
        "zone_temp_conn": "zone_temp",
        "equip_temp_conn": "temp",
        # ...
    },
    "scenarios": {
        "s1_zone_temp": {
            "normal": "./data/scenario1/zone/temp_sensor/normal.csv",
            "normal_to_warn": "./data/scenario1/zone/temp_sensor/normal_warn.csv",
            "warn": "./data/scenario1/zone/temp_sensor/warn.csv",
            "warn_to_normal": "./data/scenario1/zone/temp_sensor/warn_normal.csv",
            "type": "ZoneScenario",
            "conn_ref_key": "zone_temp_conn"
        },
        # ...
    }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •