@kusinta/iot-schema 0.2.0-beta.1 → 0.2.0-beta.10

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 (36) hide show
  1. package/package.json +7 -1
  2. package/src/kusinta/iot/access/v1/acl_pb.d.ts +130 -0
  3. package/src/kusinta/iot/access/v1/acl_pb.js +19 -5
  4. package/src/kusinta/iot/access/v1/roles_pb.d.ts +80 -14
  5. package/src/kusinta/iot/access/v1/roles_pb.js +33 -1
  6. package/src/kusinta/iot/common/v1/pairing_pb.d.ts +201 -0
  7. package/src/kusinta/iot/common/v1/pairing_pb.js +50 -0
  8. package/src/kusinta/iot/connector/v1/connector_pb.d.ts +423 -6
  9. package/src/kusinta/iot/connector/v1/connector_pb.js +70 -12
  10. package/src/kusinta/iot/device/v1/cluster_state_pb.d.ts +25 -0
  11. package/src/kusinta/iot/device/v1/cluster_state_pb.js +1 -1
  12. package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +16 -1
  13. package/src/kusinta/iot/device/v1/descriptor_pb.js +2 -1
  14. package/src/kusinta/iot/device/v1/device_pb.d.ts +34 -3
  15. package/src/kusinta/iot/device/v1/device_pb.js +1 -1
  16. package/src/kusinta/iot/device/v1/matter_options_pb.d.ts +26 -0
  17. package/src/kusinta/iot/device/v1/matter_options_pb.js +31 -4
  18. package/src/kusinta/iot/device/v1/properties_pb.d.ts +14 -0
  19. package/src/kusinta/iot/device/v1/properties_pb.js +1 -1
  20. package/src/kusinta/iot/link/v1/link_pb.d.ts +419 -0
  21. package/src/kusinta/iot/link/v1/link_pb.js +121 -0
  22. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.d.ts +162 -13
  23. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.js +8 -1
  24. package/src/kusinta/iot/vendor/v1/vendor_options_pb.d.ts +21 -0
  25. package/src/kusinta/iot/vendor/v1/vendor_options_pb.js +24 -2
  26. package/src/kusinta/iot/webrtc/v1/command_pb.d.ts +14 -6
  27. package/src/kusinta/iot/webrtc/v1/command_pb.js +2 -1
  28. package/src/kusinta/iot/webrtc/v1/device_state_pb.d.ts +12 -6
  29. package/src/kusinta/iot/webrtc/v1/device_state_pb.js +5 -5
  30. package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +236 -5
  31. package/src/kusinta/iot/webrtc/v1/envelope_pb.js +34 -3
  32. package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +178 -2
  33. package/src/kusinta/iot/webrtc/v1/management_pb.js +31 -2
  34. package/src/kusinta/iot/webrtc/v1/permission_push_pb.js +2 -2
  35. package/src/kusinta/iot/webrtc/v1/setpoint_mode_pb.d.ts +63 -0
  36. package/src/kusinta/iot/webrtc/v1/setpoint_mode_pb.js +45 -0
@@ -43,6 +43,11 @@ export declare const HomematicDeviceIdentitySchema: GenMessage<HomematicDeviceId
43
43
  * HomeMatic thermostat parameters with no Matter equivalent, carried on the same endpoint
44
44
  * as that thermostat's Matter properties rather than instead of them.
45
45
  *
46
+ * "No Matter equivalent" is the entry test, and it is the one to apply before adding a
47
+ * field here. Valve position failed it: LEVEL is Thermostat/PIHeatingDemand, and it lived
48
+ * here for a while under the claim that Matter had nothing for it. It is now
49
+ * device.v1.ThermostatProperties.pi_heating_demand, and field 6 is burned.
50
+ *
46
51
  * Battery state is deliberately NOT here. LOW_BAT and OPERATING_VOLTAGE are Matter's
47
52
  * PowerSource cluster, which every battery device from every technology needs, so they
48
53
  * belong on a Power Source endpoint. See device/v1/properties.proto.
@@ -52,6 +57,9 @@ export declare const HomematicDeviceIdentitySchema: GenMessage<HomematicDeviceId
52
57
  * false means not boosting, control_mode 0 is an HmIP ControlMode value. Absent means never
53
58
  * reported; present means a reading, including zero.
54
59
  *
60
+ * Enum parameters cross the wire as the CCU's own index, not as a type this schema defines,
61
+ * so each one lists its values in its comment. The order is the CCU's; do not renumber it.
62
+ *
55
63
  * Add new fields at the next available number — never reuse a removed one.
56
64
  *
57
65
  * @generated from message kusinta.iot.vendor.homematic.v1.HmThermostatProps
@@ -63,13 +71,18 @@ export declare type HmThermostatProps = Message<"kusinta.iot.vendor.homematic.v1
63
71
  boostMode?: boolean | undefined;
64
72
 
65
73
  /**
66
- * minutes remaining
74
+ * Seconds remaining, 0-2048 — the CCU counts boost in whole seconds, not minutes.
75
+ * Default boost is 5 min (300), maximum 30 min (1800).
67
76
  *
68
- * @generated from field: optional float boost_time_period = 2;
77
+ * @generated from field: optional uint32 boost_time_remaining = 2;
69
78
  */
70
- boostTimePeriod?: number | undefined;
79
+ boostTimeRemaining?: number | undefined;
71
80
 
72
81
  /**
82
+ * Write-only on the CCU: it accepts a ControlMode and never reports one back. Carried
83
+ * here for a future write path, not as a reading — a connector that emits it as a
84
+ * PropertyUpdate is sending a value the device never gave. 0-3.
85
+ *
73
86
  * @generated from field: optional uint32 control_mode = 3;
74
87
  */
75
88
  controlMode?: number | undefined;
@@ -80,28 +93,58 @@ export declare type HmThermostatProps = Message<"kusinta.iot.vendor.homematic.v1
80
93
  frostProtection?: boolean | undefined;
81
94
 
