|
| 1 | +-- Copyright © 2026 SmartThings, Inc. |
| 2 | +-- Licensed under the Apache License, Version 2.0 |
| 3 | + |
| 4 | +local capabilities = require "st.capabilities" |
| 5 | +local clusters = require "st.matter.clusters" |
| 6 | + |
| 7 | +local SubscriptionMap = { |
| 8 | + subscribed_attributes = { |
| 9 | + [capabilities.audioMute.ID] = { |
| 10 | + clusters.CameraAvStreamManagement.attributes.SpeakerMuted, |
| 11 | + clusters.CameraAvStreamManagement.attributes.MicrophoneMuted |
| 12 | + }, |
| 13 | + [capabilities.audioVolume.ID] = { |
| 14 | + clusters.CameraAvStreamManagement.attributes.SpeakerVolumeLevel, |
| 15 | + clusters.CameraAvStreamManagement.attributes.SpeakerMaxLevel, |
| 16 | + clusters.CameraAvStreamManagement.attributes.SpeakerMinLevel, |
| 17 | + clusters.CameraAvStreamManagement.attributes.MicrophoneVolumeLevel, |
| 18 | + clusters.CameraAvStreamManagement.attributes.MicrophoneMaxLevel, |
| 19 | + clusters.CameraAvStreamManagement.attributes.MicrophoneMinLevel |
| 20 | + }, |
| 21 | + [capabilities.cameraPrivacyMode.ID] = { |
| 22 | + clusters.CameraAvStreamManagement.attributes.SoftRecordingPrivacyModeEnabled, |
| 23 | + clusters.CameraAvStreamManagement.attributes.SoftLivestreamPrivacyModeEnabled, |
| 24 | + clusters.CameraAvStreamManagement.attributes.HardPrivacyModeOn |
| 25 | + }, |
| 26 | + [capabilities.cameraViewportSettings.ID] = { |
| 27 | + clusters.CameraAvStreamManagement.attributes.MinViewportResolution, |
| 28 | + clusters.CameraAvStreamManagement.attributes.VideoSensorParams, |
| 29 | + clusters.CameraAvStreamManagement.attributes.Viewport |
| 30 | + }, |
| 31 | + [capabilities.hdr.ID] = { |
| 32 | + clusters.CameraAvStreamManagement.attributes.HDRModeEnabled, |
| 33 | + clusters.CameraAvStreamManagement.attributes.ImageRotation |
| 34 | + }, |
| 35 | + [capabilities.imageControl.ID] = { |
| 36 | + clusters.CameraAvStreamManagement.attributes.ImageFlipHorizontal, |
| 37 | + clusters.CameraAvStreamManagement.attributes.ImageFlipVertical |
| 38 | + }, |
| 39 | + [capabilities.localMediaStorage.ID] = { |
| 40 | + clusters.CameraAvStreamManagement.attributes.LocalSnapshotRecordingEnabled, |
| 41 | + clusters.CameraAvStreamManagement.attributes.LocalVideoRecordingEnabled |
| 42 | + }, |
| 43 | + [capabilities.mechanicalPanTiltZoom.ID] = { |
| 44 | + clusters.CameraAvSettingsUserLevelManagement.attributes.MPTZPosition, |
| 45 | + clusters.CameraAvSettingsUserLevelManagement.attributes.MPTZPresets, |
| 46 | + clusters.CameraAvSettingsUserLevelManagement.attributes.MaxPresets, |
| 47 | + clusters.CameraAvSettingsUserLevelManagement.attributes.ZoomMax, |
| 48 | + clusters.CameraAvSettingsUserLevelManagement.attributes.PanMax, |
| 49 | + clusters.CameraAvSettingsUserLevelManagement.attributes.PanMin, |
| 50 | + clusters.CameraAvSettingsUserLevelManagement.attributes.TiltMax, |
| 51 | + clusters.CameraAvSettingsUserLevelManagement.attributes.TiltMin |
| 52 | + }, |
| 53 | + [capabilities.mode.ID] = { |
| 54 | + clusters.CameraAvStreamManagement.attributes.StatusLightBrightness |
| 55 | + }, |
| 56 | + [capabilities.nightVision.ID] = { |
| 57 | + clusters.CameraAvStreamManagement.attributes.NightVision, |
| 58 | + clusters.CameraAvStreamManagement.attributes.NightVisionIllum |
| 59 | + }, |
| 60 | + [capabilities.sounds.ID] = { |
| 61 | + clusters.Chime.attributes.InstalledChimeSounds, |
| 62 | + clusters.Chime.attributes.SelectedChime |
| 63 | + }, |
| 64 | + [capabilities.switch.ID] = { |
| 65 | + clusters.CameraAvStreamManagement.attributes.StatusLightEnabled |
| 66 | + }, |
| 67 | + [capabilities.videoStreamSettings.ID] = { |
| 68 | + clusters.CameraAvStreamManagement.attributes.RateDistortionTradeOffPoints, |
| 69 | + clusters.CameraAvStreamManagement.attributes.MaxEncodedPixelRate, |
| 70 | + clusters.CameraAvStreamManagement.attributes.VideoSensorParams, |
| 71 | + clusters.CameraAvStreamManagement.attributes.AllocatedVideoStreams |
| 72 | + }, |
| 73 | + [capabilities.webrtc.ID] = { |
| 74 | + clusters.CameraAvStreamManagement.attributes.TwoWayTalkSupport |
| 75 | + }, |
| 76 | + [capabilities.zoneManagement.ID] = { |
| 77 | + clusters.ZoneManagement.attributes.MaxZones, |
| 78 | + clusters.ZoneManagement.attributes.Zones, |
| 79 | + clusters.ZoneManagement.attributes.Triggers, |
| 80 | + clusters.ZoneManagement.attributes.SensitivityMax, |
| 81 | + clusters.ZoneManagement.attributes.Sensitivity |
| 82 | + }, |
| 83 | + }, |
| 84 | + subscribed_events = { |
| 85 | + [capabilities.zoneManagement.ID] = { |
| 86 | + clusters.ZoneManagement.events.ZoneTriggered, |
| 87 | + clusters.ZoneManagement.events.ZoneStopped |
| 88 | + } |
| 89 | + }, |
| 90 | + conditional_subscriptions = { |
| 91 | + [function(device) |
| 92 | + local fields = require "switch_utils.fields" |
| 93 | + local switch_utils = require "switch_utils.utils" |
| 94 | + return #switch_utils.get_endpoints_by_device_type(device, fields.DEVICE_TYPE_ID.CAMERA) > 0 |
| 95 | + end] = { clusters.CameraAvStreamManagement.attributes.AttributeList } |
| 96 | + } |
| 97 | +} |
| 98 | + |
| 99 | +return SubscriptionMap |
0 commit comments