Exemplo n.º 1
0
def lookForPage(name: str) -> FunctionRespons:
    fileList = os.listdir(PAGES_DIR)
    logger.debug(f'lookForPage -> input data:{name}')
    for item in fileList:
        if (item == name):
            return FunctionRespons(data=item, status="ok")
    return FunctionRespons(detail="no file", status="error")
Exemplo n.º 2
0
def backgroundDelete(name: str) -> FunctionRespons:
    try:
        logger.debug(f'delete image. image:{name}')
        file_path = os.path.join(MEDIA_ROOT, "backgrounds", name)
        os.remove(file_path)
        return FunctionRespons(status="ok")
    except Exception as e:
        logger.error(f'error delete image. file:{name}. detail:{e}')
        return FunctionRespons(status="error", detail=str(e))
Exemplo n.º 3
0
def script(name: str)->FunctionRespons:
    try:
        templates = None
        with open(os.path.join(SCRIPTS_DIR,name)) as f:
            templates = yaml.safe_load(f)
        return FunctionRespons(status="ok", data=templates)
    except FileNotFoundError as e:
        logger.error(f'file not found. file:{name}. detail:{e}')
        return FunctionRespons(status="error", detail=str(e))
Exemplo n.º 4
0
def scriptDelete(name: str) -> FunctionRespons:
    try:
        logger.debug(f'delete script. script:{name}')
        file_path = os.path.join(SCRIPTS_DIR, name)
        file_path = file_path + ".yml"
        os.remove(file_path)
        return FunctionRespons(status="ok")
    except Exception as e:
        logger.error(f'error delete script. file:{name}. detail:{e}')
        return FunctionRespons(status="error", detail=str(e))
Exemplo n.º 5
0
def deleteHomePage(name: str) -> FunctionRespons:
    try:
        file_path = os.path.join(PAGES_DIR, name)
        file_path = file_path + ".yml"
        os.remove(file_path)
        logger.info(f"delete page name:{name}")
        return FunctionRespons(status="ok", detail="")
    except Exception as e:
        logger.error(f"error delete page name:{name}, detail:{e}")
        return FunctionRespons(status="error", detail=str(e))
Exemplo n.º 6
0
async def deleteDevice(systemName: str):
    try:
        dev = Devices.get(systemName=systemName)
        devicesArrey.delete(systemName)
        await dev.delete()
        deleteDeviceinpage(systemName)
        logger.info(f'delete device, systemName:{systemName}')
        return FunctionRespons(status=TypeRespons.OK, data="ok")
    except Exception as e:
        logger.error(f'error delete device, detail:{e}')
        return FunctionRespons(status=TypeRespons.ERROR, detail=e)
Exemplo n.º 7
0
def setPage(data: HomePage) -> FunctionRespons:
    try:
        logger.debug(f"setPage -> input data:{data.dict()}")
        str = data.name + ".yml"
        path = os.path.join(PAGES_DIR, str)
        with open(path, 'w') as f:
            yaml.dump(data.dict(), f, default_flow_style=False)
        return FunctionRespons(status="ok", data=None)
    except FileNotFoundError as e:
        logger.error(f"file not found file:{data.name}, detail:{e}")
        return FunctionRespons(status="error",
                               ditail=f'file not found. detile: {str(e)}')
Exemplo n.º 8
0
def scriptsetstatus(name: str, status: bool) -> FunctionRespons:
    try:
        logger.debug(f'edit status script. script:{name}, status:{status}')
        templates = None
        fullName = name + ".yml"
        with open(os.path.join(SCRIPTS_DIR, fullName)) as f:
            templates = yaml.safe_load(f)
        templates["status"] = status
        with open(os.path.join(SCRIPTS_DIR, fullName), 'w') as f:
            yaml.dump(templates, f, default_flow_style=False)
        return FunctionRespons(status="ok")
    except FileNotFoundError as e:
        logger.error(f'file not found. file:{name}. detail:{e}')
        return FunctionRespons(status="error", detail=str(e))