82
95
  /**
83
- * @generated from field: optional float current_profile_period = 5;
84
- */
85
- currentProfilePeriod?: number | undefined;
86
-
87
- /**
88
- * Valve position, 0.0-1.0 — how far the radiator valve is actually open. The reading
89
- * this extension exists for: it has no Matter equivalent, and it is what an automatic
90
- * or learned control strategy needs.
96
+ * Party mode active. A boolean, whatever the old field name suggested.
91
97
  *
92
- * @generated from field: optional float level = 6;
98
+ * @generated from field: optional bool party_mode = 5;
93
99
  */
94
- level?: number | undefined;
100
+ partyMode?: boolean | undefined;
95
101
 
96
102
  /**
103
+ * CLOSED = 0, OPEN = 1
104
+ *
97
105
  * @generated from field: optional uint32 window_state = 7;
98
106
  */
99
107
  windowState?: number | undefined;
100
108
 
101
109
  /**
110
+ * Valve fault and adaption state, nine CCU-defined values. Radiator valves only — a wall
111
+ * thermostat drives no valve and never reports it.
112
+ *
102
113
  * @generated from field: optional uint32 valve_state = 8;
103
114
  */
104
115
  valveState?: number | undefined;
116
+
117
+ /**
118
+ * Which schedule the thermostat is following: AUTO = 0, MANU = 1, AWAY = 2, plus a
119
+ * fourth CCU value. NOT webrtc.v1.SetpointAdjustMode, which names which setpoint a
120
+ * command targets — a different enum over a different set of concepts.
121
+ *
122
+ * @generated from field: optional uint32 set_point_mode = 9;
123
+ */
124
+ setPointMode?: number | undefined;
125
+
126
+ /**
127
+ * The active weekly profile: 1-3 on a radiator valve, 1-6 on a wall thermostat. The
128
+ * upper bound is the device's, not the protocol's.
129
+ *
130
+ * @generated from field: optional uint32 active_profile = 10;
131
+ */
132
+ activeProfile?: number | undefined;
133
+
134
+ /**
135
+ * Whether the measured temperature is usable: NORMAL = 0, UNKNOWN = 1, OVERFLOW = 2,
136
+ * UNDERFLOW = 3. A reading beside ACTUAL_TEMPERATURE, not a substitute for it.
137
+ *
138
+ * @generated from field: optional uint32 actual_temperature_status = 11;
139
+ */
140
+ actualTemperatureStatus?: number | undefined;
141
+
142
+ /**
143
+ * Valve adaption run: writing true starts the valve's stroke calibration.
144
+ *
145
+ * @generated from field: optional bool valve_adaption = 12;
146
+ */
147
+ valveAdaption?: boolean | undefined;
105
148
  };
106
149
 
107
150
  /**
@@ -110,3 +153,109 @@ export declare type HmThermostatProps = Message<"kusinta.iot.vendor.homematic.v1
110
153
  */
111
154
  export declare const HmThermostatPropsSchema: GenMessage<HmThermostatProps>;
112
155
 
156
+ /**
157
+ * The maintenance channel every HomeMatic device carries — device health and radio state,
158
+ * not what the device measures or controls.
159
+ *
160
+ * It is device-agnostic: a radiator valve, a wall thermostat and a switch actuator all
161
+ * report the same core set on the same channel, which is why this is one message rather
162
+ * than a per-device-type one. Which of these a given device actually has is model-
163
+ * dependent, and stated per device in device.v1.Endpoint.vendor_attribute_names — SABOTAGE
164
+ * especially, where "no tamper detected" and "cannot detect tamper" must not render alike.
165
+ *
166
+ * Not a Matter endpoint of its own: the maintenance channel is channel 0 upstream, and
167
+ * Matter reserves endpoint 0 for the root node. A connector puts these readings on the
168
+ * endpoint whose Matter properties they belong beside — the Power Source endpoint, whose
169
+ * battery attributes are derived from this same channel's LOW_BAT and OPERATING_VOLTAGE.
170
+ *
171
+ * LOW_BAT, OPERATING_VOLTAGE and OPERATING_VOLTAGE_LEVEL are deliberately absent: they are
172
+ * Matter's PowerSource cluster, and PowerSourceProperties carries them. Only the derived
173
+ * Matter value has a home there, so the raw OPERATING_VOLTAGE_STATUS enum is kept here.
174
+ *
175
+ * Every field is `optional`, for the reason HmThermostatProps gives: ERROR_CODE 0 is "no
176
+ * error", a reading, and SABOTAGE false is a safety claim.
177
+ *
178
+ * @generated from message kusinta.iot.vendor.homematic.v1.HmMaintenanceProps
179
+ */
180
+ export declare type HmMaintenanceProps = Message<"kusinta.iot.vendor.homematic.v1.HmMaintenanceProps"> & {
181
+ /**
182
+ * Device-defined fault code, 0-255, where 0 is no error. Present only on models that
183
+ * have one.
184
+ *
185
+ * @generated from field: optional uint32 error_code = 1;
186
+ */
187
+ errorCode?: number | undefined;
188
+
189
+ /**
190
+ * Tamper detection: true means the device reports having been removed or opened. Present
191
+ * only on models with the hardware for it.
192
+ *
193
+ * @generated from field: optional bool sabotage = 2;
194
+ */
195
+ sabotage?: boolean | undefined;
196
+
197
+ /**
198
+ * Received signal strength in dBm, -128 to 127, as this device measures it.
199
+ *
200
+ * sint32, not uint32: these are negative in normal operation, and an unsigned field would
201
+ * carry -72 dBm as 4294967224.
202
+ *
203
+ * @generated from field: optional sint32 rssi_device = 3;
204
+ */
205
+ rssiDevice?: number | undefined;
206
+
207
+ /**
208
+ * The same measurement made at the other end of the link, as reported back.
209
+ *
210
+ * @generated from field: optional sint32 rssi_peer = 4;
211
+ */
212
+ rssiPeer?: number | undefined;
213
+
214
+ /**
215
+ * Supply state as the CCU reports it: NORMAL = 0, UNKNOWN = 1, OVERFLOW = 2,
216
+ * EXTERNAL = 3. The raw enum; PowerSourceProperties.status carries the Matter
217
+ * PowerSourceStatusEnum value derived from it, and the two are not interchangeable.
218
+ *
219
+ * @generated from field: optional uint32 operating_voltage_status = 5;
220
+ */
221
+ operatingVoltageStatus?: number | undefined;
222
+
223
+ /**
224
+ * True when the gateway has lost contact with the device. Reachability as the upstream
225
+ * system sees it, which is not the same claim as device.v1.Device.last_seen — that is
226
+ * when the gateway last had evidence of the device, observed one hop further out.
227
+ *
228
+ * @generated from field: optional bool unreach = 6;
229
+ */
230
+ unreach?: boolean | undefined;
231
+
232
+ /**
233
+ * True while a configuration change is queued for a device that has not yet woken to
234
+ * take it. A battery device can sit here for its whole report interval.
235
+ *
236
+ * @generated from field: optional bool config_pending = 7;
237
+ */
238
+ configPending?: boolean | undefined;
239
+
240
+ /**
241
+ * True while the device has spent its share of the radio band's transmit budget and
242
+ * must wait before sending again. The 868 MHz band permits roughly one percent duty
243
+ * cycle, and it regenerates at about that rate per half minute.
244
+ *
245
+ * Worth carrying rather than leaving to the connector, because a spent budget is
246
+ * indistinguishable from a working device that simply has nothing to say: it stays
247
+ * reachable, reports no error, and silently drops what it was asked to do. Anything
248
+ * that writes on a schedule needs to be able to see this before it concludes a device
249
+ * is ignoring it.
250
+ *
251
+ * @generated from field: optional bool duty_cycle = 8;
252
+ */
253
+ dutyCycle?: boolean | undefined;
254
+ };
255
+
256
+ /**
257
+ * Describes the message kusinta.iot.vendor.homematic.v1.HmMaintenanceProps.
258
+ * Use `create(HmMaintenancePropsSchema)` to create a new message.
259
+ */
260
+ export declare const HmMaintenancePropsSchema: GenMessage<HmMaintenanceProps>;
261
+
@@ -9,7 +9,7 @@ import { file_kusinta_iot_vendor_v1_vendor_options } from "../../v1/vendor_optio
9
9
  * Describes the file kusinta/iot/vendor/homematic/v1/homematic.proto.
