@kusinta/iot-schema 0.2.0-beta.50 → 0.2.0-beta.52

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.
package/package.json CHANGED
@@ -1,59 +1,61 @@
1
1
  {
2
2
  "name": "@kusinta/iot-schema",
3
- "version": "0.2.0-beta.50",
3
+ "version": "0.2.0-beta.52",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
- "files": ["src"],
6
+ "files": [
7
+ "src"
8
+ ],
7
9
  "scripts": {
8
10
  "test": "vitest run",
9
11
  "test:watch": "vitest"
10
12
  },
11
13
  "exports": {
12
- "./common": "./src/kusinta/iot/common/v1/types_pb.js",
13
- "./common/pairing": "./src/kusinta/iot/common/v1/pairing_pb.js",
14
- "./identity": "./src/kusinta/iot/identity/v1/identity_pb.js",
15
- "./device": "./src/kusinta/iot/device/v1/device_pb.js",
16
- "./device/descriptor": "./src/kusinta/iot/device/v1/descriptor_pb.js",
17
- "./device/properties": "./src/kusinta/iot/device/v1/properties_pb.js",
18
- "./device/matter-options": "./src/kusinta/iot/device/v1/matter_options_pb.js",
14
+ "./common": "./src/kusinta/iot/common/v1/types_pb.js",
15
+ "./common/pairing": "./src/kusinta/iot/common/v1/pairing_pb.js",
16
+ "./identity": "./src/kusinta/iot/identity/v1/identity_pb.js",
17
+ "./device": "./src/kusinta/iot/device/v1/device_pb.js",
18
+ "./device/descriptor": "./src/kusinta/iot/device/v1/descriptor_pb.js",
19
+ "./device/properties": "./src/kusinta/iot/device/v1/properties_pb.js",
20
+ "./device/matter-options": "./src/kusinta/iot/device/v1/matter_options_pb.js",
19
21
  "./device/property-update": "./src/kusinta/iot/device/v1/property_update_pb.js",
20
- "./device/cluster-state": "./src/kusinta/iot/device/v1/cluster_state_pb.js",
21
- "./device/event": "./src/kusinta/iot/device/v1/device_event_pb.js",
22
- "./vendor/options": "./src/kusinta/iot/vendor/v1/vendor_options_pb.js",
23
- "./vendor/homematic": "./src/kusinta/iot/vendor/homematic/v1/homematic_pb.js",
24
- "./vendor/lorawan": "./src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.js",
25
- "./space": "./src/kusinta/iot/space/v1/space_pb.js",
26
- "./access": "./src/kusinta/iot/access/v1/acl_pb.js",
27
- "./access/roles": "./src/kusinta/iot/access/v1/roles_pb.js",
28
- "./account-link": "./src/kusinta/iot/accountlink/v1/account_link_pb.js",
29
- "./link": "./src/kusinta/iot/link/v1/link_pb.js",
30
- "./climate": "./src/kusinta/iot/climate/v1/climate_pb.js",
31
- "./commissioning": "./src/kusinta/iot/commissioning/v1/commissioning_pb.js",
32
- "./heating": "./src/kusinta/iot/heating/v1/heating_pb.js",
33
- "./connector": "./src/kusinta/iot/connector/v1/connector_pb.js",
34
- "./connector/service": "./src/kusinta/iot/connector/v1/connector_service_pb.js",
35
- "./webrtc": "./src/kusinta/iot/webrtc/v1/envelope_pb.js",
36
- "./webrtc/app-token": "./src/kusinta/iot/webrtc/v1/app_token_pb.js",
37
- "./webrtc/command": "./src/kusinta/iot/webrtc/v1/command_pb.js",
38
- "./webrtc/device-state": "./src/kusinta/iot/webrtc/v1/device_state_pb.js",
39
- "./webrtc/household": "./src/kusinta/iot/webrtc/v1/household_pb.js",
40
- "./webrtc/invite": "./src/kusinta/iot/webrtc/v1/invite_pb.js",
41
- "./webrtc/members": "./src/kusinta/iot/webrtc/v1/members_pb.js",
42
- "./webrtc/management": "./src/kusinta/iot/webrtc/v1/management_pb.js",
22
+ "./device/cluster-state": "./src/kusinta/iot/device/v1/cluster_state_pb.js",
23
+ "./device/event": "./src/kusinta/iot/device/v1/device_event_pb.js",
24
+ "./vendor/options": "./src/kusinta/iot/vendor/v1/vendor_options_pb.js",
25
+ "./vendor/homematic": "./src/kusinta/iot/vendor/homematic/v1/homematic_pb.js",
26
+ "./vendor/lorawan": "./src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.js",
27
+ "./space": "./src/kusinta/iot/space/v1/space_pb.js",
28
+ "./access": "./src/kusinta/iot/access/v1/acl_pb.js",
29
+ "./access/roles": "./src/kusinta/iot/access/v1/roles_pb.js",
30
+ "./account-link": "./src/kusinta/iot/accountlink/v1/account_link_pb.js",
31
+ "./link": "./src/kusinta/iot/link/v1/link_pb.js",
32
+ "./climate": "./src/kusinta/iot/climate/v1/climate_pb.js",
33
+ "./commissioning": "./src/kusinta/iot/commissioning/v1/commissioning_pb.js",
34
+ "./heating": "./src/kusinta/iot/heating/v1/heating_pb.js",
35
+ "./connector": "./src/kusinta/iot/connector/v1/connector_pb.js",
36
+ "./connector/service": "./src/kusinta/iot/connector/v1/connector_service_pb.js",
37
+ "./webrtc": "./src/kusinta/iot/webrtc/v1/envelope_pb.js",
38
+ "./webrtc/app-token": "./src/kusinta/iot/webrtc/v1/app_token_pb.js",
39
+ "./webrtc/command": "./src/kusinta/iot/webrtc/v1/command_pb.js",
40
+ "./webrtc/device-state": "./src/kusinta/iot/webrtc/v1/device_state_pb.js",
41
+ "./webrtc/household": "./src/kusinta/iot/webrtc/v1/household_pb.js",
42
+ "./webrtc/invite": "./src/kusinta/iot/webrtc/v1/invite_pb.js",
43
+ "./webrtc/members": "./src/kusinta/iot/webrtc/v1/members_pb.js",
44
+ "./webrtc/management": "./src/kusinta/iot/webrtc/v1/management_pb.js",
43
45
  "./webrtc/permission-push": "./src/kusinta/iot/webrtc/v1/permission_push_pb.js",
44
- "./webrtc/setpoint-mode": "./src/kusinta/iot/webrtc/v1/setpoint_mode_pb.js",
45
- "./registration": "./src/kusinta/iot/registration/v1/registration_pb.js",
46
- "./registration/service": "./src/kusinta/iot/registration/v1/registration_service_pb.js",
47
- "./reporting": "./src/kusinta/iot/reporting/v1/reporting_pb.js",
48
- "./reporting/service": "./src/kusinta/iot/reporting/v1/reporting_service_pb.js",
49
- "./signaling": "./src/kusinta/iot/signaling/v1/signaling_pb.js",
50
- "./signaling/service": "./src/kusinta/iot/signaling/v1/signaling_service_pb.js"
46
+ "./webrtc/setpoint-mode": "./src/kusinta/iot/webrtc/v1/setpoint_mode_pb.js",
47
+ "./registration": "./src/kusinta/iot/registration/v1/registration_pb.js",
48
+ "./registration/service": "./src/kusinta/iot/registration/v1/registration_service_pb.js",
49
+ "./reporting": "./src/kusinta/iot/reporting/v1/reporting_pb.js",
50
+ "./reporting/service": "./src/kusinta/iot/reporting/v1/reporting_service_pb.js",
51
+ "./signaling": "./src/kusinta/iot/signaling/v1/signaling_pb.js",
52
+ "./signaling/service": "./src/kusinta/iot/signaling/v1/signaling_service_pb.js"
51
53
  },
52
54
  "dependencies": {
53
55
  "@bufbuild/protobuf": "^2.12.0"
54
56
  },
55
57
  "devDependencies": {
56
58
  "@types/node": "^22.0.0",
57
- "vitest": "^3.0.0"
59
+ "vitest": "^5.0.5"
58
60
  }
59
61
  }
@@ -332,8 +332,11 @@ export declare type RoomClimate = Message<"kusinta.iot.climate.v1.RoomClimate">
332
332
  * How many of the room's heating outputs the outer limits bind, so that an app shows the
333
333
  * building's bounds where they apply and not where they do not. In a home, sent to its
334
334
  * residents only: to anyone else it would tell whether the room holds a device a resident
335
- * owns. Outside homes, sent to whoever is sent the room, judged over the outputs of devices
336
- * the recipient sees, so that a device hidden from them changes nothing they are sent.
335
+ * owns. The exception is a home that stands empty (webrtc.v1 household.proto, EMPTY HOME):
336
+ * its property owner and gateway administrators are sent its rooms as rooms outside homes
337
+ * are, this included, as no household's device or setting is left in it. Outside homes, sent
338
+ * to whoever is sent the room, judged over the outputs of devices the recipient sees, so
339
+ * that a device hidden from them changes nothing they are sent.
337
340
  *
338
341
  * @generated from field: kusinta.iot.climate.v1.OuterLimitsCoverage outer_limits_coverage = 24;
339
342
  */
@@ -474,6 +474,34 @@ export declare type CommissioningTest = Message<"kusinta.iot.commissioning.v1.Co
474
474
  * @generated from field: bool superseded = 12;
475
475
  */
476
476
  superseded: boolean;
