84 lines
2.6 KiB
Python
84 lines
2.6 KiB
Python
from fastapi import FastAPI
|
|
from pydantic import BaseModel
|
|
|
|
app = FastAPI(title="HanchuESS Solar Backend API")
|
|
|
|
|
|
class DecryptRequest(BaseModel):
|
|
encrypted_payload: str
|
|
|
|
|
|
@app.get("/", tags=["Root"])
|
|
def root():
|
|
return {"message": "Welcome to the HanchuESS Solar Backend API!"}
|
|
|
|
@app.get("/get_access_token", tags=["HanchuESS"])
|
|
def get_access_token():
|
|
"""Get access token by logging into HanchuESS"""
|
|
from service.hanchu_service import HanchuESSService
|
|
|
|
hanchu_service = HanchuESSService()
|
|
try:
|
|
access_token = hanchu_service.get_access_token()
|
|
return {"access_token": access_token}
|
|
except Exception as e:
|
|
return {"error": str(e)}
|
|
|
|
@app.post("/decrypt_payload", tags=["Payload"])
|
|
def decrypt_payload(request: DecryptRequest):
|
|
"""Decrypt an AES-encrypted HanchuESS payload"""
|
|
from service.hanchu_service import HanchuESSService
|
|
|
|
try:
|
|
hanchu_service = HanchuESSService()
|
|
decrypted_data = hanchu_service.decrypt_payload(request.encrypted_payload)
|
|
|
|
return {
|
|
"decrypted_data": decrypted_data,
|
|
"data_type": type(decrypted_data).__name__
|
|
}
|
|
except Exception as e:
|
|
import traceback
|
|
return {"error": str(e), "traceback": traceback.format_exc()}
|
|
|
|
@app.get("/get_power_chart", tags=["HanchuESS"])
|
|
def get_power_chart():
|
|
"""Get 65-second power chart data from HanchuESS"""
|
|
from service.hanchu_service import HanchuESSService
|
|
|
|
try:
|
|
hanchu_service = HanchuESSService()
|
|
|
|
# Get power chart data (will automatically handle authentication)
|
|
power_data = hanchu_service.get_power_chart()
|
|
|
|
return power_data
|
|
except Exception as e:
|
|
import traceback
|
|
return {"error": str(e), "traceback": traceback.format_exc()}
|
|
|
|
@app.get("/get_power_minute_chart", tags=["HanchuESS"])
|
|
def get_power_minute_chart(start_ts: int = None, end_ts: int = None):
|
|
"""Get minute-by-minute power chart data from HanchuESS
|
|
|
|
Args:
|
|
start_ts: Optional start timestamp in milliseconds
|
|
end_ts: Optional end timestamp in milliseconds
|
|
"""
|
|
from service.hanchu_service import HanchuESSService
|
|
|
|
try:
|
|
hanchu_service = HanchuESSService()
|
|
|
|
# Get minute chart data (will automatically handle authentication)
|
|
chart_data = hanchu_service.get_power_minute_chart(start_ts=start_ts, end_ts=end_ts)
|
|
|
|
return chart_data
|
|
except Exception as e:
|
|
import traceback
|
|
return {"error": str(e), "traceback": traceback.format_exc()}
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
uvicorn.run(app, host="0.0.0.0", port=8050) |