#!/usr/bin/env python3 # © Copyright 2021-2022, Scott Gasch """Utilities for dealing with the webcams.""" import logging from typing import Optional import scott_secrets import smart_home.device as dev logger = logging.getLogger(__name__) class BaseCamera(dev.Device): """A base class for a webcam device.""" camera_mapping = { 'cabin_drivewaycam': 'cabin_driveway', 'outside_backyard_camera': 'backyard', 'outside_driveway_camera_wired': 'driveway', 'outside_driveway_camera_wifi': 'driveway', 'outside_doorbell_camera': 'doorbell', 'outside_front_door_camera': 'front_door', 'crawlspace_camera': 'crawlspace', } def __init__(self, name: str, mac: str, keywords: str = "") -> None: super().__init__(name.strip(), mac.strip(), keywords) self.camera_name = BaseCamera.camera_mapping.get(name, None) def get_stream_url(self) -> Optional[str]: """Get the URL for the webcam's live stream. Return None on error.""" name = self.camera_name if not name: return None if name == 'driveway': return f'http://10.0.0.226:8080/{scott_secrets.SHINOBI_KEY1}/mjpeg/{scott_secrets.SHINOBI_KEY2}/driveway' else: return f'http://10.0.0.226:8080/{scott_secrets.SHINOBI_KEY1}/mp4/{scott_secrets.SHINOBI_KEY2}/{name}/s.mp4'