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
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
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
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
def key(self) -> ImageKey: return ImageKey(self.header.manufacturer_id, self.header.image_type)
def key(self): return ImageKey(self.manufacturer_id, self.image_type)
def key(self): return ImageKey(self.manufacturer_id, self.model)