10
10
  */
11
11
  export const file_kusinta_iot_vendor_homematic_v1_homematic = /*@__PURE__*/
12
- fileDesc("Ci9rdXNpbnRhL2lvdC92ZW5kb3IvaG9tZW1hdGljL3YxL2hvbWVtYXRpYy5wcm90bxIfa3VzaW50YS5pb3QudmVuZG9yLmhvbWVtYXRpYy52MSI4ChdIb21lbWF0aWNEZXZpY2VJZGVudGl0eRIPCgdhZGRyZXNzGAEgASgJEgwKBHR5cGUYAiABKAkipQQKEUhtVGhlcm1vc3RhdFByb3BzEicKCmJvb3N0X21vZGUYASABKAhCDqK1GApCT09TVF9NT0RFSACIAQESLgoRYm9vc3RfdGltZV9wZXJpb2QYAiABKAJCDqK1GApCT09TVF9USU1FSAGIAQESKwoMY29udHJvbF9tb2RlGAMgASgNQhCitRgMQ09OVFJPTF9NT0RFSAKIAQESMwoQZnJvc3RfcHJvdGVjdGlvbhgEIAEoCEIUorUYEEZST1NUX1BST1RFQ1RJT05IA4gBARIzChZjdXJyZW50X3Byb2ZpbGVfcGVyaW9kGAUgASgCQg6itRgKUEFSVFlfTU9ERUgEiAEBEh0KBWxldmVsGAYgASgCQgmitRgFTEVWRUxIBYgBARIrCgx3aW5kb3dfc3RhdGUYByABKA1CEKK1GAxXSU5ET1dfU1RBVEVIBogBARIpCgt2YWx2ZV9zdGF0ZRgIIAEoDUIPorUYC1ZBTFZFX1NUQVRFSAeIAQE6GKq1GBRob21lbWF0aWMudGhlcm1vc3RhdEINCgtfYm9vc3RfbW9kZUIUChJfYm9vc3RfdGltZV9wZXJpb2RCDwoNX2NvbnRyb2xfbW9kZUITChFfZnJvc3RfcHJvdGVjdGlvbkIZChdfY3VycmVudF9wcm9maWxlX3BlcmlvZEIICgZfbGV2ZWxCDwoNX3dpbmRvd19zdGF0ZUIOCgxfdmFsdmVfc3RhdGVCAkgBYgZwcm90bzM", [file_kusinta_iot_vendor_v1_vendor_options]);
12
+ fileDesc("Ci9rdXNpbnRhL2lvdC92ZW5kb3IvaG9tZW1hdGljL3YxL2hvbWVtYXRpYy5wcm90bxIfa3VzaW50YS5pb3QudmVuZG9yLmhvbWVtYXRpYy52MSI4ChdIb21lbWF0aWNEZXZpY2VJZGVudGl0eRIPCgdhZGRyZXNzGAEgASgJEgwKBHR5cGUYAiABKAki/wYKEUhtVGhlcm1vc3RhdFByb3BzEisKCmJvb3N0X21vZGUYASABKAhCEqK1GApCT09TVF9NT0RF0LUYBkgAiAEBEjUKFGJvb3N0X3RpbWVfcmVtYWluaW5nGAIgASgNQhKitRgKQk9PU1RfVElNRdC1GAVIAYgBARIvCgxjb250cm9sX21vZGUYAyABKA1CFKK1GAxDT05UUk9MX01PREXQtRgCSAKIAQESNwoQZnJvc3RfcHJvdGVjdGlvbhgEIAEoCEIYorUYEEZST1NUX1BST1RFQ1RJT07QtRgFSAOIAQESKwoKcGFydHlfbW9kZRgFIAEoCEISorUYClBBUlRZX01PREXQtRgFSASIAQESLwoMd2luZG93X3N0YXRlGAcgASgNQhSitRgMV0lORE9XX1NUQVRF0LUYB0gFiAEBEi0KC3ZhbHZlX3N0YXRlGAggASgNQhOitRgLVkFMVkVfU1RBVEXQtRgFSAaIAQESMwoOc2V0X3BvaW50X21vZGUYCSABKA1CFqK1GA5TRVRfUE9JTlRfTU9ERdC1GAdIB4gBARIzCg5hY3RpdmVfcHJvZmlsZRgKIAEoDUIWorUYDkFDVElWRV9QUk9GSUxF0LUYB0gIiAEBEkkKGWFjdHVhbF90ZW1wZXJhdHVyZV9zdGF0dXMYCyABKA1CIaK1GBlBQ1RVQUxfVEVNUEVSQVRVUkVfU1RBVFVT0LUYBUgJiAEBEjMKDnZhbHZlX2FkYXB0aW9uGAwgASgIQhaitRgOVkFMVkVfQURBUFRJT07QtRgHSAqIAQE6GKq1GBRob21lbWF0aWMudGhlcm1vc3RhdEINCgtfYm9vc3RfbW9kZUIXChVfYm9vc3RfdGltZV9yZW1haW5pbmdCDwoNX2NvbnRyb2xfbW9kZUITChFfZnJvc3RfcHJvdGVjdGlvbkINCgtfcGFydHlfbW9kZUIPCg1fd2luZG93X3N0YXRlQg4KDF92YWx2ZV9zdGF0ZUIRCg9fc2V0X3BvaW50X21vZGVCEQoPX2FjdGl2ZV9wcm9maWxlQhwKGl9hY3R1YWxfdGVtcGVyYXR1cmVfc3RhdHVzQhEKD192YWx2ZV9hZGFwdGlvbkoECAYQB1IFbGV2ZWxSFmN1cnJlbnRfcHJvZmlsZV9wZXJpb2RSEWJvb3N0X3RpbWVfcGVyaW9kIrYEChJIbU1haW50ZW5hbmNlUHJvcHMSKwoKZXJyb3JfY29kZRgBIAEoDUISorUYCkVSUk9SX0NPREXQtRgFSACIAQESJwoIc2Fib3RhZ2UYAiABKAhCEKK1GAhTQUJPVEFHRdC1GAVIAYgBARItCgtyc3NpX2RldmljZRgDIAEoEUITorUYC1JTU0lfREVWSUNF0LUYBUgCiAEBEikKCXJzc2lfcGVlchgEIAEoEUIRorUYCVJTU0lfUEVFUtC1GAVIA4gBARJHChhvcGVyYXRpbmdfdm9sdGFnZV9zdGF0dXMYBSABKA1CIKK1GBhPUEVSQVRJTkdfVk9MVEFHRV9TVEFUVVPQtRgFSASIAQESJQoHdW5yZWFjaBgGIAEoCEIPorUYB1VOUkVBQ0jQtRgFSAWIAQESMwoOY29uZmlnX3BlbmRpbmcYByABKAhCFqK1GA5DT05GSUdfUEVORElOR9C1GAVIBogBARIrCgpkdXR5X2N5Y2xlGAggASgIQhKitRgKRFVUWV9DWUNMRdC1GAVIB4gBAToZqrUYFWhvbWVtYXRpYy5tYWludGVuYW5jZUINCgtfZXJyb3JfY29kZUILCglfc2Fib3RhZ2VCDgoMX3Jzc2lfZGV2aWNlQgwKCl9yc3NpX3BlZXJCGwoZX29wZXJhdGluZ192b2x0YWdlX3N0YXR1c0IKCghfdW5yZWFjaEIRCg9fY29uZmlnX3BlbmRpbmdCDQoLX2R1dHlfY3ljbGVCAkgBYgZwcm90bzM", [file_kusinta_iot_vendor_v1_vendor_options]);
13
13
 