477
+
478
+ /**
479
+ * For a test an installer concludes (PUMP_ALL_ZONES_OFF), while it runs: the last moment a
480
+ * verdict is taken (webrtc.v1.ConcludeCommissioningTest), on the gateway's clock. At it,
481
+ * without a verdict, the test ends ABORTED and its outputs start returning to their normal
482
+ * control, so that every write it made, leased to end by ends_at, can still end by then:
483
+ * conclude_by comes before ends_at, by as much as its slowest output's device needs. Never
484
+ * later than the end of the commissioning grant it runs under. Fixed when the test starts.
485
+ * Unset for the other kinds, and once the test has ended. A client counting down to it
486
+ * counts from when it received it, not on its own clock against this time.
487
+ *
488
+ * @generated from field: google.protobuf.Timestamp conclude_by = 14;
489
+ */
490
+ concludeBy?: Timestamp | undefined;
491
+
492
+ /**
493
+ * What the heat source reported while an OUTPUT_LEASE test held one of its plant's inputs
494
+ * (heating.v1.HeatPumpControl: an SG Ready input or the add-on heat block), from the
495
+ * plant's bound readings (device.v1.HeatSourceReadings) that arrived between the test's
496
+ * first write and its end, in the order they arrived. Evidence for the person judging the
497
+ * installation, never part of the verdict: the test passes on the output's own state. Empty
498
+ * where none arrived, as a heat source read by polling may report less often than a test
499
+ * lasts. The heat source's data, not a household's: kept with the test as its verdict is,
500
+ * through a household handover and a wipe of people.
501
+ *
502
+ * @generated from field: repeated kusinta.iot.commissioning.v1.TestEvidence evidence = 15;
503
+ */
504
+ evidence: TestEvidence[];
477
505
  };
478
506
 
479
507
  /**
@@ -482,6 +510,42 @@ export declare type CommissioningTest = Message<"kusinta.iot.commissioning.v1.Co
482
510
  */
483
511
  export declare const CommissioningTestSchema: GenMessage<CommissioningTest>;
484
512
 
513
+ /**
514
+ * One reading a heat source reported during a test (CommissioningTest.evidence).
515
+ *
516
+ * @generated from message kusinta.iot.commissioning.v1.TestEvidence
517
+ */
518
+ export declare type TestEvidence = Message<"kusinta.iot.commissioning.v1.TestEvidence"> & {
519
+ /**
520
+ * The reading, by its field name in device.v1.HeatSourceReadings, e.g. "compressor_state",
521
+ * "add_on_heat_watts".
522
+ *
523
+ * @generated from field: string reading = 1;
524
+ */
525
+ reading: string;
526
+
527
+ /**
528
+ * Its value, in that field's units; an enum-valued reading by its number, and a yes-or-no
529
+ * reading (e.g. "alarm_active") as 1 for true, 0 for false.
530
+ *
531
+ * @generated from field: sint64 value = 2;
532
+ */
533
+ value: bigint;
534
+
535
+ /**
536
+ * When the heat source reported it.
537
+ *
538
+ * @generated from field: google.protobuf.Timestamp observed_at = 3;
539
+ */
540
+ observedAt?: Timestamp | undefined;
541
+ };
542
+
543
+ /**
544
+ * Describes the message kusinta.iot.commissioning.v1.TestEvidence.
545
+ * Use `create(TestEvidenceSchema)` to create a new message.
546
+ */
547
+ export declare const TestEvidenceSchema: GenMessage<TestEvidence>;
548
+
485
549
  /**
486
550
  * A space's commissioning, in reply to ListCommissioning.
487
551
  *
@@ -1237,7 +1301,8 @@ export enum TestState {
1237
1301
  FAILED = 3,
1238
1302
 
1239
1303
  /**
1240
- * Stopped by a caller, or ended at ends_at without a verdict. Proves nothing.
1304
+ * Stopped by a caller; ended at ends_at; or, for a test an installer concludes
1305
+ * (PUMP_ALL_ZONES_OFF), ended at conclude_by without a verdict. Proves nothing.
1241
1306
  *
1242
1307
  * @generated from enum value: TEST_STATE_ABORTED = 4;
1243
1308
  */
@@ -11,7 +11,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
11
11
  * Describes the file kusinta/iot/commissioning/v1/commissioning.proto.
12
12
  */
13
13
  export const file_kusinta_iot_commissioning_v1_commissioning = /*@__PURE__*/
