예제 #1
0
파일: __init__.py 프로젝트: tpaulus/core
async def async_get_device_info(pv_request):
    """Determine device info."""
    userdata = UserData(pv_request)
    resources = await userdata.get_resources()
    userdata_data = resources[USER_DATA]

    if FIRMWARE in userdata_data:
        main_processor_info = userdata_data[FIRMWARE][FIRMWARE_MAINPROCESSOR]
    elif userdata_data:
        # Legacy devices
        fwversion = ApiEntryPoint(pv_request, API_PATH_FWVERSION)
        resources = await fwversion.get_resources()

        if FIRMWARE in resources:
            main_processor_info = resources[FIRMWARE][FIRMWARE_MAINPROCESSOR]
        else:
            main_processor_info = DEFAULT_LEGACY_MAINPROCESSOR

    return {
        DEVICE_NAME: base64_to_unicode(userdata_data[HUB_NAME]),
        DEVICE_MAC_ADDRESS: userdata_data[MAC_ADDRESS_IN_USERDATA],
        DEVICE_SERIAL_NUMBER: userdata_data[SERIAL_NUMBER_IN_USERDATA],
        DEVICE_REVISION: main_processor_info[FIRMWARE_REVISION],
        DEVICE_FIRMWARE: main_processor_info,
        DEVICE_MODEL: main_processor_info[FIRMWARE_NAME],
    }
예제 #2
0
async def async_get_device_info(pv_request):
    """Determine device info."""
    userdata = UserData(pv_request)
    resources = await userdata.get_resources()
    userdata_data = resources[USER_DATA]

    if FIRMWARE_IN_USERDATA in userdata_data:
        main_processor_info = userdata_data[FIRMWARE_IN_USERDATA][
            MAINPROCESSOR_IN_USERDATA_FIRMWARE]
    else:
        # Legacy devices
        main_processor_info = {
            REVISION_IN_MAINPROCESSOR: LEGACY_DEVICE_REVISION,
            FIRMWARE_SUB_REVISION: LEGACY_DEVICE_SUB_REVISION,
            FIRMWARE_BUILD: LEGACY_DEVICE_BUILD,
            MODEL_IN_MAINPROCESSOR: LEGACY_DEVICE_MODEL,
        }

    return {
        DEVICE_NAME: base64_to_unicode(userdata_data[HUB_NAME]),
        DEVICE_MAC_ADDRESS: userdata_data[MAC_ADDRESS_IN_USERDATA],
        DEVICE_SERIAL_NUMBER: userdata_data[SERIAL_NUMBER_IN_USERDATA],
        DEVICE_REVISION: main_processor_info[REVISION_IN_MAINPROCESSOR],
        DEVICE_FIRMWARE: main_processor_info,
        DEVICE_MODEL: main_processor_info[MODEL_IN_MAINPROCESSOR],
    }
예제 #3
0
파일: __init__.py 프로젝트: jbouwh/core
async def async_get_device_info(pv_request: AioRequest,
                                hub_address: str) -> PowerviewDeviceInfo:
    """Determine device info."""
    userdata = UserData(pv_request)
    resources = await userdata.get_resources()
    userdata_data = resources[USER_DATA]

    if FIRMWARE in userdata_data:
        main_processor_info = userdata_data[FIRMWARE][FIRMWARE_MAINPROCESSOR]
    elif userdata_data:
        # Legacy devices
        fwversion = ApiEntryPoint(pv_request, API_PATH_FWVERSION)
        resources = await fwversion.get_resources()

        if FIRMWARE in resources:
            main_processor_info = resources[FIRMWARE][FIRMWARE_MAINPROCESSOR]
        else:
            main_processor_info = DEFAULT_LEGACY_MAINPROCESSOR

    return PowerviewDeviceInfo(
        name=base64_to_unicode(userdata_data[HUB_NAME]),
        mac_address=userdata_data[MAC_ADDRESS_IN_USERDATA],
        serial_number=userdata_data[SERIAL_NUMBER_IN_USERDATA],
        firmware=main_processor_info,
        model=main_processor_info[FIRMWARE_NAME],
        hub_address=hub_address,
    )
예제 #4
0
    def sanitize_resources(resource):
        """Cleans up incoming scene data

        :param scenes: The dict with scene data to be sanitized.
        :returns: Cleaned up dict.
        """
        try:
            resource[ATTR_HUB_NAME_UNICODE] = base64_to_unicode(resource[ATTR_HUB_NAME])
            return resource
        except (KeyError, TypeError):
            LOGGER.debug("no data available")
            return None
예제 #5
0
    def sanitize_resources(resource):
        """Cleans up incoming room data

        :param rooms: The dict with scene data to be sanitized.
        :return: Cleaned up room dict.
        """
        try:
            for room in resource[ATTR_ROOM_DATA]:
                room[ATTR_NAME_UNICODE] = base64_to_unicode(room[ATTR_NAME])
            return resource
        except (KeyError, TypeError):
            _LOGGER.debug("no roomdata available")
            return None
예제 #6
0
    def sanitize_resources(resource: dict):
        """Cleans up incoming scene data

        :param scenes: The dict with scene data to be sanitized.
        :returns: Cleaned up scene dict.
        """
        try:
            for shade in resource[ATTR_SHADE_DATA]:
                shade[ATTR_NAME_UNICODE] = base64_to_unicode(shade[ATTR_NAME])
            return resource
        except (KeyError, TypeError):
            LOGGER.debug("no shade data available")
            return None
예제 #7
0
    def sanitize_resources(scenes: dict):
        """Cleans up incoming scene data

        :param scenes: The dict with scene data to be sanitized.
        :returns: Cleaned up scene dict.
        """
        try:
            for scene in scenes[ATTR_SCENE_DATA]:
                try:
                    scene[ATTR_NAME_UNICODE] = base64_to_unicode(
                        scene[ATTR_NAME])
                except binascii.Error:
                    pass
            return scenes
        except (KeyError, TypeError):
            _LOGGER.debug("no scene data available")
            return None
예제 #8
0
    def _sanitize_resource(cls, resource):

        _name = resource.get(ATTR_NAME)
        if _name:
            resource[ATTR_NAME_UNICODE] = base64_to_unicode(_name)