Esempio n. 1
0
    async def get_ota_image(self,
                            manufacturer_id,
                            image_type,
                            model=None) -> Optional[CachedImage]:
        if (manufacturer_id == zigpy.ota.provider.Salus.MANUFACTURER_ID
            ):  # Salus/computime does not pass a useful image_type
            # in the message from the device. So construct key based on model name.
            key = ImageKey(manufacturer_id, model)
        else:
            key = ImageKey(manufacturer_id, image_type)
        if key in self._image_cache and not self._image_cache[key].expired:
            return self._image_cache[key]

        images = await self.async_event("get_image", key)
        valid_images = []

        for image in images:
            if image is None or check_invalid(image):
                continue

            valid_images.append(image)

        if not valid_images:
            return None

        cached = CachedImage.new(
            max(valid_images, key=lambda img: img.header.file_version))
        self._image_cache[key] = cached
        return cached
Esempio n. 2
0
    async def get_ota_image(self, manufacturer_id, image_type) -> Optional[OTAImage]:
        key = ImageKey(manufacturer_id, image_type)
        if key in self._image_cache and not self._image_cache[key].expired:
            return self._image_cache[key]

        images = await self.async_event("get_image", key)
        images = [img for img in images if img]
        if not images:
            return None

        cached = CachedImage.new(max(images, key=lambda img: img.version))
        self._image_cache[key] = cached
        return cached
Esempio n. 3
0
    def should_update(self,
                      manufacturer_id,
                      img_type,
                      ver,
                      hw_ver=None) -> bool:
        """Check if it should upgrade"""

        if self.key != ImageKey(manufacturer_id, img_type):
            return False

        if ver >= self.version:
            return False

        if (hw_ver is not None and self.image.header.hardware_versions_present
                and not (self.image.header.minimum_hardware_version <= hw_ver
                         <= self.image.header.maximum_hardware_version)):
            return False

        return True
Esempio n. 4
0
    async def get_ota_image(self, manufacturer_id,
                            image_type) -> Optional[OTAImage]:
        key = ImageKey(manufacturer_id, image_type)
        if key in self._image_cache and not self._image_cache[key].expired:
            return self._image_cache[key]

        images = await self.async_event("get_image", key)
        valid_images = []

        for image in images:
            if image is None or check_invalid(image):
                continue

            valid_images.append(image)

        if not valid_images:
            return None

        cached = CachedImage.new(max(valid_images,
                                     key=lambda img: img.version))
        self._image_cache[key] = cached
        return cached
Esempio n. 5
0
 def key(self) -> ImageKey:
     return ImageKey(self.header.manufacturer_id, self.header.image_type)
Esempio n. 6
0
 def key(self):
     return ImageKey(self.manufacturer_id, self.image_type)
Esempio n. 7
0
 def key(self):
     return ImageKey(self.manufacturer_id, self.model)