mirror of
https://github.com/home-assistant/core.git
synced 2025-07-09 14:27:07 +00:00
Change xiaomi camera conf_host to template (#25799)
* changed conf_host to template Changed conf_host to template to accommodate dynamic ips * Update camera.py * Updated per comment * update for black formatter * black changes
This commit is contained in:
parent
757482ee85
commit
f7a58cc19e
@ -5,6 +5,7 @@ import logging
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.camera import Camera, PLATFORM_SCHEMA
|
||||
from homeassistant.exceptions import TemplateError
|
||||
from homeassistant.components.ffmpeg import DATA_FFMPEG
|
||||
from homeassistant.const import (
|
||||
CONF_HOST,
|
||||
@ -34,7 +35,7 @@ MODEL_XIAOFANG = "xiaofang"
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
||||
{
|
||||
vol.Required(CONF_NAME): cv.string,
|
||||
vol.Required(CONF_HOST): cv.string,
|
||||
vol.Required(CONF_HOST): cv.template,
|
||||
vol.Required(CONF_MODEL): vol.Any(MODEL_YI, MODEL_XIAOFANG),
|
||||
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
|
||||
vol.Optional(CONF_PATH, default=DEFAULT_PATH): cv.string,
|
||||
@ -63,6 +64,7 @@ class XiaomiCamera(Camera):
|
||||
self._manager = hass.data[DATA_FFMPEG]
|
||||
self._name = config[CONF_NAME]
|
||||
self.host = config[CONF_HOST]
|
||||
self.host.hass = hass
|
||||
self._model = config[CONF_MODEL]
|
||||
self.port = config[CONF_PORT]
|
||||
self.path = config[CONF_PATH]
|
||||
@ -84,11 +86,11 @@ class XiaomiCamera(Camera):
|
||||
"""Return the camera model."""
|
||||
return self._model
|
||||
|
||||
def get_latest_video_url(self):
|
||||
def get_latest_video_url(self, host):
|
||||
"""Retrieve the latest video file from the Xiaomi Camera FTP server."""
|
||||
from ftplib import FTP, error_perm
|
||||
|
||||
ftp = FTP(self.host)
|
||||
ftp = FTP(host)
|
||||
try:
|
||||
ftp.login(self.user, self.passwd)
|
||||
except error_perm as exc:
|
||||
@ -133,14 +135,20 @@ class XiaomiCamera(Camera):
|
||||
video = videos[-1]
|
||||
|
||||
return "ftp://{0}:{1}@{2}:{3}{4}/{5}".format(
|
||||
self.user, self.passwd, self.host, self.port, ftp.pwd(), video
|
||||
self.user, self.passwd, host, self.port, ftp.pwd(), video
|
||||
)
|
||||
|
||||
async def async_camera_image(self):
|
||||
"""Return a still image response from the camera."""
|
||||
from haffmpeg.tools import ImageFrame, IMAGE_JPEG
|
||||
|
||||
url = await self.hass.async_add_job(self.get_latest_video_url)
|
||||
try:
|
||||
host = self.host.async_render()
|
||||
except TemplateError as exc:
|
||||
_LOGGER.error("Error parsing template %s: %s", self.host, exc)
|
||||
return self._last_image
|
||||
|
||||
url = await self.hass.async_add_executor_job(self.get_latest_video_url, host)
|
||||
if url != self._last_url:
|
||||
ffmpeg = ImageFrame(self._manager.binary, loop=self.hass.loop)
|
||||
self._last_image = await asyncio.shield(
|
||||
|
Loading…
x
Reference in New Issue
Block a user