Exemplo n.º 9
0
async def editStatusDevice(systemName: str, status: bool):
    try:
        dev = Devices.get(systemName=systemName)
        if(not dev):
            return FunctionRespons(status=TypeRespons.INVALID, detail="device not found")
        if status:
            dev.status = 'online'
        else:
            dev.status = 'unlink'
        dev.save()
        logger.info(f'edit status device, systemName:{systemName}')
        return FunctionRespons(status=TypeRespons.OK, data="ok")
    except Exception as e:
        logger.error(f'error edit status device, detail:{e}')
        return FunctionRespons(status=TypeRespons.ERROR, detail=e)
Exemplo n.º 10
0
def addHomePage(name: str) -> FunctionRespons:
    try:
        logger.debug(f"addHomePage -> input name:{name}")
        fileList = os.listdir(PAGES_DIR)
        str = name + ".yml"
        for item in fileList:
            if (item == str):
                return FunctionRespons(status="error", detail="this name busy")
        path = os.path.join(PAGES_DIR, str)
        with open(path, 'w') as f:
            yaml.dump({"name": name, "cards": []}, f, default_flow_style=False)
        logger.info(f"add new page name:{name}")
        return FunctionRespons(status="ok", detail="")
    except FileNotFoundError as e:
        logger.error(f"file not found file:{str}, detail:{e}")
        return FunctionRespons(status="error", detail=str(e))
Exemplo n.º 11
0
def getPage(name: str) -> FunctionRespons:
    try:
        templates = None
        name = name + ".yml"
        res = lookForPage(name)
        if (res.status == "ok"):
            with open(os.path.join(PAGES_DIR, name)) as f:
                templates = yaml.safe_load(f)
            return FunctionRespons(data=HomePage(name=templates['name'],
                                                 cards=cardsFormat(
                                                     templates['cards'])),
                                   status="ok")
        else:
            return res
    except FileNotFoundError as e:
        logger.error(f"file not found file:{name}, detail:{e}")
        return FunctionRespons(status="error", detail=e)
Exemplo n.º 12
0
def scripts()->FunctionRespons:
    fileList = os.listdir(SCRIPTS_DIR)
    listscripts = list()
    for item in fileList:
        res = script(item)
        if(res.status != 'ok'):
            res.data = None
        listscripts.append(res.data)
    return FunctionRespons(status="ok", data=listscripts)
Exemplo n.º 13
0
def deleteDevice(name: str) -> FunctionRespons:
    try:
        pages = getPagesName()
        if pages.status != "ok":
            return FunctionRespons(status="error",
                                   detail=f"error delete device name:{name}")
        for page in pages.data:
            datapage = getPage(page)
            if datapage.status == "ok":
                data = datapage.data
                for card in data.cards:
                    filt = [x for x in card.children if x.deviceName != name]
                    card.children = filt
            setPage(data)
            return FunctionRespons(status="ok", data="ok")
    except Exception as e:
        logger.error(f"error delete device name:{name}, detail:{e}")
        return FunctionRespons(status="error", detail=str(e))
Exemplo n.º 14
0
def getPagesName() -> FunctionRespons:
    fileList = os.listdir(PAGES_DIR)
    arr = []
    templates = None
    for item in fileList:
        with open(os.path.join(PAGES_DIR, item)) as f:
            templates = yaml.safe_load(f)
        arr.append(templates["name"])
    return FunctionRespons(status="ok", data=arr)
Exemplo n.º 15
0
async def addDevice(data:DeviceSchema)->FunctionRespons:
    try:
        devices = readYMLFile(DEVICES)
        if devices == None:
            devices = list()
        logger.debug(f'addDevice input data:{data.dict()}, file:{devices}')
        for item in devices:
            if item["systemName"]==data.systemName:
                return FunctionRespons(status=TypeRespons.INVALID, detail="a device with the same name already exists.")
        fields = data.fields
        data.fields = []
        newDevice = Devices.create(data)
        for item in fields:
            item.value = item.low
            newDevice.addField(item)
        newDevice.save()
        return FunctionRespons(status=TypeRespons.OK, data="ok")
    except Exception as e:
        logger.error(f'error add device, detail:{e}')
        return FunctionRespons(status=TypeRespons.ERROR, detail=str(e))
