오늘은 DB 테이블을 수정한 뒤 24시간 이후 데이터를 시간별 평균으로 저장하는 로직을 구현해보았다.
def aggregate_old_data():
"""
일정 시간 이후 데이터를 1시간 평균으로 집계하여 저장
"""
conn, cursor = None, None
try:
conn, cursor = get_connection()
if conn is None:
print("데이터 집계 : DB 연결 실패")
return False, "데이터 집계 : DB 연결 실패", 503
# 시간 지정
hours = 24
# 데이터 저장
sql_select = """
INSERT INTO sun_data_hourly (date, hour, avg_soc, avg_solar_w, avg_lux)
SELECT
DATE(timestamp) as date,
HOUR(timestamp) as hour,
AVG(soc) as avg_soc,
AVG(solar_w) as avg_solar_w,
AVG(lux) as avg_lux
FROM sun_data_realtime
WHERE timestamp < DATE_FORMAT(NOW() - INTERVAL %s HOUR, '%Y-%m-%d %H:00:00')
GROUP BY DATE(timestamp), HOUR(timestamp)
ON DUPLICATE KEY UPDATE
avg_soc = VALUES(avg_soc),
avg_solar_w = VALUES(avg_solar_w),
avg_lux = VALUES(avg_lux)
"""
# 저장한 원본 데이터 제거
sql_delete = """
DELETE FROM sun_data_realtime
WHERE timestamp < DATE_FORMAT(NOW() - INTERVAL %s HOUR, '%Y-%m-%d %H:00:00')
"""
cursor.execute(sql_select, (hours-1,))
cursor.execute(sql_delete, (hours-1,))
conn.commit()
print("데이터 집계 : 성공")
except Exception as e:
print(f"데이터 집계 : 오류 - {e}")
traceback.print_exc()
if conn:
conn.rollback()
finally:
close_connection(conn, cursor)
하나를 마치면 계속 새롭게 걸리는 부분이 보여서 내일 또 API 수정을 진행한 뒤 아두이노 회로 구성을 마무리해야 될 것 같다.