14
- fileDesc("CjBrdXNpbnRhL2lvdC9jb21taXNzaW9uaW5nL3YxL2NvbW1pc3Npb25pbmcucHJvdG8SHGt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEizwEKClByb3ZlbmFuY2USMgoFcGFydHkYASABKA4yIy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlBhcnR5EjgKCGV2aWRlbmNlGAIgASgOMiYua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5FdmlkZW5jZRImCgJhdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoCYnkYBCABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQiLgoKQmluZGluZ1JlZhIRCglyZWNvcmRfaWQYASABKAkSDQoFZmllbGQYAiABKAkiMwoLVGVtcGxhdGVSZWYSEwoLdGVtcGxhdGVfaWQYASABKAkSDwoHdmVyc2lvbhgCIAEoDSL0BAoRQ29tbWlzc2lvbmluZ0ZhY3QSDwoHZmFjdF9pZBgBIAEoCRIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSEQoJcmVjb3JkX2lkGAMgASgJEgsKA2tleRgEIAEoCRI2CgV2YWx1ZRgFIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5BdHRyaWJ1dGVWYWx1ZUgAEhEKB3Vua25vd24YBiABKAhIABI1CghhbnN3ZXJlchgHIAEoDjIjLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuUGFydHkSOgoJbmVjZXNzaXR5GAggASgOMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5OZWNlc3NpdHkSNgoHZmVhdHVyZRgJIAEoDjIlLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZRI8Cgpwcm92ZW5hbmNlGAogASgLMigua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Qcm92ZW5hbmNlEhAKCHJldmlzaW9uGA0gASgEEkAKDWRldmlhdGVzX2Zyb20YDyABKAsyKS5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlbXBsYXRlUmVmEjYKBXRvcGljGBAgASgOMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5GYWN0VG9waWNCCAoGYW5zd2VySgQICxANSgQIDhAPUgVzY29wZVIQdGVtcGxhdGVfdmVyc2lvblILdGVtcGxhdGVfaWQiegoMVGVtcGxhdGVGYWN0EgsKA2tleRgBIAEoCRIVCg1zdWJqZWN0X2xhYmVsGAIgASgJEjQKBXZhbHVlGAMgASgLMiUua3VzaW50YS5pb3QuZGV2aWNlLnYxLkF0dHJpYnV0ZVZhbHVlSgQIBBAFUgpwcm92ZW5hbmNlIvMBCg1Ib3VzZVRlbXBsYXRlEhMKC3RlbXBsYXRlX2lkGAEgASgJEjUKC2J1aWxkaW5nX2lkGAIgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIMCgRuYW1lGAMgASgJEg8KB3ZlcnNpb24YBCABKA0SOQoFZmFjdHMYBSADKAsyKi5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlbXBsYXRlRmFjdBI8Cgpwcm92ZW5hbmNlGAYgASgLMigua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Qcm92ZW5hbmNlItsCCgROZWVkEhIKCGZhY3Rfa2V5GAEgASgJSAASNgoEdGVzdBgCIAEoDjImLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuVGVzdEtpbmRIABIyCghzcGFjZV9pZBgDIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNQoIYW5zd2VyZXIYBSABKA4yIy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlBhcnR5EjkKB2JpbmRpbmcYByABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWYSOwoKZmFjdF90b3BpYxgIIAEoDjInLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmFjdFRvcGljQgYKBHdoYXRKBAgEEAVKBAgGEAdSCXJlY29yZF9pZFIFZmllbGQi2AEKDEZlYXR1cmVCbG9jaxI5CgZyZWFzb24YASABKA4yKS5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJsb2NrUmVhc29uEjQKCWRldmljZV9pZBgDIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjkKB2JpbmRpbmcYBSABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWZKBAgCEANKBAgEEAVSCXJlY29yZF9pZFIFZmllbGQi8QEKDUZlYXR1cmVTdGF0dXMSNgoHZmVhdHVyZRgBIAEoDjIlLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZRI5CgVzdGF0ZRgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZVN0YXRlEjEKBW5lZWRzGAMgAygLMiIua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5OZWVkEjoKBmJsb2NrcxgEIAMoCzIqLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZUJsb2NrIrcEChFDb21taXNzaW9uaW5nVGVzdBIPCgd0ZXN0X2lkGAEgASgJEjQKBGtpbmQYAiABKA4yJi5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RLaW5kEjkKB2JpbmRpbmcYDSABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWYSNAoJZGV2aWNlX2lkGAUgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSNgoFc3RhdGUYBiABKA4yJy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RTdGF0ZRI6CgdmYWlsdXJlGAcgASgOMikua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5UZXN0RmFpbHVyZRIuCgpzdGFydGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgdlbmRzX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgtmaW5pc2hlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASPAoKcHJvdmVuYW5jZRgLIAEoCzIoLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuUHJvdmVuYW5jZRISCgpzdXBlcnNlZGVkGAwgASgISgQIAxAFUglyZWNvcmRfaWRSBWZpZWxkIvMCChRDb21taXNzaW9uaW5nUHJvZmlsZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPgoFZmFjdHMYAiADKAsyLy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkNvbW1pc3Npb25pbmdGYWN0Ej4KBXRlc3RzGAMgAygLMi8ua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Db21taXNzaW9uaW5nVGVzdBI9CghmZWF0dXJlcxgEIAMoCzIrLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZVN0YXR1cxI9Cgh0ZW1wbGF0ZRgGIAEoCzIrLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuSG91c2VUZW1wbGF0ZRIWCg5uZWVkc193aXRoaGVsZBgHIAEoCEoECAUQBlILdGVtcGxhdGVfaWQiTgoJSG9tZVNldHVwEjEKB2hvbWVfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg4KBnNldF91cBgCIAEoCCJECgpIb21lU2V0dXBzEjYKBWhvbWVzGAEgAygLMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Ib21lU2V0dXAi4gEKE0NvbW1pc3Npb25pbmdSZWNvcmQSPwoEZmFjdBgBIAEoCzIvLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuQ29tbWlzc2lvbmluZ0ZhY3RIABI/CgR0ZXN0GAIgASgLMi8ua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Db21taXNzaW9uaW5nVGVzdEgAEj8KCHRlbXBsYXRlGAMgASgLMisua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Ib3VzZVRlbXBsYXRlSABCCAoGcmVjb3JkIo8EChJDb21taXNzaW9uaW5nR3JhbnQSEAoIZ3JhbnRfaWQYASABKAkSMgoIc3BhY2VfaWQYAiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjIKCWluc3RhbGxlchgDIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZBIWCg5pbnN0YWxsZXJfbmFtZRgEIAEoCRJECgVzdGF0ZRgFIAEoDjI1Lmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuQ29tbWlzc2lvbmluZ0dyYW50U3RhdGUSMAoMcmVxdWVzdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpleHBpcmVzX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBItCglzdGFydHNfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmdyYW50ZWRfYnkYCiABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSLgoKZ3JhbnRlZF9hdBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiiwEKE0NvbW1pc3Npb25pbmdHcmFudHMSMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEkAKBmdyYW50cxgCIAMoCzIwLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuQ29tbWlzc2lvbmluZ0dyYW50Ir8BChhDb21taXNzaW9uaW5nR3JhbnRSZWNvcmQSFgoOaW5zdGFsbGVyX25hbWUYASABKAkSLgoKZ3JhbnRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLQoJc3RhcnRzX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIsCghlbmRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAqewoFUGFydHkSFQoRUEFSVFlfVU5TUEVDSUZJRUQQABIcChhQQVJUWV9PV05FUl9PUkdBTklTQVRJT04QARITCg9QQVJUWV9IT1VTRUhPTEQQAhITCg9QQVJUWV9JTlNUQUxMRVIQAxITCg9QQVJUWV9BVVRPTUFUSUMQBCpxCglOZWNlc3NpdHkSGQoVTkVDRVNTSVRZX1VOU1BFQ0lGSUVEEAASFgoSTkVDRVNTSVRZX1JFUVVJUkVEEAESGQoVTkVDRVNTSVRZX0ZPUl9GRUFUVVJFEAISFgoSTkVDRVNTSVRZX09QVElPTkFMEAMqqAEKCEV2aWRlbmNlEhgKFEVWSURFTkNFX1VOU1BFQ0lGSUVEEAASEwoPRVZJREVOQ0VfU1RBVEVEEAESEgoORVZJREVOQ0VfUEhPVE8QAhIUChBFVklERU5DRV9EUkFXSU5HEAMSFgoSRVZJREVOQ0VfSU5TUEVDVEVEEAQSFQoRRVZJREVOQ0VfTUVBU1VSRUQQBRIUChBFVklERU5DRV9ERVJJVkVEEAYqoAIKCUZhY3RUb3BpYxIaChZGQUNUX1RPUElDX1VOU1BFQ0lGSUVEEAASFwoTRkFDVF9UT1BJQ19CVUlMRElORxABEhQKEEZBQ1RfVE9QSUNfUk9PTVMQAhIaChZGQUNUX1RPUElDX0hFQVRfU09VUkNFEAMSHAoYRkFDVF9UT1BJQ19GTE9PUl9IRUFUSU5HEAQSHAoYRkFDVF9UT1BJQ19DT01GT1JUX0xPQURTEAUSGgoWRkFDVF9UT1BJQ19FTEVDVFJJQ0lUWRAGEh8KG0ZBQ1RfVE9QSUNfRElTVFJJQ1RfSEVBVElORxAHEhsKF0ZBQ1RfVE9QSUNfQ09OTkVDVElWSVRZEAgSFgoSRkFDVF9UT1BJQ19DT01GT1JUEAkqqQEKB0ZlYXR1cmUSFwoTRkVBVFVSRV9VTlNQRUNJRklFRBAAEhcKE0ZFQVRVUkVfRkxPT1JfWk9ORVMQARIRCg1GRUFUVVJFX1BMQU5UEAISGQoVRkVBVFVSRV9DT01GT1JUX0xPQURTEAMSEAoMRkVBVFVSRV9DT1NUEAQSFgoSRkVBVFVSRV9QRUFLX0dVQVJEEAUSFAoQRkVBVFVSRV9QTEFOTklORxAGKoUBCgxGZWF0dXJlU3RhdGUSHQoZRkVBVFVSRV9TVEFURV9VTlNQRUNJRklFRBAAEhcKE0ZFQVRVUkVfU1RBVEVfV09SS1MQARIXChNGRUFUVVJFX1NUQVRFX05FRURTEAISJAogRkVBVFVSRV9TVEFURV9CTE9DS0VEX0ZPUl9TQUZFVFkQAyqcAgoLQmxvY2tSZWFzb24SHAoYQkxPQ0tfUkVBU09OX1VOU1BFQ0lGSUVEEAASHAoYQkxPQ0tfUkVBU09OX1RFU1RfRkFJTEVEEAESIgoeQkxPQ0tfUkVBU09OX09VVFBVVF9OT1RfTEVBU0VEEAISJQohQkxPQ0tfUkVBU09OX1BPV0VSX09OX05PVF9BVF9SRVNUEAMSHAoYQkxPQ0tfUkVBU09OX0RFVklDRV9HT05FEAQSIgoeQkxPQ0tfUkVBU09OX0NPTlRST0xfUk9PTV9HT05FEAUSHwobQkxPQ0tfUkVBU09OX0xFQVNFX1RPT19MT05HEAYSIwofQkxPQ0tfUkVBU09OX0RFVklDRV9BQ1JPU1NfSE9NRRAHKn4KCFRlc3RLaW5kEhkKFVRFU1RfS0lORF9VTlNQRUNJRklFRBAAEhoKFlRFU1RfS0lORF9PVVRQVVRfTEVBU0UQARIZChVURVNUX0tJTkRfWk9ORV9FRkZFQ1QQAhIgChxURVNUX0tJTkRfUFVNUF9BTExfWk9ORVNfT0ZGEAMqhQEKCVRlc3RTdGF0ZRIaChZURVNUX1NUQVRFX1VOU1BFQ0lGSUVEEAASFgoSVEVTVF9TVEFURV9SVU5OSU5HEAESFQoRVEVTVF9TVEFURV9QQVNTRUQQAhIVChFURVNUX1NUQVRFX0ZBSUxFRBADEhYKElRFU1RfU1RBVEVfQUJPUlRFRBAEKp0CCgtUZXN0RmFpbHVyZRIcChhURVNUX0ZBSUxVUkVfVU5TUEVDSUZJRUQQABIlCiFURVNUX0ZBSUxVUkVfUE9XRVJfT05fTk9UX0FUX1JFU1QQARIgChxURVNUX0ZBSUxVUkVfTk9fU1RBVEVfQ0hBTkdFEAISIgoeVEVTVF9GQUlMVVJFX0xFQVNFX05PVF9SRU5FV0VEEAMSJwojVEVTVF9GQUlMVVJFX0RJRF9OT1RfUkVUVVJOX1RPX1JFU1QQBBIjCh9URVNUX0ZBSUxVUkVfREVWSUNFX1VOUkVBQ0hBQkxFEAUSGgoWVEVTVF9GQUlMVVJFX05PX0VGRkVDVBAGEhkKFVRFU1RfRkFJTFVSRV9PQlNFUlZFRBAHKpQBChdDb21taXNzaW9uaW5nR3JhbnRTdGF0ZRIpCiVDT01NSVNTSU9OSU5HX0dSQU5UX1NUQVRFX1VOU1BFQ0lGSUVEEAASJwojQ09NTUlTU0lPTklOR19HUkFOVF9TVEFURV9SRVFVRVNURUQQARIlCiFDT01NSVNTSU9OSU5HX0dSQU5UX1NUQVRFX0dSQU5URUQQAkICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_identity_v1_identity]);
14
+ fileDesc("CjBrdXNpbnRhL2lvdC9jb21taXNzaW9uaW5nL3YxL2NvbW1pc3Npb25pbmcucHJvdG8SHGt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEizwEKClByb3ZlbmFuY2USMgoFcGFydHkYASABKA4yIy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlBhcnR5EjgKCGV2aWRlbmNlGAIgASgOMiYua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5FdmlkZW5jZRImCgJhdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoCYnkYBCABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQiLgoKQmluZGluZ1JlZhIRCglyZWNvcmRfaWQYASABKAkSDQoFZmllbGQYAiABKAkiMwoLVGVtcGxhdGVSZWYSEwoLdGVtcGxhdGVfaWQYASABKAkSDwoHdmVyc2lvbhgCIAEoDSL0BAoRQ29tbWlzc2lvbmluZ0ZhY3QSDwoHZmFjdF9pZBgBIAEoCRIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSEQoJcmVjb3JkX2lkGAMgASgJEgsKA2tleRgEIAEoCRI2CgV2YWx1ZRgFIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5BdHRyaWJ1dGVWYWx1ZUgAEhEKB3Vua25vd24YBiABKAhIABI1CghhbnN3ZXJlchgHIAEoDjIjLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuUGFydHkSOgoJbmVjZXNzaXR5GAggASgOMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5OZWNlc3NpdHkSNgoHZmVhdHVyZRgJIAEoDjIlLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZRI8Cgpwcm92ZW5hbmNlGAogASgLMigua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Qcm92ZW5hbmNlEhAKCHJldmlzaW9uGA0gASgEEkAKDWRldmlhdGVzX2Zyb20YDyABKAsyKS5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlbXBsYXRlUmVmEjYKBXRvcGljGBAgASgOMicua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5GYWN0VG9waWNCCAoGYW5zd2VySgQICxANSgQIDhAPUgVzY29wZVIQdGVtcGxhdGVfdmVyc2lvblILdGVtcGxhdGVfaWQiegoMVGVtcGxhdGVGYWN0EgsKA2tleRgBIAEoCRIVCg1zdWJqZWN0X2xhYmVsGAIgASgJEjQKBXZhbHVlGAMgASgLMiUua3VzaW50YS5pb3QuZGV2aWNlLnYxLkF0dHJpYnV0ZVZhbHVlSgQIBBAFUgpwcm92ZW5hbmNlIvMBCg1Ib3VzZVRlbXBsYXRlEhMKC3RlbXBsYXRlX2lkGAEgASgJEjUKC2J1aWxkaW5nX2lkGAIgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIMCgRuYW1lGAMgASgJEg8KB3ZlcnNpb24YBCABKA0SOQoFZmFjdHMYBSADKAsyKi5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlbXBsYXRlRmFjdBI8Cgpwcm92ZW5hbmNlGAYgASgLMigua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Qcm92ZW5hbmNlItsCCgROZWVkEhIKCGZhY3Rfa2V5GAEgASgJSAASNgoEdGVzdBgCIAEoDjImLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuVGVzdEtpbmRIABIyCghzcGFjZV9pZBgDIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNQoIYW5zd2VyZXIYBSABKA4yIy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlBhcnR5EjkKB2JpbmRpbmcYByABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWYSOwoKZmFjdF90b3BpYxgIIAEoDjInLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmFjdFRvcGljQgYKBHdoYXRKBAgEEAVKBAgGEAdSCXJlY29yZF9pZFIFZmllbGQi2AEKDEZlYXR1cmVCbG9jaxI5CgZyZWFzb24YASABKA4yKS5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJsb2NrUmVhc29uEjQKCWRldmljZV9pZBgDIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjkKB2JpbmRpbmcYBSABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWZKBAgCEANKBAgEEAVSCXJlY29yZF9pZFIFZmllbGQi8QEKDUZlYXR1cmVTdGF0dXMSNgoHZmVhdHVyZRgBIAEoDjIlLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZRI5CgVzdGF0ZRgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZVN0YXRlEjEKBW5lZWRzGAMgAygLMiIua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5OZWVkEjoKBmJsb2NrcxgEIAMoCzIqLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuRmVhdHVyZUJsb2NrIqYFChFDb21taXNzaW9uaW5nVGVzdBIPCgd0ZXN0X2lkGAEgASgJEjQKBGtpbmQYAiABKA4yJi5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RLaW5kEjkKB2JpbmRpbmcYDSABKAsyKC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkJpbmRpbmdSZWYSNAoJZGV2aWNlX2lkGAUgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSNgoFc3RhdGUYBiABKA4yJy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLlRlc3RTdGF0ZRI6CgdmYWlsdXJlGAcgASgOMikua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5UZXN0RmFpbHVyZRIuCgpzdGFydGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgdlbmRzX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgtmaW5pc2hlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASPAoKcHJvdmVuYW5jZRgLIAEoCzIoLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuUHJvdmVuYW5jZRISCgpzdXBlcnNlZGVkGAwgASgIEi8KC2NvbmNsdWRlX2J5GA4gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI8CghldmlkZW5jZRgPIAMoCzIqLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuVGVzdEV2aWRlbmNlSgQIAxAFUglyZWNvcmRfaWRSBWZpZWxkIl8KDFRlc3RFdmlkZW5jZRIPCgdyZWFkaW5nGAEgASgJEg0KBXZhbHVlGAIgASgSEi8KC29ic2VydmVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLzAgoUQ29tbWlzc2lvbmluZ1Byb2ZpbGUSMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEj4KBWZhY3RzGAIgAygLMi8ua3VzaW50YS5pb3QuY29tbWlzc2lvbmluZy52MS5Db21taXNzaW9uaW5nRmFjdBI+CgV0ZXN0cxgDIAMoCzIvLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuQ29tbWlzc2lvbmluZ1Rlc3QSPQoIZmVhdHVyZXMYBCADKAsyKy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkZlYXR1cmVTdGF0dXMSPQoIdGVtcGxhdGUYBiABKAsyKy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkhvdXNlVGVtcGxhdGUSFgoObmVlZHNfd2l0aGhlbGQYByABKAhKBAgFEAZSC3RlbXBsYXRlX2lkIk4KCUhvbWVTZXR1cBIxCgdob21lX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIOCgZzZXRfdXAYAiABKAgiRAoKSG9tZVNldHVwcxI2CgVob21lcxgBIAMoCzInLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuSG9tZVNldHVwIuIBChNDb21taXNzaW9uaW5nUmVjb3JkEj8KBGZhY3QYASABKAsyLy5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkNvbW1pc3Npb25pbmdGYWN0SAASPwoEdGVzdBgCIAEoCzIvLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuQ29tbWlzc2lvbmluZ1Rlc3RIABI/Cgh0ZW1wbGF0ZRgDIAEoCzIrLmt1c2ludGEuaW90LmNvbW1pc3Npb25pbmcudjEuSG91c2VUZW1wbGF0ZUgAQggKBnJlY29yZCKPBAoSQ29tbWlzc2lvbmluZ0dyYW50EhAKCGdyYW50X2lkGAEgASgJEjIKCHNwYWNlX2lkGAIgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIyCglpbnN0YWxsZXIYAyABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSFgoOaW5zdGFsbGVyX25hbWUYBCABKAkSRAoFc3RhdGUYBSABKA4yNS5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkNvbW1pc3Npb25pbmdHcmFudFN0YXRlEjAKDHJlcXVlc3RlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKZXhwaXJlc19hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLQoJc3RhcnRzX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgdlbmRzX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCgpncmFudGVkX2J5GAogASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEi4KCmdyYW50ZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIosBChNDb21taXNzaW9uaW5nR3JhbnRzEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBJACgZncmFudHMYAiADKAsyMC5rdXNpbnRhLmlvdC5jb21taXNzaW9uaW5nLnYxLkNvbW1pc3Npb25pbmdHcmFudCK/AQoYQ29tbWlzc2lvbmluZ0dyYW50UmVjb3JkEhYKDmluc3RhbGxlcl9uYW1lGAEgASgJEi4KCmdyYW50ZWRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi0KCXN0YXJ0c19hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLAoIZW5kZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wKnsKBVBhcnR5EhUKEVBBUlRZX1VOU1BFQ0lGSUVEEAASHAoYUEFSVFlfT1dORVJfT1JHQU5JU0FUSU9OEAESEwoPUEFSVFlfSE9VU0VIT0xEEAISEwoPUEFSVFlfSU5TVEFMTEVSEAMSEwoPUEFSVFlfQVVUT01BVElDEAQqcQoJTmVjZXNzaXR5EhkKFU5FQ0VTU0lUWV9VTlNQRUNJRklFRBAAEhYKEk5FQ0VTU0lUWV9SRVFVSVJFRBABEhkKFU5FQ0VTU0lUWV9GT1JfRkVBVFVSRRACEhYKEk5FQ0VTU0lUWV9PUFRJT05BTBADKqgBCghFdmlkZW5jZRIYChRFVklERU5DRV9VTlNQRUNJRklFRBAAEhMKD0VWSURFTkNFX1NUQVRFRBABEhIKDkVWSURFTkNFX1BIT1RPEAISFAoQRVZJREVOQ0VfRFJBV0lORxADEhYKEkVWSURFTkNFX0lOU1BFQ1RFRBAEEhUKEUVWSURFTkNFX01FQVNVUkVEEAUSFAoQRVZJREVOQ0VfREVSSVZFRBAGKqACCglGYWN0VG9waWMSGgoWRkFDVF9UT1BJQ19VTlNQRUNJRklFRBAAEhcKE0ZBQ1RfVE9QSUNfQlVJTERJTkcQARIUChBGQUNUX1RPUElDX1JPT01TEAISGgoWRkFDVF9UT1BJQ19IRUFUX1NPVVJDRRADEhwKGEZBQ1RfVE9QSUNfRkxPT1JfSEVBVElORxAEEhwKGEZBQ1RfVE9QSUNfQ09NRk9SVF9MT0FEUxAFEhoKFkZBQ1RfVE9QSUNfRUxFQ1RSSUNJVFkQBhIfChtGQUNUX1RPUElDX0RJU1RSSUNUX0hFQVRJTkcQBxIbChdGQUNUX1RPUElDX0NPTk5FQ1RJVklUWRAIEhYKEkZBQ1RfVE9QSUNfQ09NRk9SVBAJKqkBCgdGZWF0dXJlEhcKE0ZFQVRVUkVfVU5TUEVDSUZJRUQQABIXChNGRUFUVVJFX0ZMT09SX1pPTkVTEAESEQoNRkVBVFVSRV9QTEFOVBACEhkKFUZFQVRVUkVfQ09NRk9SVF9MT0FEUxADEhAKDEZFQVRVUkVfQ09TVBAEEhYKEkZFQVRVUkVfUEVBS19HVUFSRBAFEhQKEEZFQVRVUkVfUExBTk5JTkcQBiqFAQoMRmVhdHVyZVN0YXRlEh0KGUZFQVRVUkVfU1RBVEVfVU5TUEVDSUZJRUQQABIXChNGRUFUVVJFX1NUQVRFX1dPUktTEAESFwoTRkVBVFVSRV9TVEFURV9ORUVEUxACEiQKIEZFQVRVUkVfU1RBVEVfQkxPQ0tFRF9GT1JfU0FGRVRZEAMqnAIKC0Jsb2NrUmVhc29uEhwKGEJMT0NLX1JFQVNPTl9VTlNQRUNJRklFRBAAEhwKGEJMT0NLX1JFQVNPTl9URVNUX0ZBSUxFRBABEiIKHkJMT0NLX1JFQVNPTl9PVVRQVVRfTk9UX0xFQVNFRBACEiUKIUJMT0NLX1JFQVNPTl9QT1dFUl9PTl9OT1RfQVRfUkVTVBADEhwKGEJMT0NLX1JFQVNPTl9ERVZJQ0VfR09ORRAEEiIKHkJMT0NLX1JFQVNPTl9DT05UUk9MX1JPT01fR09ORRAFEh8KG0JMT0NLX1JFQVNPTl9MRUFTRV9UT09fTE9ORxAGEiMKH0JMT0NLX1JFQVNPTl9ERVZJQ0VfQUNST1NTX0hPTUUQByp+CghUZXN0S2luZBIZChVURVNUX0tJTkRfVU5TUEVDSUZJRUQQABIaChZURVNUX0tJTkRfT1VUUFVUX0xFQVNFEAESGQoVVEVTVF9LSU5EX1pPTkVfRUZGRUNUEAISIAocVEVTVF9LSU5EX1BVTVBfQUxMX1pPTkVTX09GRhADKoUBCglUZXN0U3RhdGUSGgoWVEVTVF9TVEFURV9VTlNQRUNJRklFRBAAEhYKElRFU1RfU1RBVEVfUlVOTklORxABEhUKEVRFU1RfU1RBVEVfUEFTU0VEEAISFQoRVEVTVF9TVEFURV9GQUlMRUQQAxIWChJURVNUX1NUQVRFX0FCT1JURUQQBCqdAgoLVGVzdEZhaWx1cmUSHAoYVEVTVF9GQUlMVVJFX1VOU1BFQ0lGSUVEEAASJQohVEVTVF9GQUlMVVJFX1BPV0VSX09OX05PVF9BVF9SRVNUEAESIAocVEVTVF9GQUlMVVJFX05PX1NUQVRFX0NIQU5HRRACEiIKHlRFU1RfRkFJTFVSRV9MRUFTRV9OT1RfUkVORVdFRBADEicKI1RFU1RfRkFJTFVSRV9ESURfTk9UX1JFVFVSTl9UT19SRVNUEAQSIwofVEVTVF9GQUlMVVJFX0RFVklDRV9VTlJFQUNIQUJMRRAFEhoKFlRFU1RfRkFJTFVSRV9OT19FRkZFQ1QQBhIZChVURVNUX0ZBSUxVUkVfT0JTRVJWRUQQByqUAQoXQ29tbWlzc2lvbmluZ0dyYW50U3RhdGUSKQolQ09NTUlTU0lPTklOR19HUkFOVF9TVEFURV9VTlNQRUNJRklFRBAAEicKI0NPTU1JU1NJT05JTkdfR1JBTlRfU1RBVEVfUkVRVUVTVEVEEAESJQohQ09NTUlTU0lPTklOR19HUkFOVF9TVEFURV9HUkFOVEVEEAJCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_identity_v1_identity]);
15
15
 
16
16
  /**
17
17
  * Describes the message kusinta.iot.commissioning.v1.Provenance.
@@ -83,54 +83,61 @@ export const FeatureStatusSchema = /*@__PURE__*/
83
83
  export const CommissioningTestSchema = /*@__PURE__*/
84
84
  messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 9);
85
85
 
86
+ /**
87
+ * Describes the message kusinta.iot.commissioning.v1.TestEvidence.
88
+ * Use `create(TestEvidenceSchema)` to create a new message.
89
+ */
90
+ export const TestEvidenceSchema = /*@__PURE__*/
91
+ messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 10);
92
+
86
93
  /**
87
94
  * Describes the message kusinta.iot.commissioning.v1.CommissioningProfile.
88
95
  * Use `create(CommissioningProfileSchema)` to create a new message.
89
96
  */
