[파이썬] 웹 프레임워크를 이용한 실시간 에너지 사용량 모니터링

이 글에서는 Python을 사용하여 실시간으로 에너지 사용량을 모니터링하는 웹 애플리케이션을 만드는 방법에 대해 알아보겠습니다. 이를 위해 Flask 웹 프레임워크를 사용할 것입니다.

필요한 도구 및 패키지 설치하기

처음으로, Python 개발 환경에 Flask를 설치해야 합니다. 아래의 명령을 사용하여 터미널에서 Flask를 설치합니다.

pip install flask

또한, 시계열 데이터를 처리하기 위해 Pandas 라이브러리와 실시간 데이터 업데이트를 처리하기 위해 Flask-SocketIO 라이브러리를 설치해야 합니다.

pip install pandas
pip install flask-socketio

에너지 사용량 데이터 수집하기

에너지 사용량 데이터는 실제로는 하드웨어나 센서를 통해 수집되는 실시간 데이터입니다. 하지만 이 예제에서는 편의상 랜덤한 시뮬레이션 데이터를 생성하여 사용하겠습니다.

import pandas as pd
import random
from datetime import datetime

def generate_random_data():
    current_time = datetime.now()
    data = {
        'timestamp': [current_time],
        'usage': [random.uniform(0, 10)]
    }
    df = pd.DataFrame(data)
    return df

위의 코드는 현재 시간을 타임스탬프로, 0과 10 사이의 랜덤한 숫자를 에너지 사용량으로 갖는 데이터프레임을 생성하는 함수입니다.

Flask 애플리케이션 작성하기

이제 Flask를 사용하여 에너지 사용량 모니터링 웹 애플리케이션을 작성해 보겠습니다.

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@app.route('/')
def index():
    return render_template('index.html')

@socketio.on('connect')
def handle_connect():
    print('Client connected')

@socket.on('disconnect')
def handle_disconnect():
    print('Client disconnected')

if __name__ == '__main__':
    socketio.run(app)

위의 코드는 Flask와 Flask-SocketIO를 사용하여 웹 애플리케이션의 기본 틀을 작성한 것입니다. index.html 파일을 로딩하는 라우트와 클라이언트의 연결 및 연결 해제 이벤트를 감지하는 핸들러 함수를 작성하였습니다.

웹 페이지 작성하기

웹 페이지는 templates 폴더 내에 index.html 파일을 생성하여 작성해야 합니다.

<html>
<head>
    <title>에너지 사용량 모니터링</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.1/socket.io.js"></script>
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
</head>
<body>
    <h1>에너지 사용량</h1>
    <div id="usage-plot"></div>

    <script>
        $(document).ready(function() {
            const socket = io.connect('http://localhost:5000');

            socket.on('connect', function() {
                socket.emit('join_room', {room: 'usage'});
            });

            socket.on('disconnect', function() {
                console.log('Disconnected from server');
            });

            socket.on('update', function(data) {
                // 데이터 업데이트 및 플롯 그리기 코드
                console.log(data);
            });
        });
    </script>
</body>
</html>

위의 코드는 에너지 사용량을 플롯으로 보여주는 웹 페이지를 작성한 것입니다. Socket.IO를 사용하여 서버와 클라이언트 간에 실시간으로 데이터를 주고받을 수 있도록 구현하였습니다. 데이터를 업데이트하고 플롯을 그리는 코드는 구현되지 않았으므로, 필요한 기능에 맞게 수정하셔야 합니다.

서버 실행하기

이제 모든 코드가 작성되었으므로, 웹 애플리케이션을 실행할 차례입니다. 터미널에서 아래의 명령을 실행하여 서버를 실행합니다.

python app.py

이제 웹 브라우저에서 http://localhost:5000에 접속하여 웹 애플리케이션을 확인할 수 있습니다.


이상으로 Python을 사용하여 웹 프레임워크를 이용한 실시간 에너지 사용량 모니터링에 대해 알아보았습니다. 여기서 소개된 코드는 예시일 뿐이며, 실제 시스템에 사용하기 위해서는 보다 신중한 구현과 추가 기능이 필요합니다.