mirror of
https://github.com/home-assistant/core.git
synced 2025-07-13 08:17:08 +00:00
Refactor android_ip_webcam (#67664)
* Add native camera platform * Remove double mjpeg platform * Fix docstring * Remove not needed update
This commit is contained in:
parent
c5f7e7d1b0
commit
cdb463ea55
@ -1,4 +1,6 @@
|
|||||||
"""Support for Android IP Webcam."""
|
"""Support for Android IP Webcam."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
@ -10,7 +12,6 @@ from homeassistant.const import (
|
|||||||
CONF_HOST,
|
CONF_HOST,
|
||||||
CONF_NAME,
|
CONF_NAME,
|
||||||
CONF_PASSWORD,
|
CONF_PASSWORD,
|
||||||
CONF_PLATFORM,
|
|
||||||
CONF_PORT,
|
CONF_PORT,
|
||||||
CONF_SCAN_INTERVAL,
|
CONF_SCAN_INTERVAL,
|
||||||
CONF_SENSORS,
|
CONF_SENSORS,
|
||||||
@ -194,9 +195,9 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
async def async_setup_ipcamera(cam_config):
|
async def async_setup_ipcamera(cam_config):
|
||||||
"""Set up an IP camera."""
|
"""Set up an IP camera."""
|
||||||
host = cam_config[CONF_HOST]
|
host = cam_config[CONF_HOST]
|
||||||
username = cam_config.get(CONF_USERNAME)
|
username: str | None = cam_config.get(CONF_USERNAME)
|
||||||
password = cam_config.get(CONF_PASSWORD)
|
password: str | None = cam_config.get(CONF_PASSWORD)
|
||||||
name = cam_config[CONF_NAME]
|
name: str = cam_config[CONF_NAME]
|
||||||
interval = cam_config[CONF_SCAN_INTERVAL]
|
interval = cam_config[CONF_SCAN_INTERVAL]
|
||||||
switches = cam_config.get(CONF_SWITCHES)
|
switches = cam_config.get(CONF_SWITCHES)
|
||||||
sensors = cam_config.get(CONF_SENSORS)
|
sensors = cam_config.get(CONF_SENSORS)
|
||||||
@ -238,17 +239,32 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
webcams[host] = cam
|
webcams[host] = cam
|
||||||
|
|
||||||
mjpeg_camera = {
|
mjpeg_camera = {
|
||||||
CONF_PLATFORM: "mjpeg",
|
|
||||||
CONF_MJPEG_URL: cam.mjpeg_url,
|
CONF_MJPEG_URL: cam.mjpeg_url,
|
||||||
CONF_STILL_IMAGE_URL: cam.image_url,
|
CONF_STILL_IMAGE_URL: cam.image_url,
|
||||||
CONF_NAME: name,
|
|
||||||
}
|
}
|
||||||
if username and password:
|
if username and password:
|
||||||
mjpeg_camera.update({CONF_USERNAME: username, CONF_PASSWORD: password})
|
mjpeg_camera.update({CONF_USERNAME: username, CONF_PASSWORD: password})
|
||||||
|
|
||||||
|
# Remove incorrect config entry setup via mjpeg platform discovery.
|
||||||
|
mjpeg_config_entry = next(
|
||||||
|
(
|
||||||
|
config_entry
|
||||||
|
for config_entry in hass.config_entries.async_entries("mjpeg")
|
||||||
|
if all(
|
||||||
|
config_entry.options.get(key) == val
|
||||||
|
for key, val in mjpeg_camera.items()
|
||||||
|
)
|
||||||
|
),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
if mjpeg_config_entry:
|
||||||
|
await hass.config_entries.async_remove(mjpeg_config_entry.entry_id)
|
||||||
|
|
||||||
|
mjpeg_camera[CONF_NAME] = name
|
||||||
|
|
||||||
hass.async_create_task(
|
hass.async_create_task(
|
||||||
discovery.async_load_platform(
|
discovery.async_load_platform(
|
||||||
hass, Platform.CAMERA, "mjpeg", mjpeg_camera, config
|
hass, Platform.CAMERA, DOMAIN, mjpeg_camera, config
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
44
homeassistant/components/android_ip_webcam/camera.py
Normal file
44
homeassistant/components/android_ip_webcam/camera.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
"""Support for Android IP Webcam Cameras."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from homeassistant.components.mjpeg import MjpegCamera, filter_urllib3_logging
|
||||||
|
from homeassistant.const import HTTP_BASIC_AUTHENTICATION
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||||
|
|
||||||
|
|
||||||
|
async def async_setup_platform(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config: ConfigType,
|
||||||
|
async_add_entities: AddEntitiesCallback,
|
||||||
|
discovery_info: DiscoveryInfoType | None = None,
|
||||||
|
) -> None:
|
||||||
|
"""Set up the IP Webcam camera."""
|
||||||
|
if discovery_info is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
filter_urllib3_logging()
|
||||||
|
async_add_entities([IPWebcamCamera(**discovery_info)])
|
||||||
|
|
||||||
|
|
||||||
|
class IPWebcamCamera(MjpegCamera):
|
||||||
|
"""Representation of a IP Webcam camera."""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
name: str,
|
||||||
|
mjpeg_url: str,
|
||||||
|
still_image_url: str,
|
||||||
|
username: str | None = None,
|
||||||
|
password: str = "",
|
||||||
|
) -> None:
|
||||||
|
"""Initialize the camera."""
|
||||||
|
super().__init__(
|
||||||
|
name=name,
|
||||||
|
mjpeg_url=mjpeg_url,
|
||||||
|
still_image_url=still_image_url,
|
||||||
|
authentication=HTTP_BASIC_AUTHENTICATION,
|
||||||
|
username=username,
|
||||||
|
password=password,
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user