Add recommendation endpoint

This commit is contained in:
sosokker 2024-05-13 01:26:02 +07:00
parent 2e21b9ffa7
commit 4c08508b81
3 changed files with 83 additions and 1 deletions

View File

@ -2,7 +2,7 @@ import uvicorn
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from routers import video, weather, prediction, camera
from routers import video, weather, prediction, camera, recommend
app = FastAPI(
@ -33,6 +33,7 @@ app.include_router(video.router, prefix="/camera")
app.include_router(weather.router, prefix="/weather")
app.include_router(prediction.router, prefix="/weather")
app.include_router(camera.router, prefix="/camera")
app.include_router(recommend.router, prefix="/recommend")
@app.get("/")
def read_root():

View File

@ -0,0 +1,68 @@
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

View File

@ -74,6 +74,19 @@ class PredictonTemperature(BaseModel):
outdoor_temp: Optional[float]
class RecommendationData(BaseModel):
timestamp: Optional[datetime]
recommendation: Optional[str]
status: Optional[str]
class HealthData(BaseModel):
indoor_temp: float
outdoor_temp: float
outdoor_pm25: float
outdoor_pm10: float
outdoor_humidity: float
# class Action(BaseModel):
# timestamp: Optional[datetime]