From 84e81a9e4e0c7555d6319bd9e451df6bd1674f7d Mon Sep 17 00:00:00 2001
From: Finbarr Brady <fibrady@cisco.com>
Date: Tue, 2 Jun 2015 16:00:29 +0100
Subject: [PATCH] Renamed hikvision component. Added module from pip

---
 .../components/switch/hikvisioncam.py         | 138 ++++++++++++++++++
 requirements.txt                              |   3 +
 2 files changed, 141 insertions(+)
 create mode 100644 homeassistant/components/switch/hikvisioncam.py

diff --git a/homeassistant/components/switch/hikvisioncam.py b/homeassistant/components/switch/hikvisioncam.py
new file mode 100644
index 00000000000..3db11b96b18
--- /dev/null
+++ b/homeassistant/components/switch/hikvisioncam.py
@@ -0,0 +1,138 @@
+"""
+homeassistant.components.switch.hikvision
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Support turning on/off motion detection on Hikvision cameras.
+
+Note: Currently works using default https port only.
+
+CGI API Guide:
+http://bit.ly/1RuyUuF
+
+Configuration:
+
+To use the Hikvision motion detection
+switch you will need to add something like the
+following to your config/configuration.yaml
+
+switch:
+    platform: hikvision
+    name: Hikvision Cam 1 Motion Detection
+    host: 192.168.1.26
+    username: YOUR_USERNAME
+    password: YOUR_PASSWORD
+
+Variables:
+
+host
+*Required
+This is the IP address of your Hikvision camera. Example: 192.168.1.32
+
+username
+*Required
+Your Hikvision camera username
+
+password
+*Required
+Your Hikvision camera username
+
+name
+*Optional
+The name to use when displaying this switch instance.
+
+"""
+from homeassistant.helpers.entity import ToggleEntity
+from homeassistant.const import STATE_ON, STATE_OFF
+from homeassistant.const import CONF_HOST, CONF_USERNAME, CONF_PASSWORD
+import logging
+
+try:
+    import hikvision.api
+    from hikvision.error import HikvisionError, MissingParamError
+except ImportError:
+    hikvision.api = None
+
+_LOGGING = logging.getLogger(__name__)
+
+# pylint: disable=too-many-arguments
+# pylint: disable=too-many-instance-attributes
+
+
+def setup_platform(hass, config, add_devices_callback, discovery_info=None):
+    """ Setup Hikvision Camera config. """
+
+    host = config.get(CONF_HOST, None)
+    port = config.get('port', "80")
+    name = config.get('name', "Hikvision Camera Motion Detection")
+    username = config.get(CONF_USERNAME, "admin")
+    password = config.get(CONF_PASSWORD, "12345")
+
+    if hikvision.api is None:
+        _LOGGING.error((
+            "Failed to import hikvision. Did you maybe not install the "
+            "'hikvision' dependency?"))
+
+        return False
+
+    try:
+        hikvision_cam = hikvision.api.CreateDevice(
+            host, port=port, username=username, password=password)
+    except MissingParamError as param_err:
+        _LOGGING.error("Missing required param: %s", param_err)
+        return False
+    except HikvisionError as conn_err:
+        _LOGGING.error("Unable to connect: %s", conn_err)
+        return False
+
+    add_devices_callback([
+        HikvisionMotionSwitch(name, hikvision_cam)
+    ])
+
+
+class HikvisionMotionSwitch(ToggleEntity):
+
+    """ Provides a switch to toggle on/off motion detection. """
+
+    def __init__(self, name, hikvision_cam):
+        self._name = name
+        self._hikvision_cam = hikvision_cam
+        self._state = STATE_OFF
+
+    @property
+    def should_poll(self):
+        """ Poll for status regularly. """
+        return True
+
+    @property
+    def name(self):
+        """ Returns the name of the device if any. """
+        return self._name
+
+    @property
+    def state(self):
+        """ Returns the state of the device if any. """
+        return self._state
+
+    @property
+    def is_on(self):
+        """ True if device is on. """
+        return self._state == STATE_ON
+
+    def turn_on(self, **kwargs):
+        """ Turn the device on. """
+
+        _LOGGING.info("Turning on Motion Detection ")
+        self._hikvision_cam.enable_motion_detection()
+
+    def turn_off(self, **kwargs):
+        """ Turn the device off. """
+
+        _LOGGING.info("Turning off Motion Detection ")
+        self._hikvision_cam.disable_motion_detection()
+
+    def update(self):
+        """ Update Motion Detection state """
+        enabled = self._hikvision_cam.hik_camera.is_motion_detection_enabled()
+        _LOGGING.info('enabled: %s', enabled)
+
+        self._state = STATE_ON if enabled else STATE_OFF
diff --git a/requirements.txt b/requirements.txt
index 5dc0e7cc18b..22bf213c21c 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -58,3 +58,6 @@ sleekxmpp>=1.3.1
 
 # Blockchain (sensor.bitcoin)
 blockchain>=1.1.2
+
+# Hikvision (switch.hikvision)
+hikvision>=0.3
-- 
GitLab