AI Learning and Performance Evaluation Support AIoT Data Platform based on the oneM2M Standard Open-Source Platform
MIT License
Copyright (c) 2025 AISL-Robrain
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
| Git Hub Project Link |
| AIoT Data Platform |
| Gubhub Release Direct Download Link | ||
| Direct Link | Version | Release Date |
| AIoT Data Platform v0.4.zip | v0.4 | Nov 2025 |
| AIoT Data Platform v0.3.zip | v0.3 | Sep 2025 |
| AIoT Data Platform v0.2.zip | v0.2 | Jul 2025 |
| AIoT Data Platform v0.1.zip | v0.1 | May 2025 |
본 플랫폼은 크게 Service Manager와 Service Zone Sensor로 구성되며, 각 모듈은 다음과 같은 역할을 수행합니다:
역할: 전체 데이터 플랫폼의 중앙 관리 및 오케스트레이션
주요 기능:
기술 스택:
디렉토리 구조:
servicemanager/
├── src/main/java/aisl/ksensor/servicemanager/
│ ├── ServicemanagerApplication.java # 애플리케이션 진입점
│ ├── config/ # 설정 (Swagger 등)
│ ├── servicemgmt/ # 서비스 관리
│ │ ├── controller/ # REST API 컨트롤러
│ │ ├── service/ # 비즈니스 로직
│ │ ├── data/ # 데이터 엔티티 및 DTO
│ ├── dataresource/ # 데이터 리소스 관리
│ │ ├── service/ # IoT Platform/Data Hub 연동
│ ├── parameterbroker/ # 파라미터 브로커 (Kafka)
│ ├── component/ # 컴포넌트 프로비저닝
│ └── common/ # 공통 모듈
│ ├── transfer/ # HTTP/Kafka 통신
│ ├── engine/ # 엔진 관리
│ └── exception/ # 예외 처리
└── src/main/resources/
├── application.properties # 애플리케이션 설정
└── logback-spring.xml # 로깅 설정
역할: 센서 데이터 수집 및 IoT Platform과의 실시간 통신
주요 기능:
기술 스택:
디렉토리 구조:
serviceZoneSensor/
├── app/
│ ├── main.py # 애플리케이션 진입점
│ ├── kafka_broker/ # Kafka 통신 모듈
│ │ └── common_kafka.py # Kafka Producer/Consumer
│ ├── api_util/ # API 유틸리티
│ │ ├── iot_platform_api_util.py # IoT Platform API
│ │ ├── data_hub_api_util.py # Data Hub API
│ │ ├── http_request.py # HTTP 요청
│ │ ├── mqtt_request.py # MQTT 요청
│ │ └── iot_platform_dto/ # IoT Platform DTO
│ ├── multi_process/ # 멀티프로세스 처리
│ └── config/ # 설정 파일
│ └── config.ini # 환경 설정
└── requirements.txt # Python 의존성
| 구분 | 기술 | 버전 | 용도 |
|---|---|---|---|
| 언어 | Java | 17 | 애플리케이션 개발 |
| 프레임워크 | Spring Boot | 3.1.1 | 백엔드 프레임워크 |
| 데이터베이스 | PostgreSQL | – | 메타데이터 저장 |
| 메시징 | Apache Kafka | – | 비동기 메시지 큐 |
| 캐싱 | Redis | – | 데이터 캐싱 |
| 빌드 도구 | Maven | – | 의존성 관리 및 빌드 |
| API 문서 | Swagger/OpenAPI | 2.0.0 | API 문서화 |
| 구분 | 기술 | 버전 | 용도 |
|---|---|---|---|
| 언어 | Python | 3.x | 애플리케이션 개발 |
| Kafka | kafka-python | 2.0.2 | Kafka 클라이언트 |
| MQTT | paho-mqtt | 1.6.1 | MQTT 통신 |
| HTTP | requests | 2.31.0 | HTTP 통신 |
| 데이터 처리 | numpy | 1.25.2 | 데이터 처리 |
JDK 17 이상
# 설치 확인
java -version
# 출력 예시: openjdk version "17.0.x" ...
Maven 3.6 이상
# 설치 확인
mvn -version
PostgreSQL 12 이상
Redis
Python 3.8 이상
# 설치 확인
python3 --version
# 출력 예시: Python 3.8.x
pip (Python 패키지 관리자)
git clone <repository-url>
cd AIoT_dataplatform
cd servicemanager
mvn clean install
PostgreSQL 데이터베이스 생성:
CREATE DATABASE intelligence_sensor_platform;
\c intelligence_sensor_platform
CREATE SCHEMA service_manager;
servicemanager/src/main/resources/application.properties 파일을 환경에 맞게 수정:
# 서버 포트
server.port=9090
# 데이터베이스 설정
spring.datasource.url=jdbc:postgresql://localhost:5431/intelligence_sensor_platform?currentSchema=service_manager
spring.datasource.username=postgres
spring.datasource.password=postgres
# Kafka 설정
kafka.bootstrap-server=203.250.148.120:20517
# Redis 설정
spring.data.redis.host=localhost
spring.data.redis.port=6379
# IoT Platform URL
url.iotplatform.http=http://203.250.148.120:20519
url.iotplatform.mqtt=mqtt://203.250.148.120
# Data Hub URL
url.iotdatahub.http=http://203.250.148.119:20517
cd serviceZoneSensor
pip install -r requirements.txt
또는
pip3 install certifi==2023.7.22
pip3 install charset-normalizer==3.2.0
pip3 install idna==3.4
pip3 install kafka-python==2.0.2
pip3 install numpy==1.25.2
pip3 install paho-mqtt==1.6.1
pip3 install requests==2.31.0
pip3 install urllib3==2.0.4
serviceZoneSensor/app/config/config.ini 파일을 환경에 맞게 수정:
[COMMON]
ENGINE_TYPE = sensor-controller
[KAFKA]
KAFKA_HOST = 203.250.148.120
KAFKA_PORT = 20517
KAFKA_REQUEST_TOPIC = notification.request.controller.sensor
KAFKA_RESPONSE_TOPIC = notification.response.controller.sensor
KAFKA_GROUP_ID = sensor_controller
[API]
IOTTPLATFORM_URL_HOST = 203.250.148.120
IOTPLATFORM_HTTP_PORT = 20519
IOTPLATFORM_MQTT_PORT = 20516
IOTPLATFORM_URL_HTTP = http://{}:{}/Mobius/
IOTPLATFORM_URL_MQTT = mqtt://{}:{}/{}/ct=json
DATAHUB_URL_HOST_INGEST_ENDPOINT = http://203.250.148.119:20516/entityOperations/upsert
Service Zone Sensor는 다음 환경 변수가 필요합니다:
export SERVICE_ID=<서비스_ID>
export SENSOR_TYPE=<센서_타입>
예시:
export SERVICE_ID=parking_service_01
export SENSOR_TYPE=ParkingSpot
다음 서비스들이 실행 중이어야 합니다:
cd servicemanager
mvn spring-boot:run
cd servicemanager
mvn clean package
java -jar target/servicemanager-0.0.1-SNAPSHOT.jar
실행 확인:
# Swagger UI 접속
http://localhost:9090/api-docs
cd serviceZoneSensor/app
export SERVICE_ID=<서비스_ID>
export SENSOR_TYPE=<센서_타입>
python3 main.py
실행 로그 예시:
2024-11-20 10:00:00,000 - parking_service_01's sensor-controllerLogger - INFO - Service ID: parking_service_01
2024-11-20 10:00:01,000 - parking_service_01's sensor-controllerLogger - INFO - Kafka consumer connected
Service Manager는 Swagger UI를 통해 API 문서를 제공합니다.
http://localhost:9090/api-docs
POST /setup
서비스를 등록하고 필요한 데이터 리소스를 자동으로 생성합니다.
Request Body:
{
"serviceId": "parking_service_01",
"sensorType": "ParkingSpot",
"sensorParam": [
{
"sensor_01": {
"param1": {
"min": 0,
"max": 100
}
}
}
],
"optimizationParam": {},
"hyperParam": {},
"filterParam": {},
"sensingStopCondition": {
"type": "count",
"value": 1000
},
"sensorTargets": []
}
Response: 200 OK
생성되는 리소스:
POST /run/{serviceType}
특정 엔진(센서, ML, 최적화)을 실행합니다.
Path Parameters:
serviceType: 실행할 엔진 타입 (예: sensor-controller, ml-engine, optimization-engine)Request Body:
{
"serviceId": "parking_service_01"
}
Response: 200 OK
POST /update/parameters
서비스의 최적화 파라미터를 업데이트합니다.
Request Body:
{
"serviceId": "parking_service_01",
"sensorParam": {
"sensor_01": {
"frequency": 10
}
},
"filterParam": {},
"hyperParam": {}
}
Response: 200 OK
서비스 등록 시 다음 작업이 자동으로 수행됩니다:
IoT Platform 리소스 생성
Data Hub 리소스 생성
데이터베이스 저장
데이터 수집 프로세스:
학습 데이터는 다음과 같이 구조화되어 관리됩니다:
IoT Platform (Mobius)
└── ServiceID (AE)
└── SensorID (CNT)
├── train (CNT)
│ └── {paramId} (CNT)
│ └── data (CIN)
├── test (CNT)
│ └── {paramId} (CNT)
│ └── data (CIN)
├── target (CNT)
│ └── {serviceId}{sensorId} (SUB)
└── state (CNT)
└── {serviceId}{sensorId}_state (SUB)
Data Hub
├── {serviceId}{sensorId}_train_{paramId} (Dataset)
├── {serviceId}{sensorId}_test_{paramId} (Dataset)
├── {serviceId}{sensorId}_train_filter_{paramId} (Dataset)
└── {serviceId}{sensorId}_test_filter_{paramId} (Dataset)
모듈 간 통신은 Kafka를 통해 비동기로 처리됩니다:
Topics:
notification.request.controller.sensor: 센서 제어 요청notification.response.controller.sensor: 센서 응답메시지 포맷:
{
"eventId": "uuid",
"eventTransId": "transaction-id",
"fromSystemName": "EAI",
"toSystemName": "sensor-controller",
"contentType": "application/json",
"messageType": "request",
"content": {
"serviceId": "parking_service_01",
"sensorParam": {},
"dataResourceInformation": {},
"sensingStopCondition": {}
}
}
AI 모델 최적화를 위한 반복 실행 지원:
optIter = 0)optIter++)src/main/java/aisl/ksensor/servicemanager/servicemgmt/data/entity/ 에 엔티티 클래스 추가@Slf4j
public class YourClass {
public void yourMethod() {
log.info("Info message");
log.error("Error message", exception);
}
}
serviceZoneSensor/app/api_util/ 디렉토리에 새 모듈 추가:
import requests
def your_api_function(url, data):
response = requests.post(url, json=data)
return response.json()
import logging
logger = logging.getLogger(__name__)
logger.info("Info message")
logger.error(f"Error message: {error}")
증상: Connection refused 또는 Connection timeout
해결:
# PostgreSQL 실행 확인
sudo systemctl status postgresql
# 포트 확인
netstat -an | grep 5431
증상: Failed to connect to Kafka broker
해결:
# Kafka 서버 확인
telnet 203.250.148.120 20517
# application.properties 설정 확인
kafka.bootstrap-server=203.250.148.120:20517
증상: KeyError: 'SERVICE_ID'
해결:
export SERVICE_ID=your_service_id
export SENSOR_TYPE=your_sensor_type
python3 main.py
증상: MQTT connection failed
해결:
config.ini의 MQTT 설정 확인oneM2M 표준 플랫폼 오픈소스 기반 AI 학습 및 성능 평가 지원 AIoT 데이터 플랫폼
AIoT 데이터 플랫폼은 AI 모델 학습을 위한 센서 데이터를 수집, 저장, 관리하는 통합 플랫폼입니다. oneM2M 표준을 기반으로 한 IoT 플랫폼(Mobius)과 연동하여 센서 데이터를 수집하고, 이를 AI 학습에 활용할 수 있도록 체계적으로 관리합니다.