AWS IoT

AI/ML을 활용한 이상 온도 감지 및 자동 대응

임베디드 친구 2025. 4. 14. 14:50
728x90
반응형

AI/ML을 활용한 이상 온도 감지 및 자동 대응

1. 개요

AWS IoT를 활용하면 IoT 디바이스에서 수집된 데이터를 클라우드에서 분석하고, 이상 감지가 발생했을 때 자동으로 대응할 수 있습니다. 특히 AI/ML을 적용하면 정상적인 패턴을 학습하고, 온도 센싱 데이터에서 이상 징후를 감지하는 자동화된 시스템을 구축할 수 있습니다.

본 포스팅에서는 AWS IoT Device(ESP32 IDF 기반)에서 온도 데이터를 수집하고, AWS IoT 서버(Python 기반)에서 이를 분석하여 이상 온도를 감지한 후, 자동으로 대응하는 시스템을 구축하는 방법을 설명합니다.


2. 시스템 아키텍처

2.1 구성 요소

  • AWS IoT Device (ESP32 IDF + AWS IoT Device SDK for Embedded C)

    • 온도 데이터를 주기적으로 측정하여 AWS IoT Core로 전송
    • AWS IoT Shadow를 활용하여 설정 값(센싱 주기 등) 관리
  • AWS IoT Server (Python 기반 AWS Lambda + AWS IoT Core + Amazon SageMaker)

    • AWS IoT Core를 통해 수집된 데이터를 AWS Lambda에서 처리
    • Amazon SageMaker에서 사전 학습된 AI 모델을 사용하여 이상 온도 감지
    • 이상 감지 시 AWS SNS를 통해 관리자에게 알림 전송 및 자동 대응 수행

3. AWS IoT Device 구현 (ESP32 IDF)

3.1 ESP32 환경 설정 및 라이브러리 설치

ESP32 IDF 환경에서 AWS IoT Device SDK for Embedded C를 사용하여 AWS IoT Core에 데이터를 전송하는 코드를 작성합니다.

idf.py set-target esp32
idf.py menuconfig

AWS IoT 디바이스 인증서를 다운로드하여 설정하고, 필요한 라이브러리를 포함합니다.

3.2 온도 데이터 센싱 및 MQTT 전송

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "mqtt_client.h"
#include "driver/adc.h"

#define MQTT_BROKER "mqtts://YOUR_AWS_IOT_ENDPOINT"

void read_temperature_task(void *pvParameters) {
    while (1) {
        int temp_value = adc1_get_raw(ADC1_CHANNEL_0);
        float temperature = (temp_value * 3.3 / 4096) * 100; // 변환 값
        char msg[50];
        sprintf(msg, "{\"temperature\": %.2f}", temperature);

        esp_mqtt_client_publish(client, "iot/device/temp", msg, 0, 1, 0);
        vTaskDelay(pdMS_TO_TICKS(5000));
    }
}

void app_main() {
    xTaskCreate(read_temperature_task, "read_temperature_task", 4096, NULL, 5, NULL);
}

4. AWS IoT 서버 구현 (Python 기반)

4.1 AWS Lambda에서 MQTT 메시지 처리

import json
import boto3
from decimal import Decimal
from botocore.exceptions import NoCredentialsError

sns = boto3.client('sns')
iot_data = boto3.client('iot-data')

THRESHOLD = 50.0  # 이상 감지 기준 온도

# Lambda 함수
def lambda_handler(event, context):
    message = json.loads(event['Records'][0]['Sns']['Message'])
    temperature = Decimal(message['temperature'])

    if temperature > THRESHOLD:
        response = sns.publish(
            TopicArn='arn:aws:sns:your-region:your-account-id:YourTopic',
            Message=f'이상 온도 감지: {temperature}도! 즉각 조치 필요.',
            Subject='이상 온도 감지 알림'
        )
        print(f"SNS Alert Sent: {response}")

    return {
        'statusCode': 200,
        'body': json.dumps('Success')
    }

4.2 Amazon SageMaker를 활용한 이상 감지 모델 구축

import boto3
import numpy as np
import joblib

s3 = boto3.client('s3')
model = joblib.load("s3://your-model-bucket/anomaly_detection_model.pkl")

def detect_anomaly(temperature_data):
    prediction = model.predict(np.array(temperature_data).reshape(1, -1))
    return prediction[0] == 1  # 이상 감지 시 True 반환

5. 자동 대응 시스템 구축

5.1 AWS IoT Rule을 이용한 데이터 처리

AWS IoT Core Rule을 설정하여 온도 데이터가 Lambda로 전달되도록 구성합니다.

SELECT temperature FROM 'iot/device/temp' WHERE temperature > 50

5.2 AWS SNS를 활용한 자동 대응

sns.publish(
    TopicArn='arn:aws:sns:your-region:your-account-id:YourTopic',
    Message='긴급! 이상 온도 감지. 즉각 점검 필요!',
    Subject='긴급 알림'
)

6. 결론

본 포스팅에서는 AWS IoT Device(ESP32 IDF)를 활용하여 온도 데이터를 수집하고, AWS IoT 서버(Python)를 통해 AI/ML 기반 이상 감지 시스템을 구축하는 방법을 설명했습니다. AWS IoT Rule Engine, Amazon SageMaker, AWS Lambda, SNS 등의 서비스를 활용하여 자동 대응 체계를 구현할 수 있습니다.

이와 같은 AI/ML 기반 이상 감지 시스템은 다양한 산업군에서 활용 가능하며, 온도뿐만 아니라 습도, 진동, 소음 등 다양한 센서를 활용하여 확장할 수 있습니다.

반응형