HomieCare/StreamServer/src/routers/recommend.py
2024-05-13 01:26:02 +07:00

68 lines
3.6 KiB
Python

from datetime import datetime
from fastapi import APIRouter, HTTPException
from scheme import RecommendationData, HealthData
router = APIRouter()
@router.post("/recommendation/", response_model=list[RecommendationData])
async def get_health_recommendation(data: HealthData):
recommendation = []
current_time = datetime.now()
INDOOR_HIGH_TEMP = 30
INDOOR_LOW_TEMP = 20
INDOOR_VERY_LOW_TEMP = 15
OUTDOOR_HIGH_TEMP = 35
OUTDOOR_LOW_TEMP = 10
PM25_HIGH = 50
PM25_VERY_HIGH = 100
PM10_HIGH = 50
PM10_VERY_HIGH = 100
if data.indoor_temp > INDOOR_HIGH_TEMP:
recommendation.append(RecommendationData(timestamp=current_time,
recommendation="It's quite warm indoors. Consider using a fan or air conditioning.",
status="warning"))
elif data.indoor_temp < INDOOR_LOW_TEMP:
recommendation.append(RecommendationData(timestamp=current_time,
recommendation="Indoor temperature is low. Wear warm clothing or adjust heating.",
status="warning"))
elif data.indoor_temp < INDOOR_VERY_LOW_TEMP:
recommendation.append(RecommendationData(timestamp=current_time,
recommendation="Indoor temperature is very low. Take measures to stay warm.",
status="danger"))
if data.outdoor_temp > OUTDOOR_HIGH_TEMP:
recommendation.append(RecommendationData(timestamp=current_time,
recommendation="The outdoor temperature is high. Avoid prolonged outdoor activities.",
status="warning"))
elif data.outdoor_temp < OUTDOOR_LOW_TEMP:
recommendation.append(RecommendationData(timestamp=current_time,
recommendation="It's very cold outside. Dress warmly and limit outdoor exposure.",
status="danger"))
if data.outdoor_pm25 > PM25_HIGH:
recommendation.append(RecommendationData(timestamp=current_time,
recommendation="The PM2.5 levels are elevated outdoors. Limit outdoor exposure.",
status="warning"))
elif data.outdoor_pm25 > PM25_VERY_HIGH:
recommendation.append(RecommendationData(timestamp=current_time,
recommendation="High PM2.5 levels detected. Avoid outdoor activities in polluted areas.",
status="danger"))
if data.outdoor_pm10 > PM10_HIGH:
recommendation.append(RecommendationData(timestamp=current_time,
recommendation="The PM10 levels are high outdoors. Avoid areas with heavy pollution.",
status="warning"))
elif data.outdoor_pm10 > PM10_VERY_HIGH:
recommendation.append(RecommendationData(timestamp=current_time,
recommendation="High PM10 levels detected. Consider staying indoors or using masks.",
status="danger"))
if not recommendation:
recommendation.append(RecommendationData(timestamp=current_time,
recommendation="Everything good ;).",
status="normal"))
return recommendation