90
97
  export const CommissioningProfileSchema = /*@__PURE__*/
91
- messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 10);
98
+ messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 11);
92
99
 
93
100
  /**
94
101
  * Describes the message kusinta.iot.commissioning.v1.HomeSetup.
95
102
  * Use `create(HomeSetupSchema)` to create a new message.
96
103
  */
97
104
  export const HomeSetupSchema = /*@__PURE__*/
98
- messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 11);
105
+ messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 12);
99
106
 
100
107
  /**
101
108
  * Describes the message kusinta.iot.commissioning.v1.HomeSetups.
102
109
  * Use `create(HomeSetupsSchema)` to create a new message.
103
110
  */
104
111
  export const HomeSetupsSchema = /*@__PURE__*/
105
- messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 12);
112
+ messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 13);
106
113
 
107
114
  /**
108
115
  * Describes the message kusinta.iot.commissioning.v1.CommissioningRecord.
109
116
  * Use `create(CommissioningRecordSchema)` to create a new message.
110
117
  */
111
118
  export const CommissioningRecordSchema = /*@__PURE__*/
112
- messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 13);
119
+ messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 14);
113
120
 
114
121
  /**
115
122
  * Describes the message kusinta.iot.commissioning.v1.CommissioningGrant.
116
123
  * Use `create(CommissioningGrantSchema)` to create a new message.
117
124
  */
