AWS Lambda를 활용한 이벤트 기반 자동화 (이상 온도 감지 및 알림)
1. 개요
IoT 시스템에서는 센서가 실시간으로 데이터를 수집하고 이를 기반으로 자동화된 처리를 수행하는 것이 중요합니다. 특히, 환경 모니터링 시스템에서는 특정 임계값을 초과하는 이상 데이터를 감지하고 즉시 대응하는 기능이 필요합니다. 본 포스팅에서는 AWS Lambda를 활용하여 AWS IoT에서 이상 온도를 감지하고 알림을 전송하는 이벤트 기반 자동화 시스템을 구축하는 방법을 설명하겠습니다.
이를 위해, ESP32를 이용한 AWS IoT Device에서 온도 데이터를 전송하고, AWS IoT Core에서 MQTT를 통해 데이터를 수신한 후, AWS IoT Rules Engine과 AWS Lambda를 이용하여 이상 온도를 감지하고 알림을 전송하는 시스템을 구현하겠습니다.
2. 시스템 아키텍처
본 시스템의 전체적인 구성은 다음과 같습니다.
- ESP32 IoT 디바이스: 온도 데이터를 측정하고 AWS IoT Core로 MQTT 메시지를 전송합니다.
- AWS IoT Core: ESP32로부터 데이터를 수신하고 AWS IoT Rules Engine을 통해 AWS Lambda로 데이터를 전달합니다.
- AWS Lambda: 이상 온도가 감지되면 알림을 트리거합니다 (예: AWS SNS를 통해 이메일 또는 SMS 전송).
- AWS SNS (Simple Notification Service): 이상 상태를 감지했을 때 사용자에게 알림을 전송합니다.
3. AWS IoT 디바이스 (ESP32) 구현
3.1 ESP32에서 온도 데이터 전송
ESP32에서는 AWS IoT Device SDK for Embedded C를 활용하여 AWS IoT Core에 MQTT 메시지를 전송합니다. 다음은 기본적인 코드 구현입니다.
#include <stdio.h>
#include "aws_iot_config.h"
#include "aws_iot_mqtt_client_interface.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#define AWS_IOT_ENDPOINT "YOUR_AWS_IOT_ENDPOINT"
#define CLIENT_ID "ESP32_Temperature_Sensor"
#define TOPIC "esp32/temperature"
static void publish_temperature_task(void *pvParameters) {
IoT_Client client;
IoT_Client_Init_Params mqttInitParams = IoT_Client_Init_Params_initializer;
mqttInitParams.enableAutoReconnect = false;
mqttInitParams.pHostURL = AWS_IOT_ENDPOINT;
mqttInitParams.port = AWS_IOT_MQTT_PORT;
IoT_Error_t rc = aws_iot_mqtt_init(&client, &mqttInitParams);
if (rc != SUCCESS) {
ESP_LOGE("MQTT", "MQTT Initialization failed");
vTaskDelete(NULL);
}
IoT_Publish_Message_Params paramsQOS1;
paramsQOS1.qos = QOS1;
paramsQOS1.isRetained = 0;
char payload[100];
while (1) {
float temperature = 25.0 + (rand() % 100) / 10.0; // 임의의 온도 값 생성
snprintf(payload, sizeof(payload), "{\"temperature\": %.1f}", temperature);
paramsQOS1.payload = payload;
paramsQOS1.payloadLen = strlen(payload);
rc = aws_iot_mqtt_publish(&client, TOPIC, strlen(TOPIC), ¶msQOS1);
if (rc == SUCCESS) {
ESP_LOGI("MQTT", "Published: %s", payload);
}
vTaskDelay(pdMS_TO_TICKS(5000)); // 5초마다 전송
}
}
void app_main() {
xTaskCreate(&publish_temperature_task, "publish_temperature_task", 8192, NULL, 5, NULL);
}
ESP32는 5초마다 랜덤한 온도 데이터를 AWS IoT Core로 전송합니다.
4. AWS IoT Core 설정
AWS IoT Core에서 Rules Engine을 사용하여 Lambda를 트리거하도록 설정해야 합니다.
4.1 AWS IoT Core에서 Rule 생성
- AWS 콘솔에서 IoT Core로 이동합니다.
- Message Routing → Rules에서 Create Rule을 선택합니다.
- SQL Query에 다음과 같이 입력합니다.
SELECT * FROM 'esp32/temperature' WHERE temperature > 30
- Set actions에서 AWS Lambda를 선택하고 적절한 Lambda 함수를 연결합니다.
5. AWS Lambda 함수 구현 (이상 온도 감지 및 알림)
AWS Lambda는 이상 온도를 감지하면 AWS SNS를 통해 사용자에게 알림을 전송합니다.
import json
import boto3
sns_client = boto3.client('sns')
SNS_TOPIC_ARN = "YOUR_SNS_TOPIC_ARN"
def lambda_handler(event, context):
print("Received event: " + json.dumps(event))
for record in event['Records']:
payload = json.loads(record['body'])
temperature = payload.get('temperature', 0)
if temperature > 30:
message = f"이상 온도 감지: {temperature}도입니다. 즉시 확인하세요."
sns_client.publish(TopicArn=SNS_TOPIC_ARN, Message=message)
print("Sent notification: " + message)
return {
'statusCode': 200,
'body': json.dumps('Lambda executed successfully')
}
이 함수는 AWS IoT Rules Engine을 통해 들어온 이벤트 데이터를 확인하고, 온도가 30도를 초과하면 AWS SNS를 통해 사용자에게 알림을 보냅니다.
6. AWS SNS 설정
- AWS SNS 콘솔에서 Create Topic을 선택합니다.
- Standard 유형을 선택하고 적절한 이름을 입력합니다.
- 생성된 Topic의 ARN을 복사하고 Lambda 코드에서 사용합니다.
- Create Subscription을 선택하고 Email 또는 SMS 방식으로 구독자를 추가합니다.
- 수신 확인을 위해 이메일을 확인하고 Confirm subscription을 클릭합니다.
7. 테스트 및 검증
- ESP32에서 온도 데이터를 AWS IoT Core로 전송합니다.
- AWS IoT Rules Engine이 이상 온도를 감지하고 Lambda 함수를 트리거합니다.
- AWS Lambda가 SNS를 통해 사용자에게 알림을 전송합니다.
8. 결론
본 포스팅에서는 AWS Lambda를 활용하여 IoT 환경에서 이상 온도를 감지하고 자동으로 알림을 전송하는 시스템을 구축하였습니다. AWS IoT Core와 Lambda, SNS를 효과적으로 연계하여 IoT 디바이스의 데이터를 활용할 수 있음을 확인할 수 있습니다. 이를 통해 다양한 IoT 자동화 시스템을 확장 및 적용할 수 있습니다.
'AWS IoT' 카테고리의 다른 글
AWS Kinesis, AWS S3를 이용한 데이터 수집 (0) | 2025.04.12 |
---|---|
AWS IoT 서버에서 Amazon SNS 및 AWS CloudWatch와 연동하여 알림 전송 (0) | 2025.04.11 |
AWS IoT Rules Engine을 이용한 데이터 필터링 및 처리 (0) | 2025.04.09 |
AWS IoT Device Shadow 활용: 온도 센싱 주기 및 시작/종료 관리 (0) | 2025.04.08 |
AWS IoT에서 OTA(Over-the-Air) 업데이트 적용 방법 (0) | 2025.04.07 |