Преглед изворни кода

Add support for HomeMate PTZ indoor camera

Issue #3228
Jason Rumney пре 8 месеци
родитељ
комит
5615f8a2ef
3 измењених фајлова са 630 додато и 0 уклоњено
  1. 1 0
      ACKNOWLEDGEMENTS.md
  2. 1 0
      DEVICES.md
  3. 628 0
      custom_components/tuya_local/devices/homemate_ptzcamera.yaml

+ 1 - 0
ACKNOWLEDGEMENTS.md

@@ -946,3 +946,4 @@ Further device support has been made with the assistance of users. Please consid
 - [thd6n75](https://github.com/thd6n75) for contributing support for Korex AX-WF306N kettle.
 - [1B9-MasterChief](https://github.com/1B9-MasterChief) for contributing support for Sonnenkönig Fresco 140/180 air conditioner.
 - [fribse](https://github.com/fribse) for assisting with support for Denver SHP-200mk2 dual smartplug.
+- [DroidFreak32](https://github.com/DroidFreak32) for assisting with support for HomeMate PTZ indoor camera.

+ 1 - 0
DEVICES.md

@@ -814,6 +814,7 @@ port and password.
 - Camnsmart E27-TY camera
 - Door peephole camera
 - Garage door opener camera combo
+- HomeMate PTZ indoor camera
 - Kerui 200W camera
 - Kerui JS-P162 300W camera
 - LSC Smart Connect dual band outdoor camera

+ 628 - 0
custom_components/tuya_local/devices/homemate_ptzcamera.yaml

@@ -0,0 +1,628 @@
+name: Camera
+products:
+  - id: yba5os3hnjba6atf
+    manufacturer: HomeMate
+    model: Indoor PTZ camera
+entities:
+  - entity: camera
+    dps:
+      - id: 105
+        type: boolean
+        name: switch
+        mapping:
+          - dps_val: true
+            value: false
+          - dps_val: false
+            value: true
+      - id: 134
+        type: boolean
+        name: motion_enable
+      - id: 150
+        type: boolean
+        name: record
+  - entity: switch
+    name: Flip image
+    category: config
+    dps:
+      - id: 103
+        type: boolean
+        name: switch
+  - entity: switch
+    name: Timestamp
+    category: config
+    dps:
+      - id: 104
+        type: boolean
+        name: switch
+  - entity: select
+    name: Motion sensitivity
+    icon: "mdi:motion-sensor"
+    category: config
+    dps:
+      - id: 106
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: Low
+          - dps_val: "1"
+            value: Medium
+          - dps_val: "2"
+            value: High
+  - entity: sensor
+    name: SD status
+    class: enum
+    translation_key: status
+    category: diagnostic
+    dps:
+      - id: 110
+        type: integer
+        name: sensor
+        mapping:
+          - dps_val: 1
+            value: normal
+          - dps_val: 2
+            value: fault
+          - dps_val: 3
+            value: full
+          - dps_val: 4
+            value: formatting
+          - dps_val: 5
+            value: missing
+      - id: 109
+        type: string
+        name: memory_card_capacity
+  - entity: button
+    name: Format SD card
+    category: config
+    dps:
+      - id: 111
+        type: boolean
+        optional: true
+        name: button
+      - id: 117
+        type: integer
+        name: sd_format_status
+        mapping:
+          - dps_val: -2000
+            value: Formatting
+          - dps_val: -2001
+            value: Format error
+          - dps_val: -2002
+            value: "No SD card"
+          - dps_val: -2003
+            value: Card error
+  - entity: event
+    class: motion
+    dps:
+      - id: 115
+        type: string
+        name: event
+        optional: true
+        mapping:
+          - dps_val: null
+            value: null
+          - value: detected
+      - id: 115
+        type: base64
+        optional: true
+        sensitive: true
+        name: snapshot
+  - entity: button
+    name: PTZ stop
+    icon: "mdi:pan"
+    category: config
+    dps:
+      - id: 116
+        type: boolean
+        name: button
+  - entity: button
+    name: PTZ up
+    icon: "mdi:pan-up"
+    category: config
+    dps:
+      - id: 119
+        type: string
+        name: button
+        optional: true
+        mapping:
+          - dps_val: "0"
+            value: true
+          - value: false
+  - entity: button
+    name: PTZ right-up
+    icon: "mdi:top-right"
+    category: config
+    dps:
+      - id: 119
+        type: string
+        name: button
+        optional: true
+        mapping:
+          - dps_val: "1"
+            value: true
+          - value: false
+  - entity: button
+    name: PTZ right
+    icon: "mdi:pan-right"
+    category: config
+    dps:
+      - id: 119
+        type: string
+        name: button
+        optional: true
+        mapping:
+          - dps_val: "2"
+            value: true
+          - value: false
+  - entity: button
+    name: PTZ right-down
+    icon: "mdi:pan-bottom-right"
+    category: config
+    dps:
+      - id: 119
+        type: string
+        name: button
+        optional: true
+        mapping:
+          - dps_val: "3"
+            value: true
+          - value: false
+  - entity: button
+    name: PTZ down
+    icon: "mdi:pan-down"
+    category: config
+    dps:
+      - id: 119
+        type: string
+        name: button
+        optional: true
+        mapping:
+          - dps_val: "4"
+            value: true
+          - value: false
+  - entity: button
+    name: PTZ left-down
+    icon: "mdi:pan-bottom-left"
+    category: config
+    dps:
+      - id: 119
+        type: string
+        name: button
+        optional: true
+        mapping:
+          - dps_val: "5"
+            value: true
+          - value: false
+  - entity: button
+    name: PTZ left
+    icon: "mdi:pan-left"
+    category: config
+    dps:
+      - id: 119
+        type: string
+        name: button
+        optional: true
+        mapping:
+          - dps_val: "6"
+            value: true
+          - value: false
+  - entity: button
+    name: PTZ left-up
+    icon: "mdi:pan-top-left"
+    category: config
+    dps:
+      - id: 119
+        type: string
+        name: button
+        optional: true
+        mapping:
+          - dps_val: "7"
+            value: true
+          - value: false
+  - entity: switch
+    name: Siren
+    category: config
+    dps:
+      - id: 120
+        type: boolean
+        name: switch
+  - entity: select
+    name: Nightvision
+    icon: "mdi:weather-night"
+    category: config
+    dps:
+      - id: 124
+        type: string
+        name: option
+        mapping:
+          - dps_val: auto
+            value: Auto
+          - dps_val: ir_mode
+            value: Infrared
+          - dps_val: color_mode
+            value: Visible light
+  - entity: event
+    name: Linked event
+    dps:
+      - id: 127
+        type: string
+        name: event
+        optional: true
+        mapping:
+          - dps_val: motion
+            value: motion
+          - dps_val: "1"
+            value: event_1
+          - dps_val: "2"
+            value: event_2
+  - entity: button
+    name: PTZ calibration
+    category: config
+    dps:
+      - id: 132
+        type: boolean
+        optional: true
+        name: button
+  - entity: light
+    name: Floodlight
+    category: config
+    dps:
+      - id: 138
+        type: boolean
+        name: switch
+  - entity: switch
+    name: Sound detection
+    icon: "mdi:ear-hearing"
+    category: config
+    dps:
+      - id: 139
+        type: boolean
+        name: switch
+  - entity: select
+    name: Sound sensitivity
+    icon: "mdi:ear-hearing"
+    category: config
+    dps:
+      - id: 140
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: Low
+          - dps_val: "1"
+            value: "High"
+  - entity: event
+    name: Sound
+    dps:
+      - id: 141
+        type: string
+        name: event
+        optional: true
+        mapping:
+          - dps_val: null
+            value: null
+          - value: detected
+      - id: 141
+        type: string
+        optional: true
+        name: audio
+  - entity: select
+    name: Recording mode
+    icon: "mdi:file-video"
+    category: config
+    dps:
+      - id: 151
+        type: string
+        name: option
+        mapping:
+          - dps_val: "1"
+            value: Event
+          - dps_val: "2"
+            value: Continuous
+  - entity: siren
+    category: config
+    icon: "mdi:bullhorn"
+    dps:
+      - id: 159
+        type: boolean
+        name: switch
+      - id: 194
+        type: integer
+        name: duration
+        unit: s
+        range:
+          min: 10
+          max: 600
+        mapping:
+          - step: 10
+      - id: 195
+        type: integer
+        name: volume_level
+        range:
+          min: 0
+          max: 100
+        mapping:
+          - scale: 100
+      - id: 185
+        type: string
+        name: log_message
+        optional: true
+  - entity: number
+    name: Intercom volume
+    category: config
+    icon: "mdi:volume-high"
+    dps:
+      - id: 160
+        type: integer
+        name: value
+        range:
+          min: 1
+          max: 10
+  - entity: switch
+    name: Motion tracking
+    icon: "mdi:motion-sensor"
+    category: config
+    dps:
+      - id: 161
+        type: boolean
+        name: switch
+        mapping:
+          - dps_val: false
+            icon: "mdi:motion-sensor-off"
+            icon_priority: 1
+  - entity: button
+    class: restart
+    category: config
+    dps:
+      - id: 162
+        type: boolean
+        optional: true
+        name: button
+  - entity: switch
+    name: Motion area limit
+    icon: "mdi:crop"
+    category: config
+    dps:
+      - id: 168
+        type: boolean
+        name: switch
+  - entity: text
+    name: Motion area
+    category: config
+    icon: "mdi:crop"
+    hidden: true
+    dps:
+      - id: 169
+        type: json
+        name: value
+      - id: 168
+        type: boolean
+        name: available
+  - entity: switch
+    name: Human detection
+    icon: "mdi:human"
+    category: config
+    dps:
+      - id: 170
+        type: boolean
+        name: switch
+  - entity: switch
+    name: Cruise mode
+    icon: "mdi:panorama-sphere"
+    category: config
+    dps:
+      - id: 174
+        type: boolean
+        name: switch
+  - entity: select
+    name: Cruise mode
+    icon: "mdi:panorama-sphere"
+    category: config
+    dps:
+      - id: 175
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: Panoramic
+          - dps_val: "1"
+            value: Preset
+      - id: 174
+        type: boolean
+        name: available
+  - entity: select
+    name: Cruise period
+    icon: "mdi:panorama-sphere"
+    category: config
+    dps:
+      - id: 176
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: Constant
+          - dps_val: "1"
+            value: Scheduled
+      - id: 174
+        type: boolean
+        name: available
+  - entity: text
+    name: Cruise schedule
+    category: config
+    icon: "mdi:panorama-sphere"
+    hidden: true
+    dps:
+      - id: 177
+        type: string
+        name: value
+        optional: true
+      - id: 176
+        type: string
+        name: available
+        mapping:
+          - dps_val: "1"
+            value_redirect: cruise_enabled
+          - value: false
+      - id: 174
+        type: boolean
+        name: cruise_enabled
+  - entity: text
+    name: Cruise preset set
+    category: config
+    icon: "mdi:panorama-sphere"
+    hidden: true
+    dps:
+      - id: 178
+        type: string
+        optional: true
+        name: value
+      - id: 175
+        type: string
+        name: available
+        mapping:
+          - dps_val: "1"
+            value_redirect: cruise_enabled
+          - value: false
+      - id: 174
+        type: boolean
+        name: cruise_enabled
+  - entity: sensor
+    name: Cruise status
+    class: enum
+    category: diagnostic
+    dps:
+      - id: 179
+        type: string
+        optional: true
+        name: sensor
+        mapping:
+          - dps_val: "0"
+            value: Panoramic cruising
+          - dps_val: "1"
+            value: Preset cruising
+          - value: Fixed
+  - entity: select
+    name: Anti-flicker
+    icon: "mdi:television-classic"
+    category: config
+    dps:
+      - id: 188
+        type: string
+        name: option
+        mapping:
+          - dps_val: "0"
+            value: "Off"
+          - dps_val: "1"
+            value: "50Hz"
+          - dps_val: "2"
+            value: "60Hz"
+  - entity: select
+    name: Preset action
+    category: config
+    # not sure what these are, apparently linked to dp 199
+    hidden: true
+    dps:
+      - id: 190
+        type: string
+        optional: true
+        name: option
+        mapping:
+          - dps_val: "1"
+            value: "1"
+          - dps_val: "2"
+            value: "2"
+          - dps_val: "3"
+            value: "3"
+          - dps_val: "4"
+            value: "4"
+          - dps_val: "5"
+            value: "5"
+          - dps_val: "6"
+            value: "6"
+  - entity: select
+    name: Preset set
+    category: config
+    hidden: true
+    dps:
+      - id: 199
+        type: string
+        optional: true
+        name: option
+        mapping:
+          - dps_val: "1"
+            value: "1"
+          - dps_val: "2"
+            value: "2"
+          - dps_val: "3"
+            value: "3"
+          - dps_val: "4"
+            value: "4"
+  - entity: event
+    name: Notification
+    dps:
+      - id: 212
+        type: string
+        name: event
+        optional: true
+        mapping:
+          - dps_val: null
+            value: null
+          - value: message
+      - id: 212
+        type: string
+        name: message
+        optional: true
+  - entity: switch
+    name: ONVIF
+    icon: "mdi:webcam"
+    category: config
+    dps:
+      - id: 237
+        type: boolean
+        name: switch
+  - entity: text
+    name: ONVIF password
+    category: config
+    icon: "mdi:form-textbox-password"
+    dps:
+      - id: 238
+        type: string
+        optional: true
+        name: value
+        hidden: true
+        sensitive: true
+      - id: 237
+        type: boolean
+        name: available
+  - entity: event
+    name: ONVIF password
+    category: diagnostic
+    icon: "mdi:lock-reset"
+    dps:
+      - id: 239
+        type: boolean
+        name: event
+        mapping:
+          - dps_val: true
+            value: changed
+          - value: null
+  - entity: event
+    name: Resolution
+    category: diagnostic
+    icon: "mdi:overscan"
+    dps:
+      - id: 240
+        type: string
+        name: event
+        optional: true
+        mapping:
+          - dps_val: ""
+            value: null
+          - dps_val: null
+            value: null
+          - value: changed
+      - id: 240
+        type: json
+        optional: true
+        name: resolution