14
14
  /**
15
15
  * Describes the message kusinta.iot.vendor.homematic.v1.HomematicDeviceIdentity.
@@ -25,3 +25,10 @@ export const HomematicDeviceIdentitySchema = /*@__PURE__*/
25
25
  export const HmThermostatPropsSchema = /*@__PURE__*/
26
26
  messageDesc(file_kusinta_iot_vendor_homematic_v1_homematic, 1);
27
27
 
28
+ /**
29
+ * Describes the message kusinta.iot.vendor.homematic.v1.HmMaintenanceProps.
30
+ * Use `create(HmMaintenancePropsSchema)` to create a new message.
31
+ */
32
+ export const HmMaintenancePropsSchema = /*@__PURE__*/
33
+ messageDesc(file_kusinta_iot_vendor_homematic_v1_homematic, 2);
34
+
@@ -26,6 +26,27 @@ export declare const file_kusinta_iot_vendor_v1_vendor_options: GenFile;
26
26
  */
27
27
  export declare const vendor_attribute: GenExtension<FieldOptions, string>;
28
28
 
29
+ /**
30
+ * What this vendor parameter supports, as the same bitmask device/v1/matter_options.proto
31
+ * defines: READ = 1, WRITE = 2, REPORT = 4.
32
+ *
33
+ * One mask across both branches on purpose. Bit 4 is Matter's reportable quality and, for
34
+ * HomeMatic, the parameter's EVENT bit — the same fact under two names, so a consumer
35
+ * deciding whether to draw a control or a reading asks one question either way.
36
+ *
37
+ * Where the value comes from is the difference. The Matter side reads its mask off the
38
+ * specification; a vendor parameter has no spec to defer to, so this is the upstream
39
+ * system's own answer about its own parameter — for HomeMatic, the OPERATIONS value the
40
+ * CCU reports in getParamsetDescription().
41
+ *
42
+ * Not permission, and not the implemented set: see matter_attribute_capabilities for both
43
+ * distinctions. The vendor mirror of the implemented set is
44
+ * device.v1.Endpoint.vendor_attribute_names.
45
+ *
46
+ * @generated from extension: uint32 vendor_attribute_capabilities = 50010;
47
+ */
48
+ export declare const vendor_attribute_capabilities: GenExtension<FieldOptions, number>;
49
+
29
50
  /**
30
51
  * The stable key identifying a vendor extension message, e.g. "homematic.thermostat".
31
52
  * Matches device.v1.PropertyUpdate.vendor_extension byte for byte, and is what selects
@@ -9,7 +9,7 @@ import { file_google_protobuf_descriptor } from "@bufbuild/protobuf/wkt";
9
9
  * Describes the file kusinta/iot/vendor/v1/vendor_options.proto.
10
10
  */