118
125
  export const CommissioningGrantSchema = /*@__PURE__*/
119
- messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 14);
126
+ messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 15);
120
127
 
121
128
  /**
122
129
  * Describes the message kusinta.iot.commissioning.v1.CommissioningGrants.
123
130
  * Use `create(CommissioningGrantsSchema)` to create a new message.
124
131
  */
125
132
  export const CommissioningGrantsSchema = /*@__PURE__*/
126
- messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 15);
133
+ messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 16);
127
134
 
128
135
  /**
129
136
  * Describes the message kusinta.iot.commissioning.v1.CommissioningGrantRecord.
130
137
  * Use `create(CommissioningGrantRecordSchema)` to create a new message.
131
138
  */
132
139
  export const CommissioningGrantRecordSchema = /*@__PURE__*/
133
- messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 16);
140
+ messageDesc(file_kusinta_iot_commissioning_v1_commissioning, 17);
134
141
 
135
142
  /**
136
143
  * Describes the enum kusinta.iot.commissioning.v1.Party.
@@ -83,7 +83,9 @@ export declare type PairingWindow = Message<"kusinta.iot.common.v1.PairingWindow
83
83
  *
84
84
  * A batch suits commissioning, where devices are paired in a row and become a building's
85
85
  * rather than any person's. It does not suit a caller whose pairing mints personal
86
- * ownership.
86
+ * ownership: a window whose arrivals become the pairer's own (webrtc.v1 StartPairing
87
+ * ownership RESIDENT, or a caller who can only pair their own) attributes one at most, and
88
+ * more is refused, from someone who files for the building too.
87
89
  *
88
90
  * Ignored where device_hint is set, and narrowed to one rather than refused: a hint names
89
91
  * one device, so a window restricted to it can never produce a second arrival to attribute.
@@ -494,6 +494,15 @@ export declare type HeatSourceReadings = Message<"kusinta.iot.device.v1.HeatSour
494
494
  * @generated from field: optional uint32 alarm_code = 11;
495
495
  */
496
496
  alarmCode?: number | undefined;
497
+
498
+ /**
499
+ * The power its internal electric add-on heat (an immersion heater or an electric boiler
500
+ * inside the heat source) draws now, in watts: 0 while it is off or blocked. Absent for a
501
+ * heat source without one, or whose connector cannot read it.
502
+ *
503
+ * @generated from field: optional uint32 add_on_heat_watts = 12;
504
+ */
505
+ addOnHeatWatts?: number | undefined;
497
506
  };
498
507
 
499
508
  /**
@@ -648,6 +657,15 @@ export enum CompressorState {
648
657
  * @generated from enum value: COMPRESSOR_STATE_STOPPING = 4;
649
658
  */
650
659
  STOPPING = 4,
660
+
661
+ /**
662
+ * Stopped and held off: the heat source says its compressor is blocked, for whatever reason
663
+ * it has (an external input, a low outdoor temperature, its own restart delay, an alarm).
664
+ * Not a statement of why.
665
+ *
666
+ * @generated from enum value: COMPRESSOR_STATE_BLOCKED = 5;
667
+ */
668
+ BLOCKED = 5,
651
669
  }
652
670
 
653
671
  /**
@@ -14,7 +14,7 @@ import { file_kusinta_iot_vendor_v1_vendor_options } from "../../vendor/v1/vendo
14
14
  * Describes the file kusinta/iot/device/v1/device.proto.
15
15
  */
16
16
  export const file_kusinta_iot_device_v1_device = /*@__PURE__*/
