From 445ba9610ad3ef588a819a1c59effd86d03ebd02 Mon Sep 17 00:00:00 2001 From: Jeff Culverhouse Date: Mon, 10 Mar 2025 15:13:52 -0400 Subject: [PATCH] added motion_region --- amcrest_api.py | 19 ++++++------------- amcrest_mqtt.py | 22 +++++++++++++++------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/amcrest_api.py b/amcrest_api.py index e4729a3..0b4b6d9 100644 --- a/amcrest_api.py +++ b/amcrest_api.py @@ -236,22 +236,15 @@ class AmcrestAPI(object): device = self.devices[device_id] config = device['config'] - # self.logger.info(f'Event on {device_id} - {code}: {payload}') - - # VideoMotion: motion detection event - # VideoLoss: video loss detection event - # VideoBlind: video blind detection event - # AlarmLocal: alarm detection event - # StorageNotExist: storage not exist event - # StorageFailure: storage failure event - # StorageLowSpace: storage low space event - # AlarmOutput: alarm output event - # SmartMotionHuman: human detection event - # SmartMotionVehicle: vehicle detection event + # if code != 'NewFile' and code != 'InterVideoAccess': + # self.logger.info(f'Event on {device_id} - {code}: {payload}') if ((code == 'ProfileAlarmTransmit' and config['is_ad110']) or (code == 'VideoMotion' and not config['is_ad110'])): - motion_payload = 'on' if payload['action'] == 'Start' else 'off' + motion_payload = { + 'state': 'on' if payload['action'] == 'Start' else 'off', + 'region': ', '.join(payload['data']['RegionName']) + } self.events.append({ 'device_id': device_id, 'event': 'motion', 'payload': motion_payload }) elif code == 'CrossRegionDetection' and payload['data']['ObjectType'] == 'Human': human_payload = 'on' if payload['action'] == 'Start' else 'off' diff --git a/amcrest_mqtt.py b/amcrest_mqtt.py index 182022e..663f655 100644 --- a/amcrest_mqtt.py +++ b/amcrest_mqtt.py @@ -442,7 +442,7 @@ class AmcrestMqtt(object): device_states['human'] = 'off' components[self.get_slug(device_id, 'snapshot_camera')] = { - 'name': 'Latest Snapshot', + 'name': 'Latest snapshot', 'platform': 'camera', 'topic': self.get_discovery_subtopic(device_id, 'camera','snapshot'), 'image_encoding': 'b64', @@ -462,7 +462,7 @@ class AmcrestMqtt(object): # copy the snapshot camera for the eventshot camera, with a couple of changes components[self.get_slug(device_id, 'event_camera')] = \ components[self.get_slug(device_id, 'snapshot_camera')] | { - 'name': 'Motion Snapshot', + 'name': 'Motion snapshot', 'topic': self.get_discovery_subtopic(device_id, 'camera','eventshot'), 'unique_id': self.get_slug(device_id, 'eventshot_camera'), } @@ -501,9 +501,17 @@ class AmcrestMqtt(object): 'payload_off': 'off', 'device_class': 'motion', 'state_topic': self.get_discovery_topic(device_id, 'motion'), + 'value_template': '{{ value_json.state }}', 'unique_id': self.get_slug(device_id, 'motion'), } - device_states['motion'] = 'off' + components[self.get_slug(device_id, 'motion_region')] = { + 'name': 'Motion region', + 'platform': 'sensor', + 'state_topic': self.get_discovery_topic(device_id, 'motion'), + 'value_template': '{{ value_json.region }}', + 'unique_id': self.get_slug(device_id, 'motion_region'), + } + device_states['motion'] = { 'state': 'off', 'region': None } components[self.get_slug(device_id, 'version')] = { 'name': 'Version', @@ -536,7 +544,7 @@ class AmcrestMqtt(object): } components[self.get_slug(device_id, 'event')] = { - 'name': 'Last Non-motion Event', + 'name': 'Last event', 'platform': 'sensor', 'state_topic': self.get_discovery_topic(device_id, 'event'), 'unique_id': self.get_slug(device_id, 'event'), @@ -545,7 +553,7 @@ class AmcrestMqtt(object): device_states['recording'] = {} components[self.get_slug(device_id, 'storage_used_percent')] = { - 'name': 'Storage Used %', + 'name': 'Storage used %', 'platform': 'sensor', 'icon': 'mdi:micro-sd', 'unit_of_measurement': '%', @@ -554,7 +562,7 @@ class AmcrestMqtt(object): 'unique_id': self.get_slug(device_id, 'storage_used_percent'), } components[self.get_slug(device_id, 'storage_total')] = { - 'name': 'Storage Total', + 'name': 'Storage total', 'platform': 'sensor', 'icon': 'mdi:micro-sd', 'unit_of_measurement': 'GB', @@ -563,7 +571,7 @@ class AmcrestMqtt(object): 'unique_id': self.get_slug(device_id, 'storage_total'), } components[self.get_slug(device_id, 'storage_used')] = { - 'name': 'Storage Used', + 'name': 'Storage used', 'platform': 'sensor', 'icon': 'mdi:micro-sd', 'unit_of_measurement': 'GB',