@kusinta/iot-schema 0.1.0-beta.9 → 0.2.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/package.json +13 -2
  2. package/src/kusinta/iot/access/v1/acl_pb.d.ts +230 -11
  3. package/src/kusinta/iot/access/v1/acl_pb.js +25 -4
  4. package/src/kusinta/iot/access/v1/roles_pb.d.ts +95 -2
  5. package/src/kusinta/iot/access/v1/roles_pb.js +37 -1
  6. package/src/kusinta/iot/connector/v1/connector_pb.d.ts +60 -30
  7. package/src/kusinta/iot/connector/v1/connector_pb.js +12 -11
  8. package/src/kusinta/iot/connector/v1/connector_service_pb.d.ts +5 -5
  9. package/src/kusinta/iot/connector/v1/connector_service_pb.js +1 -1
  10. package/src/kusinta/iot/device/v1/cluster_state_pb.d.ts +238 -0
  11. package/src/kusinta/iot/device/v1/cluster_state_pb.js +54 -0
  12. package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +37 -8
  13. package/src/kusinta/iot/device/v1/descriptor_pb.js +2 -1
  14. package/src/kusinta/iot/device/v1/device_event_pb.d.ts +162 -0
  15. package/src/kusinta/iot/device/v1/device_event_pb.js +45 -0
  16. package/src/kusinta/iot/device/v1/device_pb.d.ts +154 -28
  17. package/src/kusinta/iot/device/v1/device_pb.js +10 -2
  18. package/src/kusinta/iot/device/v1/matter_options_pb.d.ts +84 -0
  19. package/src/kusinta/iot/device/v1/matter_options_pb.js +91 -0
  20. package/src/kusinta/iot/device/v1/properties_pb.d.ts +228 -207
  21. package/src/kusinta/iot/device/v1/properties_pb.js +9 -1
  22. package/src/kusinta/iot/device/v1/property_update_pb.d.ts +197 -8
  23. package/src/kusinta/iot/device/v1/property_update_pb.js +20 -2
  24. package/src/kusinta/iot/registration/v1/registration_pb.d.ts +170 -0
  25. package/src/kusinta/iot/registration/v1/registration_pb.js +61 -0
  26. package/src/kusinta/iot/registration/v1/registration_service_pb.d.ts +34 -0
  27. package/src/kusinta/iot/registration/v1/registration_service_pb.js +19 -0
  28. package/src/kusinta/iot/signaling/v1/signaling_pb.d.ts +320 -0
  29. package/src/kusinta/iot/signaling/v1/signaling_pb.js +83 -0
  30. package/src/kusinta/iot/signaling/v1/signaling_service_pb.d.ts +34 -0
  31. package/src/kusinta/iot/signaling/v1/signaling_service_pb.js +19 -0
  32. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.d.ts +65 -47
  33. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.js +8 -7
  34. package/src/kusinta/iot/vendor/v1/vendor_options_pb.d.ts +50 -0
  35. package/src/kusinta/iot/vendor/v1/vendor_options_pb.js +53 -0
  36. package/src/kusinta/iot/webrtc/v1/app_token_pb.d.ts +152 -0
  37. package/src/kusinta/iot/webrtc/v1/app_token_pb.js +28 -0
  38. package/src/kusinta/iot/webrtc/v1/command_pb.d.ts +276 -39
  39. package/src/kusinta/iot/webrtc/v1/command_pb.js +28 -2
  40. package/src/kusinta/iot/webrtc/v1/device_state_pb.d.ts +76 -7
  41. package/src/kusinta/iot/webrtc/v1/device_state_pb.js +19 -4
  42. package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +371 -24
  43. package/src/kusinta/iot/webrtc/v1/envelope_pb.js +68 -5
  44. package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +451 -0
  45. package/src/kusinta/iot/webrtc/v1/management_pb.js +106 -0
  46. package/src/kusinta/iot/webrtc/v1/permission_push_pb.d.ts +7 -1
@@ -6,12 +6,13 @@ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
7
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
8
8
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
9
+ import { file_kusinta_iot_vendor_homematic_v1_homematic } from "../../vendor/homematic/v1/homematic_pb.js";
9
10
 
10
11
  /**
11
12
  * Describes the file kusinta/iot/device/v1/descriptor.proto.
12
13
  */
13
14
  export const file_kusinta_iot_device_v1_descriptor = /*@__PURE__*/