17
- fileDesc("CiJrdXNpbnRhL2lvdC9kZXZpY2UvdjEvZGV2aWNlLnByb3RvEhVrdXNpbnRhLmlvdC5kZXZpY2UudjEi5QwKCEVuZHBvaW50EhMKC2VuZHBvaW50X2lkGAEgASgNEh0KFW1hdHRlcl9kZXZpY2VfdHlwZV9pZBgCIAEoDRJBCgp0aGVybW9zdGF0GAMgASgLMisua3VzaW50YS5pb3QuZGV2aWNlLnYxLlRoZXJtb3N0YXRQcm9wZXJ0aWVzSAASUAoSdGVtcGVyYXR1cmVfc2Vuc29yGAQgASgLMjIua3VzaW50YS5pb3QuZGV2aWNlLnYxLlRlbXBlcmF0dXJlU2Vuc29yUHJvcGVydGllc0gAEkoKD2h1bWlkaXR5X3NlbnNvchgFIAEoCzIvLmt1c2ludGEuaW90LmRldmljZS52MS5IdW1pZGl0eVNlbnNvclByb3BlcnRpZXNIABJMChBvY2N1cGFuY3lfc2Vuc29yGAYgASgLMjAua3VzaW50YS5pb3QuZGV2aWNlLnYxLk9jY3VwYW5jeVNlbnNvclByb3BlcnRpZXNIABJICg5jb250YWN0X3NlbnNvchgHIAEoCzIuLmt1c2ludGEuaW90LmRldmljZS52MS5Db250YWN0U2Vuc29yUHJvcGVydGllc0gAEkoKD3dpbmRvd19jb3ZlcmluZxgIIAEoCzIvLmt1c2ludGEuaW90LmRldmljZS52MS5XaW5kb3dDb3ZlcmluZ1Byb3BlcnRpZXNIABI+Cglkb29yX2xvY2sYCSABKAsyKS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRG9vckxvY2tQcm9wZXJ0aWVzSAASQwoMb25fb2ZmX2xpZ2h0GAogASgLMisua3VzaW50YS5pb3QuZGV2aWNlLnYxLk9uT2ZmTGlnaHRQcm9wZXJ0aWVzSAASSAoOZGltbWFibGVfbGlnaHQYCyABKAsyLi5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGltbWFibGVMaWdodFByb3BlcnRpZXNIABJSChBjb2xvcl90ZW1wX2xpZ2h0GAwgASgLMjYua3VzaW50YS5pb3QuZGV2aWNlLnYxLkNvbG9yVGVtcGVyYXR1cmVMaWdodFByb3BlcnRpZXNIABJGCg1lbmVyZ3lfc2Vuc29yGA0gASgLMi0ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkVuZXJneVNlbnNvclByb3BlcnRpZXNIABJKCg9wcmVzc3VyZV9zZW5zb3IYDiABKAsyLy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuUHJlc3N1cmVTZW5zb3JQcm9wZXJ0aWVzSAASRAoMcG93ZXJfc291cmNlGA8gASgLMiwua3VzaW50YS5pb3QuZGV2aWNlLnYxLlBvd2VyU291cmNlUHJvcGVydGllc0gAEksKDWhtX3RoZXJtb3N0YXQYMiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IuaG9tZW1hdGljLnYxLkhtVGhlcm1vc3RhdFByb3BzSAESTQoOaG1fbWFpbnRlbmFuY2UYMyABKAsyMy5rdXNpbnRhLmlvdC52ZW5kb3IuaG9tZW1hdGljLnYxLkhtTWFpbnRlbmFuY2VQcm9wc0gBEjQKCnJhZGlvX2xpbmsYNCABKAsyIC5rdXNpbnRhLmlvdC5kZXZpY2UudjEuUmFkaW9MaW5rEj4KC2hlYXRfc291cmNlGDUgASgLMikua3VzaW50YS5pb3QuZGV2aWNlLnYxLkhlYXRTb3VyY2VSZWFkaW5ncxI1CghjbHVzdGVycxgQIAMoCzIjLmt1c2ludGEuaW90LmRldmljZS52MS5DbHVzdGVyU3RhdGUSHgoWdmVuZG9yX2F0dHJpYnV0ZV9uYW1lcxgRIAMoCRJjCht2ZW5kb3JfYXR0cmlidXRlX2JlaGF2aW91cnMYEiADKAsyPi5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRW5kcG9pbnQuVmVuZG9yQXR0cmlidXRlQmVoYXZpb3Vyc0VudHJ5GmsKHlZlbmRvckF0dHJpYnV0ZUJlaGF2aW91cnNFbnRyeRILCgNrZXkYASABKAkSOAoFdmFsdWUYAiABKAsyKS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuQXR0cmlidXRlQmVoYXZpb3VyOgI4AUITChFtYXR0ZXJfcHJvcGVydGllc0ITChF2ZW5kb3JfcHJvcGVydGllcyK6BAoGRGV2aWNlEjsKCmRlc2NyaXB0b3IYASABKAsyJy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGV2aWNlRGVzY3JpcHRvchIyCgllbmRwb2ludHMYDiADKAsyHy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRW5kcG9pbnQSJwoabWluX3dyaXRlX2ludGVydmFsX3NlY29uZHMYDyABKA1IAIgBARIkChdtYXhfd3JpdGVfZGVsYXlfc2Vjb25kcxgQIAEoDUgBiAEBEi0KCWxhc3Rfc2VlbhgUIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMbGFzdF91cGRhdGVkGBUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIdChtfbWluX3dyaXRlX2ludGVydmFsX3NlY29uZHNCGgoYX21heF93cml0ZV9kZWxheV9zZWNvbmRzSgQIAhAOSgQIMhAzUgp0aGVybW9zdGF0UhJ0ZW1wZXJhdHVyZV9zZW5zb3JSD2h1bWlkaXR5X3NlbnNvclIQb2NjdXBhbmN5X3NlbnNvclIOY29udGFjdF9zZW5zb3JSD3dpbmRvd19jb3ZlcmluZ1IJZG9vcl9sb2NrUgxvbl9vZmZfbGlnaHRSDmRpbW1hYmxlX2xpZ2h0UhBjb2xvcl90ZW1wX2xpZ2h0Ug1lbmVyZ3lfc2Vuc29yUg9wcmVzc3VyZV9zZW5zb3JSCWhvbWVtYXRpYyLhBwoSSGVhdFNvdXJjZVJlYWRpbmdzEj8KFG91dGRvb3JfY2VudGlkZWdyZWVzGAEgASgRQhyitRgUb3V0ZG9vcl9jZW50aWRlZ3JlZXPQtRgFSACIAQESPQoTc3VwcGx5X2NlbnRpZGVncmVlcxgCIAEoEUIborUYE3N1cHBseV9jZW50aWRlZ3JlZXPQtRgFSAGIAQESPQoTcmV0dXJuX2NlbnRpZGVncmVlcxgDIAEoEUIborUYE3JldHVybl9jZW50aWRlZ3JlZXPQtRgFSAKIAQESSwoaaG90X3dhdGVyX3RvcF9jZW50aWRlZ3JlZXMYBCABKBFCIqK1GBpob3Rfd2F0ZXJfdG9wX2NlbnRpZGVncmVlc9C1GAVIA4gBARJVCh9ob3Rfd2F0ZXJfY2hhcmdpbmdfY2VudGlkZWdyZWVzGAUgASgRQieitRgfaG90X3dhdGVyX2NoYXJnaW5nX2NlbnRpZGVncmVlc9C1GAVIBIgBARJTCh5jYWxjdWxhdGVkX3N1cHBseV9jZW50aWRlZ3JlZXMYBiABKBFCJqK1GB5jYWxjdWxhdGVkX3N1cHBseV9jZW50aWRlZ3JlZXPQtRgFSAWIAQESKQoJcHJvZHVjaW5nGAcgASgNQhGitRgJcHJvZHVjaW5n0LUYBUgGiAEBEjcKEGNvbXByZXNzb3Jfc3RhdGUYCCABKA1CGKK1GBBjb21wcmVzc29yX3N0YXRl0LUYBUgHiAEBEjMKDmRlZ3JlZV9taW51dGVzGAkgASgRQhaitRgOZGVncmVlX21pbnV0ZXPQtRgFSAiIAQESLwoMYWxhcm1fYWN0aXZlGAogASgIQhSitRgMYWxhcm1fYWN0aXZl0LUYBUgJiAEBEisKCmFsYXJtX2NvZGUYCyABKA1CEqK1GAphbGFybV9jb2Rl0LUYBUgKiAEBOheqtRgTa3VzaW50YS5oZWF0X3NvdXJjZUIXChVfb3V0ZG9vcl9jZW50aWRlZ3JlZXNCFgoUX3N1cHBseV9jZW50aWRlZ3JlZXNCFgoUX3JldHVybl9jZW50aWRlZ3JlZXNCHQobX2hvdF93YXRlcl90b3BfY2VudGlkZWdyZWVzQiIKIF9ob3Rfd2F0ZXJfY2hhcmdpbmdfY2VudGlkZWdyZWVzQiEKH19jYWxjdWxhdGVkX3N1cHBseV9jZW50aWRlZ3JlZXNCDAoKX3Byb2R1Y2luZ0ITChFfY29tcHJlc3Nvcl9zdGF0ZUIRCg9fZGVncmVlX21pbnV0ZXNCDwoNX2FsYXJtX2FjdGl2ZUINCgtfYWxhcm1fY29kZSK3AQoJUmFkaW9MaW5rEiUKB3F1YWxpdHkYASABKA1CD6K1GAdxdWFsaXR50LUYBUgAiAEBEicKCHJzc2lfZGJtGAIgASgRQhCitRgIcnNzaV9kYm3QtRgFSAGIAQESIwoGc25yX2RiGAMgASgCQg6itRgGc25yX2Ri0LUYBUgCiAEBOhGqtRgNa3VzaW50YS5yYWRpb0IKCghfcXVhbGl0eUILCglfcnNzaV9kYm1CCQoHX3Nucl9kYiqVAgoUSGVhdFNvdXJjZVByb2R1Y3Rpb24SJgoiSEVBVF9TT1VSQ0VfUFJPRFVDVElPTl9VTlNQRUNJRklFRBAAEh4KGkhFQVRfU09VUkNFX1BST0RVQ1RJT05fT0ZGEAESKAokSEVBVF9TT1VSQ0VfUFJPRFVDVElPTl9TUEFDRV9IRUFUSU5HEAISJAogSEVBVF9TT1VSQ0VfUFJPRFVDVElPTl9IT1RfV0FURVIQAxIfChtIRUFUX1NPVVJDRV9QUk9EVUNUSU9OX1BPT0wQBBIiCh5IRUFUX1NPVVJDRV9QUk9EVUNUSU9OX0NPT0xJTkcQBRIgChxIRUFUX1NPVVJDRV9QUk9EVUNUSU9OX09USEVSEAYqrQEKD0NvbXByZXNzb3JTdGF0ZRIgChxDT01QUkVTU09SX1NUQVRFX1VOU1BFQ0lGSUVEEAASHAoYQ09NUFJFU1NPUl9TVEFURV9TVE9QUEVEEAESHQoZQ09NUFJFU1NPUl9TVEFURV9TVEFSVElORxACEhwKGENPTVBSRVNTT1JfU1RBVEVfUlVOTklORxADEh0KGUNPTVBSRVNTT1JfU1RBVEVfU1RPUFBJTkcQBCp1CgxSYWRpb1F1YWxpdHkSHQoZUkFESU9fUVVBTElUWV9VTlNQRUNJRklFRBAAEhYKElJBRElPX1FVQUxJVFlfR09PRBABEhYKElJBRElPX1FVQUxJVFlfRkFJUhACEhYKElJBRElPX1FVQUxJVFlfUE9PUhADQgJIAWIGcHJvdG8z", [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, file_kusinta_iot_vendor_v1_vendor_options]);
17
+ fileDesc("CiJrdXNpbnRhL2lvdC9kZXZpY2UvdjEvZGV2aWNlLnByb3RvEhVrdXNpbnRhLmlvdC5kZXZpY2UudjEi5QwKCEVuZHBvaW50EhMKC2VuZHBvaW50X2lkGAEgASgNEh0KFW1hdHRlcl9kZXZpY2VfdHlwZV9pZBgCIAEoDRJBCgp0aGVybW9zdGF0GAMgASgLMisua3VzaW50YS5pb3QuZGV2aWNlLnYxLlRoZXJtb3N0YXRQcm9wZXJ0aWVzSAASUAoSdGVtcGVyYXR1cmVfc2Vuc29yGAQgASgLMjIua3VzaW50YS5pb3QuZGV2aWNlLnYxLlRlbXBlcmF0dXJlU2Vuc29yUHJvcGVydGllc0gAEkoKD2h1bWlkaXR5X3NlbnNvchgFIAEoCzIvLmt1c2ludGEuaW90LmRldmljZS52MS5IdW1pZGl0eVNlbnNvclByb3BlcnRpZXNIABJMChBvY2N1cGFuY3lfc2Vuc29yGAYgASgLMjAua3VzaW50YS5pb3QuZGV2aWNlLnYxLk9jY3VwYW5jeVNlbnNvclByb3BlcnRpZXNIABJICg5jb250YWN0X3NlbnNvchgHIAEoCzIuLmt1c2ludGEuaW90LmRldmljZS52MS5Db250YWN0U2Vuc29yUHJvcGVydGllc0gAEkoKD3dpbmRvd19jb3ZlcmluZxgIIAEoCzIvLmt1c2ludGEuaW90LmRldmljZS52MS5XaW5kb3dDb3ZlcmluZ1Byb3BlcnRpZXNIABI+Cglkb29yX2xvY2sYCSABKAsyKS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRG9vckxvY2tQcm9wZXJ0aWVzSAASQwoMb25fb2ZmX2xpZ2h0GAogASgLMisua3VzaW50YS5pb3QuZGV2aWNlLnYxLk9uT2ZmTGlnaHRQcm9wZXJ0aWVzSAASSAoOZGltbWFibGVfbGlnaHQYCyABKAsyLi5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGltbWFibGVMaWdodFByb3BlcnRpZXNIABJSChBjb2xvcl90ZW1wX2xpZ2h0GAwgASgLMjYua3VzaW50YS5pb3QuZGV2aWNlLnYxLkNvbG9yVGVtcGVyYXR1cmVMaWdodFByb3BlcnRpZXNIABJGCg1lbmVyZ3lfc2Vuc29yGA0gASgLMi0ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkVuZXJneVNlbnNvclByb3BlcnRpZXNIABJKCg9wcmVzc3VyZV9zZW5zb3IYDiABKAsyLy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuUHJlc3N1cmVTZW5zb3JQcm9wZXJ0aWVzSAASRAoMcG93ZXJfc291cmNlGA8gASgLMiwua3VzaW50YS5pb3QuZGV2aWNlLnYxLlBvd2VyU291cmNlUHJvcGVydGllc0gAEksKDWhtX3RoZXJtb3N0YXQYMiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IuaG9tZW1hdGljLnYxLkhtVGhlcm1vc3RhdFByb3BzSAESTQoOaG1fbWFpbnRlbmFuY2UYMyABKAsyMy5rdXNpbnRhLmlvdC52ZW5kb3IuaG9tZW1hdGljLnYxLkhtTWFpbnRlbmFuY2VQcm9wc0gBEjQKCnJhZGlvX2xpbmsYNCABKAsyIC5rdXNpbnRhLmlvdC5kZXZpY2UudjEuUmFkaW9MaW5rEj4KC2hlYXRfc291cmNlGDUgASgLMikua3VzaW50YS5pb3QuZGV2aWNlLnYxLkhlYXRTb3VyY2VSZWFkaW5ncxI1CghjbHVzdGVycxgQIAMoCzIjLmt1c2ludGEuaW90LmRldmljZS52MS5DbHVzdGVyU3RhdGUSHgoWdmVuZG9yX2F0dHJpYnV0ZV9uYW1lcxgRIAMoCRJjCht2ZW5kb3JfYXR0cmlidXRlX2JlaGF2aW91cnMYEiADKAsyPi5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRW5kcG9pbnQuVmVuZG9yQXR0cmlidXRlQmVoYXZpb3Vyc0VudHJ5GmsKHlZlbmRvckF0dHJpYnV0ZUJlaGF2aW91cnNFbnRyeRILCgNrZXkYASABKAkSOAoFdmFsdWUYAiABKAsyKS5rdXNpbnRhLmlvdC5kZXZpY2UudjEuQXR0cmlidXRlQmVoYXZpb3VyOgI4AUITChFtYXR0ZXJfcHJvcGVydGllc0ITChF2ZW5kb3JfcHJvcGVydGllcyK6BAoGRGV2aWNlEjsKCmRlc2NyaXB0b3IYASABKAsyJy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRGV2aWNlRGVzY3JpcHRvchIyCgllbmRwb2ludHMYDiADKAsyHy5rdXNpbnRhLmlvdC5kZXZpY2UudjEuRW5kcG9pbnQSJwoabWluX3dyaXRlX2ludGVydmFsX3NlY29uZHMYDyABKA1IAIgBARIkChdtYXhfd3JpdGVfZGVsYXlfc2Vjb25kcxgQIAEoDUgBiAEBEi0KCWxhc3Rfc2VlbhgUIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMbGFzdF91cGRhdGVkGBUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIdChtfbWluX3dyaXRlX2ludGVydmFsX3NlY29uZHNCGgoYX21heF93cml0ZV9kZWxheV9zZWNvbmRzSgQIAhAOSgQIMhAzUgp0aGVybW9zdGF0UhJ0ZW1wZXJhdHVyZV9zZW5zb3JSD2h1bWlkaXR5X3NlbnNvclIQb2NjdXBhbmN5X3NlbnNvclIOY29udGFjdF9zZW5zb3JSD3dpbmRvd19jb3ZlcmluZ1IJZG9vcl9sb2NrUgxvbl9vZmZfbGlnaHRSDmRpbW1hYmxlX2xpZ2h0UhBjb2xvcl90ZW1wX2xpZ2h0Ug1lbmVyZ3lfc2Vuc29yUg9wcmVzc3VyZV9zZW5zb3JSCWhvbWVtYXRpYyKyCAoSSGVhdFNvdXJjZVJlYWRpbmdzEj8KFG91dGRvb3JfY2VudGlkZWdyZWVzGAEgASgRQhyitRgUb3V0ZG9vcl9jZW50aWRlZ3JlZXPQtRgFSACIAQESPQoTc3VwcGx5X2NlbnRpZGVncmVlcxgCIAEoEUIborUYE3N1cHBseV9jZW50aWRlZ3JlZXPQtRgFSAGIAQESPQoTcmV0dXJuX2NlbnRpZGVncmVlcxgDIAEoEUIborUYE3JldHVybl9jZW50aWRlZ3JlZXPQtRgFSAKIAQESSwoaaG90X3dhdGVyX3RvcF9jZW50aWRlZ3JlZXMYBCABKBFCIqK1GBpob3Rfd2F0ZXJfdG9wX2NlbnRpZGVncmVlc9C1GAVIA4gBARJVCh9ob3Rfd2F0ZXJfY2hhcmdpbmdfY2VudGlkZWdyZWVzGAUgASgRQieitRgfaG90X3dhdGVyX2NoYXJnaW5nX2NlbnRpZGVncmVlc9C1GAVIBIgBARJTCh5jYWxjdWxhdGVkX3N1cHBseV9jZW50aWRlZ3JlZXMYBiABKBFCJqK1GB5jYWxjdWxhdGVkX3N1cHBseV9jZW50aWRlZ3JlZXPQtRgFSAWIAQESKQoJcHJvZHVjaW5nGAcgASgNQhGitRgJcHJvZHVjaW5n0LUYBUgGiAEBEjcKEGNvbXByZXNzb3Jfc3RhdGUYCCABKA1CGKK1GBBjb21wcmVzc29yX3N0YXRl0LUYBUgHiAEBEjMKDmRlZ3JlZV9taW51dGVzGAkgASgRQhaitRgOZGVncmVlX21pbnV0ZXPQtRgFSAiIAQESLwoMYWxhcm1fYWN0aXZlGAogASgIQhSitRgMYWxhcm1fYWN0aXZl0LUYBUgJiAEBEisKCmFsYXJtX2NvZGUYCyABKA1CEqK1GAphbGFybV9jb2Rl0LUYBUgKiAEBEjkKEWFkZF9vbl9oZWF0X3dhdHRzGAwgASgNQhmitRgRYWRkX29uX2hlYXRfd2F0dHPQtRgFSAuIAQE6F6q1GBNrdXNpbnRhLmhlYXRfc291cmNlQhcKFV9vdXRkb29yX2NlbnRpZGVncmVlc0IWChRfc3VwcGx5X2NlbnRpZGVncmVlc0IWChRfcmV0dXJuX2NlbnRpZGVncmVlc0IdChtfaG90X3dhdGVyX3RvcF9jZW50aWRlZ3JlZXNCIgogX2hvdF93YXRlcl9jaGFyZ2luZ19jZW50aWRlZ3JlZXNCIQofX2NhbGN1bGF0ZWRfc3VwcGx5X2NlbnRpZGVncmVlc0IMCgpfcHJvZHVjaW5nQhMKEV9jb21wcmVzc29yX3N0YXRlQhEKD19kZWdyZWVfbWludXRlc0IPCg1fYWxhcm1fYWN0aXZlQg0KC19hbGFybV9jb2RlQhQKEl9hZGRfb25faGVhdF93YXR0cyK3AQoJUmFkaW9MaW5rEiUKB3F1YWxpdHkYASABKA1CD6K1GAdxdWFsaXR50LUYBUgAiAEBEicKCHJzc2lfZGJtGAIgASgRQhCitRgIcnNzaV9kYm3QtRgFSAGIAQESIwoGc25yX2RiGAMgASgCQg6itRgGc25yX2Ri0LUYBUgCiAEBOhGqtRgNa3VzaW50YS5yYWRpb0IKCghfcXVhbGl0eUILCglfcnNzaV9kYm1CCQoHX3Nucl9kYiqVAgoUSGVhdFNvdXJjZVByb2R1Y3Rpb24SJgoiSEVBVF9TT1VSQ0VfUFJPRFVDVElPTl9VTlNQRUNJRklFRBAAEh4KGkhFQVRfU09VUkNFX1BST0RVQ1RJT05fT0ZGEAESKAokSEVBVF9TT1VSQ0VfUFJPRFVDVElPTl9TUEFDRV9IRUFUSU5HEAISJAogSEVBVF9TT1VSQ0VfUFJPRFVDVElPTl9IT1RfV0FURVIQAxIfChtIRUFUX1NPVVJDRV9QUk9EVUNUSU9OX1BPT0wQBBIiCh5IRUFUX1NPVVJDRV9QUk9EVUNUSU9OX0NPT0xJTkcQBRIgChxIRUFUX1NPVVJDRV9QUk9EVUNUSU9OX09USEVSEAYqywEKD0NvbXByZXNzb3JTdGF0ZRIgChxDT01QUkVTU09SX1NUQVRFX1VOU1BFQ0lGSUVEEAASHAoYQ09NUFJFU1NPUl9TVEFURV9TVE9QUEVEEAESHQoZQ09NUFJFU1NPUl9TVEFURV9TVEFSVElORxACEhwKGENPTVBSRVNTT1JfU1RBVEVfUlVOTklORxADEh0KGUNPTVBSRVNTT1JfU1RBVEVfU1RPUFBJTkcQBBIcChhDT01QUkVTU09SX1NUQVRFX0JMT0NLRUQQBSp1CgxSYWRpb1F1YWxpdHkSHQoZUkFESU9fUVVBTElUWV9VTlNQRUNJRklFRBAAEhYKElJBRElPX1FVQUxJVFlfR09PRBABEhYKElJBRElPX1FVQUxJVFlfRkFJUhACEhYKElJBRElPX1FVQUxJVFlfUE9PUhADQgJIAWIGcHJvdG8z", [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, file_kusinta_iot_vendor_v1_vendor_options]);
18
18
 
