users/open: pass in time for door to stay open
Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
parent
e9925d32b4
commit
575ba9452a
@ -75,9 +75,12 @@ def remove_user_link_to_iot(db: Session, user_id: int, iot_dev_id: int):
|
|||||||
#db.refresh(link)
|
#db.refresh(link)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def set_open_door_request(db: Session, iot_entity_id: int):
|
def set_open_door_request(db: Session, iot_entity_id: int, time_seconds : int):
|
||||||
device = get_iot_entity(db, iot_entity_id)
|
device = get_iot_entity(db, iot_entity_id)
|
||||||
setattr(device, "open_request", True)
|
setattr(device, "open_request", True)
|
||||||
|
if time_seconds < 1:
|
||||||
|
time_seconds = 10 # Magic number move to global constant
|
||||||
|
setattr(device, "time_seconds", time_seconds)
|
||||||
db.add(device)
|
db.add(device)
|
||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(device)
|
db.refresh(device)
|
||||||
@ -86,6 +89,7 @@ def set_open_door_request(db: Session, iot_entity_id: int):
|
|||||||
def clear_open_door_request(db: Session, iot_entity_id: int):
|
def clear_open_door_request(db: Session, iot_entity_id: int):
|
||||||
device = get_iot_entity(db, iot_entity_id)
|
device = get_iot_entity(db, iot_entity_id)
|
||||||
setattr(device, "open_request", False)
|
setattr(device, "open_request", False)
|
||||||
|
setattr(device, "time_seconds", 10)
|
||||||
db.add(device)
|
db.add(device)
|
||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(device)
|
db.refresh(device)
|
||||||
|
@ -170,7 +170,7 @@ def get_iot_access_list_for_user(db: Session = Depends(get_db), current_user: sc
|
|||||||
return user.authorized_devices
|
return user.authorized_devices
|
||||||
|
|
||||||
@app.post("/users/open", tags=['Users'])
|
@app.post("/users/open", tags=['Users'])
|
||||||
def issue_open_door_command(command: schemas.OpenDoorRequestBase,
|
def issue_open_door_command(command: schemas.OpenDoorRequestTime,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
current_user: schemas.User = Depends(get_current_active_user)):
|
current_user: schemas.User = Depends(get_current_active_user)):
|
||||||
err = HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,
|
err = HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,
|
||||||
@ -181,7 +181,7 @@ def issue_open_door_command(command: schemas.OpenDoorRequestBase,
|
|||||||
user = crud.get_user(db, current_user.id)
|
user = crud.get_user(db, current_user.id)
|
||||||
for dev in user.authorized_devices:
|
for dev in user.authorized_devices:
|
||||||
if dev.bluetooth_mac == device.bluetooth_mac:
|
if dev.bluetooth_mac == device.bluetooth_mac:
|
||||||
crud.set_open_door_request(db, device.id)
|
crud.set_open_door_request(db, device.id, command.time_seconds)
|
||||||
log_entry = schemas.DoorAccessLog(user_id=current_user.id,
|
log_entry = schemas.DoorAccessLog(user_id=current_user.id,
|
||||||
door_bluetooth_mac=command.bluetooth_mac,
|
door_bluetooth_mac=command.bluetooth_mac,
|
||||||
time=datetime.now())
|
time=datetime.now())
|
||||||
@ -218,7 +218,8 @@ def polling_method_for_iot_entity(request: schemas.IotDoorPollingRequest,
|
|||||||
|
|
||||||
response : schemas.IotDoorPollingResponse = schemas.IotDoorPollingResponse(
|
response : schemas.IotDoorPollingResponse = schemas.IotDoorPollingResponse(
|
||||||
open_command=device.open_request,
|
open_command=device.open_request,
|
||||||
acces_list_counter=0)
|
acces_list_counter=0,
|
||||||
|
time_seconds=device.time_seconds)
|
||||||
# Reset open_request to False
|
# Reset open_request to False
|
||||||
crud.clear_open_door_request(db, device.id)
|
crud.clear_open_door_request(db, device.id)
|
||||||
return response
|
return response
|
||||||
|
@ -24,6 +24,7 @@ class IotEntity(Base):
|
|||||||
bluetooth_mac = Column(String(512))
|
bluetooth_mac = Column(String(512))
|
||||||
description = Column(String(512))
|
description = Column(String(512))
|
||||||
open_request = Column(Boolean, default=False)
|
open_request = Column(Boolean, default=False)
|
||||||
|
time_seconds = Column(Integer, default=10)
|
||||||
authorized_users = relationship("User", secondary= 'user_iot_link')
|
authorized_users = relationship("User", secondary= 'user_iot_link')
|
||||||
|
|
||||||
class UserAuthToIoTDev(Base):
|
class UserAuthToIoTDev(Base):
|
||||||
|
@ -25,6 +25,7 @@ class IotEntity(IotEntityBase):
|
|||||||
bluetooth_mac: str
|
bluetooth_mac: str
|
||||||
#authorized_users: List[User] = []
|
#authorized_users: List[User] = []
|
||||||
open_request: bool # Flag to open
|
open_request: bool # Flag to open
|
||||||
|
time_seconds: int
|
||||||
class Config:
|
class Config:
|
||||||
orm_mode = True
|
orm_mode = True
|
||||||
|
|
||||||
@ -62,7 +63,7 @@ class OpenDoorRequestBase(BaseModel):
|
|||||||
bluetooth_mac: str
|
bluetooth_mac: str
|
||||||
|
|
||||||
class OpenDoorRequestTime(OpenDoorRequestBase):
|
class OpenDoorRequestTime(OpenDoorRequestBase):
|
||||||
time_minutes: int
|
time_seconds: int
|
||||||
|
|
||||||
# Device sends this periodcally
|
# Device sends this periodcally
|
||||||
class IotDoorPollingRequest(BaseModel):
|
class IotDoorPollingRequest(BaseModel):
|
||||||
@ -74,6 +75,7 @@ class IotDoorPollingRequest(BaseModel):
|
|||||||
class IotDoorPollingResponse(BaseModel):
|
class IotDoorPollingResponse(BaseModel):
|
||||||
open_command : bool
|
open_command : bool
|
||||||
acces_list_counter : int
|
acces_list_counter : int
|
||||||
|
time_seconds : int
|
||||||
|
|
||||||
class IotMonitorRoomInfo(BaseModel):
|
class IotMonitorRoomInfo(BaseModel):
|
||||||
humidity : int
|
humidity : int
|
||||||
|
Loading…
Reference in New Issue
Block a user