14
- fileDesc("CiZrdXNpbnRhL2lvdC9kZXZpY2UvdjEvZGVzY3JpcHRvci5wcm90bxIVa3VzaW50YS5pb3QuZGV2aWNlLnYxIv0EChBEZXZpY2VEZXNjcmlwdG9yEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEh0KFW1hdHRlcl9kZXZpY2VfdHlwZV9pZBgCIAEoDRITCgt2ZW5kb3JfbmFtZRgDIAEoCRIUCgxwcm9kdWN0X25hbWUYBCABKAkSFQoNc2VyaWFsX251bWJlchgFIAEoCRISCgpub2RlX2xhYmVsGAYgASgJEhEKCXZlbmRvcl9pZBgHIAEoDRISCgpwcm9kdWN0X2lkGAggASgNEh8KF2hhcmR3YXJlX3ZlcnNpb25fc3RyaW5nGAkgASgJEh8KF3NvZnR3YXJlX3ZlcnNpb25fc3RyaW5nGAogASgJEjoKDGNvbm5lY3Rvcl9pZBgLIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEjIKCHNwYWNlX2lkGAwgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI9Cglvd25lcnNoaXAYDSABKA4yKi5rdXNpbnRhLmlvdC5jb21tb24udjEuRGV2aWNlT3duZXJzaGlwVHlwZRI+CglsaWZlY3ljbGUYDiABKA4yKy5rdXNpbnRhLmlvdC5jb21tb24udjEuRGV2aWNlTGlmZWN5Y2xlU3RhdGUSNgoNb3duZXJfdXNlcl9pZBgPIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIuCgpjbGFpbWVkX2F0GBAgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity]);
15
+ fileDesc("CiZrdXNpbnRhL2lvdC9kZXZpY2UvdjEvZGVzY3JpcHRvci5wcm90bxIVa3VzaW50YS5pb3QuZGV2aWNlLnYxIrkGChBEZXZpY2VEZXNjcmlwdG9yEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEhMKC3ZlbmRvcl9uYW1lGAMgASgJEhQKDHByb2R1Y3RfbmFtZRgEIAEoCRIVCg1zZXJpYWxfbnVtYmVyGAUgASgJEhIKCm5vZGVfbGFiZWwYBiABKAkSEQoJdmVuZG9yX2lkGAcgASgNEhIKCnByb2R1Y3RfaWQYCCABKA0SHwoXaGFyZHdhcmVfdmVyc2lvbl9zdHJpbmcYCSABKAkSHwoXc29mdHdhcmVfdmVyc2lvbl9zdHJpbmcYCiABKAkSOgoMY29ubmVjdG9yX2lkGAsgASgLMiQua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuQ29ubmVjdG9ySWQSMgoIc3BhY2VfaWQYDCABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEj0KCW93bmVyc2hpcBgNIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEj4KCWxpZmVjeWNsZRgOIAEoDjIrLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VMaWZlY3ljbGVTdGF0ZRI2Cg1vd25lcl91c2VyX2lkGA8gASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEi4KCmNsYWltZWRfYXQYECABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjoKCmJyaWRnZWRfYnkYEyABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZEgBiAEBEk0KCWhvbWVtYXRpYxgSIAEoCzI4Lmt1c2ludGEuaW90LnZlbmRvci5ob21lbWF0aWMudjEuSG9tZW1hdGljRGV2aWNlSWRlbnRpdHlIAEIRCg92ZW5kb3JfaWRlbnRpdHlCDQoLX2JyaWRnZWRfYnlKBAgCEANKBAgREBJSFW1hdHRlcl9kZXZpY2VfdHlwZV9pZFIJZW5kcG9pbnRzQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_vendor_homematic_v1_homematic]);
15
16
 
16
17
  /**
17
18
  * Describes the message kusinta.iot.device.v1.DeviceDescriptor.
@@ -0,0 +1,162 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/device/v1/device_event.proto (package kusinta.iot.device.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
+ import type { Message } from "@bufbuild/protobuf";
7
+ import type { DeviceId } from "../../identity/v1/identity_pb.js";
8
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
9
+ import type { AttributeValue } from "./cluster_state_pb.js";
10
+
11
+ /**
12
+ * Describes the file kusinta/iot/device/v1/device_event.proto.
13
+ */
14
+ export declare const file_kusinta_iot_device_v1_device_event: GenFile;
15
+
16
+ /**
17
+ * Something that HAPPENED on a device, as opposed to what a device currently IS.
18
+ *
19
+ * PropertyUpdate answers "what is the lock's state now" — latest wins, order does not
20
+ * matter, a missed one is corrected by the next. DeviceEvent answers "what happened to the
21
+ * lock" — each is a distinct occurrence, order matters, and a missed one is gone unless it
22
+ * is fetched by its number. Matter models both for the same reason, and neither substitutes
23
+ * for the other: a lock's LockState attribute cannot say who unlocked it, with what
24
+ * credential, at what time, and an event log cannot cheaply answer what the state is now.
25
+ *
26
+ * This is the audit surface. In a building with several residents sharing a device, "the
27
+ * door is unlocked" and "this credential unlocked the door at 14:02" are different
28
+ * questions with different consumers.
29
+ *
30
+ * Events do NOT feed Device.endpoints. A consumer must not merge an event into a properties
31
+ * field or a ClusterState — an event's data is its own payload, not an attribute value, and
32
+ * the attribute it relates to reports separately. The resolution rule in
33
+ * property_update.proto has nothing to do with events.
34
+ *
35
+ * @generated from message kusinta.iot.device.v1.DeviceEvent
36
+ */
37
+ export declare type DeviceEvent = Message<"kusinta.iot.device.v1.DeviceEvent"> & {
38
+ /**
39
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
40
+ */
41
+ deviceId?: DeviceId | undefined;
42
+
43
+ /**
44
+ * Which endpoint emitted it, and which cluster defines it. Required, as for an update.
45
+ *
46
+ * @generated from field: optional uint32 endpoint_id = 2;
47
+ */
48
+ endpointId?: number | undefined;
49
+
50
+ /**
51
+ * @generated from field: uint32 cluster_id = 3;
52
+ */
53
+ clusterId: number;
54
+
55
+ /**
56
+ * The Matter event ID within that cluster.
57
+ *
58
+ * @generated from field: uint32 event_id = 4;
59
+ */
60
+ eventId: number;
61
+
62
+ /**
63
+ * Matter's EventNumber: monotonically increasing per node, and the reason an event log
64
+ * can be resumed rather than merely replayed. A consumer that sees a gap knows it missed
65
+ * something and can say so — the one guarantee a PropertyUpdate stream cannot give.
66
+ *
67
+ * Monotonic within one device. Do NOT compare across devices; they are unrelated
68
+ * sequences.
69
+ *
70
+ * @generated from field: uint64 event_number = 5;
71
+ */
72
+ eventNumber: bigint;
73
+
74
+ /**
75
+ * When the device says it happened, which is not when the gateway saw it. On a
76
+ * battery-powered device that wakes on a cycle, the two can differ by minutes.
77
+ *
78
+ * @generated from field: google.protobuf.Timestamp timestamp = 6;
79
+ */
80
+ timestamp?: Timestamp | undefined;
81
+
82
+ /**
83
+ * @generated from field: kusinta.iot.device.v1.EventPriority priority = 7;
84
+ */
85
+ priority: EventPriority;
86
+
87
+ /**
88
+ * The event's own payload. Matter events carry a struct, so this is normally
89
+ * AttributeValue.struct_value keyed by context tag; a scalar-payload event uses a scalar
90
+ * case directly.
91
+ *
92
+ * @generated from field: kusinta.iot.device.v1.AttributeValue data = 8;
93
+ */
94
+ data?: AttributeValue | undefined;
95
+ };
96
+
97
+ /**
98
+ * Describes the message kusinta.iot.device.v1.DeviceEvent.
99
+ * Use `create(DeviceEventSchema)` to create a new message.
100
+ */
101
+ export declare const DeviceEventSchema: GenMessage<DeviceEvent>;
102
+
103
+ /**
104
+ * @generated from message kusinta.iot.device.v1.DeviceEventBatch
105
+ */
106
+ export declare type DeviceEventBatch = Message<"kusinta.iot.device.v1.DeviceEventBatch"> & {
107
+ /**
108
+ * @generated from field: repeated kusinta.iot.device.v1.DeviceEvent events = 1;
109
+ */
110
+ events: DeviceEvent[];
111
+
112
+ /**
113
+ * When the gateway received these, as distinct from each event's own timestamp, which is
114
+ * when the device says it happened. The two differ by however long a sleeping device took
115
+ * to wake, and for an audit trail both matter: one is what occurred, the other is when
116
+ * anyone could have known.
117
+ *
118
+ * @generated from field: google.protobuf.Timestamp received_at = 2;
119
+ */
120
+ receivedAt?: Timestamp | undefined;
121
+ };
122
+
123
+ /**
124
+ * Describes the message kusinta.iot.device.v1.DeviceEventBatch.
125
+ * Use `create(DeviceEventBatchSchema)` to create a new message.
126
+ */
127
+ export declare const DeviceEventBatchSchema: GenMessage<DeviceEventBatch>;
128
+
129
+ /**
130
+ * Matter's event priority. Governs retention and delivery urgency, not severity in a
131
+ * logging sense: CRITICAL events are retained and delivered with the most effort, DEBUG
132
+ * with the least.
133
+ *
134
+ * @generated from enum kusinta.iot.device.v1.EventPriority
135
+ */
136
+ export enum EventPriority {
137
+ /**
138
+ * @generated from enum value: EVENT_PRIORITY_UNSPECIFIED = 0;
139
+ */
140
+ UNSPECIFIED = 0,
141
+
142
+ /**
143
+ * @generated from enum value: EVENT_PRIORITY_DEBUG = 1;
144
+ */
145
+ DEBUG = 1,
146
+
147
+ /**
148
+ * @generated from enum value: EVENT_PRIORITY_INFO = 2;
149
+ */
150
+ INFO = 2,
151
+
152
+ /**
153
+ * @generated from enum value: EVENT_PRIORITY_CRITICAL = 3;
154
+ */
155
+ CRITICAL = 3,
156
+ }
157
+
158
+ /**
159
+ * Describes the enum kusinta.iot.device.v1.EventPriority.
160
+ */
161
+ export declare const EventPrioritySchema: GenEnum<EventPriority>;
162
+
@@ -0,0 +1,45 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/device/v1/device_event.proto (package kusinta.iot.device.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import { enumDesc, fileDesc, messageDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
6
+ import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
+ import { file_kusinta_iot_device_v1_cluster_state } from "./cluster_state_pb.js";
8
+ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
9
+
10
+ /**
11
+ * Describes the file kusinta/iot/device/v1/device_event.proto.
12
+ */
13
+ export const file_kusinta_iot_device_v1_device_event = /*@__PURE__*/
14
+ fileDesc("CihrdXNpbnRhL2lvdC9kZXZpY2UvdjEvZGV2aWNlX2V2ZW50LnByb3RvEhVrdXNpbnRhLmlvdC5kZXZpY2UudjEixQIKC0RldmljZUV2ZW50EjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEhgKC2VuZHBvaW50X2lkGAIgASgNSACIAQESEgoKY2x1c3Rlcl9pZBgDIAEoDRIQCghldmVudF9pZBgEIAEoDRIUCgxldmVudF9udW1iZXIYBSABKAQSLQoJdGltZXN0YW1wGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI2Cghwcmlvcml0eRgHIAEoDjIkLmt1c2ludGEuaW90LmRldmljZS52MS5FdmVudFByaW9yaXR5EjMKBGRhdGEYCCABKAsyJS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuQXR0cmlidXRlVmFsdWVCDgoMX2VuZHBvaW50X2lkIncKEERldmljZUV2ZW50QmF0Y2gSMgoGZXZlbnRzGAEgAygLMiIua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZUV2ZW50Ei8KC3JlY2VpdmVkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCp/Cg1FdmVudFByaW9yaXR5Eh4KGkVWRU5UX1BSSU9SSVRZX1VOU1BFQ0lGSUVEEAASGAoURVZFTlRfUFJJT1JJVFlfREVCVUcQARIXChNFVkVOVF9QUklPUklUWV9JTkZPEAISGwoXRVZFTlRfUFJJT1JJVFlfQ1JJVElDQUwQA0ICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_identity_v1_identity]);
15
+
16
+ /**
17
+ * Describes the message kusinta.iot.device.v1.DeviceEvent.
18
+ * Use `create(DeviceEventSchema)` to create a new message.
19
+ */
20
+ export const DeviceEventSchema = /*@__PURE__*/
21
+ messageDesc(file_kusinta_iot_device_v1_device_event, 0);
22
+
23
+ /**
24
+ * Describes the message kusinta.iot.device.v1.DeviceEventBatch.
25
+ * Use `create(DeviceEventBatchSchema)` to create a new message.
26
+ */
27
+ export const DeviceEventBatchSchema = /*@__PURE__*/
28
+ messageDesc(file_kusinta_iot_device_v1_device_event, 1);
29
+
30
+ /**
31
+ * Describes the enum kusinta.iot.device.v1.EventPriority.
32
+ */
33
+ export const EventPrioritySchema = /*@__PURE__*/
34
+ enumDesc(file_kusinta_iot_device_v1_device_event, 0);
35
+
36
+ /**
37
+ * Matter's event priority. Governs retention and delivery urgency, not severity in a
38
+ * logging sense: CRITICAL events are retained and delivered with the most effort, DEBUG
39
+ * with the least.
40
+ *
41
+ * @generated from enum kusinta.iot.device.v1.EventPriority
42
+ */
43
+ export const EventPriority = /*@__PURE__*/
44
+ tsEnum(EventPrioritySchema);
45
+
@@ -4,9 +4,10 @@
4
4
 
5
5
  import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
+ import type { ColorTemperatureLightProperties, ContactSensorProperties, DimmableLightProperties, DoorLockProperties, EnergySensorProperties, HumiditySensorProperties, OccupancySensorProperties, OnOffLightProperties, PowerSourceProperties, PressureSensorProperties, TemperatureSensorProperties, ThermostatProperties, WindowCoveringProperties } from "./properties_pb.js";
8
+ import type { HmThermostatProps } from "../../vendor/homematic/v1/homematic_pb.js";
9
+ import type { ClusterState } from "./cluster_state_pb.js";
7
10
  import type { DeviceDescriptor } from "./descriptor_pb.js";
8
- import type { ColorTemperatureLightProperties, ContactSensorProperties, DimmableLightProperties, DoorLockProperties, EnergySensorProperties, HumiditySensorProperties, OccupancySensorProperties, OnOffLightProperties, PressureSensorProperties, TemperatureSensorProperties, ThermostatProperties, WindowCoveringProperties } from "./properties_pb.js";
9
- import type { HomematicVendorExtension } from "../../vendor/homematic/v1/homematic_pb.js";
10
11
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
11
12
 
12
13
  /**
@@ -15,109 +16,234 @@ import type { Timestamp } from "@bufbuild/protobuf/wkt";
15
16
  export declare const file_kusinta_iot_device_v1_device: GenFile;
16
17
 
17
18
  /**
18
- * Device combines a DeviceDescriptor with a strongly-typed oneof for its current state.
19
- * Field number convention: 1 = descriptor, 2-49 = standard Matter device types,
20
- * 50-99 = vendor extensions, 20+ = timestamps.
19
+ * The state one Matter endpoint reports.
21
20
  *
22
- * @generated from message kusinta.iot.device.v1.Device
21
+ * Matter nodes present several endpoints, each with its own device type, and real
22
+ * devices need it — a wall thermostat is a Thermostat AND a Humidity Sensor, a
23
+ * 4-channel actuator is four On/Off Lights, almost any battery device is also a Power
24
+ * Source. Endpoints are the only thing that buys; filing, ownership and DeviceId stay
25
+ * per physical device, so a device is still one row, one claim, one placement.
26
+ *
27
+ * Field numbers: 1-2 identity, 3-49 standard Matter device types, 50-99 vendor
28
+ * extensions.
29
+ *
30
+ * endpoint_id is Matter's own endpoint number, and it is scoped to ONE DEVICE — not
31
+ * global, and nothing coordinates numbering between devices. Endpoint 1 on one valve and
32
+ * endpoint 1 on another are unrelated; what identifies an endpoint is the pair
33
+ * (DeviceId, endpoint_id). PropertyUpdate carries device_id for exactly that reason.
34
+ *
35
+ * Endpoint 0 is the Matter root node and carries BasicInformation, which DeviceDescriptor
36
+ * already holds — so 0 never appears here and a producer emitting it is wrong. Device
37
+ * endpoints are 1..n.
38
+ *
39
+ * Two producer obligations, neither enforceable by the schema:
40
+ *
41
+ * 1. UNIQUE within the device. Two entries sharing an endpoint_id make step 1 of the
42
+ * resolution rule ambiguous, and nothing rejects it.
43
+ * 2. STABLE for the life of the device. This is the one that bites. Access grants and
44
+ * property constraints reference (DeviceId, endpoint_id) — see access/v1/acl.proto —
45
+ * so a connector that renumbers across a restart does not fail loudly, it silently
46
+ * retargets permissions: a grant on channel 1 starts applying to channel 3. A
47
+ * duplicate id produces visible nonsense quickly; renumbering produces a working
48
+ * system with the wrong permissions.
49
+ *
50
+ * Where the number comes from depends on what is behind the connector. A Matter device
51
+ * declares its own: endpoint 0's Descriptor cluster carries a PartsList, and each
52
+ * endpoint's Descriptor a DeviceTypeList. A bridged non-Matter device has no Matter
53
+ * endpoints at all, so the connector must synthesise them — derive from something the
54
+ * upstream system holds stable, typically its own channel number, never from enumeration
55
+ * order.
56
+ *
57
+ * A typed case and the generic clusters list are not alternatives. An endpoint uses its
58
+ * typed case for the attributes this schema models and clusters for everything else,
59
+ * including cluster metadata for the modelled ones. See cluster_state.proto.
60
+ *
61
+ * matter_properties and vendor_properties are separate oneofs on purpose. An endpoint
62
+ * carries its typed Matter properties AND its vendor extension — one oneof spanning both
63
+ * would make them mutually exclusive, which left every vendor field unreachable in
64
+ * practice. Named in parallel because they are the same kind of thing addressed through
65
+ * two annotation namespaces: (matter_attribute) resolves one, (vendor_attribute) the
66
+ * other. See property_update.proto for the two branches.
67
+ *
68
+ * @generated from message kusinta.iot.device.v1.Endpoint
23
69
  */
24
- export declare type Device = Message<"kusinta.iot.device.v1.Device"> & {
70
+ export declare type Endpoint = Message<"kusinta.iot.device.v1.Endpoint"> & {
25
71
  /**
26
- * @generated from field: kusinta.iot.device.v1.DeviceDescriptor descriptor = 1;
72
+ * @generated from field: uint32 endpoint_id = 1;
27
73
  */
28
- descriptor?: DeviceDescriptor | undefined;
74
+ endpointId: number;
75
+
76
+ /**
77
+ * @generated from field: uint32 matter_device_type_id = 2;
78
+ */
79
+ matterDeviceTypeId: number;
29
80
 
30
81
  /**
31
- * @generated from oneof kusinta.iot.device.v1.Device.properties
82
+ * @generated from oneof kusinta.iot.device.v1.Endpoint.matter_properties
32
83
  */
33
- properties: {
84
+ matterProperties: {
34
85
  /**
35
- * @generated from field: kusinta.iot.device.v1.ThermostatProperties thermostat = 2;
86
+ * @generated from field: kusinta.iot.device.v1.ThermostatProperties thermostat = 3;
36
87
  */
37
88
  value: ThermostatProperties;
38
89
  case: "thermostat";
39
90
  } | {
40
91
  /**
41
- * @generated from field: kusinta.iot.device.v1.TemperatureSensorProperties temperature_sensor = 3;
92
+ * @generated from field: kusinta.iot.device.v1.TemperatureSensorProperties temperature_sensor = 4;
42
93
  */
43
94
  value: TemperatureSensorProperties;
44
95
  case: "temperatureSensor";
45
96
  } | {
46
97
  /**
47
- * @generated from field: kusinta.iot.device.v1.HumiditySensorProperties humidity_sensor = 4;
98
+ * @generated from field: kusinta.iot.device.v1.HumiditySensorProperties humidity_sensor = 5;
48
99
  */
49
100
  value: HumiditySensorProperties;
50
101
  case: "humiditySensor";
51
102
  } | {
52
103
  /**
53
- * @generated from field: kusinta.iot.device.v1.OccupancySensorProperties occupancy_sensor = 5;
104
+ * @generated from field: kusinta.iot.device.v1.OccupancySensorProperties occupancy_sensor = 6;
54
105
  */
55
106
  value: OccupancySensorProperties;
56
107
  case: "occupancySensor";
57
108
  } | {
58
109
  /**
59
- * @generated from field: kusinta.iot.device.v1.ContactSensorProperties contact_sensor = 6;
110
+ * @generated from field: kusinta.iot.device.v1.ContactSensorProperties contact_sensor = 7;
60
111
  */
61
112
  value: ContactSensorProperties;
62
113
  case: "contactSensor";
63
114
  } | {
64
115
  /**
65
- * @generated from field: kusinta.iot.device.v1.WindowCoveringProperties window_covering = 7;
116
+ * @generated from field: kusinta.iot.device.v1.WindowCoveringProperties window_covering = 8;
66
117
  */
67
118
  value: WindowCoveringProperties;
68
119
  case: "windowCovering";
69
120
  } | {
70
121
  /**
71
- * @generated from field: kusinta.iot.device.v1.DoorLockProperties door_lock = 8;
122
+ * @generated from field: kusinta.iot.device.v1.DoorLockProperties door_lock = 9;
72
123
  */
73
124
  value: DoorLockProperties;
74
125
  case: "doorLock";
75
126
  } | {
76
127
  /**
77
- * @generated from field: kusinta.iot.device.v1.OnOffLightProperties on_off_light = 9;
128
+ * @generated from field: kusinta.iot.device.v1.OnOffLightProperties on_off_light = 10;
78
129
  */
79
130
  value: OnOffLightProperties;
80
131
  case: "onOffLight";
81
132
  } | {
82
133
  /**
83
- * @generated from field: kusinta.iot.device.v1.DimmableLightProperties dimmable_light = 10;
134
+ * @generated from field: kusinta.iot.device.v1.DimmableLightProperties dimmable_light = 11;
84
135
  */
85
136
  value: DimmableLightProperties;
86
137
  case: "dimmableLight";
87
138
  } | {
88
139
  /**
89
- * @generated from field: kusinta.iot.device.v1.ColorTemperatureLightProperties color_temp_light = 11;
140
+ * @generated from field: kusinta.iot.device.v1.ColorTemperatureLightProperties color_temp_light = 12;
90
141
  */
91
142
  value: ColorTemperatureLightProperties;
92
143
  case: "colorTempLight";
93
144
  } | {
94
145
  /**
95
- * @generated from field: kusinta.iot.device.v1.EnergySensorProperties energy_sensor = 12;
146
+ * @generated from field: kusinta.iot.device.v1.EnergySensorProperties energy_sensor = 13;
96
147
  */
97
148
  value: EnergySensorProperties;
98
149
  case: "energySensor";
99
150
  } | {
100
151
  /**
101
- * @generated from field: kusinta.iot.device.v1.PressureSensorProperties pressure_sensor = 13;
152
+ * @generated from field: kusinta.iot.device.v1.PressureSensorProperties pressure_sensor = 14;
102
153
  */
103
154
  value: PressureSensorProperties;
104
155
  case: "pressureSensor";
105
156
  } | {
106
157
  /**
107
- * Vendor extensions (fields 50-99)
108
- *
109
- * @generated from field: kusinta.iot.vendor.homematic.v1.HomematicVendorExtension homematic = 50;
158
+ * @generated from field: kusinta.iot.device.v1.PowerSourceProperties power_source = 15;
110
159
  */
111
- value: HomematicVendorExtension;
112
- case: "homematic";
160
+ value: PowerSourceProperties;
161
+ case: "powerSource";
113
162
  } | { case: undefined; value?: undefined };
114
163
 
115
164
  /**
165
+ * Vendor readings for this endpoint, beside its Matter properties rather than instead
166
+ * of them. Vendor IDENTITY — who the physical device is — is on DeviceDescriptor.
167
+ *
168
+ * @generated from oneof kusinta.iot.device.v1.Endpoint.vendor_properties
169
+ */
170
+ vendorProperties: {
171
+ /**
172
+ * @generated from field: kusinta.iot.vendor.homematic.v1.HmThermostatProps hm_thermostat = 50;
173
+ */
174
+ value: HmThermostatProps;
175
+ case: "hmThermostat";
176
+ } | { case: undefined; value?: undefined };
177
+
178
+ /**
179
+ * Every cluster this endpoint hosts: what it supports, and any attribute value that has
180
+ * no typed field above. This is what makes a device the schema does not model usable
181
+ * rather than silent — and what carries the optional clusters the Matter specification
182
+ * lets an endpoint add beyond its device type's set.
183
+ *
184
+ * Field 16 rather than a one-byte number: 1-15 are spent on identity and the typed
185
+ * cases, and a ClusterState's tag is amortised over the attributes it carries.
186
+ *
187
+ * @generated from field: repeated kusinta.iot.device.v1.ClusterState clusters = 16;
188
+ */
189
+ clusters: ClusterState[];
190
+ };
191
+
192
+ /**
193
+ * Describes the message kusinta.iot.device.v1.Endpoint.
194
+ * Use `create(EndpointSchema)` to create a new message.
195
+ */
196
+ export declare const EndpointSchema: GenMessage<Endpoint>;
197
+
198
+ /**
199
+ * Device is a DeviceDescriptor plus the endpoints it presents.
200
+ *
201
+ * It travels on BOTH legs — a connector announces one with connector.v1.DeviceAnnouncement,
202
+ * and the gateway sends one to the app. One shape everywhere, so the endpoint list has a
203
+ * single home and nothing has to be kept in step with a parallel copy.
204
+ *
205
+ * Resolving an endpoint's device type to a properties case is read from the descriptor via
206
+ * (matter_device_type), never hard-coded. property_update.proto states the rule normatively;
207
+ * matter_options.proto defines the annotations.
208
+ *
209
+ * An empty endpoints list means the device presents nothing this schema models, or has
210
+ * reported nothing yet. Keep the Device either way — it exists and belongs in a list.
211
+ *
212
+ * @generated from message kusinta.iot.device.v1.Device
213
+ */
214
+ export declare type Device = Message<"kusinta.iot.device.v1.Device"> & {
215
+ /**
216
+ * @generated from field: kusinta.iot.device.v1.DeviceDescriptor descriptor = 1;
217
+ */
218
+ descriptor?: DeviceDescriptor | undefined;
219
+
220
+ /**
221
+ * 15-19 are free; 20+ is the timestamp band.
222
+ *
223
+ * @generated from field: repeated kusinta.iot.device.v1.Endpoint endpoints = 14;
224
+ */
225
+ endpoints: Endpoint[];
226
+
227
+ /**
228
+ * When the gateway last had evidence this device exists and is reachable — the
229
+ * most recent PropertyUpdate, announcement, or command result concerning it.
230
+ * Gateway-observed, not connector-reported: no message on either leg carries a
231
+ * per-device liveness timestamp, so this is as precise as the device's own report
232
+ * interval. A device that reports every 15 minutes looks stale for 15 minutes.
233
+ *
234
+ * Survives a connector reconnect. Losing the route to a device is not evidence the
235
+ * device is gone, so last_seen keeps its value; only fresh evidence advances it.
236
+ *
237
+ * Advisory, for showing staleness in a UI. It is not a removal signal — that is
238
+ * webrtc.v1.DeviceRemoved, sent only when a connector reports the device gone.
239
+ *
116
240
  * @generated from field: google.protobuf.Timestamp last_seen = 20;
117
241
  */
118
242
  lastSeen?: Timestamp | undefined;
119
243
 
120
244
  /**
245
+ * When any field of this Device last changed value.
246
+ *
121
247
  * @generated from field: google.protobuf.Timestamp last_updated = 21;
122
248
  */
123
249
  lastUpdated?: Timestamp | undefined;
@@ -4,6 +4,7 @@
4
4
 
5
5
  import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
+ import { file_kusinta_iot_device_v1_cluster_state } from "./cluster_state_pb.js";
7
8
  import { file_kusinta_iot_device_v1_descriptor } from "./descriptor_pb.js";
8
9
  import { file_kusinta_iot_device_v1_properties } from "./properties_pb.js";
9
10
  import { file_kusinta_iot_vendor_homematic_v1_homematic } from "../../vendor/homematic/v1/homematic_pb.js";
@@ -12,12 +13,19 @@ import { file_kusinta_iot_vendor_homematic_v1_homematic } from "../../vendor/hom
12
13
  * Describes the file kusinta/iot/device/v1/device.proto.
13
14
  */
14
15
  export const file_kusinta_iot_device_v1_device = /*@__PURE__*/
15
- fileDesc("CiJrdXNpbnRhL2lvdC9kZXZpY2UvdjEvZGV2aWNlLnByb3RvEhVrdXNpbnRhLmlvdC5kZXZpY2UudjEigAkKBkRldmljZRI7CgpkZXNjcmlwdG9yGAEgASgLMicua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZURlc2NyaXB0b3ISQQoKdGhlcm1vc3RhdBgCIAEoCzIrLmt1c2ludGEuaW90LmRldmljZS52MS5UaGVybW9zdGF0UHJvcGVydGllc0gAElAKEnRlbXBlcmF0dXJlX3NlbnNvchgDIAEoCzIyLmt1c2ludGEuaW90LmRldmljZS52MS5UZW1wZXJhdHVyZVNlbnNvclByb3BlcnRpZXNIABJKCg9odW1pZGl0eV9zZW5zb3IYBCABKAsyLy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuSHVtaWRpdHlTZW5zb3JQcm9wZXJ0aWVzSAASTAoQb2NjdXBhbmN5X3NlbnNvchgFIAEoCzIwLmt1c2ludGEuaW90LmRldmljZS52MS5PY2N1cGFuY3lTZW5zb3JQcm9wZXJ0aWVzSAASSAoOY29udGFjdF9zZW5zb3IYBiABKAsyLi5rdXNpbnRhLmlvdC5kZXZpY2UudjEuQ29udGFjdFNlbnNvclByb3BlcnRpZXNIABJKCg93aW5kb3dfY292ZXJpbmcYByABKAsyLy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuV2luZG93Q292ZXJpbmdQcm9wZXJ0aWVzSAASPgoJZG9vcl9sb2NrGAggASgLMikua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRvb3JMb2NrUHJvcGVydGllc0gAEkMKDG9uX29mZl9saWdodBgJIAEoCzIrLmt1c2ludGEuaW90LmRldmljZS52MS5Pbk9mZkxpZ2h0UHJvcGVydGllc0gAEkgKDmRpbW1hYmxlX2xpZ2h0GAogASgLMi4ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRpbW1hYmxlTGlnaHRQcm9wZXJ0aWVzSAASUgoQY29sb3JfdGVtcF9saWdodBgLIAEoCzI2Lmt1c2ludGEuaW90LmRldmljZS52MS5Db2xvclRlbXBlcmF0dXJlTGlnaHRQcm9wZXJ0aWVzSAASRgoNZW5lcmd5X3NlbnNvchgMIAEoCzItLmt1c2ludGEuaW90LmRldmljZS52MS5FbmVyZ3lTZW5zb3JQcm9wZXJ0aWVzSAASSgoPcHJlc3N1cmVfc2Vuc29yGA0gASgLMi8ua3VzaW50YS5pb3QuZGV2aWNlLnYxLlByZXNzdXJlU2Vuc29yUHJvcGVydGllc0gAEk4KCWhvbWVtYXRpYxgyIAEoCzI5Lmt1c2ludGEuaW90LnZlbmRvci5ob21lbWF0aWMudjEuSG9tZW1hdGljVmVuZG9yRXh0ZW5zaW9uSAASLQoJbGFzdF9zZWVuGBQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxsYXN0X3VwZGF0ZWQYFSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgwKCnByb3BlcnRpZXNCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_descriptor, file_kusinta_iot_device_v1_properties, file_kusinta_iot_vendor_homematic_v1_homematic]);
16
+ fileDesc("CiJrdXNpbnRhL2lvdC9kZXZpY2UvdjEvZGV2aWNlLnByb3RvEhVrdXNpbnRhLmlvdC5kZXZpY2UudjEirgkKCEVuZHBvaW50EhMKC2VuZHBvaW50X2lkGAEgASgNEh0KFW1hdHRlcl9kZXZpY2VfdHlwZV9pZBgCIAEoDRJBCgp0aGVybW9zdGF0GAMgASgLMisua3VzaW50YS5pb3QuZGV2aWNlLnYxLlRoZXJtb3N0YXRQcm9wZXJ0aWVzSAASUAoSdGVtcGVyYXR1cmVfc2Vuc29yGAQgASgLMjIua3VzaW50YS5pb3QuZGV2aWNlLnYxLlRlbXBlcmF0dXJlU2Vuc29yUHJvcGVydGllc0gAEkoKD2h1bWlkaXR5X3NlbnNvchgFIAEoCzIvLmt1c2ludGEuaW90LmRldmljZS52MS5IdW1pZGl0eVNlbnNvclByb3BlcnRpZXNIABJMChBvY2N1cGFuY3lfc2Vuc29yGAYgASgLMjAua3VzaW50YS5pb3QuZGV2aWNlLnYxLk9jY3VwYW5jeVNlbnNvclByb3BlcnRpZXNIABJICg5jb250YWN0X3NlbnNvchgHIAEoCzIuLmt1c2ludGEuaW90LmRldmljZS52MS5Db250YWN0U2Vuc29yUHJvcGVydGllc0gAEkoKD3dpbmRvd19jb3ZlcmluZxgIIAEoCzIvLmt1c2ludGEuaW90LmRldmljZS52MS5XaW5kb3dDb3ZlcmluZ1Byb3BlcnRpZXNIABI+Cglkb29yX2xvY2sYCSABKAsyKS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRG9vckxvY2tQcm9wZXJ0aWVzSAASQwoMb25fb2ZmX2xpZ2h0GAogASgLMisua3VzaW50YS5pb3QuZGV2aWNlLnYxLk9uT2ZmTGlnaHRQcm9wZXJ0aWVzSAASSAoOZGltbWFibGVfbGlnaHQYCyABKAsyLi5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGltbWFibGVMaWdodFByb3BlcnRpZXNIABJSChBjb2xvcl90ZW1wX2xpZ2h0GAwgASgLMjYua3VzaW50YS5pb3QuZGV2aWNlLnYxLkNvbG9yVGVtcGVyYXR1cmVMaWdodFByb3BlcnRpZXNIABJGCg1lbmVyZ3lfc2Vuc29yGA0gASgLMi0ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkVuZXJneVNlbnNvclByb3BlcnRpZXNIABJKCg9wcmVzc3VyZV9zZW5zb3IYDiABKAsyLy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuUHJlc3N1cmVTZW5zb3JQcm9wZXJ0aWVzSAASRAoMcG93ZXJfc291cmNlGA8gASgLMiwua3VzaW50YS5pb3QuZGV2aWNlLnYxLlBvd2VyU291cmNlUHJvcGVydGllc0gAEksKDWhtX3RoZXJtb3N0YXQYMiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IuaG9tZW1hdGljLnYxLkhtVGhlcm1vc3RhdFByb3BzSAESNQoIY2x1c3RlcnMYECADKAsyIy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuQ2x1c3RlclN0YXRlQhMKEW1hdHRlcl9wcm9wZXJ0aWVzQhMKEXZlbmRvcl9wcm9wZXJ0aWVzIrADCgZEZXZpY2USOwoKZGVzY3JpcHRvchgBIAEoCzInLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2VEZXNjcmlwdG9yEjIKCWVuZHBvaW50cxgOIAMoCzIfLmt1c2ludGEuaW90LmRldmljZS52MS5FbmRwb2ludBItCglsYXN0X3NlZW4YFCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjAKDGxhc3RfdXBkYXRlZBgVIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBKBAgCEA5KBAgyEDNSCnRoZXJtb3N0YXRSEnRlbXBlcmF0dXJlX3NlbnNvclIPaHVtaWRpdHlfc2Vuc29yUhBvY2N1cGFuY3lfc2Vuc29yUg5jb250YWN0X3NlbnNvclIPd2luZG93X2NvdmVyaW5nUglkb29yX2xvY2tSDG9uX29mZl9saWdodFIOZGltbWFibGVfbGlnaHRSEGNvbG9yX3RlbXBfbGlnaHRSDWVuZXJneV9zZW5zb3JSD3ByZXNzdXJlX3NlbnNvclIJaG9tZW1hdGljQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_device_v1_descriptor, file_kusinta_iot_device_v1_properties, file_kusinta_iot_vendor_homematic_v1_homematic]);
17
+
18
+ /**
19
+ * Describes the message kusinta.iot.device.v1.Endpoint.
20
+ * Use `create(EndpointSchema)` to create a new message.
21
+ */
22
+ export const EndpointSchema = /*@__PURE__*/
23
+ messageDesc(file_kusinta_iot_device_v1_device, 0);
16
24
 
17
25
  /**
18
26
  * Describes the message kusinta.iot.device.v1.Device.
19
27
  * Use `create(DeviceSchema)` to create a new message.
20
28
  */
21
29
  export const DeviceSchema = /*@__PURE__*/
22
- messageDesc(file_kusinta_iot_device_v1_device, 0);
30
+ messageDesc(file_kusinta_iot_device_v1_device, 1);
23
31
 
@@ -0,0 +1,84 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/device/v1/matter_options.proto (package kusinta.iot.device.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenExtension, GenFile } from "@bufbuild/protobuf/codegenv2";
6
+ import type { FieldOptions, MessageOptions } from "@bufbuild/protobuf/wkt";
7
+
8
+ /**
9
+ * Describes the file kusinta/iot/device/v1/matter_options.proto.
10
+ */
11
+ export declare const file_kusinta_iot_device_v1_matter_options: GenFile;
12
+
13
+ /**
14
+ * The Matter cluster this attribute belongs to, e.g. 0x0201 for Thermostat.
15
+ *
16
+ * Required alongside matter_attribute because a properties message may span
17
+ * clusters: DimmableLightProperties.on_off is On/Off (0x0006) while its
18
+ * current_level is Level Control (0x0008). Matches PropertyUpdate.cluster_id, which
19
+ * is a uint32 too, so the comparison needs no parsing.
20
+ *
21
+ * @generated from extension: uint32 matter_cluster_id = 50001;
22
+ */
23
+ export declare const matter_cluster_id: GenExtension<FieldOptions, number>;
24
+
25
+ /**
26
+ * The Matter attribute name in the spec's own PascalCase, e.g.
27
+ * "PIROccupiedToUnoccupiedDelay". This is the authoritative spelling; the proto
28
+ * field name is not derived from it and must not be assumed to be. Matches
29
+ * PropertyUpdate.attribute_name byte for byte.
30
+ *
31
+ * @generated from extension: string matter_attribute = 50002;
32
+ */
33
+ export declare const matter_attribute: GenExtension<FieldOptions, string>;
34
+
35
+ /**
36
+ * The Matter attribute ID within that cluster, e.g. 0x0012 for OccupiedHeatingSetpoint.
37
+ * This is what a PropertyUpdate resolves on — Matter addresses attributes numerically and
38
+ * so does this schema, because the generic cluster carrier must address attributes of
39
+ * clusters this schema does not model, and a vendor-defined cluster has no spec name to
40
+ * address it by. One scheme rather than two.
41
+ *
42
+ * matter_attribute above stays as the authoritative spelling for logs and for anything
43
+ * rendering an attribute to a human; it is not what resolution matches on.
44
+ *
45
+ * @generated from extension: uint32 matter_attribute_id = 50006;
46
+ */
47
+ export declare const matter_attribute_id: GenExtension<FieldOptions, number>;
48
+
49
+ /**
50
+ * The Matter device type IDs this properties message models, e.g. 0x0301 for
51
+ * Thermostat. Repeated because one shape of properties can serve several device
52
+ * types; empty on vendor extension messages, which have no Matter device type.
53
+ *
54
+ * A device type appears on at most one properties message, so the mapping from
55
+ * Endpoint.matter_device_type_id to an Endpoint.matter_properties case is a
56
+ * function.
57
+ *
58
+ * @generated from extension: repeated uint32 matter_device_type = 50003;
59
+ */
60
+ export declare const matter_device_type: GenExtension<MessageOptions, number[]>;
61
+
62
+ /**
63
+ * The Matter cluster a command-parameters message belongs to, e.g. 0x0006 for On/Off.
64
+ * Always exactly one — a parameters message never spans clusters.
65
+ *
66
+ * @generated from extension: uint32 matter_command_cluster = 50007;
67
+ */
68
+ export declare const matter_command_cluster: GenExtension<MessageOptions, number>;
69
+
70
+ /**
71
+ * The Matter command ID this parameters message carries arguments for, e.g. 0x00 for
72
+ * Thermostat's SetpointRaiseLower.
73
+ *
74
+ * Singular on purpose. An earlier form was repeated, so that one message could cover
75
+ * several commands and choose between them by its own fields — but a message that
76
+ * encodes WHICH command it is duplicates DeviceCommand.matter_command_id, in a second
77
+ * numbering, with nothing reconciling the two. The parameters carry arguments; the
78
+ * command ID says which command. A message shared by several commands that take the
79
+ * same arguments simply omits this and lets matter_command_id stand alone.
80
+ *
81
+ * @generated from extension: optional uint32 matter_command_id = 50008;
82
+ */
83
+ export declare const matter_command_id: GenExtension<MessageOptions, number>;
84
+