19
19
  /**
20
20
  * Describes the message kusinta.iot.device.v1.Endpoint.
@@ -537,8 +537,11 @@ export declare const GatewayStreamOpenedSchema: GenMessage<GatewayStreamOpened>;
537
537
  * of access; every device's ownership, an owned device staying filed where it is, released, as
538
538
  * one of the building's own; every contact; and everything recorded per home — room history,
539
539
  * climate summaries, events, targets, modes and routines — including what is still queued for the
540
- * api-server about any of them, and the gateway's own records of who did what. Every open session
541
- * ends, and none is admitted until the wipe is done.
540
+ * api-server about any of them, and the gateway's own records of who did what. No home is held
541
+ * vacant after it (webrtc.v1 household.proto, VACANCY SETBACK): with every residency gone,
542
+ * nothing is left to show that anyone lived in any home, so the setback ends in all of them. A
543
+ * home's own wipe (household.proto, WIPE) keeps it. Every open session ends, and none is
544
+ * admitted until the wipe is done.
542
545
  *
543
546
  * Logs. A wipe takes what the gateway itself keeps; the operating system's log of the host it
544
547
  * runs on is not the gateway's to erase, and what it holds stays until the host's own retention
@@ -388,6 +388,16 @@ export declare const RemoveDeviceFromSpaceSchema: GenMessage<RemoveDeviceFromSpa
388
388
  * initial_space_id or without, that would leave a heating record across a home's boundary is
389
389
  * refused or undone as HEATING ACROSS A HOME says.
390
390
  *
391
+ * WHICH CLAIM. The claim states its ownership, and the gateway never defaults it: one with
392
+ * neither is refused as INVALID_REQUEST. A COMPANY claim is accepted only from a filing role,
393
+ * and refused as NOT_ENTITLED from anyone else, since it would grant them nothing of the device.
394
+ * A filing role may make either, in a home it lives in too: someone who both lives in a home
395
+ * and files for the building (the property owner, a technician or the gateway's administrator,
396
+ * filing the building's equipment in their own home) says which the device is, the building's
397
+ * or their own, and nothing about the caller decides it for them. A client SHOULD ask that person, and may choose
398
+ * for everyone else: COMPANY for a filing role outside the homes it lives in, RESIDENT for
399
+ * anyone without one.
400
+ *
391
401
  * @generated from message kusinta.iot.webrtc.v1.ClaimDevice
392
402
  */