11
11
  export const file_kusinta_iot_vendor_v1_vendor_options = /*@__PURE__*/
12
- fileDesc("CiprdXNpbnRhL2lvdC92ZW5kb3IvdjEvdmVuZG9yX29wdGlvbnMucHJvdG8SFWt1c2ludGEuaW90LnZlbmRvci52MTpKChB2ZW5kb3JfYXR0cmlidXRlEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxjUhgMgASgJUg92ZW5kb3JBdHRyaWJ1dGU6TAoQdmVuZG9yX2V4dGVuc2lvbhIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjVhgMgASgJUg92ZW5kb3JFeHRlbnNpb25iBnByb3RvMw", [file_google_protobuf_descriptor]);
12
+ fileDesc("CiprdXNpbnRhL2lvdC92ZW5kb3IvdjEvdmVuZG9yX29wdGlvbnMucHJvdG8SFWt1c2ludGEuaW90LnZlbmRvci52MTpKChB2ZW5kb3JfYXR0cmlidXRlEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxjUhgMgASgJUg92ZW5kb3JBdHRyaWJ1dGU6YwoddmVuZG9yX2F0dHJpYnV0ZV9jYXBhYmlsaXRpZXMSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGNqGAyABKA1SG3ZlbmRvckF0dHJpYnV0ZUNhcGFiaWxpdGllczpMChB2ZW5kb3JfZXh0ZW5zaW9uEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGNWGAyABKAlSD3ZlbmRvckV4dGVuc2lvbmIGcHJvdG8z", [file_google_protobuf_descriptor]);
13
13
 
14
14
  /**
15
15
  * The vendor parameter this field carries, in the vendor's own spelling — e.g.
@@ -28,6 +28,28 @@ export const file_kusinta_iot_vendor_v1_vendor_options = /*@__PURE__*/
28
28
  export const vendor_attribute = /*@__PURE__*/
29
29
  extDesc(file_kusinta_iot_vendor_v1_vendor_options, 0);
30
30
 
31
+ /**
32
+ * What this vendor parameter supports, as the same bitmask device/v1/matter_options.proto
33
+ * defines: READ = 1, WRITE = 2, REPORT = 4.
34
+ *
35
+ * One mask across both branches on purpose. Bit 4 is Matter's reportable quality and, for
36
+ * HomeMatic, the parameter's EVENT bit — the same fact under two names, so a consumer
37
+ * deciding whether to draw a control or a reading asks one question either way.
38
+ *
39
+ * Where the value comes from is the difference. The Matter side reads its mask off the
40
+ * specification; a vendor parameter has no spec to defer to, so this is the upstream
41
+ * system's own answer about its own parameter — for HomeMatic, the OPERATIONS value the
42
+ * CCU reports in getParamsetDescription().
43
+ *
44
+ * Not permission, and not the implemented set: see matter_attribute_capabilities for both
45
+ * distinctions. The vendor mirror of the implemented set is
46
+ * device.v1.Endpoint.vendor_attribute_names.
47
+ *
48
+ * @generated from extension: uint32 vendor_attribute_capabilities = 50010;
49
+ */
50
+ export const vendor_attribute_capabilities = /*@__PURE__*/
51
+ extDesc(file_kusinta_iot_vendor_v1_vendor_options, 1);
52
+
31
53
  /**
32
54
  * The stable key identifying a vendor extension message, e.g. "homematic.thermostat".
33
55
  * Matches device.v1.PropertyUpdate.vendor_extension byte for byte, and is what selects
@@ -49,5 +71,5 @@ export const vendor_attribute = /*@__PURE__*/
49
71
  * @generated from extension: string vendor_extension = 50005;
50
72
  */
51
73
  export const vendor_extension = /*@__PURE__*/
52
- extDesc(file_kusinta_iot_vendor_v1_vendor_options, 1);
74
+ extDesc(file_kusinta_iot_vendor_v1_vendor_options, 2);
53
75
 
@@ -4,6 +4,7 @@
4
4
 
5
5
  import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
+ import type { SetpointAdjustMode } from "./setpoint_mode_pb.js";
7
8
  import type { DeviceId } from "../../identity/v1/identity_pb.js";
8
9
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
9
10
  import type { AttributeRef } from "../../access/v1/acl_pb.js";
@@ -28,11 +29,11 @@ export declare const file_kusinta_iot_webrtc_v1_command: GenFile;
28
29
  */
