from fastapi import FastAPI, Form, File, Request from fastapi.responses import HTMLResponse, RedirectResponse, JSONResponse from jinja2 import Template import os from typing import Annotated from pydantic import BaseModel import tempfile from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates import ipaddress import psycopg2 from dateutil.parser import parse from datetime import datetime from fastapi.exceptions import RequestValidationError from starlette.exceptions import HTTPException as StarletteHTTPException from fastapi.exceptions import RequestValidationError from fastapi.responses import PlainTextResponse, JSONResponse from fastapi.exception_handlers import ( http_exception_handler, request_validation_exception_handler, ) import threading import socket import struct from zoneinfo import ZoneInfo temp_dir = r"/home/td/WebTemp" tempfile.tempdir = temp_dir app = FastAPI(title="user manager", description="User session management.", version="0.0.0.1", docs_url="/server/docs", redoc_url="/server/redoc", openapi_url="/server/openapi.json") app.mount("/server/static", StaticFiles(directory="static"), name="static") templates = Jinja2Templates(directory="templates") distance_value = 0.0 last_updated = None distance_value_rev = 0.0 def get_udp_water_value(): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) count = 0 while True: try: sock.bind(('', 8176)) sock.settimeout(5.0) break except Exception as e: count+=1 print("Exception: e", e) time.sleep(5) if count >= 100: raise e zone = ZoneInfo("Asia/Kolkata"); print("Bound to address: 8176") global distance_value global last_updated global distance_value_rev while True: try: data, addr = sock.recvfrom(4) print(f"Got data: {data.hex()}") distance_value = struct.unpack('>f', data) distance_value_rev = struct.unpack('