66 خطوط
1.8 KiB
Python
66 خطوط
1.8 KiB
Python
|
"""Support for Deebot Vaccums."""
|
||
|
import base64
|
||
|
import logging
|
||
|
from typing import Optional, Dict, Any
|
||
|
|
||
|
from homeassistant.components.camera import Camera
|
||
|
|
||
|
from .const import *
|
||
|
from .helpers import get_device_info
|
||
|
|
||
|
_LOGGER = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
async def async_setup_entry(hass, config_entry, async_add_devices):
|
||
|
"""Add sensors for passed config_entry in HA."""
|
||
|
hub = hass.data[DOMAIN][config_entry.entry_id]
|
||
|
|
||
|
if hub.liveMapEnabled:
|
||
|
new_devices = []
|
||
|
|
||
|
for vacbot in hub.vacbots:
|
||
|
new_devices.append(DeeboLiveCamera(vacbot, "liveMap"))
|
||
|
|
||
|
if new_devices:
|
||
|
async_add_devices(new_devices)
|
||
|
|
||
|
|
||
|
class DeeboLiveCamera(Camera):
|
||
|
"""Deebot Live Camera"""
|
||
|
|
||
|
def __init__(self, vacbot, device_id):
|
||
|
"""Initialize the Deebot Vacuum."""
|
||
|
super().__init__()
|
||
|
|
||
|
self._vacbot = vacbot
|
||
|
self._id = device_id
|
||
|
|
||
|
if self._vacbot.vacuum.get("nick", None) is not None:
|
||
|
self._vacbot_name = "{}".format(self._vacbot.vacuum["nick"])
|
||
|
else:
|
||
|
# In case there is no nickname defined, use the device id
|
||
|
self._vacbot_name = "{}".format(self._vacbot.vacuum["did"])
|
||
|
|
||
|
self._name = self._vacbot_name + "_" + device_id
|
||
|
|
||
|
_LOGGER.debug("Camera initialized: %s", self.name)
|
||
|
|
||
|
@property
|
||
|
def name(self):
|
||
|
"""Return the name of the device."""
|
||
|
return self._name
|
||
|
|
||
|
@property
|
||
|
def unique_id(self) -> str:
|
||
|
"""Return an unique ID."""
|
||
|
return self._vacbot.vacuum.get("did", None) + "_" + self._id
|
||
|
|
||
|
@property
|
||
|
def device_info(self) -> Optional[Dict[str, Any]]:
|
||
|
return get_device_info(self._vacbot)
|
||
|
|
||
|
async def async_camera_image(self):
|
||
|
"""Return a still image response from the camera."""
|
||
|
|
||
|
return base64.decodebytes(self._vacbot.live_map)
|