From 45d9250a1d81e22f0b44da5c232f06470acdc6ab Mon Sep 17 00:00:00 2001 From: Ivan Pankratov Date: Sat, 4 Jul 2020 22:38:00 +0500 Subject: [PATCH 1/6] fix: camera rotation argument name --- miio/chuangmi_camera.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/miio/chuangmi_camera.py b/miio/chuangmi_camera.py index 28748152f..0106f4006 100644 --- a/miio/chuangmi_camera.py +++ b/miio/chuangmi_camera.py @@ -283,7 +283,7 @@ def night_mode_on(self): return self.send("set_night_mode", [2]) @command( - click.argument("mode", type=EnumType(Direction, False)), + click.argument("direction", type=EnumType(Direction, False)), default_output=format_output("Rotating to direction '{direction.name}'"), ) def rotate(self, direction: Direction): From ba0ef3d1bed661cfb5fbfc5dfa2081eb5683cb46 Mon Sep 17 00:00:00 2001 From: Ivan Pankratov Date: Sat, 4 Jul 2020 22:41:58 +0500 Subject: [PATCH 2/6] add: set camera motion sensitivity --- miio/chuangmi_camera.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/miio/chuangmi_camera.py b/miio/chuangmi_camera.py index 0106f4006..8b1892b79 100644 --- a/miio/chuangmi_camera.py +++ b/miio/chuangmi_camera.py @@ -12,6 +12,12 @@ _LOGGER = logging.getLogger(__name__) +CONST_HIGH_SENSITIVITY = [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] +CONST_LOW_SENSITIVITY = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + + class Direction(enum.Enum): """Rotation direction.""" @@ -21,6 +27,13 @@ class Direction(enum.Enum): Down = 4 +class MotionDetectionSensitivity(enum.Enum): + """Motion detection sensitivity.""" + + High = 3 + Low = 1 + + class CameraStatus: """Container for status reports from the Xiaomi Chuangmi Camera.""" @@ -294,3 +307,13 @@ def rotate(self, direction: Direction): def alarm(self): """Sound a loud alarm for 10 seconds.""" return self.send("alarm_sound") + + @command( + click.argument("sensitivity", type=EnumType(MotionDetectionSensitivity, False)), + default_output=format_output("Setting motion sensitivity '{sensitivity.name}'"), + ) + def set_motion_sensitivity(self, sensitivity: MotionDetectionSensitivity): + """Set motion sensitivity (high, low).""" + return self.send("set_motion_region", + CONST_HIGH_SENSITIVITY if sensitivity == MotionDetectionSensitivity.High else CONST_LOW_SENSITIVITY) + From 8102e54b38251a1e3c31beabe576ee42e097f5b0 Mon Sep 17 00:00:00 2001 From: Ivan Pankratov Date: Sat, 4 Jul 2020 22:43:02 +0500 Subject: [PATCH 3/6] add: camera monitoring config --- miio/chuangmi_camera.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/miio/chuangmi_camera.py b/miio/chuangmi_camera.py index 8b1892b79..55beaeab9 100644 --- a/miio/chuangmi_camera.py +++ b/miio/chuangmi_camera.py @@ -34,6 +34,14 @@ class MotionDetectionSensitivity(enum.Enum): Low = 1 +class HomeMonitoringMode(enum.IntEnum): + """Home monitoring mode.""" + + Off = 0 + AllDay = 1 + Custom = 2 + + class CameraStatus: """Container for status reports from the Xiaomi Chuangmi Camera.""" @@ -317,3 +325,25 @@ def set_motion_sensitivity(self, sensitivity: MotionDetectionSensitivity): return self.send("set_motion_region", CONST_HIGH_SENSITIVITY if sensitivity == MotionDetectionSensitivity.High else CONST_LOW_SENSITIVITY) + @command( + click.argument("mode", type=EnumType(HomeMonitoringMode, False)), + click.argument("start-hour", default=10), + click.argument("start-minute", default=0), + click.argument("end-hour", default=17), + click.argument("end-minute", default=0), + click.argument("notify", default=1), + click.argument("interval", default=5), + default_output=format_output("Setting alarm config to '{mode.name}'") + ) + def set_home_monitoring_config( + self, + mode: HomeMonitoringMode = HomeMonitoringMode.AllDay, + start_hour: int = 10, + start_minute: int = 0, + end_hour: int = 17, + end_minute: int = 0, + notify: int = 1, + interval: int = 5 + ): + """Set home monitoring configuration""" + return self.send("setAlarmConfig", [mode, start_hour, start_minute, end_hour, end_minute, notify, interval]) From a80295668ce05386a415fd34afb60ececd1e6c9f Mon Sep 17 00:00:00 2001 From: Ivan Pankratov Date: Sat, 4 Jul 2020 23:04:45 +0500 Subject: [PATCH 4/6] refactor: format --- miio/chuangmi_camera.py | 89 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 80 insertions(+), 9 deletions(-) diff --git a/miio/chuangmi_camera.py b/miio/chuangmi_camera.py index 55beaeab9..12a8a2bf2 100644 --- a/miio/chuangmi_camera.py +++ b/miio/chuangmi_camera.py @@ -12,10 +12,74 @@ _LOGGER = logging.getLogger(__name__) -CONST_HIGH_SENSITIVITY = [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] -CONST_LOW_SENSITIVITY = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] +CONST_HIGH_SENSITIVITY = [ + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, +] +CONST_LOW_SENSITIVITY = [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, +] class Direction(enum.Enum): @@ -322,8 +386,12 @@ def alarm(self): ) def set_motion_sensitivity(self, sensitivity: MotionDetectionSensitivity): """Set motion sensitivity (high, low).""" - return self.send("set_motion_region", - CONST_HIGH_SENSITIVITY if sensitivity == MotionDetectionSensitivity.High else CONST_LOW_SENSITIVITY) + return self.send( + "set_motion_region", + CONST_HIGH_SENSITIVITY + if sensitivity == MotionDetectionSensitivity.High + else CONST_LOW_SENSITIVITY, + ) @command( click.argument("mode", type=EnumType(HomeMonitoringMode, False)), @@ -333,7 +401,7 @@ def set_motion_sensitivity(self, sensitivity: MotionDetectionSensitivity): click.argument("end-minute", default=0), click.argument("notify", default=1), click.argument("interval", default=5), - default_output=format_output("Setting alarm config to '{mode.name}'") + default_output=format_output("Setting alarm config to '{mode.name}'"), ) def set_home_monitoring_config( self, @@ -343,7 +411,10 @@ def set_home_monitoring_config( end_hour: int = 17, end_minute: int = 0, notify: int = 1, - interval: int = 5 + interval: int = 5, ): """Set home monitoring configuration""" - return self.send("setAlarmConfig", [mode, start_hour, start_minute, end_hour, end_minute, notify, interval]) + return self.send( + "setAlarmConfig", + [mode, start_hour, start_minute, end_hour, end_minute, notify, interval], + ) From b61463cbae0a6fc3616ce8ec6aeeebd898f0f156 Mon Sep 17 00:00:00 2001 From: Ivan Pankratov Date: Sun, 5 Jul 2020 02:23:14 +0500 Subject: [PATCH 5/6] add: NAS config methods --- miio/chuangmi_camera.py | 61 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/miio/chuangmi_camera.py b/miio/chuangmi_camera.py index 12a8a2bf2..abd4e5fe5 100644 --- a/miio/chuangmi_camera.py +++ b/miio/chuangmi_camera.py @@ -106,6 +106,31 @@ class HomeMonitoringMode(enum.IntEnum): Custom = 2 +class NASState(enum.IntEnum): + """NAS state.""" + + Off = 2 + On = 3 + + +class NASSyncInterval(enum.IntEnum): + """NAS sync interval.""" + + Realtime = 300 + Hour = 3600 + Day = 86400 + + +class NASVideoRetentionTime(enum.IntEnum): + """NAS video retention time.""" + + Week = 604800 + Month = 2592000 + Quarter = 7776000 + HalfYear = 15552000 + Year = 31104000 + + class CameraStatus: """Container for status reports from the Xiaomi Chuangmi Camera.""" @@ -418,3 +443,39 @@ def set_home_monitoring_config( "setAlarmConfig", [mode, start_hour, start_minute, end_hour, end_minute, notify, interval], ) + + @command(default_output=format_output("Clearing NAS directory"),) + def clear_nas_dir(self): + """Clear NAS directory""" + return self.send("nas_clear_dir", [[]],) + + @command(default_output=format_output("Getting NAS config info"),) + def get_nas_config(self): + """Get NAS config info""" + return self.send("nas_get_config", {},) + + @command( + click.argument("state", type=EnumType(NASState, False)), + click.argument("share"), + click.argument("sync-interval", type=EnumType(NASSyncInterval, False)), + click.argument( + "video-retention-time", type=EnumType(NASVideoRetentionTime, False) + ), + default_output=format_output("Setting NAS config to '{state.name}'"), + ) + def set_nas_config( + self, + state: NASState, + share={}, + sync_interval: NASSyncInterval = NASSyncInterval.Realtime, + video_retention_time: NASVideoRetentionTime = NASVideoRetentionTime.Week, + ): + """Set NAS configuration""" + return self.send( + "nas_set_config", + { + "state": state, + "sync_interval": sync_interval, + "video_retention_time": video_retention_time, + }, + ) From 690fa63ac547b533ce3a1e4fda2551e41084adb3 Mon Sep 17 00:00:00 2001 From: Ivan Pankratov Date: Wed, 8 Jul 2020 22:47:42 +0500 Subject: [PATCH 6/6] fix: dynamically generated motion sensitivity arrays --- miio/chuangmi_camera.py | 76 +++-------------------------------------- 1 file changed, 5 insertions(+), 71 deletions(-) diff --git a/miio/chuangmi_camera.py b/miio/chuangmi_camera.py index abd4e5fe5..8f79d181d 100644 --- a/miio/chuangmi_camera.py +++ b/miio/chuangmi_camera.py @@ -12,76 +12,6 @@ _LOGGER = logging.getLogger(__name__) -CONST_HIGH_SENSITIVITY = [ - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, -] -CONST_LOW_SENSITIVITY = [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, -] - - class Direction(enum.Enum): """Rotation direction.""" @@ -91,7 +21,7 @@ class Direction(enum.Enum): Down = 4 -class MotionDetectionSensitivity(enum.Enum): +class MotionDetectionSensitivity(enum.IntEnum): """Motion detection sensitivity.""" High = 3 @@ -131,6 +61,10 @@ class NASVideoRetentionTime(enum.IntEnum): Year = 31104000 +CONST_HIGH_SENSITIVITY = [MotionDetectionSensitivity.High] * 32 +CONST_LOW_SENSITIVITY = [MotionDetectionSensitivity.Low] * 32 + + class CameraStatus: """Container for status reports from the Xiaomi Chuangmi Camera."""