29
30
  export declare type ThermostatSetpointParams = Message<"kusinta.iot.webrtc.v1.ThermostatSetpointParams"> & {
30
31
  /**
31
- * SetpointAdjustMode, see above
32
+ * absent = the producer stated no mode
32
33
  *
33
- * @generated from field: optional uint32 mode = 1;
34
+ * @generated from field: optional kusinta.iot.webrtc.v1.SetpointAdjustMode mode = 1;
34
35
  */
35
- mode?: number | undefined;
36
+ mode?: SetpointAdjustMode | undefined;
36
37
 
37
38
  /**
38
39
  * centidegrees delta
@@ -147,9 +148,16 @@ export declare const DoorLockParamsSchema: GenMessage<DoorLockParams>;
147
148
  *
148
149
  * An app MAY send any command; it does not decide whether it is allowed. The gateway
149
150
  * authorizes every DeviceCommand against the caller's access.v1.DeviceAcl for the target
150
- * device before forwarding it to a connector — the command must be permitted by
151
- * PERMISSION_ACTION_INVOKE, must target an attribute the ACL's allowed_attribute_refs
152
- * reaches, and must respect any PropertyConstraint bounding the value.
151
+ * device before forwarding it to a connector: PERMISSION_ACTION_INVOKE must be granted,
152
+ * and allowed_command_refs must reach this (endpoint, cluster_id, matter_command_id).
153
+ *
154
+ * NOT allowed_attribute_refs, and NOT PropertyConstraint. Both name attributes, and a
155
+ * command is not an attribute — the two are numbered independently within a cluster, so an
156
+ * attribute ref cannot name a command at all. A constraint bounds an attribute's value;
157
+ * this message carries command arguments, and ThermostatSetpointParams.amount is a DELTA,
158
+ * which cannot be compared against a bound without first resolving it to an absolute using
159
+ * a base the gateway may not hold. Where a setpoint must be bounded, bound the write:
160
+ * AttributeWriteRequest carries the absolute value a PropertyConstraint can be applied to.
153
161
  *
154
162
  * A refusal comes back as an ordinary CommandResult with success = false and an error,
155
163
  * NOT as a session-level GatewayError: one command being refused says nothing about the
@@ -8,12 +8,13 @@ import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
8
8
  import { file_kusinta_iot_device_v1_cluster_state } from "../../device/v1/cluster_state_pb.js";
9
9
  import { file_kusinta_iot_device_v1_matter_options } from "../../device/v1/matter_options_pb.js";
10
10
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
11
+ import { file_kusinta_iot_webrtc_v1_setpoint_mode } from "./setpoint_mode_pb.js";
11
12
 
12
13
  /**
13
14
  * Describes the file kusinta/iot/webrtc/v1/command.proto.
14
15
  */
15
16
  export const file_kusinta_iot_webrtc_v1_command = /*@__PURE__*/
16
- fileDesc("CiNrdXNpbnRhL2lvdC93ZWJydGMvdjEvY29tbWFuZC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxIlEKGFRoZXJtb3N0YXRTZXRwb2ludFBhcmFtcxIRCgRtb2RlGAEgASgNSACIAQESDgoGYW1vdW50GAIgASgROgm4tRiBBMC1GABCBwoFX21vZGUiRgoSTGV2ZWxDb250cm9sUGFyYW1zEg0KBWxldmVsGAEgASgNEhcKD3RyYW5zaXRpb25fdGltZRgCIAEoDToIuLUYCMC1GAAiKwoLT25PZmZQYXJhbXM6BLi1GAZKBAgBEAJKBAgCEANSAm9uUgZ0b2dnbGUiQQoYV2luZG93Q292ZXJpbmdMaWZ0UGFyYW1zEhoKEmxpZnRfcGVyY2VudDEwMHRocxgBIAEoDToJuLUYggLAtRgFIjsKDkRvb3JMb2NrUGFyYW1zEhAKCHBpbl9jb2RlGAIgASgJOgW4tRiBAkoECAEQAlIKbG9ja19zdGF0ZSKSBQoNRGV2aWNlQ29tbWFuZBISCgpyZXF1ZXN0X2lkGAEgASgJEjQKCWRldmljZV9pZBgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEhQKDGNvbW1hbmRfbmFtZRgEIAEoCRISCgpjbHVzdGVyX2lkGAwgASgNEh4KEW1hdHRlcl9jb21tYW5kX2lkGA0gASgNSAGIAQESGAoLZW5kcG9pbnRfaWQYCyABKA1IAogBARJOChN0aGVybW9zdGF0X3NldHBvaW50GAUgASgLMi8ua3VzaW50YS5pb3Qud2VicnRjLnYxLlRoZXJtb3N0YXRTZXRwb2ludFBhcmFtc0gAEkIKDWxldmVsX2NvbnRyb2wYBiABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGV2ZWxDb250cm9sUGFyYW1zSAASNAoGb25fb2ZmGAcgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLk9uT2ZmUGFyYW1zSAASTwoUd2luZG93X2NvdmVyaW5nX2xpZnQYCCABKAsyLy5rdXNpbnRhLmlvdC53ZWJydGMudjEuV2luZG93Q292ZXJpbmdMaWZ0UGFyYW1zSAASOgoJZG9vcl9sb2NrGAkgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLkRvb3JMb2NrUGFyYW1zSAASEQoHcmF3X3RsdhhjIAEoDEgAQgwKCnBhcmFtZXRlcnNCFAoSX21hdHRlcl9jb21tYW5kX2lkQg4KDF9lbmRwb2ludF9pZEoECAMQBEoECAoQC1IOY2x1c3Rlcl9pZF9oZXhSGXRoZXJtb3N0YXRfc2V0cG9pbnRfd3JpdGUiXAoMQ29tbWFuZEVycm9yEg8KB21lc3NhZ2UYAiABKAkSNQoEY29kZRgDIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kRXJyb3JDb2RlSgQIARACIt4BCg1Db21tYW5kUmVzdWx0EhIKCnJlcXVlc3RfaWQYASABKAkSDwoHc3VjY2VzcxgCIAEoCBIyCgVlcnJvchgDIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kRXJyb3ISMAoMY29tcGxldGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCgpzZXR0bGVzX2J5GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBQg0KC19zZXR0bGVzX2J5IswBChVBdHRyaWJ1dGVXcml0ZVJlcXVlc3QSEgoKcmVxdWVzdF9pZBgBIAEoCRI0CglkZXZpY2VfaWQYAiABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCgZ0YXJnZXQYAyABKAsyIy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuQXR0cmlidXRlUmVmEjQKBXZhbHVlGAQgASgLMiUua3VzaW50YS5pb3QuZGV2aWNlLnYxLkF0dHJpYnV0ZVZhbHVlKr8CChBDb21tYW5kRXJyb3JDb2RlEiIKHkNPTU1BTkRfRVJST1JfQ09ERV9VTlNQRUNJRklFRBAAEiMKH0NPTU1BTkRfRVJST1JfQ09ERV9OT1RfRU5USVRMRUQQARIqCiZDT01NQU5EX0VSUk9SX0NPREVfQ09OU1RSQUlOVF9WSU9MQVRFRBACEiYKIkNPTU1BTkRfRVJST1JfQ09ERV9JTlZBTElEX0NPTU1BTkQQAxIiCh5DT01NQU5EX0VSUk9SX0NPREVfVU5SRUFDSEFCTEUQBBIeChpDT01NQU5EX0VSUk9SX0NPREVfVElNRU9VVBAFEikKJUNPTU1BTkRfRVJST1JfQ09ERV9SRUpFQ1RFRF9CWV9ERVZJQ0UQBhIfChtDT01NQU5EX0VSUk9SX0NPREVfSU5URVJOQUwQB0ICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_device_v1_matter_options, file_kusinta_iot_identity_v1_identity]);
17
+ fileDesc("CiNrdXNpbnRhL2lvdC93ZWJydGMvdjEvY29tbWFuZC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxInwKGFRoZXJtb3N0YXRTZXRwb2ludFBhcmFtcxI8CgRtb2RlGAEgASgOMikua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldHBvaW50QWRqdXN0TW9kZUgAiAEBEg4KBmFtb3VudBgCIAEoEToJuLUYgQTAtRgAQgcKBV9tb2RlIkYKEkxldmVsQ29udHJvbFBhcmFtcxINCgVsZXZlbBgBIAEoDRIXCg90cmFuc2l0aW9uX3RpbWUYAiABKA06CLi1GAjAtRgAIisKC09uT2ZmUGFyYW1zOgS4tRgGSgQIARACSgQIAhADUgJvblIGdG9nZ2xlIkEKGFdpbmRvd0NvdmVyaW5nTGlmdFBhcmFtcxIaChJsaWZ0X3BlcmNlbnQxMDB0aHMYASABKA06Cbi1GIICwLUYBSI7Cg5Eb29yTG9ja1BhcmFtcxIQCghwaW5fY29kZRgCIAEoCToFuLUYgQJKBAgBEAJSCmxvY2tfc3RhdGUikgUKDURldmljZUNvbW1hbmQSEgoKcmVxdWVzdF9pZBgBIAEoCRI0CglkZXZpY2VfaWQYAiABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIUCgxjb21tYW5kX25hbWUYBCABKAkSEgoKY2x1c3Rlcl9pZBgMIAEoDRIeChFtYXR0ZXJfY29tbWFuZF9pZBgNIAEoDUgBiAEBEhgKC2VuZHBvaW50X2lkGAsgASgNSAKIAQESTgoTdGhlcm1vc3RhdF9zZXRwb2ludBgFIAEoCzIvLmt1c2ludGEuaW90LndlYnJ0Yy52MS5UaGVybW9zdGF0U2V0cG9pbnRQYXJhbXNIABJCCg1sZXZlbF9jb250cm9sGAYgASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLkxldmVsQ29udHJvbFBhcmFtc0gAEjQKBm9uX29mZhgHIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Pbk9mZlBhcmFtc0gAEk8KFHdpbmRvd19jb3ZlcmluZ19saWZ0GAggASgLMi8ua3VzaW50YS5pb3Qud2VicnRjLnYxLldpbmRvd0NvdmVyaW5nTGlmdFBhcmFtc0gAEjoKCWRvb3JfbG9jaxgJIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Eb29yTG9ja1BhcmFtc0gAEhEKB3Jhd190bHYYYyABKAxIAEIMCgpwYXJhbWV0ZXJzQhQKEl9tYXR0ZXJfY29tbWFuZF9pZEIOCgxfZW5kcG9pbnRfaWRKBAgDEARKBAgKEAtSDmNsdXN0ZXJfaWRfaGV4Uhl0aGVybW9zdGF0X3NldHBvaW50X3dyaXRlIlwKDENvbW1hbmRFcnJvchIPCgdtZXNzYWdlGAIgASgJEjUKBGNvZGUYAyABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29tbWFuZEVycm9yQ29kZUoECAEQAiLeAQoNQ29tbWFuZFJlc3VsdBISCgpyZXF1ZXN0X2lkGAEgASgJEg8KB3N1Y2Nlc3MYAiABKAgSMgoFZXJyb3IYAyABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29tbWFuZEVycm9yEjAKDGNvbXBsZXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMwoKc2V0dGxlc19ieRgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBAUINCgtfc2V0dGxlc19ieSLMAQoVQXR0cmlidXRlV3JpdGVSZXF1ZXN0EhIKCnJlcXVlc3RfaWQYASABKAkSNAoJZGV2aWNlX2lkGAIgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSMwoGdGFyZ2V0GAMgASgLMiMua3VzaW50YS5pb3QuYWNjZXNzLnYxLkF0dHJpYnV0ZVJlZhI0CgV2YWx1ZRgEIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5BdHRyaWJ1dGVWYWx1ZSq/AgoQQ29tbWFuZEVycm9yQ29kZRIiCh5DT01NQU5EX0VSUk9SX0NPREVfVU5TUEVDSUZJRUQQABIjCh9DT01NQU5EX0VSUk9SX0NPREVfTk9UX0VOVElUTEVEEAESKgomQ09NTUFORF9FUlJPUl9DT0RFX0NPTlNUUkFJTlRfVklPTEFURUQQAhImCiJDT01NQU5EX0VSUk9SX0NPREVfSU5WQUxJRF9DT01NQU5EEAMSIgoeQ09NTUFORF9FUlJPUl9DT0RFX1VOUkVBQ0hBQkxFEAQSHgoaQ09NTUFORF9FUlJPUl9DT0RFX1RJTUVPVVQQBRIpCiVDT01NQU5EX0VSUk9SX0NPREVfUkVKRUNURURfQllfREVWSUNFEAYSHwobQ09NTUFORF9FUlJPUl9DT0RFX0lOVEVSTkFMEAdCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_device_v1_matter_options, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_webrtc_v1_setpoint_mode]);
17
18
 
18
19
  /**
19
20
  * Describes the message kusinta.iot.webrtc.v1.ThermostatSetpointParams.
@@ -44,11 +44,17 @@ export declare type DeviceStateSnapshot = Message<"kusinta.iot.webrtc.v1.DeviceS
44
44
  export declare const DeviceStateSnapshotSchema: GenMessage<DeviceStateSnapshot>;
45
45
 
46
46
  /**
47
- * Single property change event streamed to the app in real time.
47
+ * One attribute reading streamed to the app as it happens — Matter's Report Data Action,
48
+ * for a single attribute.
48
49
  *
49
- * @generated from message kusinta.iot.webrtc.v1.DevicePropertyEvent
50
+ * Was DevicePropertyEvent. Renamed because it carries a device.v1.PropertyUpdate, which is
51
+ * STATE, while device.v1.DeviceEvent carries a journal entry. Two messages with "Event" in
52
+ * the name meaning opposite things is a trap, and this one was never the event: latest
53
+ * wins, order does not matter, and a missed one is corrected by the next.
54
+ *
55
+ * @generated from message kusinta.iot.webrtc.v1.PropertyReport
50
56
  */
51
- export declare type DevicePropertyEvent = Message<"kusinta.iot.webrtc.v1.DevicePropertyEvent"> & {
57
+ export declare type PropertyReport = Message<"kusinta.iot.webrtc.v1.PropertyReport"> & {
52
58
  /**
53
59
  * @generated from field: kusinta.iot.device.v1.PropertyUpdate update = 1;
54
60
  */
@@ -61,10 +67,10 @@ export declare type DevicePropertyEvent = Message<"kusinta.iot.webrtc.v1.DeviceP
61
67
  };
62
68
 
63
69
  /**
64
- * Describes the message kusinta.iot.webrtc.v1.DevicePropertyEvent.
65
- * Use `create(DevicePropertyEventSchema)` to create a new message.
70
+ * Describes the message kusinta.iot.webrtc.v1.PropertyReport.
71
+ * Use `create(PropertyReportSchema)` to create a new message.
66
72
  */
67
- export declare const DevicePropertyEventSchema: GenMessage<DevicePropertyEvent>;
73
+ export declare const PropertyReportSchema: GenMessage<PropertyReport>;
68
74
 
69
75
  /**
70
76
  * A device appeared while the app was connected — the app leg's counterpart to
@@ -4,16 +4,16 @@
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_access_v1_acl } from "../../access/v1/acl_pb.js";
7
8
  import { file_kusinta_iot_device_v1_device } from "../../device/v1/device_pb.js";
8
9
  import { file_kusinta_iot_device_v1_property_update } from "../../device/v1/property_update_pb.js";
9
- import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
10
10
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
11
11
 
12
12
  /**
13
13
  * Describes the file kusinta/iot/webrtc/v1/device_state.proto.
14
14
  */
15
15
  export const file_kusinta_iot_webrtc_v1_device_state = /*@__PURE__*/
16
- fileDesc("CihrdXNpbnRhL2lvdC93ZWJydGMvdjEvZGV2aWNlX3N0YXRlLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEiuwEKE0RldmljZVN0YXRlU25hcHNob3QSLgoHZGV2aWNlcxgBIAMoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2USQAoLcGVybWlzc2lvbnMYAiABKAsyKy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuRWZmZWN0aXZlUGVybWlzc2lvbnMSMgoOc25hcHNob3R0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIoYBChNEZXZpY2VQcm9wZXJ0eUV2ZW50EjUKBnVwZGF0ZRgBIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5Qcm9wZXJ0eVVwZGF0ZRI4ChRnYXRld2F5X3Byb2Nlc3NlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiPAoLRGV2aWNlQWRkZWQSLQoGZGV2aWNlGAEgASgLMh0ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZSJVCg1EZXZpY2VSZW1vdmVkEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEg4KBnJlYXNvbhgCIAEoCUICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_access_v1_acl, file_kusinta_iot_identity_v1_identity]);
16
+ fileDesc("CihrdXNpbnRhL2lvdC93ZWJydGMvdjEvZGV2aWNlX3N0YXRlLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEiuwEKE0RldmljZVN0YXRlU25hcHNob3QSLgoHZGV2aWNlcxgBIAMoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2USQAoLcGVybWlzc2lvbnMYAiABKAsyKy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuRWZmZWN0aXZlUGVybWlzc2lvbnMSMgoOc25hcHNob3R0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIoEBCg5Qcm9wZXJ0eVJlcG9ydBI1CgZ1cGRhdGUYASABKAsyJS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuUHJvcGVydHlVcGRhdGUSOAoUZ2F0ZXdheV9wcm9jZXNzZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIjwKC0RldmljZUFkZGVkEi0KBmRldmljZRgBIAEoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2UiVQoNRGV2aWNlUmVtb3ZlZBI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIOCgZyZWFzb24YAiABKAlCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_identity_v1_identity]);
17
17
 
18
18
  /**
19
19
  * Describes the message kusinta.iot.webrtc.v1.DeviceStateSnapshot.
@@ -23,10 +23,10 @@ export const DeviceStateSnapshotSchema = /*@__PURE__*/
23
23
  messageDesc(file_kusinta_iot_webrtc_v1_device_state, 0);
24
24
 
25
25
  /**
26
- * Describes the message kusinta.iot.webrtc.v1.DevicePropertyEvent.
27
- * Use `create(DevicePropertyEventSchema)` to create a new message.
26
+ * Describes the message kusinta.iot.webrtc.v1.PropertyReport.
27
+ * Use `create(PropertyReportSchema)` to create a new message.
28
28
  */
29
- export const DevicePropertyEventSchema = /*@__PURE__*/
29
+ export const PropertyReportSchema = /*@__PURE__*/
30
30
  messageDesc(file_kusinta_iot_webrtc_v1_device_state, 1);
31
31
 
32
32
  /**