Improve docstrings for sphinx.
[python_utils.git] / smart_home / cameras.py
index 963f54ef089f6fdaf6d7fa3f041912ac229dc881..e8f164b3c0a6f1529347c79400b1036623a87d58 100644 (file)
@@ -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'