Allen's 데이터 맛집
[1] 데이터 시각화와 알림 시스템: 완성형 환경 모니터링 본문
4. 데이터 시각화
4.1 Flask를 사용한 웹 대시보드 구현
Flask를 활용하여 사용자가 데이터를 쉽게 확인할 수 있는 웹 대시보드를 구축했습니다.
이 대시보드는 온도와 습도를 실시간으로 표시하며, 사용자 경험을 고려한 직관적인 인터페이스를 제공합니다.
[Flask 코드 예제]
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def home():
temperature = 23.5 # 예시 값
humidity = 55.0 # 예시 값
return render_template("dashboard.html", temp=temperature, hum=humidity)
if __name__ == "__main__":
app.run(debug=True)
[HTML 대시보드]
<!DOCTYPE html>
<html>
<head>
<title>온습도 모니터링 시스템</title>
</head>
<body>
<h1>온습도 상태</h1>
<p>현재 온도: {{ temp }}°C</p>
<p>현재 습도: {{ hum }}%</p>
</body>
</html>
- 확장 가능성:
- 그래프 라이브러리(Matplotlib, Plotly)를 추가해 데이터의 시간적 변화를 시각화 가능.
- 실시간 업데이트를 위해 WebSocket 통합 가능.
5. 알림 시스템
5.1 임계값 기반 알림
특정 조건(예: 온도 > 30°C)이 초과되면 즉각적으로 알림을 보내는 시스템을 설계했습니다.
[이메일 알림 예제]
import smtplib
from email.mime.text import MIMEText
def send_alert(temp, hum):
msg = MIMEText(f"경고! 온도: {temp}°C, 습도: {hum}% 초과")
msg["Subject"] = "온도 경고"
msg["From"] = "your_email@example.com"
msg["To"] = "recipient@example.com"
with smtplib.SMTP("smtp.gmail.com", 587) as server:
server.starttls()
server.login("your_email@example.com", "your_password")
server.send_message(msg)
if temperature > 30:
send_alert(temperature, humidity)
5.2 알림 확장
- SMS:
- Twilio API를 활용해 SMS 경고 메시지 전송 가능.
- 모바일 앱 통합:
- Firebase와 같은 플랫폼을 사용해 푸시 알림 기능 추가.
6. 프로젝트 성과와 배운 점
성과
- 실시간 데이터 처리 성공:
- 센서를 통해 환경 데이터를 정확히 측정하고 전송.
- 사용자 친화적 대시보드:
- 직관적인 시각화로 데이터 모니터링을 단순화.
- 효율적인 데이터 통신:
- MQTT를 사용해 경량화된 데이터 전송 구현.
배운 점
- IoT 기술의 실용성:
- 저비용 하드웨어와 오픈 소스 소프트웨어를 활용해 효율적인 솔루션 구축.
- 확장 가능성 학습:
- 기본적인 온습도 측정에서 시작해, 다양한 데이터 소스와 기능을 통합 가능.
- 실시간 데이터 중요성:
- 환경 변화에 즉각적으로 반응하는 시스템의 필요성 확인.
7. 프로젝트 확장 방향
- 다양한 센서 추가:
- CO2, 미세먼지, 조도 센서를 추가하여 종합적인 환경 모니터링 구현.
- 클라우드 데이터 저장:
- AWS IoT Core 또는 Google Cloud IoT를 활용해 장기 데이터를 저장 및 분석.
- 예측 모델 도입:
- 머신러닝 모델을 사용해 온습도 변화 예측 및 이상 탐지 구현.
https://github.com/siilver94/Temperature-Humidity-Measurement
GitHub - siilver94/Temperature-Humidity-Measurement
Contribute to siilver94/Temperature-Humidity-Measurement development by creating an account on GitHub.
github.com
728x90