Exemplo n.º 16
0
async def editDevice(data: DeviceEditSchema):
    try:
        logger.debug(f'edit device, input data:{data}')
        devices = Devices.all()
        for item in devices:
            if item.systemName==data.newSystemName and data.systemName != data.newSystemName:
                return FunctionRespons(status=TypeRespons.INVALID, detail="a device with the same name already exists.")
        dev = Devices.get(data.systemName)
        dev.name = data.name
        dev.information = data.information
        dev.type = data.type
        dev.address = data.address
        dev.valueType = data.valueType
        dev.token = data.token
        dev.typeConnect = data.typeConnect
        dev.fields = []
        dev.save()

        if(data.fields):
            conf = data.fields
            for item in conf:
                dev.addField(DeviceFieldSchema(
                    address=item.address,
                    name=item.name,
                    value=item.low,
                    type=item.type,
                    low=item.low,
                    high=item.high,
                    values=item.values,
                    control=item.control,
                    icon=item.icon,
                    unit=item.unit
                ))
            dev.save()
        if(data.newSystemName):
            dev.editSysemName(data.newSystemName)
        devicesArrey.delete(data.systemName)
        return FunctionRespons(status=TypeRespons.OK, data="ok")
    except Exception as e:
        logger.error(f"error edit device. detail:{e}")
        return FunctionRespons(status=TypeRespons.ERROR, detail=str(e))
Exemplo n.º 17
0
async def backgroundLinc(name: str, type: str, id: int) -> FunctionRespons:
    try:
        logger.debug(f'linc image. image:{name}, type:{type}')
        u = await User.objects.get_or_none(id=id)
        if not u:
            logger.error(f"none user")
            return FunctionRespons(status="error", detail='none user')
        backgrounds = await u.background.all()
        for item in backgrounds:
            if item.type == type:
                await item.delete()
                break
        background = await ImageBackground.objects.create(
            type=type,
            title=name,
            image=os.path.join(MEDIA_URL, "backgrounds", name))
        await u.background.add(background)
        return FunctionRespons(status="ok")
    except Exception as e:
        logger.error(f'error linc image. file:{name}. detail:{e}')
        return FunctionRespons(status="error", detail=str(e))
Exemplo n.º 18
0
def addscript(dataobj: ScriptSchema) -> FunctionRespons:
    try:
        data = dataobj.dict()
        logger.debug(f'add script input data:{data} ')
        fileList = os.listdir(SCRIPTS_DIR)
        str = data["name"] + ".yml"
        data["status"] = False
        if (len(data["trigger"]) > 0):
            data["status"] = True
        for item in fileList:
            if (item == str):
                return FunctionRespons(
                    status="error",
                    detail='a script with the same name already exists.')
        name = os.path.join(SCRIPTS_DIR, str)
        with open(name, 'w') as f:
            yaml.dump(data, f, default_flow_style=False)
        return FunctionRespons(status="ok")
    except FileNotFoundError as e:
        logger.error(f'file not found. file:{name}. detail:{e}')
        return FunctionRespons(status="error", detail=str(e))
Exemplo n.º 19
0
async def setValueGroup(data: DeviceValueSchema):
    logger.debug(f'setValueGroup input data:{data.dict()}')
    group = Groups.get(data.systemName)
    if not group:
        return FunctionRespons(status=TypeRespons.INVALID,
                               detail=f"group {data.systemName} not found")
    for item in group.devices:
        device = devicesArrey.get(item.name)
        print(device)
        if not device:
            logger.info(f'device {item.name} not found')
            continue
        field = device["device"].get_field(data.type)
        if not field:
            continue
        if field.type == "number" and not is_digit(data.status):
            continue
        if field.type == "binary" and not is_digit(data.status):
            continue
        print(item.name, data.type, data.status)
        await setValue(item.name, data.type, data.status)
    return FunctionRespons(status=TypeRespons.OK, data="ok")
Exemplo n.º 20
0
async def getHistory(systemName:str)->FunctionRespons:
    dev = Devices.get(systemName=systemName)
    if not dev:
        return FunctionRespons(status=TypeRespons.ERROR, detail="device not found")
    history = await DeviceHistory.objects.all(deviceName=systemName)
    return FunctionRespons(status=TypeRespons.OK, data=history)