393
403
  export declare type ClaimDevice = Message<"kusinta.iot.webrtc.v1.ClaimDevice"> & {
@@ -876,7 +886,14 @@ export declare const RoomLimitValueSchema: GenMessage<RoomLimitValue>;
876
886
  * A min changed to below the gateway's public-health threshold — its own setting, which no
877
887
  * operation in this contract changes; none while unset — needs accept_below_threshold, and is
878
888
  * refused without it as FAILED_PRECONDITION with metadata {"reason": "below_threshold",
879
- * "threshold_centidegrees": the threshold}. Nothing in the answer to the outer limits depends
889
+ * "threshold_centidegrees": the threshold}. Outer limits that change so that a valve they bind
890
+ * could not be set between them — no step of its setpoint grid, or of its own limit settings,
891
+ * whichever is coarser, lies in [min, max], or in [away_min, max] where min is unset — are
892
+ * refused as INVALID_REQUEST with metadata {"reason": "limits_no_setpoint",
893
+ * "step_centidegrees": that coarsest step, as a decimal string}. It is judged only over valves
894
+ * the caller sees, so it tells them nothing of a device hidden from them; a valve filed later,
895
+ * or hidden from whoever set the limits, whose grid leaves no step between them is held at the
896
+ * minimum. Limits the request leaves as they are are not judged again. Nothing in the answer to the outer limits depends
880
897
  * on the home's state — its targets, inner limits, modes, or who lives there — so setting them
881
898
  * tells the caller nothing of it; what they clamp is told to the household alone
882
899
  * (RoomClimate.outer_limit_clamp). Only the lock in the same request is decided by whether the
@@ -1436,6 +1453,12 @@ export declare const ListHeatingSchema: GenMessage<ListHeating>;
1436
1453
  * "OUTPUT_NOT_LEASED" an output whose write its producer does not state as leased.
1437
1454
  * "REST_STATE" an output whose lapse value, read through closed_value, does not
1438
1455
  * leave the contact where its role rests.
1456
+ * "TEST_RUNNING" a put that would change what a running commissioning test drives
1457
+ * or judges: an output binding of a record whose output it drives,
1458
+ * or a floor zone's rooms, control room or circuit while a test runs
1459
+ * on the zone or on a circuit it leaves or joins (PUMP_ALL_ZONES_OFF). metadata "record_id"
1460
+ * names the test's record. A name, an area share or a supply cap
1461
+ * may change meanwhile.
1439
1462
  *
1440
1463
  * A refusal about one binding names it in metadata "field", by its proto field name:
1441
1464
  * "sg_ready_block", "sg_ready_boost", "add_on_heater_block", "meter", "output",
@@ -1534,7 +1557,12 @@ export declare const PutComfortLoadSchema: GenMessage<PutComfortLoad>;
1534
1557
  * Removes a heating record by its id, naming the revision it removes. Refused as
1535
1558
  * FAILED_PRECONDITION with metadata "reason" "STALE_REVISION" when it changed since, and
1536
1559
  * "HAS_CHILDREN" while records lie under it — a plant's circuits, a circuit's zones — so
1537
- * nothing is removed that the caller did not name. Its outputs are returned to rest at once
1560
+ * nothing is removed that the caller did not name, and "TEST_RUNNING" while a running
1561
+ * commissioning test drives one of its outputs or judges it: a zone under its own test or
1562
+ * its circuit's PUMP_ALL_ZONES_OFF, a circuit while a test runs on it or on one of its
1563
+ * zones, a plant while a test runs on one of its outputs; metadata "record_id" names the
1564
+ * test's record. Removing it would change what the test's verdict covers while it runs.
1565
+ * Its outputs are returned to rest at once
1538
1566
  * (see heating.v1). Acked. An empty home's floor zone is not removed by the property owner or
1539
1567
  * the gateway administrators who are given it: NOT_ENTITLED, as PutFloorZone says.
1540
1568
  *
@@ -1832,6 +1860,11 @@ export declare const SetHomeTemplateSchema: GenMessage<SetHomeTemplate>;
1832
1860
  * test. A zone with no bound output counts as heating. Not refused once
1833
1861
  * the circuit's "floor.pump_tolerates_all_zones_off" is true
1834
1862
  * (commissioning.v1). metadata "record_id" names the zone.
1863
+ * "ZONES_SWITCHING_ON" OUTPUT_LEASE or ZONE_EFFECT on a floor zone while the circuit's
1864
+ * zones driven by running or starting tests of those kinds already
1865
+ * number its "floor.max_zones_switching_on" (commissioning.v1): their
1866
+ * leases would end together and their actuators open at once.
1867
+ * metadata "record_id" names the circuit.
1835
1868
  * "NEEDS_PASS" ZONE_EFFECT or PUMP_ALL_ZONES_OFF on outputs without a current
1836
1869
  * OUTPUT_LEASE pass; metadata "record_id" names one.
1837
1870
  * "OUTPUT_NOT_LEASED" an output its producer does not state as leased, with a lapse value
@@ -1868,9 +1901,10 @@ export declare const RunCommissioningTestSchema: GenMessage<RunCommissioningTest
1868
1901
  /**
1869
1902
  * Ends a running test. verdict ABORTED stops any test, from whoever started it or may run
1870
1903
  * it; PASSED or FAILED concludes a PUMP_ALL_ZONES_OFF test, from an installer under a
1871
- * commissioning grant only. Any other verdict, or PASSED or FAILED on another kind, is
1872
- * refused as INVALID_REQUEST "VERDICT". Its outputs return to their normal control at once,
1873
- * floor zones switching on no faster than "floor.max_zones_switching_on" allows. Answered
1904
+ * commissioning grant only, until the test's conclude_by. Any other verdict, or PASSED or
1905
+ * FAILED on another kind, is refused as INVALID_REQUEST "VERDICT". Its outputs return to
1906
+ * their normal control at once, floor zones switching on no faster than
1907
+ * "floor.max_zones_switching_on" allows. Answered
1874
1908
  * with the CommissioningRecord of the test. A test that has ended is refused as
1875
1909
  * FAILED_PRECONDITION "TEST_ENDED".
1876
1910
  *