main: add iot functions for monitor and door
- Echo back for monitor for now. - Needs database tables and linkage Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
		
							parent
							
								
									3302c4dc39
								
							
						
					
					
						commit
						dc4e3ef8d6
					
				@ -46,3 +46,13 @@ def create_iot_dev_token(data: dict):
 | 
			
		||||
    to_encode = data.copy()
 | 
			
		||||
    encoded_jwt = jwt.encode(to_encode, JWT_SECRET, algorithm=JWT_ALGO)
 | 
			
		||||
    return encoded_jwt
 | 
			
		||||
 | 
			
		||||
def valid_iot_token(token : str, db: Session):
 | 
			
		||||
    try:
 | 
			
		||||
        payload = jwt.decode(token, JWT_SECRET, algorithms=[JWT_ALGO])
 | 
			
		||||
    except jwt.DecodeError:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    mac_signed = payload.get("bluetooth_mac")
 | 
			
		||||
    device = crud.get_iot_entity_by_bluetooth_mac(db, mac_signed)
 | 
			
		||||
    return device
 | 
			
		||||
@ -11,7 +11,6 @@ from datetime import timedelta
 | 
			
		||||
import jwt
 | 
			
		||||
 | 
			
		||||
models.Base.metadata.create_all(bind=engine)
 | 
			
		||||
#oauth2_scheme = OAuth2PasswordBearer(tokenUrl="tkn")
 | 
			
		||||
oauth = OAuth2PasswordBearer(tokenUrl="tkn")
 | 
			
		||||
 | 
			
		||||
app = FastAPI()
 | 
			
		||||
@ -50,7 +49,6 @@ def get_current_active_user(current_user: schemas.User = Depends(get_current_use
 | 
			
		||||
    return current_user
 | 
			
		||||
 | 
			
		||||
def get_current_iot_device(current_device: schemas.IotBluetoothMac = Depends(),
 | 
			
		||||
                           token: str = Depends(oauth),
 | 
			
		||||
                           db: Session = Depends(get_db)):
 | 
			
		||||
    credentials_exception = HTTPException(
 | 
			
		||||
        status_code=status.HTTP_401_UNAUTHORIZED,
 | 
			
		||||
@ -204,4 +202,29 @@ def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends(), db:
 | 
			
		||||
    return {"access_token": access_token, "token_type": "bearer"}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@app.post("/iotdevice/door/status", response_model=schemas.IotDoorPollingResponse, tags=['Iot'])
 | 
			
		||||
def polling_method_for_iot_entity(request: schemas.IotDoorPollingRequest,
 | 
			
		||||
                                  db: Session = Depends(get_db)):
 | 
			
		||||
    # We need db session
 | 
			
		||||
    # API schema request
 | 
			
		||||
    # API schema response
 | 
			
		||||
    device: schemas.IotEntity = auth_helper.valid_iot_token(request.token, db)
 | 
			
		||||
    if not device: 
 | 
			
		||||
        raise HTTPException(
 | 
			
		||||
        status_code=status.HTTP_401_UNAUTHORIZED,
 | 
			
		||||
        detail="Could not validate credentials")
 | 
			
		||||
    
 | 
			
		||||
    response : schemas.IotEntityPollingResponse(open_command=device.open_request,
 | 
			
		||||
                                                acces_list_counter=0)
 | 
			
		||||
    return response
 | 
			
		||||
 | 
			
		||||
@app.post("/iotdevice/monitor/status", tags=['Iot'])
 | 
			
		||||
def polling_method_for_room_monitor(request: schemas.IotMonitorRoomInfo,
 | 
			
		||||
                                    db: Session = Depends(get_db)):
 | 
			
		||||
    device : schemas.IotEntity = auth_helper.valid_iot_token(request.token, db)
 | 
			
		||||
    if not device:
 | 
			
		||||
        raise HTTPException(
 | 
			
		||||
        status_code=status.HTTP_401_UNAUTHORIZED,
 | 
			
		||||
        detail="Could not validate credentials")
 | 
			
		||||
    
 | 
			
		||||
    return request
 | 
			
		||||
@ -61,4 +61,22 @@ class OpenDoorRequestBase(BaseModel):
 | 
			
		||||
    bluetooth_mac: str
 | 
			
		||||
 | 
			
		||||
class OpenDoorRequestTime(OpenDoorRequestBase):
 | 
			
		||||
    time_minutes: int
 | 
			
		||||
    time_minutes: int
 | 
			
		||||
 | 
			
		||||
# Device sends this periodcally
 | 
			
		||||
class IotDoorPollingRequest(BaseModel):
 | 
			
		||||
    bluetooth_mac : str
 | 
			
		||||
    token : str
 | 
			
		||||
    class Config:
 | 
			
		||||
        orm_mode = True
 | 
			
		||||
 | 
			
		||||
class IotDoorPollingResponse(BaseModel):
 | 
			
		||||
    open_command : bool
 | 
			
		||||
    acces_list_counter : int
 | 
			
		||||
 | 
			
		||||
class IotMonitorRoomInfo(BaseModel):
 | 
			
		||||
    humidity : int
 | 
			
		||||
    people : int
 | 
			
		||||
    tempreture : int
 | 
			
		||||
    smoke_sensor_reading : int
 | 
			
		||||
    token: str
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user