X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=smart_home%2Fcameras.py;h=e8f164b3c0a6f1529347c79400b1036623a87d58;hb=a9bdfd8fc9f84b7b2c09a57cd12ba32259e84d1c;hp=963f54ef089f6fdaf6d7fa3f041912ac229dc881;hpb=889f57512986d1b799582c58d712b304b706391c;p=python_utils.git diff --git a/smart_home/cameras.py b/smart_home/cameras.py index 963f54e..e8f164b 100644 --- a/smart_home/cameras.py +++ b/smart_home/cameras.py @@ -1,39 +1,42 @@ #!/usr/bin/env python3 +# © Copyright 2021-2022, Scott Gasch + """Utilities for dealing with the webcams.""" -from abc import abstractmethod -import datetime -import json import logging -import os -import re -import subprocess -import sys -from typing import Any, Dict, List, Optional, Set - -import argparse_utils -import config -import logging_utils +from typing import Optional + +import scott_secrets import smart_home.device as dev -from google_assistant import ask_google, GoogleResponse -from decorator_utils import timeout, memoized 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': 'driveway', + 'outside_driveway_camera_wired': 'driveway', + 'outside_driveway_camera_wifi': 'driveway', 'outside_doorbell_camera': 'doorbell', - 'outside_front_door_camera': 'frontdoor', + '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) -> str: - assert self.camera_name is not None - return f'http://10.0.0.56:81/mjpg/{self.camera_name}/video.mjpg?h=1024&q=99' + 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'