""" Support for the QR image processing. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/image_processing.qr/ """ from homeassistant.core import split_entity_id from homeassistant.components.image_processing import ( ImageProcessingEntity, CONF_SOURCE, CONF_ENTITY_ID, CONF_NAME) REQUIREMENTS = ['pyzbar==0.1.7', 'pillow==5.4.1'] def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the demo image processing platform.""" # pylint: disable=unused-argument entities = [] for camera in config[CONF_SOURCE]: entities.append(QrEntity( camera[CONF_ENTITY_ID], camera.get(CONF_NAME) )) add_entities(entities) class QrEntity(ImageProcessingEntity): """QR image processing entity.""" def __init__(self, camera_entity, name): """Initialize QR image processing entity.""" super().__init__() self._camera = camera_entity if name: self._name = name else: self._name = "QR {0}".format( split_entity_id(camera_entity)[1]) self._state = None @property def camera_entity(self): """Return camera entity id from process pictures.""" return self._camera @property def state(self): """Return the state of the entity.""" return self._state @property def name(self): """Return the name of the entity.""" return self._name def process_image(self, image): """Process image.""" import io from pyzbar import pyzbar from PIL import Image stream = io.BytesIO(image) img = Image.open(stream) barcodes = pyzbar.decode(img) if barcodes: self._state = barcodes[0].data.decode("utf-8") else: self._state = None