1 """Support for Xeoma Cameras."""
3 from __future__
import annotations
7 from pyxeoma.xeoma
import Xeoma, XeomaError
8 import voluptuous
as vol
11 PLATFORM_SCHEMA
as CAMERA_PLATFORM_SCHEMA,
20 _LOGGER = logging.getLogger(__name__)
22 CONF_CAMERAS =
"cameras"
24 CONF_IMAGE_NAME =
"image_name"
25 CONF_NEW_VERSION =
"new_version"
26 CONF_VIEWER_PASSWORD =
"viewer_password"
27 CONF_VIEWER_USERNAME =
"viewer_username"
29 CAMERAS_SCHEMA = vol.Schema(
31 vol.Required(CONF_IMAGE_NAME): cv.string,
32 vol.Optional(CONF_HIDE, default=
False): cv.boolean,
33 vol.Optional(CONF_NAME): cv.string,
38 PLATFORM_SCHEMA = CAMERA_PLATFORM_SCHEMA.extend(
40 vol.Required(CONF_HOST): cv.string,
41 vol.Optional(CONF_CAMERAS): vol.Schema(
42 vol.All(cv.ensure_list, [CAMERAS_SCHEMA])
44 vol.Optional(CONF_NEW_VERSION, default=
True): cv.boolean,
45 vol.Optional(CONF_PASSWORD): cv.string,
46 vol.Optional(CONF_USERNAME): cv.string,
54 async_add_entities: AddEntitiesCallback,
55 discovery_info: DiscoveryInfoType |
None =
None,
57 """Discover and setup Xeoma Cameras."""
59 host = config[CONF_HOST]
60 login = config.get(CONF_USERNAME)
61 password = config.get(CONF_PASSWORD)
63 xeoma = Xeoma(host, login, password)
66 await xeoma.async_test_connection()
67 discovered_image_names = await xeoma.async_get_image_names()
68 discovered_cameras = [
70 CONF_IMAGE_NAME: image_name,
72 CONF_NAME: image_name,
73 CONF_VIEWER_USERNAME: username,
74 CONF_VIEWER_PASSWORD: pw,
76 for image_name, username, pw
in discovered_image_names
79 for cam
in config.get(CONF_CAMERAS, []):
83 for dc
in discovered_cameras
84 if dc[CONF_IMAGE_NAME] == cam[CONF_IMAGE_NAME]
89 if camera
is not None:
91 camera[CONF_NAME] = cam[CONF_NAME]
93 camera[CONF_HIDE] = cam[CONF_HIDE]
95 cameras =
list(filter(
lambda c:
not c[CONF_HIDE], discovered_cameras))
100 camera[CONF_IMAGE_NAME],
102 camera[CONF_VIEWER_USERNAME],
103 camera[CONF_VIEWER_PASSWORD],
105 for camera
in cameras
108 except XeomaError
as err:
109 _LOGGER.error(
"Error: %s", err.message)
114 """Implementation of a Xeoma camera."""
116 def __init__(self, xeoma, image, name, username, password):
117 """Initialize a Xeoma camera."""
127 self, width: int |
None =
None, height: int |
None =
None
129 """Return a still image response from the camera."""
132 image = await self.
_xeoma_xeoma.async_get_camera_image(
136 except XeomaError
as err:
137 _LOGGER.error(
"Error fetching image: %s", err.message)
143 """Return the name of this device."""
144 return self.
_name_name
bytes|None async_camera_image(self, int|None width=None, int|None height=None)
def __init__(self, xeoma, image, name, username, password)
None async_setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback async_add_entities, DiscoveryInfoType|None discovery_info=None)