@kusinta/iot-schema 0.2.0-beta.6 → 0.2.0-beta.61

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 (73) hide show
  1. package/package.json +44 -29
  2. package/src/kusinta/iot/access/v1/acl_pb.d.ts +146 -2
  3. package/src/kusinta/iot/access/v1/acl_pb.js +19 -2
  4. package/src/kusinta/iot/access/v1/roles_pb.d.ts +160 -4
  5. package/src/kusinta/iot/access/v1/roles_pb.js +128 -5
  6. package/src/kusinta/iot/accountlink/v1/account_link_pb.d.ts +591 -0
  7. package/src/kusinta/iot/accountlink/v1/account_link_pb.js +160 -0
  8. package/src/kusinta/iot/climate/v1/climate_pb.d.ts +1695 -0
  9. package/src/kusinta/iot/climate/v1/climate_pb.js +292 -0
  10. package/src/kusinta/iot/commissioning/v1/commissioning_pb.d.ts +1643 -0
  11. package/src/kusinta/iot/commissioning/v1/commissioning_pb.js +339 -0
  12. package/src/kusinta/iot/common/v1/pairing_pb.d.ts +24 -4
  13. package/src/kusinta/iot/common/v1/pairing_pb.js +1 -1
  14. package/src/kusinta/iot/common/v1/types_pb.d.ts +235 -0
  15. package/src/kusinta/iot/common/v1/types_pb.js +84 -2
  16. package/src/kusinta/iot/connector/v1/connector_pb.d.ts +713 -3
  17. package/src/kusinta/iot/connector/v1/connector_pb.js +107 -16
  18. package/src/kusinta/iot/device/v1/cluster_state_pb.d.ts +213 -1
  19. package/src/kusinta/iot/device/v1/cluster_state_pb.js +37 -2
  20. package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +32 -4
  21. package/src/kusinta/iot/device/v1/descriptor_pb.js +2 -1
  22. package/src/kusinta/iot/device/v1/device_event_pb.d.ts +89 -5
  23. package/src/kusinta/iot/device/v1/device_event_pb.js +1 -1
  24. package/src/kusinta/iot/device/v1/device_pb.d.ts +444 -11
  25. package/src/kusinta/iot/device/v1/device_pb.js +74 -2
  26. package/src/kusinta/iot/device/v1/properties_pb.d.ts +26 -5
  27. package/src/kusinta/iot/device/v1/properties_pb.js +1 -1
  28. package/src/kusinta/iot/device/v1/property_update_pb.d.ts +46 -2
  29. package/src/kusinta/iot/device/v1/property_update_pb.js +2 -1
  30. package/src/kusinta/iot/heating/v1/heating_pb.d.ts +659 -0
  31. package/src/kusinta/iot/heating/v1/heating_pb.js +119 -0
  32. package/src/kusinta/iot/link/v1/link_pb.d.ts +438 -0
  33. package/src/kusinta/iot/link/v1/link_pb.js +121 -0
  34. package/src/kusinta/iot/planning/v1/planning_pb.d.ts +199 -0
  35. package/src/kusinta/iot/planning/v1/planning_pb.js +48 -0
  36. package/src/kusinta/iot/planning/v1/planning_service_pb.d.ts +121 -0
  37. package/src/kusinta/iot/planning/v1/planning_service_pb.js +38 -0
  38. package/src/kusinta/iot/registration/v1/registration_pb.d.ts +18 -0
  39. package/src/kusinta/iot/registration/v1/registration_pb.js +1 -1
  40. package/src/kusinta/iot/reporting/v1/reporting_pb.d.ts +1263 -0
  41. package/src/kusinta/iot/reporting/v1/reporting_pb.js +238 -0
  42. package/src/kusinta/iot/reporting/v1/reporting_service_pb.d.ts +63 -0
  43. package/src/kusinta/iot/reporting/v1/reporting_service_pb.js +24 -0
  44. package/src/kusinta/iot/signaling/v1/signaling_pb.d.ts +939 -7
  45. package/src/kusinta/iot/signaling/v1/signaling_pb.js +163 -4
  46. package/src/kusinta/iot/signaling/v1/signaling_service_pb.d.ts +24 -1
  47. package/src/kusinta/iot/signaling/v1/signaling_service_pb.js +1 -1
  48. package/src/kusinta/iot/space/v1/space_pb.d.ts +218 -3
  49. package/src/kusinta/iot/space/v1/space_pb.js +25 -2
  50. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.d.ts +15 -0
  51. package/src/kusinta/iot/vendor/homematic/v1/homematic_pb.js +1 -1
  52. package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.d.ts +69 -0
  53. package/src/kusinta/iot/vendor/lorawan/v1/lorawan_pb.js +19 -0
  54. package/src/kusinta/iot/vendor/v1/vendor_options_pb.d.ts +5 -4
  55. package/src/kusinta/iot/vendor/v1/vendor_options_pb.js +5 -4
  56. package/src/kusinta/iot/webrtc/v1/app_token_pb.d.ts +48 -5
  57. package/src/kusinta/iot/webrtc/v1/app_token_pb.js +1 -1
  58. package/src/kusinta/iot/webrtc/v1/command_pb.d.ts +56 -0
  59. package/src/kusinta/iot/webrtc/v1/command_pb.js +1 -1
  60. package/src/kusinta/iot/webrtc/v1/device_state_pb.d.ts +179 -5
  61. package/src/kusinta/iot/webrtc/v1/device_state_pb.js +34 -5
  62. package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +603 -13
  63. package/src/kusinta/iot/webrtc/v1/envelope_pb.js +61 -4
  64. package/src/kusinta/iot/webrtc/v1/household_pb.d.ts +613 -0
  65. package/src/kusinta/iot/webrtc/v1/household_pb.js +134 -0
  66. package/src/kusinta/iot/webrtc/v1/invite_pb.d.ts +502 -0
  67. package/src/kusinta/iot/webrtc/v1/invite_pb.js +108 -0
  68. package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +2595 -75
  69. package/src/kusinta/iot/webrtc/v1/management_pb.js +382 -5
  70. package/src/kusinta/iot/webrtc/v1/members_pb.d.ts +582 -0
  71. package/src/kusinta/iot/webrtc/v1/members_pb.js +113 -0
  72. package/src/kusinta/iot/webrtc/v1/permission_push_pb.d.ts +66 -4
  73. package/src/kusinta/iot/webrtc/v1/permission_push_pb.js +9 -1
@@ -4,9 +4,22 @@
4
4
 
5
5
  import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
- import type { DeviceOwnershipType, SpaceType } from "../../common/v1/types_pb.js";
8
- import type { DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
9
- import type { Space } from "../../space/v1/space_pb.js";
7
+ import type { AssetOwner, DeviceOwnershipType, SpaceType } from "../../common/v1/types_pb.js";
8
+ import type { ConnectorId, DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
9
+ import type { RoomType, Space } from "../../space/v1/space_pb.js";
10
+ import type { MembershipRelation, Role } from "../../access/v1/roles_pb.js";
11
+ import type { LorawanProvisioning } from "../../vendor/lorawan/v1/lorawan_pb.js";
12
+ import type { LinkFunction, LinkMode, LinkSettings } from "../../link/v1/link_pb.js";
13
+ import type { ClimateModeKind, ClimateSummaryPeriod, InnerRoomLimits, RoomHistoryResolution } from "../../climate/v1/climate_pb.js";
14
+ import type { Timestamp } from "@bufbuild/protobuf/wkt";
15
+ import type { ExchangeRate, ForecastCell, PriceInterval } from "../../planning/v1/planning_pb.js";
16
+ import type { CancelHouseholdHandover, ClearClimateHistory, ConfirmHouseholdHandover, DemoteHouseholdAdmin, ExportHouseholdData, ListHouseholdHandovers, SetHomeName, StaffAppointment, StartHouseholdHandover } from "./household_pb.js";
17
+ import type { BindingRef, CommissioningFact, CommissioningGrantRecord, HouseTemplate, TestKind, TestState } from "../../commissioning/v1/commissioning_pb.js";
18
+ import type { ServiceSignal } from "../../access/v1/acl_pb.js";
19
+ import type { ComfortLoad, ComfortWindow, FloorZone, HeatingCircuit, HeatingPlant } from "../../heating/v1/heating_pb.js";
20
+ import type { LinkedService } from "../../accountlink/v1/account_link_pb.js";
21
+ import type { ApproveJoinRequest, CreateInvite, DenyJoinRequest, ListSpaceInvites, MarkInviteEmailSent, ResendInvite, RevokeInvite } from "./invite_pb.js";
22
+ import type { AnswerPromotion, ListGatewayMembers, ListPromotionRequests, RemoveFromGateway, RequestPromotion, SetAccessUntil, SetMemberRole, SetOwnerOrganisation } from "./members_pb.js";
10
23
 
11
24
  /**
12
25
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
@@ -18,6 +31,13 @@ export declare const file_kusinta_iot_webrtc_v1_management: GenFile;
18
31
  * stronger request than it looks: there is no parent whose reach could authorize
19
32
  * it, so it is reserved to the gateway's administrator.
20
33
  *
34
+ * Under an apartment only a room may be created. Creating in a home is guarded as
35
+ * UpdateSpace is, and refused whatever the caller where UpdateSpace's structure rules would
36
+ * refuse it.
37
+ *
38
+ * An apartment is created by the property owner or the gateway's administrators, with a name
39
+ * that identifies it in the building (space.v1.Space.name); an empty name is INVALID_REQUEST.
40
+ *
21
41
  * @generated from message kusinta.iot.webrtc.v1.CreateSpace
22
42
  */
23
43
  export declare type CreateSpace = Message<"kusinta.iot.webrtc.v1.CreateSpace"> & {
@@ -49,6 +69,21 @@ export declare type CreateSpace = Message<"kusinta.iot.webrtc.v1.CreateSpace"> &
49
69
  * @generated from field: kusinta.iot.identity.v1.SpaceId parent_space_id = 5;
50
70
  */
51
71
  parentSpaceId?: SpaceId | undefined;
72
+
73
+ /**
74
+ * An IANA time zone name, e.g. "Europe/Stockholm". Accepted only on a building — a
75
+ * top-level space — and refused on any other. Unset leaves it unknown.
76
+ *
77
+ * @generated from field: optional string time_zone = 6;
78
+ */
79
+ timeZone?: string | undefined;
80
+
81
+ /**
82
+ * On a ROOM only (space.v1.Space.room_type); refused on any other type as INVALID_REQUEST.
83
+ *
84
+ * @generated from field: kusinta.iot.space.v1.RoomType room_type = 7;
85
+ */
86
+ roomType: RoomType;
52
87
  };
53
88
 
54
89
  /**
@@ -58,9 +93,42 @@ export declare type CreateSpace = Message<"kusinta.iot.webrtc.v1.CreateSpace"> &
58
93
  export declare const CreateSpaceSchema: GenMessage<CreateSpace>;
59
94
 
60
95
  /**
61
- * Changes a space in place. Every descriptive field carries explicit presence:
62
- * absent means leave it alone, present means set it to this — including to the
63
- * empty string, which is how a description is cleared.
96
+ * Changes a space in place. Changes that would take a space into or out of a home, or move
97
+ * a home, are guarded by the gateway; a caller not allowed is refused as NOT_ENTITLED. A
98
+ * change is refused whatever the caller if it would leave anything but a room under an
99
+ * apartment, an apartment in a home, or — among what the caller can see — a device in two
100
+ * homes or a link across a home's boundary. What the caller cannot see never refuses it: a
101
+ * device a resident owns that would leave its owner's home, enter a home not theirs or sit
102
+ * in two homes is taken out of the moving space instead — staying in its owner's home,
103
+ * filed on the apartment, where it was in it — and any link it would carry across a
104
+ * boundary is removed. Changing the type of a space that has members needs
105
+ * ROLE_PROPERTY_OWNER or ROLE_GATEWAY_ADMIN, who see them, and is refused if it would
106
+ * leave a RESIDENT membership on a room, as INVALID_REQUEST with metadata
107
+ * {"reason": "resident_on_room"}.
108
+ *
109
+ * An apartment keeps its type while its household data is there. A change of an apartment's
110
+ * type is refused as FAILED_PRECONDITION with metadata {"reason": "handover_pending"} while a
111
+ * handover of the home is under way: pending (household.proto, HANDOVER, VACANCY), confirmed
112
+ * but its wipe not yet done, or its last residency ended and no handover recorded yet. It is
113
+ * refused as FAILED_PRECONDITION with metadata {"reason": "home_occupied"} while any residency
114
+ * of the home names someone: a current resident, or a past household whose data has not been
115
+ * wiped. The home's household data goes by a handover first (household.proto, HANDOVER, WIPE),
116
+ * never by a retype away and back. Neither refuses a change that leaves the type as it is, a
117
+ * rename among them. Every other check is made first — who may make the change, and the
118
+ * refusals of its shape as INVALID_REQUEST, "resident_on_room" among them — and
119
+ * "handover_pending" before "home_occupied".
120
+ *
121
+ * The name of an apartment is the building's identifier for it (space.v1.Space.name), and is
122
+ * changed only by the property owner or the gateway's administrators: from anyone else, a
123
+ * request setting it is refused whole as NOT_ENTITLED. The household names its home with
124
+ * SetHomeName instead.
125
+ *
126
+ * A heating record the change would leave across a home's boundary is refused or undone as
127
+ * HEATING ACROSS A HOME says.
128
+ *
129
+ * Every descriptive field carries explicit presence: absent means leave it alone, present
130
+ * means set it to this — including to the empty string, which is how a description is
131
+ * cleared.
64
132
  *
65
133
  * @generated from message kusinta.iot.webrtc.v1.UpdateSpace
66
134
  */
@@ -111,6 +179,22 @@ export declare type UpdateSpace = Message<"kusinta.iot.webrtc.v1.UpdateSpace"> &
111
179
  value: boolean;
112
180
  case: "detach";
113
181
  } | { case: undefined; value?: undefined };
182
+
183
+ /**
184
+ * An IANA time zone name, e.g. "Europe/Stockholm". Accepted only on a building — a
185
+ * top-level space — and refused on any other. Unset leaves it unchanged; the empty
186
+ * string clears it.
187
+ *
188
+ * @generated from field: optional string time_zone = 8;
189
+ */
190
+ timeZone?: string | undefined;
191
+
192
+ /**
193
+ * Set: the room's type changes (UNSPECIFIED clears it). On a ROOM only.
194
+ *
195
+ * @generated from field: optional kusinta.iot.space.v1.RoomType room_type = 9;
196
+ */
197
+ roomType?: RoomType | undefined;
114
198
  };
115
199
 
116
200
  /**
@@ -122,7 +206,18 @@ export declare const UpdateSpaceSchema: GenMessage<UpdateSpace>;
122
206
  /**
123
207
  * Deletes a space. Refused if the space still holds devices or sub-spaces unless
124
208
  * cascade is set, so that emptying a building is always something the caller
125
- * asked for rather than something a stale client did by accident.
209
+ * asked for rather than something a stale client did by accident. Deleting a home, or
210
+ * anything in one, is guarded as UpdateSpace is, heating records included
211
+ * (HEATING ACROSS A HOME).
212
+ *
213
+ * Refused as FAILED_PRECONDITION with metadata {"reason": "handover_pending"}, cascade or not,
214
+ * while a handover is under way, as UpdateSpace has it, of the home deleted or of any home
215
+ * beneath the space: a household's records go by its wipe (household.proto, WIPE), never by a
216
+ * deletion. Refused as FAILED_PRECONDITION with metadata {"reason": "home_occupied"}, cascade or
217
+ * not, while any residency of the home deleted, or of any home beneath the space, names someone:
218
+ * a current resident, or a past household whose data has not been wiped. The home's household
219
+ * data goes by a handover first (household.proto, HANDOVER, WIPE), and no residency names a home
220
+ * that was deleted. "handover_pending" is checked before "home_occupied".
126
221
  *
127
222
  * @generated from message kusinta.iot.webrtc.v1.DeleteSpace
128
223
  */
@@ -145,10 +240,32 @@ export declare type DeleteSpace = Message<"kusinta.iot.webrtc.v1.DeleteSpace"> &
145
240
  export declare const DeleteSpaceSchema: GenMessage<DeleteSpace>;
146
241
 
147
242
  /**
148
- * Adds a user to a space, granting them reach of it and everything beneath it.
243
+ * Adds a user to a space, granting them reach of it and everything beneath it — except
244
+ * that a RESIDENT membership reaches no home beneath it (see access.v1.MembershipRelation).
149
245
  * The user need not be known to the gateway beforehand — identities are minted by
150
246
  * the token issuer, and this records that one of them belongs here.
151
247
  *
248
+ * Assigning a user who is already a member changes their relation to the space.
249
+ * RESIDENT is refused on a room; see access.v1.MembershipRelation.
250
+ *
251
+ * Nobody is made a household admin through it: HOUSEHOLD_ADMIN is refused as
252
+ * INVALID_REQUEST, since that comes only by promotion or appointment (household.proto). A
253
+ * HOUSEHOLD_ADMIN membership is never changed through it either: assigning onto one is refused
254
+ * as FAILED_PRECONDITION with metadata {"reason": "household_admin"}; DemoteHouseholdAdmin and
255
+ * RemoveUserFromSpace are how it ends.
256
+ *
257
+ * Who may change who belongs to a home is restricted by the gateway; a caller not allowed is
258
+ * refused as NOT_ENTITLED. Residents see who is filed on their home in Space.members.
259
+ *
260
+ * A membership the caller is not told of under this user id (a residency, to anyone outside
261
+ * its household: access.v1.MembershipRelation, RESIDENCY IDS) is never changed through it:
262
+ * assigning onto it is refused as NOT_ENTITLED, and RemoveUserFromSpace answers as for one
263
+ * that does not exist. user_id is never a residency id.
264
+ *
265
+ * While a vacated handover of the home is pending, the property owner or a gateway
266
+ * administrator assigning RESIDENT to someone outside the departing household completes it
267
+ * first rather than being refused as "handover_pending" (household.proto, QUICK TURNOVER).
268
+ *
152
269
  * @generated from message kusinta.iot.webrtc.v1.AssignUserToSpace
153
270
  */
154
271
  export declare type AssignUserToSpace = Message<"kusinta.iot.webrtc.v1.AssignUserToSpace"> & {
@@ -161,6 +278,15 @@ export declare type AssignUserToSpace = Message<"kusinta.iot.webrtc.v1.AssignUse
161
278
  * @generated from field: kusinta.iot.identity.v1.UserId user_id = 2;
162
279
  */
163
280
  userId?: UserId | undefined;
281
+
282
+ /**
283
+ * How the user stands to the space — whether they live there or are there for the
284
+ * building. Required: UNSPECIFIED is refused, never defaulted. See
285
+ * access.v1.MembershipRelation for what each lets a member see of a home.
286
+ *
287
+ * @generated from field: kusinta.iot.access.v1.MembershipRelation relation = 4;
288
+ */
289
+ relation: MembershipRelation;
164
290
  };
165
291
 
166
292
  /**
@@ -173,6 +299,18 @@ export declare const AssignUserToSpaceSchema: GenMessage<AssignUserToSpace>;
173
299
  * Removes a user's membership of a space. Losing reach also drops whatever the
174
300
  * user was streaming from it, announced by LivePermissionUpdate.
175
301
  *
302
+ * Removing someone else from a home is guarded as assigning is: within the household, it is a
303
+ * household admin's (household.proto). Anyone may remove themselves, save the last household
304
+ * admin of a home that has other residents ("last_household_admin", household.proto, LAST
305
+ * ADMIN, which also refuses a household admin removing another when that would leave none). A
306
+ * membership the caller is not told of under the user id given (see AssignUserToSpace) is
307
+ * answered as one that does not exist, and stays.
308
+ *
309
+ * user_id may be a residency id (access.v1.MembershipRelation, RESIDENCY IDS): it then ends
310
+ * that residency, if space_id is its home, and answers as for one that does not exist
311
+ * otherwise. This is how a property owner or an administrator ends the residency of
312
+ * someone who moved out.
313
+ *
176
314
  * @generated from message kusinta.iot.webrtc.v1.RemoveUserFromSpace
177
315
  */
178
316
  export declare type RemoveUserFromSpace = Message<"kusinta.iot.webrtc.v1.RemoveUserFromSpace"> & {
@@ -197,6 +335,14 @@ export declare const RemoveUserFromSpaceSchema: GenMessage<RemoveUserFromSpace>;
197
335
  * Files a device into a space. A device may sit in several spaces at once; this
198
336
  * is additive, and filing a device where it already sits is a no-op.
199
337
  *
338
+ * Into a home go only the building's own devices and devices its residents own, and a
339
+ * device belongs to one home at most; filing into, out of or beside a home is guarded by
340
+ * the gateway, and within the household it is a household admin's, save a device a resident
341
+ * owns, which its owner files (household.proto). A caller not allowed is refused as
342
+ * NOT_ENTITLED, and filing that would leave a link the caller can see across a home's
343
+ * boundary is refused whatever the caller; one they cannot see is removed instead. A heating
344
+ * record left across it is refused or undone as HEATING ACROSS A HOME says.
345
+ *
200
346
  * @generated from message kusinta.iot.webrtc.v1.PlaceDeviceInSpace
201
347
  */
202
348
  export declare type PlaceDeviceInSpace = Message<"kusinta.iot.webrtc.v1.PlaceDeviceInSpace"> & {
@@ -221,6 +367,10 @@ export declare const PlaceDeviceInSpaceSchema: GenMessage<PlaceDeviceInSpace>;
221
367
  * Takes a device out of one space, leaving any others intact. A device in no
222
368
  * space and with no owner is unfiled, and visible only to the administrator.
223
369
  *
370
+ * Taking a device out of a home is guarded as PlaceDeviceInSpace is, and removes its links
371
+ * to devices still in the home; a heating record it would leave across the boundary is refused
372
+ * or undone as HEATING ACROSS A HOME says.
373
+ *
224
374
  * @generated from message kusinta.iot.webrtc.v1.RemoveDeviceFromSpace
225
375
  */
226
376
  export declare type RemoveDeviceFromSpace = Message<"kusinta.iot.webrtc.v1.RemoveDeviceFromSpace"> & {
@@ -244,7 +394,25 @@ export declare const RemoveDeviceFromSpaceSchema: GenMessage<RemoveDeviceFromSpa
244
394
  /**
245
395
  * Takes ownership of a device. Ownership is reach in its own right: an owner may
246
396
  * see and control their device whatever their gateway-wide role permits, and may
247
- * file it into spaces they belong to.
397
+ * file it into spaces they belong to, and the rooms of a home they live in — though into a
398
+ * home only if they live there (see PlaceDeviceInSpace).
399
+ *
400
+ * Only a RESIDENT claim makes the caller the owner. A COMPANY claim records that the
401
+ * building owns the device, names no person, and grants the caller no reach. The gateway keeps
402
+ * who made it for 24 hours only, for ReleaseDevice's undo, shows it to nobody, and erases it
403
+ * then, or sooner with that person. Claims of a device in a home, or of one already claimed,
404
+ * are restricted by the gateway. A claim, with initial_space_id or without, that would leave a
405
+ * heating record across a home's boundary is refused or undone as HEATING ACROSS A HOME says.
406
+ *
407
+ * WHICH CLAIM. The claim states its ownership, and the gateway never defaults it: one with
408
+ * neither is refused as INVALID_REQUEST. A COMPANY claim is accepted only from a filing role,
409
+ * and refused as NOT_ENTITLED from anyone else, since it would grant them nothing of the device.
410
+ * A filing role may make either, in a home it lives in too: someone who both lives in a home
411
+ * and files for the building (the property owner, a technician or the gateway's administrator,
412
+ * filing the building's equipment in their own home) says which the device is, the building's
413
+ * or their own, and nothing about the caller decides it for them. A client SHOULD ask that person, and may choose
414
+ * for everyone else: COMPANY for a filing role outside the homes it lives in, RESIDENT for
415
+ * anyone without one.
248
416
  *
249
417
  * @generated from message kusinta.iot.webrtc.v1.ClaimDevice
250
418
  */
@@ -296,8 +464,15 @@ export declare type ClaimDevice = Message<"kusinta.iot.webrtc.v1.ClaimDevice"> &
296
464
  export declare const ClaimDeviceSchema: GenMessage<ClaimDevice>;
297
465
 
298
466
  /**
299
- * Gives up ownership. The device keeps whatever space filing it has; if it has
300
- * none it becomes unfiled.
467
+ * Gives up ownership. The device keeps whatever space filing it has, except that a device in a
468
+ * home stays filed in the home alone, as one of the building's own devices there — as when its
469
+ * owner moves out; if it has none it becomes unfiled. A device a person owns is released by
470
+ * that person alone. One claimed for the building is released by the property owner or a
471
+ * gateway administrator who reaches it, at any time; and, within 24 hours of the claim, by the
472
+ * filing role who made it, while they still reach it, no heating record binds it and no asset
473
+ * owner is recorded, so that a building claim made by mistake is undone by whoever made it.
474
+ * Anyone else is refused as NOT_ENTITLED. A heating record the release would leave
475
+ * across a home's boundary is undone, never refused (HEATING ACROSS A HOME).
301
476
  *
302
477
  * @generated from message kusinta.iot.webrtc.v1.ReleaseDevice
303
478
  */
@@ -314,6 +489,66 @@ export declare type ReleaseDevice = Message<"kusinta.iot.webrtc.v1.ReleaseDevice
314
489
  */
315
490
  export declare const ReleaseDeviceSchema: GenMessage<ReleaseDevice>;
316
491
 
492
+ /**
493
+ * Registers a device with the system that will admit it, so that it can join
494
+ * later. For a technology where a device is enrolled as a record rather than
495
+ * adopted during a window — see common.v1.PairingWindow for the other case, where
496
+ * something joins a hub during a window and the arrival is attributed to the
497
+ * caller. A LoRaWAN device has no window: it is written into a network server and
498
+ * joins whenever it is next powered, which may be minutes, days, or never.
499
+ *
500
+ * Answered with the ordinary ManagementAck. A provision writes a record and returns
501
+ * nothing to show; the device itself is announced by device_added if and when it
502
+ * joins, the same path every other device takes — which is why this adds no
503
+ * ManagementResult arm. A new result arm is a compile error in a consumer that
504
+ * matches the result exhaustively; a new request arm is not.
505
+ *
506
+ * Registering and owning stay two operations. ClaimDevice records the caller and
507
+ * carries possession_proof, so a device that has not joined yet is still claimable
508
+ * by whoever holds it — and because the connector derives the device id and the
509
+ * serial from the identifier here, that claim can be made before the join.
510
+ *
511
+ * Provisioning the same identifier twice is an upsert: it replaces the credentials
512
+ * rather than being refused as a conflict, so correcting a mistyped key does not
513
+ * require removing the device first. Removing a record is a distinct act from
514
+ * giving up ownership (ReleaseDevice) and is left to a later operation.
515
+ *
516
+ * @generated from message kusinta.iot.webrtc.v1.ProvisionDevice
517
+ */
518
+ export declare type ProvisionDevice = Message<"kusinta.iot.webrtc.v1.ProvisionDevice"> & {
519
+ /**
520
+ * Required, unlike a pairing window's connector target. A registration is written
521
+ * to one specific registry; there is no sensible "open them all and see what
522
+ * joins". The app names it from the connector enumeration, targeting a connector
523
+ * that declares ConnectorInfo.supports_provisioning.
524
+ *
525
+ * @generated from field: kusinta.iot.identity.v1.ConnectorId connector_id = 1;
526
+ */
527
+ connectorId?: ConnectorId | undefined;
528
+
529
+ /**
530
+ * What the registry needs to admit the device, which differs entirely by
531
+ * technology — a oneof per technology rather than a flat set of fields, for the
532
+ * reason LinkSettings gives: the second technology to arrive must not turn this
533
+ * into a bag of unrelated optionals named after the first.
534
+ *
535
+ * @generated from oneof kusinta.iot.webrtc.v1.ProvisionDevice.credentials
536
+ */
537
+ credentials: {
538
+ /**
539
+ * @generated from field: kusinta.iot.vendor.lorawan.v1.LorawanProvisioning lorawan = 2;
540
+ */
541
+ value: LorawanProvisioning;
542
+ case: "lorawan";
543
+ } | { case: undefined; value?: undefined };
544
+ };
545
+
546
+ /**
547
+ * Describes the message kusinta.iot.webrtc.v1.ProvisionDevice.
548
+ * Use `create(ProvisionDeviceSchema)` to create a new message.
549
+ */
550
+ export declare const ProvisionDeviceSchema: GenMessage<ProvisionDevice>;
551
+
317
552
  /**
318
553
  * Asks for the spaces the caller can reach. Unset root_space_id means all of
319
554
  * them, which for most users is one apartment and for an administrator is the
@@ -343,7 +578,9 @@ export declare const ListSpacesSchema: GenMessage<ListSpaces>;
343
578
  *
344
579
  * device_ids on each Space are filtered to what the caller may see. An
345
580
  * unfiltered tree would list every device on the gateway by id, which is the
346
- * enumeration channel the snapshot filter exists to close.
581
+ * enumeration channel the snapshot filter exists to close. To a caller who sees a home as
582
+ * service, what is new in it is listed as it happens and what is gone at once, its members
583
+ * included where they are shown (see Space.members).
347
584
  *
348
585
  * @generated from message kusinta.iot.webrtc.v1.SpaceTree
349
586
  */
@@ -383,73 +620,2356 @@ export declare const ManagementAckSchema: GenMessage<ManagementAck>;
383
620
  * message kind, so these can never be gated by a table keyed on the envelope case
384
621
  * the way device messages are. Keeping them behind one case means one place that
385
622
  * must authorize, and one refusal path that must not leak whether a target exists.
623
+ * Links one device to another, so the sender leads the receiver. The gateway
624
+ * resolves which underlying connections that needs and asks the connector for
625
+ * them; a caller names two devices and what the link is for.
386
626
  *
387
- * @generated from message kusinta.iot.webrtc.v1.ManagementRequest
627
+ * Authorized against both ends, and not symmetrically. Leading a device is a
628
+ * standing grant of control over it, so the receiver requires ownership or a
629
+ * servicing role. The sender's requirement depends on the mode: a gateway-kept
630
+ * link only reads what the caller can already see, while a device-to-device one
631
+ * writes configuration to the sender and spends its battery, which is a change
632
+ * to someone else's hardware.
633
+ *
634
+ * In a home it is the other way round: links between its devices are its residents' to
635
+ * make, change and remove, and in an empty home (household.proto, EMPTY HOME) the property
636
+ * owner's and the gateway administrators' who reach it; any other caller who reaches it as
637
+ * service is refused as NOT_ENTITLED. A link between a device in a home and one outside it is
638
+ * refused to anyone.
639
+ * The same holds for UpdateDeviceLink and RemoveDeviceLink.
640
+ *
641
+ * @generated from message kusinta.iot.webrtc.v1.CreateDeviceLink
388
642
  */
389
- export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.ManagementRequest"> & {
643
+ export declare type CreateDeviceLink = Message<"kusinta.iot.webrtc.v1.CreateDeviceLink"> & {
390
644
  /**
391
- * @generated from oneof kusinta.iot.webrtc.v1.ManagementRequest.request
645
+ * @generated from field: kusinta.iot.identity.v1.DeviceId sender = 1;
392
646
  */
393
- request: {
394
- /**
395
- * @generated from field: kusinta.iot.webrtc.v1.CreateSpace create_space = 1;
396
- */
397
- value: CreateSpace;
398
- case: "createSpace";
399
- } | {
400
- /**
401
- * @generated from field: kusinta.iot.webrtc.v1.UpdateSpace update_space = 2;
402
- */
403
- value: UpdateSpace;
404
- case: "updateSpace";
405
- } | {
406
- /**
407
- * @generated from field: kusinta.iot.webrtc.v1.DeleteSpace delete_space = 3;
408
- */
409
- value: DeleteSpace;
410
- case: "deleteSpace";
411
- } | {
412
- /**
413
- * @generated from field: kusinta.iot.webrtc.v1.AssignUserToSpace assign_user_to_space = 4;
414
- */
415
- value: AssignUserToSpace;
416
- case: "assignUserToSpace";
417
- } | {
418
- /**
419
- * @generated from field: kusinta.iot.webrtc.v1.RemoveUserFromSpace remove_user_from_space = 5;
420
- */
421
- value: RemoveUserFromSpace;
422
- case: "removeUserFromSpace";
423
- } | {
424
- /**
425
- * @generated from field: kusinta.iot.webrtc.v1.PlaceDeviceInSpace place_device_in_space = 6;
426
- */
427
- value: PlaceDeviceInSpace;
428
- case: "placeDeviceInSpace";
429
- } | {
430
- /**
431
- * @generated from field: kusinta.iot.webrtc.v1.RemoveDeviceFromSpace remove_device_from_space = 7;
432
- */
433
- value: RemoveDeviceFromSpace;
434
- case: "removeDeviceFromSpace";
435
- } | {
436
- /**
437
- * @generated from field: kusinta.iot.webrtc.v1.ClaimDevice claim_device = 8;
438
- */
439
- value: ClaimDevice;
440
- case: "claimDevice";
441
- } | {
442
- /**
443
- * @generated from field: kusinta.iot.webrtc.v1.ReleaseDevice release_device = 9;
444
- */
445
- value: ReleaseDevice;
446
- case: "releaseDevice";
447
- } | {
448
- /**
449
- * @generated from field: kusinta.iot.webrtc.v1.ListSpaces list_spaces = 10;
450
- */
451
- value: ListSpaces;
452
- case: "listSpaces";
647
+ sender?: DeviceId | undefined;
648
+
649
+ /**
650
+ * @generated from field: kusinta.iot.identity.v1.DeviceId receiver = 2;
651
+ */
652
+ receiver?: DeviceId | undefined;
653
+
654
+ /**
655
+ * @generated from field: kusinta.iot.link.v1.LinkFunction function = 3;
656
+ */
657
+ function: LinkFunction;
658
+
659
+ /**
660
+ * Unset lets the gateway choose, which prefers a device-to-device link where
661
+ * one can be brokered: it survives a gateway outage and runs at the devices'
662
+ * own rate. Name one to override that.
663
+ *
664
+ * @generated from field: kusinta.iot.link.v1.LinkMode mode = 4;
665
+ */
666
+ mode: LinkMode;
667
+
668
+ /**
669
+ * How a gateway-kept link is to behave, set as it is made. Carried here as
670
+ * well as on UpdateDeviceLink so that a link does not have to exist in a
671
+ * configured-by-nobody state first — a soft climate link created without a
672
+ * target is one that holds the room at nothing until a second request
673
+ * arrives, and every reader would have to handle that transient forever.
674
+ *
675
+ * Unset is still allowed and still means unconfigured, since a hard link has
676
+ * nothing to configure and a caller may genuinely not know the target yet.
677
+ *
678
+ * @generated from field: kusinta.iot.link.v1.LinkSettings settings = 5;
679
+ */
680
+ settings?: LinkSettings | undefined;
681
+ };
682
+
683
+ /**
684
+ * Describes the message kusinta.iot.webrtc.v1.CreateDeviceLink.
685
+ * Use `create(CreateDeviceLinkSchema)` to create a new message.
686
+ */
687
+ export declare const CreateDeviceLinkSchema: GenMessage<CreateDeviceLink>;
688
+
689
+ /**
690
+ * Removes a link. Note that on at least one vendor, removing a link disturbs the
691
+ * receiver's own settings and the connector must repair them, so this is not the
692
+ * no-op it appears to be.
693
+ *
694
+ * @generated from message kusinta.iot.webrtc.v1.RemoveDeviceLink
695
+ */
696
+ export declare type RemoveDeviceLink = Message<"kusinta.iot.webrtc.v1.RemoveDeviceLink"> & {
697
+ /**
698
+ * @generated from field: string link_id = 1;
699
+ */
700
+ linkId: string;
701
+ };
702
+
703
+ /**
704
+ * Describes the message kusinta.iot.webrtc.v1.RemoveDeviceLink.
705
+ * Use `create(RemoveDeviceLinkSchema)` to create a new message.
706
+ */
707
+ export declare const RemoveDeviceLinkSchema: GenMessage<RemoveDeviceLink>;
708
+
709
+ /**
710
+ * Changes how a gateway-kept link behaves — for a climate lead, the temperature
711
+ * it is to hold.
712
+ *
713
+ * Refused on a link that has nothing to configure — see LinkSettings — rather
714
+ * than accepted as a no-op, so that a caller who has mistaken which link they
715
+ * are holding is told.
716
+ *
717
+ * Authorized against both ends, as creating and removing the link are: deciding
718
+ * what temperature a room is held at is directing a device, not adjusting one,
719
+ * so it takes ownership of the ends or a servicing role, not the permission to
720
+ * turn a thermostat up. In a home it is its residents' instead (see CreateDeviceLink).
721
+ *
722
+ * @generated from message kusinta.iot.webrtc.v1.UpdateDeviceLink
723
+ */
724
+ export declare type UpdateDeviceLink = Message<"kusinta.iot.webrtc.v1.UpdateDeviceLink"> & {
725
+ /**
726
+ * @generated from field: string link_id = 1;
727
+ */
728
+ linkId: string;
729
+
730
+ /**
731
+ * Replaces the link's settings rather than patching them: the settings of one
732
+ * function are few and are set together, so there is no half-update worth
733
+ * expressing. This is why it does not follow UpdateSpace's per-field optional
734
+ * shape, which exists for a message whose fields genuinely move alone.
735
+ *
736
+ * Unset is refused rather than being given a meaning. It would have to mean
737
+ * either "leave everything alone", making the request a no-op, or "clear the
738
+ * settings", which is the one thing that reads like an accident — and the
739
+ * wire cannot tell those two callers apart.
740
+ *
741
+ * @generated from field: kusinta.iot.link.v1.LinkSettings settings = 2;
742
+ */
743
+ settings?: LinkSettings | undefined;
744
+ };
745
+
746
+ /**
747
+ * Describes the message kusinta.iot.webrtc.v1.UpdateDeviceLink.
748
+ * Use `create(UpdateDeviceLinkSchema)` to create a new message.
749
+ */
750
+ export declare const UpdateDeviceLinkSchema: GenMessage<UpdateDeviceLink>;
751
+
752
+ /**
753
+ * Lists links. Unset device_id lists every link among devices the caller can
754
+ * reach; naming one narrows it to that device's own, in either direction.
755
+ *
756
+ * A link with an end in a home reaches a caller who sees it as service with
757
+ * DeviceLink.details_withheld set, and what that withholds unset — a new link
758
+ * as it is made, a removed one at once — and not at all when either end is a
759
+ * device a resident owns.
760
+ *
761
+ * @generated from message kusinta.iot.webrtc.v1.ListDeviceLinks
762
+ */
763
+ export declare type ListDeviceLinks = Message<"kusinta.iot.webrtc.v1.ListDeviceLinks"> & {
764
+ /**
765
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
766
+ */
767
+ deviceId?: DeviceId | undefined;
768
+ };
769
+
770
+ /**
771
+ * Describes the message kusinta.iot.webrtc.v1.ListDeviceLinks.
772
+ * Use `create(ListDeviceLinksSchema)` to create a new message.
773
+ */
774
+ export declare const ListDeviceLinksSchema: GenMessage<ListDeviceLinks>;
775
+
776
+ /**
777
+ * Sets the temperature a room is to be held at.
778
+ *
779
+ * Authorized as adjusting, not directing: WRITE on the room is enough. It is the same act
780
+ * as turning a radiator's knob; setting up what the room obeys is ConfigureRoomClimate,
781
+ * and stays with owners, except the lock in a home.
782
+ *
783
+ * In a home, only its residents may set it, and in an empty home the property owner and the
784
+ * gateway administrators who reach it (household.proto, EMPTY HOME); any other caller who
785
+ * reaches the room as service is refused as NOT_ENTITLED.
786
+ *
787
+ * Clamped to the room's inner limits (climate.v1.InnerRoomLimits) rather than refused outside
788
+ * them, and the clamped value is what the room's RoomClimate then reports; never to the outer
789
+ * ones (climate.v1.OuterRoomLimits, WHAT THEY BIND).
790
+ *
791
+ * @generated from message kusinta.iot.webrtc.v1.SetRoomTarget
792
+ */
793
+ export declare type SetRoomTarget = Message<"kusinta.iot.webrtc.v1.SetRoomTarget"> & {
794
+ /**
795
+ * @generated from field: kusinta.iot.identity.v1.SpaceId room_id = 1;
796
+ */
797
+ roomId?: SpaceId | undefined;
798
+
799
+ /**
800
+ * Unset clears the target: the room goes back to having none (NO_TARGET) and its
801
+ * devices to their own behaviour. With presence, so that a request that forgot the
802
+ * field is not read as 0 °C and clamped to the room's minimum.
803
+ *
804
+ * @generated from field: optional sint32 target_centidegrees = 2;
805
+ */
806
+ targetCentidegrees?: number | undefined;
807
+ };
808
+
809
+ /**
810
+ * Describes the message kusinta.iot.webrtc.v1.SetRoomTarget.
811
+ * Use `create(SetRoomTargetSchema)` to create a new message.
812
+ */
813
+ export declare const SetRoomTargetSchema: GenMessage<SetRoomTarget>;
814
+
815
+ /**
816
+ * The sensors a room measures with, in order of preference. A message of its own so that
817
+ * "leave the sensors alone" (unset) differs from "set" on the wire. It orders the
818
+ * building's sensors only (see climate.v1.RoomClimate.sensor_ids); set but empty returns
819
+ * them to the default, every building temperature sensor filed in the room in filing
820
+ * order.
821
+ *
822
+ * @generated from message kusinta.iot.webrtc.v1.RoomSensors
823
+ */
824
+ export declare type RoomSensors = Message<"kusinta.iot.webrtc.v1.RoomSensors"> & {
825
+ /**
826
+ * @generated from field: repeated kusinta.iot.identity.v1.DeviceId sensor_ids = 1;
827
+ */
828
+ sensorIds: DeviceId[];
829
+ };
830
+
831
+ /**
832
+ * Describes the message kusinta.iot.webrtc.v1.RoomSensors.
833
+ * Use `create(RoomSensorsSchema)` to create a new message.
834
+ */
835
+ export declare const RoomSensorsSchema: GenMessage<RoomSensors>;
836
+
837
+ /**
838
+ * A room's limits. A message of its own so that "leave the limits alone" (unset) differs
839
+ * from "set" — and, set, an unset bound inside it removes that bound, which a bare
840
+ * optional on the request could not say.
841
+ *
842
+ * @generated from message kusinta.iot.webrtc.v1.RoomLimits
843
+ */
844
+ export declare type RoomLimits = Message<"kusinta.iot.webrtc.v1.RoomLimits"> & {
845
+ /**
846
+ * @generated from field: optional sint32 min_centidegrees = 1;
847
+ */
848
+ minCentidegrees?: number | undefined;
849
+
850
+ /**
851
+ * @generated from field: optional sint32 max_centidegrees = 2;
852
+ */
853
+ maxCentidegrees?: number | undefined;
854
+ };
855
+
856
+ /**
857
+ * Describes the message kusinta.iot.webrtc.v1.RoomLimits.
858
+ * Use `create(RoomLimitsSchema)` to create a new message.
859
+ */
860
+ export declare const RoomLimitsSchema: GenMessage<RoomLimits>;
861
+
862
+ /**
863
+ * One bound that moves alone, for the same reason as RoomLimits: unset leaves the bound as it
864
+ * is; set, an unset centidegrees removes it.
865
+ *
866
+ * @generated from message kusinta.iot.webrtc.v1.RoomLimitValue
867
+ */
868
+ export declare type RoomLimitValue = Message<"kusinta.iot.webrtc.v1.RoomLimitValue"> & {
869
+ /**
870
+ * @generated from field: optional sint32 centidegrees = 1;
871
+ */
872
+ centidegrees?: number | undefined;
873
+ };
874
+
875
+ /**
876
+ * Describes the message kusinta.iot.webrtc.v1.RoomLimitValue.
877
+ * Use `create(RoomLimitValueSchema)` to create a new message.
878
+ */
879
+ export declare const RoomLimitValueSchema: GenMessage<RoomLimitValue>;
880
+
881
+ /**
882
+ * Configures what a room obeys: its outer limits, its sensors, and whether a change made by
883
+ * hand at one of its devices counts. Authorized as directing, because this decides what
884
+ * everybody in the room can do, and each part by its own deciders:
885
+ * * the outer limits — limits, away_min, move_in_target (climate.v1.OuterRoomLimits) — the
886
+ * property owner or a gateway administrator who reaches the room, or an installer under an
887
+ * active commissioning grant covering it (commissioning.v1, GRANTS), in a home or not. A
888
+ * household's own limits are SetInnerRoomLimits;
889
+ * * sensors — ROLE_PROPERTY_OWNER or a filing role. It orders only the building's own
890
+ * sensors (see RoomClimate.sensor_ids);
891
+ * * lock_device_controls — in a home, its residents', who may send this request with nothing
892
+ * else set, and in an empty home the property owner's and the gateway administrators' who
893
+ * reach it (household.proto, EMPTY HOME); outside homes, ROLE_PROPERTY_OWNER's or a filing
894
+ * role's, as the sensors are.
895
+ * A request that sets anything its caller may not is refused whole as NOT_ENTITLED, so nothing
896
+ * of it applies, with metadata {"field": the first such part, by its proto field name —
897
+ * "limits", "away_min", "move_in_target", "sensors" or "lock_device_controls"}, which tells the
898
+ * caller only what they may not set. Rollout note: outer limits were once a filing role's; a
899
+ * filing role that is neither ROLE_PROPERTY_OWNER nor ROLE_GATEWAY_ADMIN, without a grant, is
900
+ * now refused them, so an app offers the outer limits to those roles alone and sends sensors on
901
+ * their own.
902
+ *
903
+ * Each outer bound the request changes is stamped with the caller's role and the time
904
+ * (climate.v1.OuterLimit); one set to the value it has keeps its stamp. As the outer limits
905
+ * will stand, min above max, away_min above min or max, or move_in_target outside [min, max]
906
+ * where those are set, is refused as INVALID_REQUEST with metadata {"reason": "limits_order"}.
907
+ * A min changed to below the gateway's public-health threshold — its own setting, which no
908
+ * operation in this contract changes; none while unset — needs accept_below_threshold, and is
909
+ * refused without it as FAILED_PRECONDITION with metadata {"reason": "below_threshold",
910
+ * "threshold_centidegrees": the threshold}. Outer limits that change so that a valve they bind
911
+ * could not be set between them — no step of its setpoint grid, or of its own limit settings,
912
+ * whichever is coarser, lies in [min, max], or in [away_min, max] where min is unset — are
913
+ * refused as INVALID_REQUEST with metadata {"reason": "limits_no_setpoint",
914
+ * "step_centidegrees": that coarsest step, as a decimal string}. It is judged only over valves
915
+ * the caller sees, so it tells them nothing of a device hidden from them; a valve filed later,
916
+ * or hidden from whoever set the limits, whose grid leaves no step between them is held at the
917
+ * minimum. Limits the request leaves as they are are not judged again. Nothing in the answer to the outer limits depends
918
+ * on the home's state — its targets, inner limits, modes, or who lives there — so setting them
919
+ * tells the caller nothing of it; what they clamp is told to the household alone
920
+ * (RoomClimate.outer_limit_clamp). Only the lock in the same request is decided by whether the
921
+ * home is empty, as EMPTY HOME says.
922
+ *
923
+ * Each field moves alone, as on UpdateSpace: unset leaves it as it is.
924
+ *
925
+ * @generated from message kusinta.iot.webrtc.v1.ConfigureRoomClimate
926
+ */
927
+ export declare type ConfigureRoomClimate = Message<"kusinta.iot.webrtc.v1.ConfigureRoomClimate"> & {
928
+ /**
929
+ * @generated from field: kusinta.iot.identity.v1.SpaceId room_id = 1;
930
+ */
931
+ roomId?: SpaceId | undefined;
932
+
933
+ /**
934
+ * The outer limits' min and max (climate.v1.OuterRoomLimits); replaces both bounds, see
935
+ * RoomLimits.
936
+ *
937
+ * @generated from field: kusinta.iot.webrtc.v1.RoomLimits limits = 2;
938
+ */
939
+ limits?: RoomLimits | undefined;
940
+
941
+ /**
942
+ * Only the building's sensors filed in this room; any other — including a sensor a
943
+ * resident owns — is refused, the same way whether or not it exists.
944
+ *
945
+ * @generated from field: kusinta.iot.webrtc.v1.RoomSensors sensors = 3;
946
+ */
947
+ sensors?: RoomSensors | undefined;
948
+
949
+ /**
950
+ * @generated from field: optional bool lock_device_controls = 4;
951
+ */
952
+ lockDeviceControls?: boolean | undefined;
953
+
954
+ /**
955
+ * The outer limits' away minimum and move-in target, each alone; see RoomLimitValue.
956
+ *
957
+ * @generated from field: kusinta.iot.webrtc.v1.RoomLimitValue away_min = 5;
958
+ */
959
+ awayMin?: RoomLimitValue | undefined;
960
+
961
+ /**
962
+ * @generated from field: kusinta.iot.webrtc.v1.RoomLimitValue move_in_target = 6;
963
+ */
964
+ moveInTarget?: RoomLimitValue | undefined;
965
+
966
+ /**
967
+ * The caller accepts a min below the public-health threshold, recorded with the bound
968
+ * (OuterRoomLimits.min_accepted_threshold_centidegrees). Ignored on a request that sets no
969
+ * such min.
970
+ *
971
+ * @generated from field: bool accept_below_threshold = 7;
972
+ */
973
+ acceptBelowThreshold: boolean;
974
+ };
975
+
976
+ /**
977
+ * Describes the message kusinta.iot.webrtc.v1.ConfigureRoomClimate.
978
+ * Use `create(ConfigureRoomClimateSchema)` to create a new message.
979
+ */
980
+ export declare const ConfigureRoomClimateSchema: GenMessage<ConfigureRoomClimate>;
981
+
982
+ /**
983
+ * Sets a room's inner limits (climate.v1.InnerRoomLimits). Answered with ManagementAck. A
984
+ * household admin of the home the room is in only (household.proto, HOUSEHOLD ADMIN); anyone
985
+ * else, and a room in no home, is refused as NOT_ENTITLED — never covered by a commissioning
986
+ * grant. min above max is refused as INVALID_REQUEST with metadata {"reason": "limits_order"}.
987
+ * Bounds outside the outer limits are accepted as they are (climate.v1.OuterRoomLimits, HELD).
988
+ * The room's target is clamped into the new limits.
989
+ *
990
+ * @generated from message kusinta.iot.webrtc.v1.SetInnerRoomLimits
991
+ */
992
+ export declare type SetInnerRoomLimits = Message<"kusinta.iot.webrtc.v1.SetInnerRoomLimits"> & {
993
+ /**
994
+ * @generated from field: kusinta.iot.identity.v1.SpaceId room_id = 1;
995
+ */
996
+ roomId?: SpaceId | undefined;
997
+
998
+ /**
999
+ * Replaces both bounds: a bound unset in it, or limits unset, removes them.
1000
+ *
1001
+ * @generated from field: kusinta.iot.climate.v1.InnerRoomLimits limits = 2;
1002
+ */
1003
+ limits?: InnerRoomLimits | undefined;
1004
+ };
1005
+
1006
+ /**
1007
+ * Describes the message kusinta.iot.webrtc.v1.SetInnerRoomLimits.
1008
+ * Use `create(SetInnerRoomLimitsSchema)` to create a new message.
1009
+ */
1010
+ export declare const SetInnerRoomLimitsSchema: GenMessage<SetInnerRoomLimits>;
1011
+
1012
+ /**
1013
+ * Switches a mode on a space on, or off with kind UNSPECIFIED. WRITE on the space.
1014
+ * Switching one on needs setback_centidegrees; a mode with nothing to set back to is
1015
+ * refused. Switching one on is refused on a room inside an apartment, whose rooms follow
1016
+ * the apartment's mode alone; such a room carries none (see climate.v1.ClimateMode), and
1017
+ * switching one off there is accepted and does nothing — for those who may switch modes in
1018
+ * that home at all, which is checked first: anyone else is refused as NOT_ENTITLED.
1019
+ *
1020
+ * In a home, only its residents may switch one on or off: whether a home stands empty is
1021
+ * theirs to say. A caller who reaches it as service is refused as NOT_ENTITLED — except
1022
+ * that, while the home is empty (household.proto, EMPTY HOME), ROLE_PROPERTY_OWNER or
1023
+ * ROLE_GATEWAY_ADMIN may switch one on, and switch off one that is on, so that no mode
1024
+ * outlives everyone who could end it. Any other switch-off from them — in a home that is not
1025
+ * empty, or with no mode on — is accepted and does nothing, so the answer tells them nothing of
1026
+ * whether a mode was on.
1027
+ *
1028
+ * @generated from message kusinta.iot.webrtc.v1.SetClimateMode
1029
+ */
1030
+ export declare type SetClimateMode = Message<"kusinta.iot.webrtc.v1.SetClimateMode"> & {
1031
+ /**
1032
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1033
+ */
1034
+ spaceId?: SpaceId | undefined;
1035
+
1036
+ /**
1037
+ * @generated from field: kusinta.iot.climate.v1.ClimateModeKind kind = 2;
1038
+ */
1039
+ kind: ClimateModeKind;
1040
+
1041
+ /**
1042
+ * @generated from field: optional sint32 setback_centidegrees = 3;
1043
+ */
1044
+ setbackCentidegrees?: number | undefined;
1045
+
1046
+ /**
1047
+ * HOLIDAY only; both required there. Refused on AWAY.
1048
+ *
1049
+ * @generated from field: google.protobuf.Timestamp starts_at = 4;
1050
+ */
1051
+ startsAt?: Timestamp | undefined;
1052
+
1053
+ /**
1054
+ * @generated from field: google.protobuf.Timestamp ends_at = 5;
1055
+ */
1056
+ endsAt?: Timestamp | undefined;
1057
+ };
1058
+
1059
+ /**
1060
+ * Describes the message kusinta.iot.webrtc.v1.SetClimateMode.
1061
+ * Use `create(SetClimateModeSchema)` to create a new message.
1062
+ */
1063
+ export declare const SetClimateModeSchema: GenMessage<SetClimateMode>;
1064
+
1065
+ /**
1066
+ * Lists the room climates and modes a caller may see. Unset root_space_id lists every
1067
+ * one the caller can reach; naming a space narrows it to that space and those below.
1068
+ *
1069
+ * A caller who reaches a room inside an apartment as service gets it with
1070
+ * RoomClimate.state_withheld set — what is new as it happens, what is gone at once — and
1071
+ * gets no ClimateMode set on that apartment or its rooms; save the property owner and the
1072
+ * gateway administrators while the home is empty, who get both as for a space outside homes
1073
+ * (household.proto, EMPTY HOME).
1074
+ *
1075
+ * @generated from message kusinta.iot.webrtc.v1.ListRoomClimates
1076
+ */
1077
+ export declare type ListRoomClimates = Message<"kusinta.iot.webrtc.v1.ListRoomClimates"> & {
1078
+ /**
1079
+ * @generated from field: kusinta.iot.identity.v1.SpaceId root_space_id = 1;
1080
+ */
1081
+ rootSpaceId?: SpaceId | undefined;
1082
+ };
1083
+
1084
+ /**
1085
+ * Describes the message kusinta.iot.webrtc.v1.ListRoomClimates.
1086
+ * Use `create(ListRoomClimatesSchema)` to create a new message.
1087
+ */
1088
+ export declare const ListRoomClimatesSchema: GenMessage<ListRoomClimates>;
1089
+
1090
+ /**
1091
+ * Reads a room's history at one resolution, answered with a climate.v1.RoomHistory. Needs
1092
+ * READ on the room.
1093
+ *
1094
+ * The range is half-open: a bucket is returned when from_time <= at < to_time, so
1095
+ * back-to-back windows neither repeat nor skip a bucket. Unset to_time means now; unset
1096
+ * from_time means RoomHistory.kept_from. Both are clamped to [kept_from, now]. A long range is
1097
+ * answered newest first, in capped pages (RoomHistory.covered_from).
1098
+ *
1099
+ * A room in a home is readable by its residents only, and only from the start of their
1100
+ * current residency (see access.v1.MembershipRelation). A caller who reaches it as service is
1101
+ * refused as NOT_ENTITLED; one who reaches the apartment itself has
1102
+ * GetApartmentClimateSummary instead.
1103
+ *
1104
+ * @generated from message kusinta.iot.webrtc.v1.GetRoomHistory
1105
+ */
1106
+ export declare type GetRoomHistory = Message<"kusinta.iot.webrtc.v1.GetRoomHistory"> & {
1107
+ /**
1108
+ * @generated from field: kusinta.iot.identity.v1.SpaceId room_id = 1;
1109
+ */
1110
+ roomId?: SpaceId | undefined;
1111
+
1112
+ /**
1113
+ * @generated from field: google.protobuf.Timestamp from_time = 2;
1114
+ */
1115
+ fromTime?: Timestamp | undefined;
1116
+
1117
+ /**
1118
+ * @generated from field: google.protobuf.Timestamp to_time = 3;
1119
+ */
1120
+ toTime?: Timestamp | undefined;
1121
+
1122
+ /**
1123
+ * The resolution wanted. Unset, or one the gateway does not give, and the gateway chooses
1124
+ * from the request and the resolutions alone, never from what it holds: the finest
1125
+ * resolution it gives that it keeps for long enough to reach back to from_time, and whose
1126
+ * bucket length fits the span from from_time to to_time (unset: now) into no more buckets
1127
+ * than one answer may give samples (RoomHistory.covered_from); where none does, or from_time
1128
+ * is unset, the coarsest. How long each is kept is the gateway's, the same for every room and
1129
+ * recipient, so the choice tells nothing of a room or of who may read it.
1130
+ *
1131
+ * @generated from field: kusinta.iot.climate.v1.RoomHistoryResolution resolution = 4;
1132
+ */
1133
+ resolution: RoomHistoryResolution;
1134
+ };
1135
+
1136
+ /**
1137
+ * Describes the message kusinta.iot.webrtc.v1.GetRoomHistory.
1138
+ * Use `create(GetRoomHistorySchema)` to create a new message.
1139
+ */
1140
+ export declare const GetRoomHistorySchema: GenMessage<GetRoomHistory>;
1141
+
1142
+ /**
1143
+ * Reads a heat source's history at one resolution, answered with a climate.v1.PlantHistory, as
1144
+ * GetRoomHistory reads a room's: the same range, clamping, paging and choice of resolution.
1145
+ * Whose buckets the caller is given is as climate.v1.PlantHistory says: a home's plant to its
1146
+ * residents only, from the start of their current residency; a plant outside homes to the
1147
+ * property owner and the gateway administrators. Anyone else, and a plant that does not exist,
1148
+ * is refused as NOT_ENTITLED with the same metadata, as is a caller who reaches the home only as
1149
+ * service: a heat source's readings with their times are never service's.
1150
+ *
1151
+ * @generated from message kusinta.iot.webrtc.v1.GetPlantHistory
1152
+ */
1153
+ export declare type GetPlantHistory = Message<"kusinta.iot.webrtc.v1.GetPlantHistory"> & {
1154
+ /**
1155
+ * @generated from field: string plant_id = 1;
1156
+ */
1157
+ plantId: string;
1158
+
1159
+ /**
1160
+ * @generated from field: google.protobuf.Timestamp from_time = 2;
1161
+ */
1162
+ fromTime?: Timestamp | undefined;
1163
+
1164
+ /**
1165
+ * @generated from field: google.protobuf.Timestamp to_time = 3;
1166
+ */
1167
+ toTime?: Timestamp | undefined;
1168
+
1169
+ /**
1170
+ * @generated from field: kusinta.iot.climate.v1.RoomHistoryResolution resolution = 4;
1171
+ */
1172
+ resolution: RoomHistoryResolution;
1173
+ };
1174
+
1175
+ /**
1176
+ * Describes the message kusinta.iot.webrtc.v1.GetPlantHistory.
1177
+ * Use `create(GetPlantHistorySchema)` to create a new message.
1178
+ */
1179
+ export declare const GetPlantHistorySchema: GenMessage<GetPlantHistory>;
1180
+
1181
+ /**
1182
+ * Reads a building's planning record. Answered as BuildingPlanning.
1183
+ *
1184
+ * @generated from message kusinta.iot.webrtc.v1.GetBuildingPlanning
1185
+ */
1186
+ export declare type GetBuildingPlanning = Message<"kusinta.iot.webrtc.v1.GetBuildingPlanning"> & {
1187
+ /**
1188
+ * The building: a top-level space. Any other space is refused as INVALID_REQUEST.
1189
+ *
1190
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1191
+ */
1192
+ spaceId?: SpaceId | undefined;
1193
+ };
1194
+
1195
+ /**
1196
+ * Describes the message kusinta.iot.webrtc.v1.GetBuildingPlanning.
1197
+ * Use `create(GetBuildingPlanningSchema)` to create a new message.
1198
+ */
1199
+ export declare const GetBuildingPlanningSchema: GenMessage<GetBuildingPlanning>;
1200
+
1201
+ /**
1202
+ * Replaces a building's planning record whole. Answered as BuildingPlanning, as it now stands.
1203
+ *
1204
+ * A zone and a cell together turn the building's planning inputs on: the gateway asks for
1205
+ * prices and the forecast from then on. Without either, it asks for nothing for the building,
1206
+ * and no PLANNING_INPUTS_STALE is opened for it (reporting.v1). A put without a zone and a cell
1207
+ * removes them: nothing of them is kept.
1208
+ *
1209
+ * @generated from message kusinta.iot.webrtc.v1.PutBuildingPlanning
1210
+ */
1211
+ export declare type PutBuildingPlanning = Message<"kusinta.iot.webrtc.v1.PutBuildingPlanning"> & {
1212
+ /**
1213
+ * The building: a top-level space. Any other space is refused as INVALID_REQUEST.
1214
+ *
1215
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1216
+ */
1217
+ spaceId?: SpaceId | undefined;
1218
+
1219
+ /**
1220
+ * The bidding zone's short code, as planning.v1.GetPlanningInputsRequest.bidding_zone names
1221
+ * it: "SE1" to "SE4". A client offers the zone the building's grid connection is in. Its
1222
+ * location may suggest one, but the connection decides, and the zone is printed on the
1223
+ * grid operator's invoice. A code the gateway does not know is refused as INVALID_REQUEST
1224
+ * with metadata {"reason": "bidding_zone"}. Empty: none.
1225
+ *
1226
+ * @generated from field: string bidding_zone = 2;
1227
+ */
1228
+ biddingZone: string;
1229
+
1230
+ /**
1231
+ * The forecast cell's corner. A cell planning.v1.ForecastCell refuses is refused here as
1232
+ * INVALID_REQUEST with metadata {"reason": "forecast_cell"}. Unset: none.
1233
+ *
1234
+ * @generated from field: kusinta.iot.planning.v1.ForecastCell forecast_cell = 3;
1235
+ */
1236
+ forecastCell?: ForecastCell | undefined;
1237
+
1238
+ /**
1239
+ * The owner's choice to keep the building's planning inputs off while both values are
1240
+ * set: the gateway asks for nothing for the building. False, the default, leaves them on.
1241
+ *
1242
+ * @generated from field: bool inputs_off = 4;
1243
+ */
1244
+ inputsOff: boolean;
1245
+ };
1246
+
1247
+ /**
1248
+ * Describes the message kusinta.iot.webrtc.v1.PutBuildingPlanning.
1249
+ * Use `create(PutBuildingPlanningSchema)` to create a new message.
1250
+ */
1251
+ export declare const PutBuildingPlanningSchema: GenMessage<PutBuildingPlanning>;
1252
+
1253
+ /**
1254
+ * A building's planning record, and how its inputs stand.
1255
+ *
1256
+ * @generated from message kusinta.iot.webrtc.v1.BuildingPlanning
1257
+ */
1258
+ export declare type BuildingPlanning = Message<"kusinta.iot.webrtc.v1.BuildingPlanning"> & {
1259
+ /**
1260
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1261
+ */
1262
+ spaceId?: SpaceId | undefined;
1263
+
1264
+ /**
1265
+ * As put. Empty, unset: none.
1266
+ *
1267
+ * @generated from field: string bidding_zone = 2;
1268
+ */
1269
+ biddingZone: string;
1270
+
1271
+ /**
1272
+ * @generated from field: kusinta.iot.planning.v1.ForecastCell forecast_cell = 3;
1273
+ */
1274
+ forecastCell?: ForecastCell | undefined;
1275
+
1276
+ /**
1277
+ * @generated from field: bool inputs_off = 4;
1278
+ */
1279
+ inputsOff: boolean;
1280
+
1281
+ /**
1282
+ * The end of the last price interval the gateway holds for the zone without a gap from the
1283
+ * current interval on, as the stale rule reads them. Unset where it holds no current one.
1284
+ *
1285
+ * @generated from field: google.protobuf.Timestamp prices_through = 5;
1286
+ */
1287
+ pricesThrough?: Timestamp | undefined;
1288
+
1289
+ /**
1290
+ * When the forecast the gateway holds for the cell was issued. Unset where it holds none.
1291
+ *
1292
+ * @generated from field: google.protobuf.Timestamp forecast_issued_at = 6;
1293
+ */
1294
+ forecastIssuedAt?: Timestamp | undefined;
1295
+
1296
+ /**
1297
+ * Whether the building's inputs are stale, by the rule of reporting.v1
1298
+ * PROBLEM_KIND_PLANNING_INPUTS_STALE. False while the inputs are off, or while the gateway
1299
+ * has not yet asked for them since they were put.
1300
+ *
1301
+ * @generated from field: bool stale = 7;
1302
+ */
1303
+ stale: boolean;
1304
+ };
1305
+
1306
+ /**
1307
+ * Describes the message kusinta.iot.webrtc.v1.BuildingPlanning.
1308
+ * Use `create(BuildingPlanningSchema)` to create a new message.
1309
+ */
1310
+ export declare const BuildingPlanningSchema: GenMessage<BuildingPlanning>;
1311
+
1312
+ /**
1313
+ * Reads the day-ahead prices for the bidding zone of the building a space is in, so that a
1314
+ * client can draw them. Answered as DayAheadPrices.
1315
+ *
1316
+ * Given to anyone who reaches the space, residents and service included: a price is for a
1317
+ * zone, never for a home, and says nothing of anyone. Only the raw market price is answered.
1318
+ * What a household pays on top of it — the grid fee, taxes, the supplier's margin — is not
1319
+ * part of this record.
1320
+ *
1321
+ * @generated from message kusinta.iot.webrtc.v1.GetDayAheadPrices
1322
+ */
1323
+ export declare type GetDayAheadPrices = Message<"kusinta.iot.webrtc.v1.GetDayAheadPrices"> & {
1324
+ /**
1325
+ * Any space the caller reaches. Answered for the building it is in.
1326
+ *
1327
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1328
+ */
1329
+ spaceId?: SpaceId | undefined;
1330
+
1331
+ /**
1332
+ * [from_time, to_time). Intervals overlapping it are answered. Unset from_time: the start of
1333
+ * the current day in the bidding zone's own time. Unset to_time: from_time plus 31 days,
1334
+ * and no further than the last interval held; where none is held after from_time, the
1335
+ * answer is empty. A to_time the caller sets more than 31 days after from_time, or not
1336
+ * after it, is refused as INVALID_REQUEST with metadata {"reason": "span"}.
1337
+ *
1338
+ * @generated from field: google.protobuf.Timestamp from_time = 2;
1339
+ */
1340
+ fromTime?: Timestamp | undefined;
1341
+
1342
+ /**
1343
+ * @generated from field: google.protobuf.Timestamp to_time = 3;
1344
+ */
1345
+ toTime?: Timestamp | undefined;
1346
+ };
1347
+
1348
+ /**
1349
+ * Describes the message kusinta.iot.webrtc.v1.GetDayAheadPrices.
1350
+ * Use `create(GetDayAheadPricesSchema)` to create a new message.
1351
+ */
1352
+ export declare const GetDayAheadPricesSchema: GenMessage<GetDayAheadPrices>;
1353
+
1354
+ /**
1355
+ * The prices GetDayAheadPrices asked for.
1356
+ *
1357
+ * @generated from message kusinta.iot.webrtc.v1.DayAheadPrices
1358
+ */
1359
+ export declare type DayAheadPrices = Message<"kusinta.iot.webrtc.v1.DayAheadPrices"> & {
1360
+ /**
1361
+ * The zone they are for. Empty where the building has none, and then no prices are given.
1362
+ *
1363
+ * @generated from field: string bidding_zone = 1;
1364
+ */
1365
+ biddingZone: string;
1366
+
1367
+ /**
1368
+ * Oldest first and never overlapping, as the gateway holds them. A time no interval covers
1369
+ * is a gap, never a price of zero, and a client draws it as one. Empty where the gateway
1370
+ * holds none in the span.
1371
+ *
1372
+ * @generated from field: repeated kusinta.iot.planning.v1.PriceInterval prices = 2;
1373
+ */
1374
+ prices: PriceInterval[];
1375
+
1376
+ /**
1377
+ * The reference rates a client converts the prices at, as planning.v1.ExchangeRate says:
1378
+ * every rate the gateway holds from the day of the first price on, and the last one before
1379
+ * it, oldest first. Empty where it holds none; a client then shows the prices in euros.
1380
+ *
1381
+ * @generated from field: repeated kusinta.iot.planning.v1.ExchangeRate exchange_rates = 3;
1382
+ */
1383
+ exchangeRates: ExchangeRate[];
1384
+ };
1385
+
1386
+ /**
1387
+ * Describes the message kusinta.iot.webrtc.v1.DayAheadPrices.
1388
+ * Use `create(DayAheadPricesSchema)` to create a new message.
1389
+ */
1390
+ export declare const DayAheadPricesSchema: GenMessage<DayAheadPrices>;
1391
+
1392
+ /**
1393
+ * Reads a space's address. Answered as SpaceAddress.
1394
+ *
1395
+ * @generated from message kusinta.iot.webrtc.v1.GetSpaceAddress
1396
+ */
1397
+ export declare type GetSpaceAddress = Message<"kusinta.iot.webrtc.v1.GetSpaceAddress"> & {
1398
+ /**
1399
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1400
+ */
1401
+ spaceId?: SpaceId | undefined;
1402
+ };
1403
+
1404
+ /**
1405
+ * Describes the message kusinta.iot.webrtc.v1.GetSpaceAddress.
1406
+ * Use `create(GetSpaceAddressSchema)` to create a new message.
1407
+ */
1408
+ export declare const GetSpaceAddressSchema: GenMessage<GetSpaceAddress>;
1409
+
1410
+ /**
1411
+ * Replaces a space's address whole. Answered as SpaceAddress, as it now stands.
1412
+ *
1413
+ * @generated from message kusinta.iot.webrtc.v1.PutSpaceAddress
1414
+ */
1415
+ export declare type PutSpaceAddress = Message<"kusinta.iot.webrtc.v1.PutSpaceAddress"> & {
1416
+ /**
1417
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1418
+ */
1419
+ spaceId?: SpaceId | undefined;
1420
+
1421
+ /**
1422
+ * Unset: the address is removed, and nothing of it is kept.
1423
+ *
1424
+ * @generated from field: kusinta.iot.webrtc.v1.PostalAddress address = 2;
1425
+ */
1426
+ address?: PostalAddress | undefined;
1427
+ };
1428
+
1429
+ /**
1430
+ * Describes the message kusinta.iot.webrtc.v1.PutSpaceAddress.
1431
+ * Use `create(PutSpaceAddressSchema)` to create a new message.
1432
+ */
1433
+ export declare const PutSpaceAddressSchema: GenMessage<PutSpaceAddress>;
1434
+
1435
+ /**
1436
+ * A postal address, as a person writes it. Free text in each field; a field's bound counts
1437
+ * Unicode code points, not bytes or UTF-16 code units. A set address without a street, a
1438
+ * field longer than its bound, or a country that is not two capital letters is refused as
1439
+ * INVALID_REQUEST with metadata {"reason": "address"}.
1440
+ *
1441
+ * @generated from message kusinta.iot.webrtc.v1.PostalAddress
1442
+ */
1443
+ export declare type PostalAddress = Message<"kusinta.iot.webrtc.v1.PostalAddress"> & {
1444
+ /**
1445
+ * The street and number, with any entrance or flat: "Exempelgatan 1". Up to 200 characters.
1446
+ *
1447
+ * @generated from field: string street = 1;
1448
+ */
1449
+ street: string;
1450
+
1451
+ /**
1452
+ * As written locally: "123 45". Up to 16 characters. Empty: none.
1453
+ *
1454
+ * @generated from field: string postal_code = 2;
1455
+ */
1456
+ postalCode: string;
1457
+
1458
+ /**
1459
+ * Up to 100 characters. Empty: none.
1460
+ *
1461
+ * @generated from field: string town = 3;
1462
+ */
1463
+ town: string;
1464
+
1465
+ /**
1466
+ * ISO 3166-1 alpha-2: "SE". Empty: none.
1467
+ *
1468
+ * @generated from field: string country = 4;
1469
+ */
1470
+ country: string;
1471
+ };
1472
+
1473
+ /**
1474
+ * Describes the message kusinta.iot.webrtc.v1.PostalAddress.
1475
+ * Use `create(PostalAddressSchema)` to create a new message.
1476
+ */
1477
+ export declare const PostalAddressSchema: GenMessage<PostalAddress>;
1478
+
1479
+ /**
1480
+ * A space's address.
1481
+ *
1482
+ * @generated from message kusinta.iot.webrtc.v1.SpaceAddress
1483
+ */
1484
+ export declare type SpaceAddress = Message<"kusinta.iot.webrtc.v1.SpaceAddress"> & {
1485
+ /**
1486
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1487
+ */
1488
+ spaceId?: SpaceId | undefined;
1489
+
1490
+ /**
1491
+ * Unset: the space has none.
1492
+ *
1493
+ * @generated from field: kusinta.iot.webrtc.v1.PostalAddress address = 2;
1494
+ */
1495
+ address?: PostalAddress | undefined;
1496
+ };
1497
+
1498
+ /**
1499
+ * Describes the message kusinta.iot.webrtc.v1.SpaceAddress.
1500
+ * Use `create(SpaceAddressSchema)` to create a new message.
1501
+ */
1502
+ export declare const SpaceAddressSchema: GenMessage<SpaceAddress>;
1503
+
1504
+ /**
1505
+ * What the parties who do not live in a private space learn of it — the answer to a
1506
+ * resident asking who can see what in their home, in reply to GetPrivacyDisclosure.
1507
+ *
1508
+ * It states the policy, the kinds of party it applies to now and the people counted under
1509
+ * each (ServiceParty.names): a resident learns which technicians can see the battery of
1510
+ * their radiator valve. The names say who has reach, never where anyone lives.
1511
+ *
1512
+ * @generated from message kusinta.iot.webrtc.v1.PrivacyDisclosure
1513
+ */
1514
+ export declare type PrivacyDisclosure = Message<"kusinta.iot.webrtc.v1.PrivacyDisclosure"> & {
1515
+ /**
1516
+ * An apartment, or a room in one.
1517
+ *
1518
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1519
+ */
1520
+ spaceId?: SpaceId | undefined;
1521
+
1522
+ /**
1523
+ * The kinds of party who see this space, or any part of it, as service now — or would
1524
+ * through another membership, were they not its residents — each role once, with what
1525
+ * that role brings here. Each party is listed under every role it holds other than
1526
+ * ROLE_RESIDENT, and sees what its entries say together; one with no other role, or whose
1527
+ * role the gateway has not yet learnt, counts as ROLE_UNSPECIFIED. ROLE_GATEWAY_ADMIN is
1528
+ * always listed, and ROLE_PROPERTY_OWNER whenever anyone holds it, wherever they are
1529
+ * filed: both may file themselves on the home. So the list reads the same whether or not
1530
+ * anyone lives in the home, and never understates who has reach or what they see. Devices a
1531
+ * resident owns are not shown to service at all.
1532
+ *
1533
+ * @generated from field: repeated kusinta.iot.webrtc.v1.ServiceParty service_parties = 5;
1534
+ */
1535
+ serviceParties: ServiceParty[];
1536
+
1537
+ /**
1538
+ * How finely the space's climate is summarised for service, as means over periods of
1539
+ * this length (climate.v1.ApartmentClimateSummary). UNSPECIFIED: no summary is given.
1540
+ * The gateway's own setting, WEEK unless it is configured otherwise; no operation in this
1541
+ * contract changes it. A change applies to periods that open after it: service is given
1542
+ * no period that opened before the last change. A household's clear of its climate history
1543
+ * (ClearClimateHistory) likewise leaves service no period from before the clear, and none
1544
+ * until the first period that starts at or after it has closed.
1545
+ *
1546
+ * @generated from field: kusinta.iot.climate.v1.ClimateSummaryPeriod climate_summary_period = 4;
1547
+ */
1548
+ climateSummaryPeriod: ClimateSummaryPeriod;
1549
+
1550
+ /**
1551
+ * The name of the organisation that owns the gateway, and so the property, as the vouched
1552
+ * set gives it (signaling.v1.VouchedAdministrators.organisation_name); empty while the
1553
+ * gateway holds no vouched set. Never its organisation number. SetOwnerOrganisation, which
1554
+ * once set it, is superseded.
1555
+ *
1556
+ * @generated from field: string owner_organisation_name = 6;
1557
+ */
1558
+ ownerOrganisationName: string;
1559
+
1560
+ /**
1561
+ * Set when ServiceParty.names are not given to this caller, so that empty lists are not
1562
+ * read as nobody being named. Names are given to the home's own residents and to a
1563
+ * caller holding ROLE_GATEWAY_ADMIN or ROLE_PROPERTY_OWNER, and withheld from anyone
1564
+ * else: a technician who reaches the home learns the kinds of party, not who they are.
1565
+ *
1566
+ * @generated from field: bool names_withheld = 7;
1567
+ */
1568
+ namesWithheld: boolean;
1569
+
1570
+ /**
1571
+ * Each staff appointment (household.proto, STAFF APPOINTMENT) of a member who lives in this
1572
+ * home now, made during their current residency — the one that began at an appointment
1573
+ * invite's redeem included — oldest first: whoever joins the household later learns who put
1574
+ * its admins there. Given to the home's residents only, and so never to a caller who sees it
1575
+ * as service: a client shows it to residents alone.
1576
+ *
1577
+ * @generated from field: repeated kusinta.iot.webrtc.v1.StaffAppointment staff_appointments = 8;
1578
+ */
1579
+ staffAppointments: StaffAppointment[];
1580
+
1581
+ /**
1582
+ * Each commissioning grant on this home that was granted since it was last wiped, oldest
1583
+ * first, active ones included, and those the property owner or a gateway administrator
1584
+ * granted while it stood empty among them (commissioning.v1, GRANTS): who held commissioning
1585
+ * access to the home, and when. Given to the home's residents only, as staff_appointments is.
1586
+ *
1587
+ * @generated from field: repeated kusinta.iot.commissioning.v1.CommissioningGrantRecord commissioning_grants = 9;
1588
+ */
1589
+ commissioningGrants: CommissioningGrantRecord[];
1590
+ };
1591
+
1592
+ /**
1593
+ * Describes the message kusinta.iot.webrtc.v1.PrivacyDisclosure.
1594
+ * Use `create(PrivacyDisclosureSchema)` to create a new message.
1595
+ */
1596
+ export declare const PrivacyDisclosureSchema: GenMessage<PrivacyDisclosure>;
1597
+
1598
+ /**
1599
+ * One kind of party with service reach of a home, and what it sees there. Every service
1600
+ * party sees the same kinds of thing of the part of the home it reaches — a whole
1601
+ * ServiceStatus, nothing withheld from it — so signals differ between parties only in
1602
+ * RESIDENTS. How much of the home that part is, a room or all of it, the disclosure does
1603
+ * not say.
1604
+ *
1605
+ * @generated from message kusinta.iot.webrtc.v1.ServiceParty
1606
+ */
1607
+ export declare type ServiceParty = Message<"kusinta.iot.webrtc.v1.ServiceParty"> & {
1608
+ /**
1609
+ * @generated from field: kusinta.iot.access.v1.Role role = 1;
1610
+ */
1611
+ role: Role;
1612
+
1613
+ /**
1614
+ * @generated from field: repeated kusinta.iot.access.v1.ServiceSignal signals = 2;
1615
+ */
1616
+ signals: ServiceSignal[];
1617
+
1618
+ /**
1619
+ * Each person counted under this role, by the name they gave their account
1620
+ * (AppTokenClaims.name), once each: everyone holding ROLE_GATEWAY_ADMIN or
1621
+ * ROLE_PROPERTY_OWNER, every vouched administrator included whether or not the gateway has
1622
+ * seen their token, and everyone else counted here by a SERVICE membership. A person counted
1623
+ * under several roles is named under each. An empty string stands for a person whose name
1624
+ * the gateway has not learnt, so the list is as long as the number of people. Self-chosen,
1625
+ * so the app shows it as the name they gave rather than as a verified identity. Empty for
1626
+ * every party when PrivacyDisclosure.names_withheld is set.
1627
+ *
1628
+ * @generated from field: repeated string names = 3;
1629
+ */
1630
+ names: string[];
1631
+ };
1632
+
1633
+ /**
1634
+ * Describes the message kusinta.iot.webrtc.v1.ServiceParty.
1635
+ * Use `create(ServicePartySchema)` to create a new message.
1636
+ */
1637
+ export declare const ServicePartySchema: GenMessage<ServiceParty>;
1638
+
1639
+ /**
1640
+ * Asks what the parties who do not live in a space learn of it, answered with a
1641
+ * PrivacyDisclosure. For an apartment or a room in one, and refused on any other
1642
+ * space. Needs READ on the space.
1643
+ *
1644
+ * @generated from message kusinta.iot.webrtc.v1.GetPrivacyDisclosure
1645
+ */
1646
+ export declare type GetPrivacyDisclosure = Message<"kusinta.iot.webrtc.v1.GetPrivacyDisclosure"> & {
1647
+ /**
1648
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
1649
+ */
1650
+ spaceId?: SpaceId | undefined;
1651
+ };
1652
+
1653
+ /**
1654
+ * Describes the message kusinta.iot.webrtc.v1.GetPrivacyDisclosure.
1655
+ * Use `create(GetPrivacyDisclosureSchema)` to create a new message.
1656
+ */
1657
+ export declare const GetPrivacyDisclosureSchema: GenMessage<GetPrivacyDisclosure>;
1658
+
1659
+ /**
1660
+ * Reads an apartment's climate as means over whole periods, answered with a
1661
+ * climate.v1.ApartmentClimateSummary. Needs READ on the apartment itself. Refused on a
1662
+ * space that is not an apartment, and while the building's time zone (Space.time_zone) is
1663
+ * unknown, since periods are cut at its midnights.
1664
+ *
1665
+ * The range is half-open over the periods' starts: a period is returned when from_time <=
1666
+ * starts_at < to_time. Unset from_time means kept_from; unset to_time means now. Both are
1667
+ * clamped to [kept_from, the start of the period running now — or now, if none is] (see
1668
+ * ApartmentClimateSummary).
1669
+ *
1670
+ * @generated from message kusinta.iot.webrtc.v1.GetApartmentClimateSummary
1671
+ */
1672
+ export declare type GetApartmentClimateSummary = Message<"kusinta.iot.webrtc.v1.GetApartmentClimateSummary"> & {
1673
+ /**
1674
+ * @generated from field: kusinta.iot.identity.v1.SpaceId apartment_id = 1;
1675
+ */
1676
+ apartmentId?: SpaceId | undefined;
1677
+
1678
+ /**
1679
+ * Unset asks for the period the apartment's privacy disclosure names
1680
+ * (PrivacyDisclosure.climate_summary_period), or weeks when it names none. Anyone but the
1681
+ * apartment's residents may ask for that period only, and is refused as NOT_ENTITLED for
1682
+ * any other or when it names none. Its residents may ask for any, and are given only
1683
+ * periods that began in their current residency.
1684
+ *
1685
+ * @generated from field: kusinta.iot.climate.v1.ClimateSummaryPeriod period = 2;
1686
+ */
1687
+ period: ClimateSummaryPeriod;
1688
+
1689
+ /**
1690
+ * @generated from field: google.protobuf.Timestamp from_time = 3;
1691
+ */
1692
+ fromTime?: Timestamp | undefined;
1693
+
1694
+ /**
1695
+ * @generated from field: google.protobuf.Timestamp to_time = 4;
1696
+ */
1697
+ toTime?: Timestamp | undefined;
1698
+ };
1699
+
1700
+ /**
1701
+ * Describes the message kusinta.iot.webrtc.v1.GetApartmentClimateSummary.
1702
+ * Use `create(GetApartmentClimateSummarySchema)` to create a new message.
1703
+ */
1704
+ export declare const GetApartmentClimateSummarySchema: GenMessage<GetApartmentClimateSummary>;
1705
+
1706
+ /**
1707
+ * Asks the gateway to have a connector re-initialise its backend connection: reconnect to
1708
+ * its radio central or network server. Meant to be offered while a
1709
+ * reporting.v1.PROBLEM_KIND_CONNECTOR_ERROR is open for the connector — its
1710
+ * ConnectorDescriptor.backend_health is FAILING — and only for a connector listed in
1711
+ * ConnectorsAnnounced. A request for a connector that is not listed is refused, as
1712
+ * CONNECTOR_OFFLINE or UNKNOWN_CONNECTOR below. For a listed one it is accepted whatever its
1713
+ * health, since re-initialising a healthy backend is harmless.
1714
+ *
1715
+ * Authorized against the caller's role alone, as StartPairing is: a connector is not a
1716
+ * target the caller reaches the way a space is. ROLE_TECHNICIAN and ROLE_GATEWAY_ADMIN may
1717
+ * ask; anyone else is refused as NOT_ENTITLED, before the connector is looked up, so the
1718
+ * refusal says nothing of which connectors exist.
1719
+ *
1720
+ * The gateway forwards it as connector.v1.ReinitializeBackend and answers once the
1721
+ * connector has: with ManagementAck when the attempt was made. That says the attempt
1722
+ * finished, not that it worked. Whether it worked is the connector's backend health, and
1723
+ * when that changed the gateway pushes it in ConnectorsAnnounced before the ack. One
1724
+ * request at a time per connector.
1725
+ *
1726
+ * So a failure found only by attempting — credentials the backend rejects, a backend that
1727
+ * does not answer — is not a refusal. It arrives as a ManagementAck, with the backend
1728
+ * health it left (FAILING, e.g. with AUTH_FAILED, UNREACHABLE or BACKEND_ERROR) already
1729
+ * pushed: after the ack, the app reads ConnectorDescriptor.backend_health for the outcome,
1730
+ * and a FAILING health there means the reconnect did not help. The app handles any reason
1731
+ * there, one its schema does not know included. No push precedes the ack when the attempt
1732
+ * left health as it was; the descriptor the app holds is then still the outcome.
1733
+ *
1734
+ * A refusal is a GatewayError whose metadata "reason" says which, as CommandError.metadata
1735
+ * describes, and whose "detail" is a sentence the app may show. The app branches on
1736
+ * "reason" for this operation; the code is only the fallback for a reason it does not know,
1737
+ * since GatewayErrorCode is too coarse to say what to do here. The role refusal above is
1738
+ * the code NOT_ENTITLED alone, with no "reason"; the reasons are for a caller who may ask:
1739
+ * "UNKNOWN_CONNECTOR" UNAVAILABLE. The gateway does not track a connector by that id:
1740
+ * it never had one, or has stopped tracking it. Not a client bug:
1741
+ * the list the app holds may be stale.
1742
+ * "CONNECTOR_OFFLINE" UNAVAILABLE. A connector the gateway tracks, whose stream to the
1743
+ * gateway is down now, before or while the request was
1744
+ * outstanding; that is CONNECTOR_OFFLINE, and a reconnect of its
1745
+ * backend cannot help it.
1746
+ * "NOT_SUPPORTED" FAILED_PRECONDITION. The connector does not declare
1747
+ * ConnectorDescriptor.supports_backend_reinitialize, or declared it
1748
+ * and answered that it has nothing to re-initialise. Not a client
1749
+ * bug, and not worth retrying as is.
1750
+ * "ALREADY_IN_PROGRESS" UNAVAILABLE. A reconnect of this connector is outstanding, from
1751
+ * this caller or another. It ends within 60 seconds of being
1752
+ * asked, answered or timed out; retry after that. Only the caller
1753
+ * who asked is answered, but a change of health it causes reaches
1754
+ * every session in ConnectorsAnnounced.
1755
+ * "TIMED_OUT" UNAVAILABLE. The connector did not answer within the gateway's
1756
+ * deadline. The attempt may still finish, and its outcome still
1757
+ * arrives as backend health.
1758
+ * "REINITIALIZE_FAILED" The connector could not attempt it at all
1759
+ * (connector.v1.REINITIALIZE_OUTCOME_FAILED, or an outcome the
1760
+ * gateway's schema does not know, read as FAILED). The code
1761
+ * depends on the reason: FAILED_PRECONDITION when it is
1762
+ * MISCONFIGURED, which needs a person to correct the connector's
1763
+ * configuration before asking again can help; UNAVAILABLE for
1764
+ * any other — INTERNAL, UNSPECIFIED, a value the gateway does not
1765
+ * know — since a retry may work. Rejected credentials are never
1766
+ * this: they are found by attempting, and come back as an ack
1767
+ * (see above). metadata "backend_failure" is always set: the
1768
+ * common.v1.BackendFailureReason by its enum name, e.g.
1769
+ * "BACKEND_FAILURE_REASON_MISCONFIGURED". A reason that is
1770
+ * UNSPECIFIED, or a value the gateway's schema does not know, is
1771
+ * sent as "BACKEND_FAILURE_REASON_BACKEND_ERROR", as
1772
+ * BackendFailureReason has it; an app reading a name its own
1773
+ * schema does not know treats it as BACKEND_ERROR too.
1774
+ * The connector's own detail is never in a refusal; GatewayError.message is the gateway's.
1775
+ *
1776
+ * @generated from message kusinta.iot.webrtc.v1.ReconnectConnector
1777
+ */
1778
+ export declare type ReconnectConnector = Message<"kusinta.iot.webrtc.v1.ReconnectConnector"> & {
1779
+ /**
1780
+ * As ConnectorDescriptor.connector_id, and the id a CONNECTOR_ERROR problem's subject
1781
+ * names (reporting.v1.ProblemSubject.connector_id).
1782
+ *
1783
+ * @generated from field: kusinta.iot.identity.v1.ConnectorId connector_id = 1;
1784
+ */
1785
+ connectorId?: ConnectorId | undefined;
1786
+ };
1787
+
1788
+ /**
1789
+ * Describes the message kusinta.iot.webrtc.v1.ReconnectConnector.
1790
+ * Use `create(ReconnectConnectorSchema)` to create a new message.
1791
+ */
1792
+ export declare const ReconnectConnectorSchema: GenMessage<ReconnectConnector>;
1793
+
1794
+ /**
1795
+ * Lists the heating records (heating.v1) a caller may see under a space: unset
1796
+ * root_space_id lists every one the caller can reach. Answered with a HeatingLayout.
1797
+ *
1798
+ * @generated from message kusinta.iot.webrtc.v1.ListHeating
1799
+ */
1800
+ export declare type ListHeating = Message<"kusinta.iot.webrtc.v1.ListHeating"> & {
1801
+ /**
1802
+ * @generated from field: kusinta.iot.identity.v1.SpaceId root_space_id = 1;
1803
+ */
1804
+ rootSpaceId?: SpaceId | undefined;
1805
+ };
1806
+
1807
+ /**
1808
+ * Describes the message kusinta.iot.webrtc.v1.ListHeating.
1809
+ * Use `create(ListHeatingSchema)` to create a new message.
1810
+ */
1811
+ export declare const ListHeatingSchema: GenMessage<ListHeating>;
1812
+
1813
+ /**
1814
+ * Creates a plant (empty plant_id) or replaces one. Answered with the HeatingRecord as
1815
+ * stored. The puts of heating records refuse, with metadata "reason":
1816
+ *
1817
+ * INVALID_REQUEST
1818
+ * "ZONE_CONTROL_ROOM" a floor zone whose control room is unset or not one of its rooms.
1819
+ * "ZONE_ROOMS_ACROSS_HOMES" a floor zone with rooms in two homes, or in a home and outside
1820
+ * homes.
1821
+ * "ZONE_AREA_SHARES" a floor zone with a room listed twice, a share of 0, or shares
1822
+ * that do not sum to 1000.
1823
+ * "ROOM_OUTSIDE_PLANT" a zone room outside its plant's space; metadata "room_id" names it.
1824
+ * "ZONE_NOT_ON_FLOOR" a floor zone on a circuit that is not a floor circuit.
1825
+ * "SG_READY_HALF_BOUND" one SG Ready input bound without the other.
1826
+ * "CONTROL_EMPTY" a plant control that binds no input.
1827
+ * "NO_ENDPOINT" an attribute on the Matter branch with no endpoint_id.
1828
+ * "WINDOWS_IN_PUT" a comfort load put with windows (see SetComfortWindows).
1829
+ *
1830
+ * FAILED_PRECONDITION
1831
+ * "STALE_REVISION" the record changed since the revision the request names.
1832
+ * "CHILDREN_INVALID" a plant or circuit put that would leave a record under it
1833
+ * invalid: a circuit with zones no longer a floor circuit, or a
1834
+ * space or plant change leaving a zone's room outside its plant.
1835
+ * "OUTPUT_BOUND_TWICE" an output already bound in another role or record.
1836
+ * "OUTPUT_NOT_LEASED" an output whose write its producer does not state as leased.
1837
+ * "REST_STATE" an output whose lapse value, read through closed_value, does not
1838
+ * leave the contact where its role rests.
1839
+ * "TEST_RUNNING" a put that would change what a running commissioning test drives
1840
+ * or judges: an output binding of a record whose output it drives,
1841
+ * or a floor zone's rooms, control room or circuit while a test runs
1842
+ * on the zone or on a circuit it leaves or joins (PUMP_ALL_ZONES_OFF). metadata "record_id"
1843
+ * names the test's record. A name, an area share or a supply cap
1844
+ * may change meanwhile.
1845
+ *
1846
+ * A refusal about one binding names it in metadata "field", by its proto field name:
1847
+ * "sg_ready_block", "sg_ready_boost", "add_on_heater_block", "meter", "output",
1848
+ * "supply_probe", "return_probe".
1849
+ *
1850
+ * A device or room the caller cannot reach, a parent it may not use (see heating.v1) and an
1851
+ * id that does not exist are all refused as NOT_ENTITLED with the same metadata, so no answer
1852
+ * tells one from another. HAS_CHILDREN, CHILDREN_INVALID and OUTPUT_BOUND_TWICE may count
1853
+ * records the caller cannot see — a zone in a home under a circuit outside it. That one bit
1854
+ * is accepted, as it is for the members listing; their metadata never names or counts such
1855
+ * a record.
1856
+ *
1857
+ * @generated from message kusinta.iot.webrtc.v1.PutHeatingPlant
1858
+ */
1859
+ export declare type PutHeatingPlant = Message<"kusinta.iot.webrtc.v1.PutHeatingPlant"> & {
1860
+ /**
1861
+ * @generated from field: kusinta.iot.heating.v1.HeatingPlant plant = 1;
1862
+ */
1863
+ plant?: HeatingPlant | undefined;
1864
+ };
1865
+
1866
+ /**
1867
+ * Describes the message kusinta.iot.webrtc.v1.PutHeatingPlant.
1868
+ * Use `create(PutHeatingPlantSchema)` to create a new message.
1869
+ */
1870
+ export declare const PutHeatingPlantSchema: GenMessage<PutHeatingPlant>;
1871
+
1872
+ /**
1873
+ * Creates or replaces a circuit of a plant; as PutHeatingPlant.
1874
+ *
1875
+ * @generated from message kusinta.iot.webrtc.v1.PutHeatingCircuit
1876
+ */
1877
+ export declare type PutHeatingCircuit = Message<"kusinta.iot.webrtc.v1.PutHeatingCircuit"> & {
1878
+ /**
1879
+ * @generated from field: kusinta.iot.heating.v1.HeatingCircuit circuit = 1;
1880
+ */
1881
+ circuit?: HeatingCircuit | undefined;
1882
+ };
1883
+
1884
+ /**
1885
+ * Describes the message kusinta.iot.webrtc.v1.PutHeatingCircuit.
1886
+ * Use `create(PutHeatingCircuitSchema)` to create a new message.
1887
+ */
1888
+ export declare const PutHeatingCircuitSchema: GenMessage<PutHeatingCircuit>;
1889
+
1890
+ /**
1891
+ * Creates or replaces a floor zone of a floor circuit; as PutHeatingPlant.
1892
+ *
1893
+ * While a home is empty (household.proto, EMPTY HOME), the property owner and the gateway
1894
+ * administrators who reach it may change which of its rooms a stored floor zone of the home
1895
+ * heats, and so bring a zone left uncontrolled back under control (heating.v1, UNCONTROLLED
1896
+ * ZONES). From them, only a stored zone's rooms and control_room_id may change, its rooms
1897
+ * staying in that home. Any other change from them — its output, its circuit, its name — a new
1898
+ * zone, and removing one (RemoveHeatingRecord) are refused as NOT_ENTITLED, the same answer as
1899
+ * for a zone out of reach. A caller not given the home's zones is refused NOT_ENTITLED first.
1900
+ * For one given the zone, a put naming a revision the zone has moved on from is refused as
1901
+ * FAILED_PRECONDITION "STALE_REVISION" before any of the changes above is judged, so a racing
1902
+ * put is told to re-read. It ends at MOVE-IN (household.proto), and the zone mapping they left
1903
+ * is kept: MOVE-IN's reset does not touch heating records.
1904
+ *
1905
+ * @generated from message kusinta.iot.webrtc.v1.PutFloorZone
1906
+ */
1907
+ export declare type PutFloorZone = Message<"kusinta.iot.webrtc.v1.PutFloorZone"> & {
1908
+ /**
1909
+ * @generated from field: kusinta.iot.heating.v1.FloorZone zone = 1;
1910
+ */
1911
+ zone?: FloorZone | undefined;
1912
+ };
1913
+
1914
+ /**
1915
+ * Describes the message kusinta.iot.webrtc.v1.PutFloorZone.
1916
+ * Use `create(PutFloorZoneSchema)` to create a new message.
1917
+ */
1918
+ export declare const PutFloorZoneSchema: GenMessage<PutFloorZone>;
1919
+
1920
+ /**
1921
+ * Creates or replaces a comfort load's room, name and output, keeping its windows; as
1922
+ * PutHeatingPlant.
1923
+ *
1924
+ * @generated from message kusinta.iot.webrtc.v1.PutComfortLoad
1925
+ */
1926
+ export declare type PutComfortLoad = Message<"kusinta.iot.webrtc.v1.PutComfortLoad"> & {
1927
+ /**
1928
+ * @generated from field: kusinta.iot.heating.v1.ComfortLoad comfort_load = 1;
1929
+ */
1930
+ comfortLoad?: ComfortLoad | undefined;
1931
+ };
1932
+
1933
+ /**
1934
+ * Describes the message kusinta.iot.webrtc.v1.PutComfortLoad.
1935
+ * Use `create(PutComfortLoadSchema)` to create a new message.
1936
+ */
1937
+ export declare const PutComfortLoadSchema: GenMessage<PutComfortLoad>;
1938
+
1939
+ /**
1940
+ * Removes a heating record by its id, naming the revision it removes. Refused as
1941
+ * FAILED_PRECONDITION with metadata "reason" "STALE_REVISION" when it changed since, and
1942
+ * "HAS_CHILDREN" while records lie under it — a plant's circuits, a circuit's zones — so
1943
+ * nothing is removed that the caller did not name, and "TEST_RUNNING" while a running
1944
+ * commissioning test drives one of its outputs or judges it: a zone under its own test or
1945
+ * its circuit's PUMP_ALL_ZONES_OFF, a circuit while a test runs on it or on one of its
1946
+ * zones, a plant while a test runs on one of its outputs; metadata "record_id" names the
1947
+ * test's record. Removing it would change what the test's verdict covers while it runs.
1948
+ * Its outputs are returned to rest at once
1949
+ * (see heating.v1). Acked. An empty home's floor zone is not removed by the property owner or
1950
+ * the gateway administrators who are given it: NOT_ENTITLED, as PutFloorZone says.
1951
+ *
1952
+ * @generated from message kusinta.iot.webrtc.v1.RemoveHeatingRecord
1953
+ */
1954
+ export declare type RemoveHeatingRecord = Message<"kusinta.iot.webrtc.v1.RemoveHeatingRecord"> & {
1955
+ /**
1956
+ * @generated from field: string id = 1;
1957
+ */
1958
+ id: string;
1959
+
1960
+ /**
1961
+ * @generated from field: uint64 revision = 2;
1962
+ */
1963
+ revision: bigint;
1964
+ };
1965
+
1966
+ /**
1967
+ * Describes the message kusinta.iot.webrtc.v1.RemoveHeatingRecord.
1968
+ * Use `create(RemoveHeatingRecordSchema)` to create a new message.
1969
+ */
1970
+ export declare const RemoveHeatingRecordSchema: GenMessage<RemoveHeatingRecord>;
1971
+
1972
+ /**
1973
+ * Replaces a comfort load's windows: a resident's setting, apart from the binding and its
1974
+ * revision. Answered with the HeatingRecord as stored. Refused as FAILED_PRECONDITION
1975
+ * "STALE_REVISION" when windows_revision is set and the windows changed since, and as
1976
+ * INVALID_REQUEST "WINDOW" for a window that ComfortWindow does not allow or more than 16.
1977
+ * From an installer under a commissioning grant, NOT_ENTITLED.
1978
+ *
1979
+ * @generated from message kusinta.iot.webrtc.v1.SetComfortWindows
1980
+ */
1981
+ export declare type SetComfortWindows = Message<"kusinta.iot.webrtc.v1.SetComfortWindows"> & {
1982
+ /**
1983
+ * @generated from field: string comfort_load_id = 1;
1984
+ */
1985
+ comfortLoadId: string;
1986
+
1987
+ /**
1988
+ * @generated from field: repeated kusinta.iot.heating.v1.ComfortWindow windows = 2;
1989
+ */
1990
+ windows: ComfortWindow[];
1991
+
1992
+ /**
1993
+ * The ComfortLoad.windows_revision these windows replace. Unset: whatever is stored.
1994
+ *
1995
+ * @generated from field: optional uint64 windows_revision = 3;
1996
+ */
1997
+ windowsRevision?: bigint | undefined;
1998
+ };
1999
+
2000
+ /**
2001
+ * Describes the message kusinta.iot.webrtc.v1.SetComfortWindows.
2002
+ * Use `create(SetComfortWindowsSchema)` to create a new message.
2003
+ */
2004
+ export declare const SetComfortWindowsSchema: GenMessage<SetComfortWindows>;
2005
+
2006
+ /**
2007
+ * Asks for a nonce to link one home's account at a third-party service
2008
+ * (accountlink.v1.AccountLinkNonce). Only a household admin of the home
2009
+ * (access.v1.MEMBERSHIP_RELATION_HOUSEHOLD_ADMIN) is issued one; anyone else is refused as
2010
+ * NOT_ENTITLED, as is a home the caller cannot reach. A service this gateway does not
2011
+ * support is refused as INVALID_REQUEST. A gateway that cannot hold linked accounts right now
2012
+ * — its key for sealing them is missing or is not the one its stored links were sealed with —
2013
+ * refuses as UNAVAILABLE with metadata {"reason": "account_links_off"}; nothing is linked until
2014
+ * that is put right on the gateway.
2015
+ *
2016
+ * @generated from message kusinta.iot.webrtc.v1.RequestAccountLinkNonce
2017
+ */
2018
+ export declare type RequestAccountLinkNonce = Message<"kusinta.iot.webrtc.v1.RequestAccountLinkNonce"> & {
2019
+ /**
2020
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
2021
+ */
2022
+ homeId?: SpaceId | undefined;
2023
+
2024
+ /**
2025
+ * @generated from field: kusinta.iot.accountlink.v1.LinkedService service = 2;
2026
+ */
2027
+ service: LinkedService;
2028
+ };
2029
+
2030
+ /**
2031
+ * Describes the message kusinta.iot.webrtc.v1.RequestAccountLinkNonce.
2032
+ * Use `create(RequestAccountLinkNonceSchema)` to create a new message.
2033
+ */
2034
+ export declare const RequestAccountLinkNonceSchema: GenMessage<RequestAccountLinkNonce>;
2035
+
2036
+ /**
2037
+ * Lists a home's linked accounts and their status, answered with an AccountLinks. Given to
2038
+ * the home's residents, and to the departing household while a vacated handover of the home is
2039
+ * pending (household.proto, VACANCY); anyone else is refused as NOT_ENTITLED.
2040
+ *
2041
+ * @generated from message kusinta.iot.webrtc.v1.ListAccountLinks
2042
+ */
2043
+ export declare type ListAccountLinks = Message<"kusinta.iot.webrtc.v1.ListAccountLinks"> & {
2044
+ /**
2045
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
2046
+ */
2047
+ homeId?: SpaceId | undefined;
2048
+ };
2049
+
2050
+ /**
2051
+ * Describes the message kusinta.iot.webrtc.v1.ListAccountLinks.
2052
+ * Use `create(ListAccountLinksSchema)` to create a new message.
2053
+ */
2054
+ export declare const ListAccountLinksSchema: GenMessage<ListAccountLinks>;
2055
+
2056
+ /**
2057
+ * Unlinks a home's account at one service: the gateway reads no more through it and revokes
2058
+ * it (accountlink.v1.RevokeToken). A household admin of the home only; anyone else is refused
2059
+ * as NOT_ENTITLED. A service with no link is acked all the same. Acked.
2060
+ *
2061
+ * @generated from message kusinta.iot.webrtc.v1.UnlinkAccount
2062
+ */
2063
+ export declare type UnlinkAccount = Message<"kusinta.iot.webrtc.v1.UnlinkAccount"> & {
2064
+ /**
2065
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
2066
+ */
2067
+ homeId?: SpaceId | undefined;
2068
+
2069
+ /**
2070
+ * @generated from field: kusinta.iot.accountlink.v1.LinkedService service = 2;
2071
+ */
2072
+ service: LinkedService;
2073
+ };
2074
+
2075
+ /**
2076
+ * Describes the message kusinta.iot.webrtc.v1.UnlinkAccount.
2077
+ * Use `create(UnlinkAccountSchema)` to create a new message.
2078
+ */
2079
+ export declare const UnlinkAccountSchema: GenMessage<UnlinkAccount>;
2080
+
2081
+ /**
2082
+ * Lists a space's commissioning (commissioning.v1): for a home, its facts, tests and feature
2083
+ * states; for a space outside homes, its facts and the tests on records there. Answered
2084
+ * with a CommissioningProfile, filtered as commissioning.v1 says. A home asked by a caller
2085
+ * who is not given its commissioning is refused as NOT_ENTITLED.
2086
+ *
2087
+ * @generated from message kusinta.iot.webrtc.v1.ListCommissioning
2088
+ */
2089
+ export declare type ListCommissioning = Message<"kusinta.iot.webrtc.v1.ListCommissioning"> & {
2090
+ /**
2091
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
2092
+ */
2093
+ spaceId?: SpaceId | undefined;
2094
+ };
2095
+
2096
+ /**
2097
+ * Describes the message kusinta.iot.webrtc.v1.ListCommissioning.
2098
+ * Use `create(ListCommissioningSchema)` to create a new message.
2099
+ */
2100
+ export declare const ListCommissioningSchema: GenMessage<ListCommissioning>;
2101
+
2102
+ /**
2103
+ * Creates a fact (empty fact_id) or replaces one. Answered with the CommissioningRecord as
2104
+ * stored. The gateway sets answerer, necessity, feature, topic and provenance, save
2105
+ * provenance.evidence, which the caller states. Refused with metadata "reason":
2106
+ *
2107
+ * INVALID_REQUEST
2108
+ * "UNKNOWN_KEY" a key the gateway's catalogue does not hold.
2109
+ * "VALUE_TYPE" a value of another type than the key takes, a value outside the
2110
+ * key's closed list or range or listed twice, unknown false, or no
2111
+ * answer.
2112
+ * "SUBJECT" a record_id that is not a heating record within space_id, or a key
2113
+ * that is not about that kind of space or record.
2114
+ * "ANSWERER" a key the caller's party does not answer.
2115
+ * "EVIDENCE" evidence the caller's party may not give, or less than the key
2116
+ * requires.
2117
+ * "TEMPLATE_VERSION" a new or changed deviates_from naming a template or version the
2118
+ * home's template never was, or set on a home that follows no
2119
+ * template. One carried over unchanged from the stored fact is kept,
2120
+ * even after the home moved to another template.
2121
+ *
2122
+ * FAILED_PRECONDITION
2123
+ * "STALE_REVISION" the fact changed since the revision the request names.
2124
+ * "FACT_EXISTS" a create for a space, record and key that already have a fact;
2125
+ * metadata "fact_id" names it. One answer per key.
2126
+ * "SET_BY_TEST" a key only a test sets.
2127
+ *
2128
+ * A space or record the caller cannot reach, and a fact_id that does not exist, are refused
2129
+ * as NOT_ENTITLED with the same metadata.
2130
+ *
2131
+ * @generated from message kusinta.iot.webrtc.v1.PutCommissioningFact
2132
+ */
2133
+ export declare type PutCommissioningFact = Message<"kusinta.iot.webrtc.v1.PutCommissioningFact"> & {
2134
+ /**
2135
+ * @generated from field: kusinta.iot.commissioning.v1.CommissioningFact fact = 1;
2136
+ */
2137
+ fact?: CommissioningFact | undefined;
2138
+ };
2139
+
2140
+ /**
2141
+ * Describes the message kusinta.iot.webrtc.v1.PutCommissioningFact.
2142
+ * Use `create(PutCommissioningFactSchema)` to create a new message.
2143
+ */
2144
+ export declare const PutCommissioningFactSchema: GenMessage<PutCommissioningFact>;
2145
+
2146
+ /**
2147
+ * Removes a fact by its id, naming the revision it removes; as PutCommissioningFact. A fact
2148
+ * set by a test is replaced only by running it again: refused as FAILED_PRECONDITION
2149
+ * "SET_BY_TEST". Acked.
2150
+ *
2151
+ * @generated from message kusinta.iot.webrtc.v1.RemoveCommissioningFact
2152
+ */
2153
+ export declare type RemoveCommissioningFact = Message<"kusinta.iot.webrtc.v1.RemoveCommissioningFact"> & {
2154
+ /**
2155
+ * @generated from field: string fact_id = 1;
2156
+ */
2157
+ factId: string;
2158
+
2159
+ /**
2160
+ * @generated from field: uint64 revision = 2;
2161
+ */
2162
+ revision: bigint;
2163
+ };
2164
+
2165
+ /**
2166
+ * Describes the message kusinta.iot.webrtc.v1.RemoveCommissioningFact.
2167
+ * Use `create(RemoveCommissioningFactSchema)` to create a new message.
2168
+ */
2169
+ export declare const RemoveCommissioningFactSchema: GenMessage<RemoveCommissioningFact>;
2170
+
2171
+ /**
2172
+ * Creates a house template (empty template_id) or replaces one, naming the version it
2173
+ * replaces. From the property owner or the gateway's administrators, reaching the building;
2174
+ * anyone else is refused as NOT_ENTITLED. Answered with the CommissioningRecord as stored.
2175
+ * Refused as FAILED_PRECONDITION "STALE_REVISION" when the template changed since, as
2176
+ * INVALID_REQUEST "UNKNOWN_KEY" or "VALUE_TYPE" as PutCommissioningFact, and as
2177
+ * INVALID_REQUEST "EVIDENCE" for a key a template may not answer (commissioning.v1,
2178
+ * TEMPLATES); metadata "key" names it.
2179
+ *
2180
+ * @generated from message kusinta.iot.webrtc.v1.PutHouseTemplate
2181
+ */
2182
+ export declare type PutHouseTemplate = Message<"kusinta.iot.webrtc.v1.PutHouseTemplate"> & {
2183
+ /**
2184
+ * @generated from field: kusinta.iot.commissioning.v1.HouseTemplate template = 1;
2185
+ */
2186
+ template?: HouseTemplate | undefined;
2187
+ };
2188
+
2189
+ /**
2190
+ * Describes the message kusinta.iot.webrtc.v1.PutHouseTemplate.
2191
+ * Use `create(PutHouseTemplateSchema)` to create a new message.
2192
+ */
2193
+ export declare const PutHouseTemplateSchema: GenMessage<PutHouseTemplate>;
2194
+
2195
+ /**
2196
+ * Says which house template a home follows; an empty template_id, none. From the property
2197
+ * owner or the gateway's administrators; anyone else is refused as NOT_ENTITLED. A template
2198
+ * of another building is refused as INVALID_REQUEST "TEMPLATE_BUILDING". Deviations recorded
2199
+ * against another template stay, naming the version they were recorded against. Acked.
2200
+ *
2201
+ * @generated from message kusinta.iot.webrtc.v1.SetHomeTemplate
2202
+ */
2203
+ export declare type SetHomeTemplate = Message<"kusinta.iot.webrtc.v1.SetHomeTemplate"> & {
2204
+ /**
2205
+ * @generated from field: kusinta.iot.identity.v1.SpaceId home_id = 1;
2206
+ */
2207
+ homeId?: SpaceId | undefined;
2208
+
2209
+ /**
2210
+ * @generated from field: string template_id = 2;
2211
+ */
2212
+ templateId: string;
2213
+ };
2214
+
2215
+ /**
2216
+ * Describes the message kusinta.iot.webrtc.v1.SetHomeTemplate.
2217
+ * Use `create(SetHomeTemplateSchema)` to create a new message.
2218
+ */
2219
+ export declare const SetHomeTemplateSchema: GenMessage<SetHomeTemplate>;
2220
+
2221
+ /**
2222
+ * Starts a commissioning test (commissioning.v1.TestKind) on a heating record, answered with
2223
+ * the CommissioningRecord of the test, RUNNING. Its changes of state, the start included,
2224
+ * are pushed (GatewayMessage.commissioning_test), save the start to the session that
2225
+ * started it, which has it as the reply. Run by whoever may bind the outputs it drives
2226
+ * (heating.v1); PUMP_ALL_ZONES_OFF by an installer under a commissioning grant only. Refused
2227
+ * with metadata "reason":
2228
+ *
2229
+ * INVALID_REQUEST
2230
+ * "TEST_SUBJECT" a kind that does not run on that record, or for OUTPUT_LEASE a
2231
+ * binding field that is empty or not a bound output of it; for the
2232
+ * other kinds, a binding field that is not empty.
2233
+ *
2234
+ * FAILED_PRECONDITION
2235
+ * "TEST_RUNNING" a test already drives one of its outputs.
2236
+ * "SG_READY_ORDER" OUTPUT_LEASE on one SG Ready input while a running test drives the
2237
+ * other input of the same plant, in either order: both held away from
2238
+ * rest is a state of the heat pump no test asks for. metadata "field"
2239
+ * names the input the running test drives.
2240
+ * "LAST_HEATING_ZONE" OUTPUT_LEASE or ZONE_EFFECT on a floor zone's output that would leave
2241
+ * its circuit no zone heating: the zone is the circuit's only one, or
2242
+ * every other zone of the circuit has its output driven by a running
2243
+ * test. A zone with no bound output counts as heating. Not refused once
2244
+ * the circuit's "floor.pump_tolerates_all_zones_off" is true
2245
+ * (commissioning.v1). metadata "record_id" names the zone.
2246
+ * "ZONES_SWITCHING_ON" OUTPUT_LEASE or ZONE_EFFECT on a floor zone while the circuit's
2247
+ * zones driven by running or starting tests of those kinds already
2248
+ * number its "floor.max_zones_switching_on" (commissioning.v1): their
2249
+ * leases would end together and their actuators open at once.
2250
+ * metadata "record_id" names the circuit.
2251
+ * "NEEDS_PASS" ZONE_EFFECT or PUMP_ALL_ZONES_OFF on outputs without a current
2252
+ * OUTPUT_LEASE pass; metadata "record_id" names one.
2253
+ * "OUTPUT_NOT_LEASED" an output its producer does not state as leased, with a lapse value
2254
+ * at rest (heating.v1), so no test could leave it at rest.
2255
+ * "READ_LATENCY" OUTPUT_LEASE on an output whose producer does not state its reads
2256
+ * REAL_TIME: a pass judged against a guessed latency is none.
2257
+ * "LEASE_BOUNDS" OUTPUT_LEASE on an output whose lease bounds admit no lease of 60
2258
+ * seconds to 5 minutes, so the test could not end by its ends_at.
2259
+ *
2260
+ * A record the caller cannot reach is refused as NOT_ENTITLED.
2261
+ *
2262
+ * @generated from message kusinta.iot.webrtc.v1.RunCommissioningTest
2263
+ */
2264
+ export declare type RunCommissioningTest = Message<"kusinta.iot.webrtc.v1.RunCommissioningTest"> & {
2265
+ /**
2266
+ * @generated from field: kusinta.iot.commissioning.v1.TestKind kind = 1;
2267
+ */
2268
+ kind: TestKind;
2269
+
2270
+ /**
2271
+ * binding.field for OUTPUT_LEASE only.
2272
+ *
2273
+ * @generated from field: kusinta.iot.commissioning.v1.BindingRef binding = 4;
2274
+ */
2275
+ binding?: BindingRef | undefined;
2276
+ };
2277
+
2278
+ /**
2279
+ * Describes the message kusinta.iot.webrtc.v1.RunCommissioningTest.
2280
+ * Use `create(RunCommissioningTestSchema)` to create a new message.
2281
+ */
2282
+ export declare const RunCommissioningTestSchema: GenMessage<RunCommissioningTest>;
2283
+
2284
+ /**
2285
+ * Ends a running test. verdict ABORTED stops any test, from whoever started it or may run
2286
+ * it; PASSED or FAILED concludes a PUMP_ALL_ZONES_OFF test, from an installer under a
2287
+ * commissioning grant only, until the test's conclude_by. Any other verdict, or PASSED or
2288
+ * FAILED on another kind, is refused as INVALID_REQUEST "VERDICT". Its outputs return to
2289
+ * their normal control at once, floor zones switching on no faster than
2290
+ * "floor.max_zones_switching_on" allows. Answered
2291
+ * with the CommissioningRecord of the test. A test that has ended is refused as
2292
+ * FAILED_PRECONDITION "TEST_ENDED".
2293
+ *
2294
+ * @generated from message kusinta.iot.webrtc.v1.ConcludeCommissioningTest
2295
+ */
2296
+ export declare type ConcludeCommissioningTest = Message<"kusinta.iot.webrtc.v1.ConcludeCommissioningTest"> & {
2297
+ /**
2298
+ * @generated from field: string test_id = 1;
2299
+ */
2300
+ testId: string;
2301
+
2302
+ /**
2303
+ * @generated from field: kusinta.iot.commissioning.v1.TestState verdict = 2;
2304
+ */
2305
+ verdict: TestState;
2306
+ };
2307
+
2308
+ /**
2309
+ * Describes the message kusinta.iot.webrtc.v1.ConcludeCommissioningTest.
2310
+ * Use `create(ConcludeCommissioningTestSchema)` to create a new message.
2311
+ */
2312
+ export declare const ConcludeCommissioningTestSchema: GenMessage<ConcludeCommissioningTest>;
2313
+
2314
+ /**
2315
+ * Lists whether each home under a space is set up (commissioning.v1.HomeSetup): unset
2316
+ * root_space_id, every home the caller reaches. For the property owner and the gateway's
2317
+ * administrators; anyone else is refused as NOT_ENTITLED. Answered with a HomeSetups.
2318
+ *
2319
+ * @generated from message kusinta.iot.webrtc.v1.ListHomeSetups
2320
+ */
2321
+ export declare type ListHomeSetups = Message<"kusinta.iot.webrtc.v1.ListHomeSetups"> & {
2322
+ /**
2323
+ * @generated from field: kusinta.iot.identity.v1.SpaceId root_space_id = 1;
2324
+ */
2325
+ rootSpaceId?: SpaceId | undefined;
2326
+ };
2327
+
2328
+ /**
2329
+ * Describes the message kusinta.iot.webrtc.v1.ListHomeSetups.
2330
+ * Use `create(ListHomeSetupsSchema)` to create a new message.
2331
+ */
2332
+ export declare const ListHomeSetupsSchema: GenMessage<ListHomeSetups>;
2333
+
2334
+ /**
2335
+ * Asks for a commissioning grant on one space (commissioning.v1, GRANTS), answered with the
2336
+ * CommissioningGrant, REQUESTED. From a caller holding ROLE_TECHNICIAN who reaches the space;
2337
+ * anyone else, and a space they do not reach, is refused as NOT_ENTITLED. A room in a home is
2338
+ * INVALID_REQUEST with metadata {"reason": "grant_space"}: a home is granted whole. Asking
2339
+ * again while one of the caller's is requested or granted on the space answers that one.
2340
+ *
2341
+ * Accepted on any home the caller reaches, whether or not anyone could answer it: it lapses
2342
+ * unanswered where nobody does, so the answer tells the installer nothing of whether anyone
2343
+ * lives there. A caller who lives in the home is refused as FAILED_PRECONDITION with metadata
2344
+ * {"reason": "installer_lives_here"}, which tells them nothing they do not know.
2345
+ *
2346
+ * @generated from message kusinta.iot.webrtc.v1.RequestCommissioningGrant
2347
+ */
2348
+ export declare type RequestCommissioningGrant = Message<"kusinta.iot.webrtc.v1.RequestCommissioningGrant"> & {
2349
+ /**
2350
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 1;
2351
+ */
2352
+ spaceId?: SpaceId | undefined;
2353
+ };
2354
+
2355
+ /**
2356
+ * Describes the message kusinta.iot.webrtc.v1.RequestCommissioningGrant.
2357
+ * Use `create(RequestCommissioningGrantSchema)` to create a new message.
2358
+ */
2359
+ export declare const RequestCommissioningGrantSchema: GenMessage<RequestCommissioningGrant>;
2360
+
2361
+ /**
2362
+ * Answers a requested commissioning grant, answered with the CommissioningGrant as stored when
2363
+ * granted, and with ManagementAck when declined, which ends it. From a household admin of the
2364
+ * home, or for a space outside homes or an empty home (household.proto, EMPTY HOME) the
2365
+ * property owner or a gateway administrator who reaches it; anyone else, and a grant_id that is
2366
+ * not requested on a space the caller may answer for, is refused as NOT_ENTITLED, so that no
2367
+ * grant id can be probed. So is a grant that names the caller as its installer, whoever they
2368
+ * are (commissioning.v1, GRANTS).
2369
+ *
2370
+ * Granting needs ends_at after starts_at, no more than 14 days after it, and starts_at no
2371
+ * later than 30 days from now; otherwise INVALID_REQUEST with metadata
2372
+ * {"reason": "grant_period"}. An answered grant is not answered again: to change its time,
2373
+ * end it and let the installer ask anew.
2374
+ *
2375
+ * @generated from message kusinta.iot.webrtc.v1.AnswerCommissioningGrant
2376
+ */
2377
+ export declare type AnswerCommissioningGrant = Message<"kusinta.iot.webrtc.v1.AnswerCommissioningGrant"> & {
2378
+ /**
2379
+ * @generated from field: string grant_id = 1;
2380
+ */
2381
+ grantId: string;
2382
+
2383
+ /**
2384
+ * true grants; false declines.
2385
+ *
2386
+ * @generated from field: bool accept = 2;
2387
+ */
2388
+ accept: boolean;
2389
+
2390
+ /**
2391
+ * When it is active. Unset starts_at: now. Ignored when declining.
2392
+ *
2393
+ * @generated from field: google.protobuf.Timestamp starts_at = 3;
2394
+ */
2395
+ startsAt?: Timestamp | undefined;
2396
+
2397
+ /**
2398
+ * @generated from field: google.protobuf.Timestamp ends_at = 4;
2399
+ */
2400
+ endsAt?: Timestamp | undefined;
2401
+ };
2402
+
2403
+ /**
2404
+ * Describes the message kusinta.iot.webrtc.v1.AnswerCommissioningGrant.
2405
+ * Use `create(AnswerCommissioningGrantSchema)` to create a new message.
2406
+ */
2407
+ export declare const AnswerCommissioningGrantSchema: GenMessage<AnswerCommissioningGrant>;
2408
+
2409
+ /**
2410
+ * Ends a commissioning grant at once, requested or granted. Answered with ManagementAck. From
2411
+ * the installer it names, from whoever may answer it, and from nobody else: anyone else, and a
2412
+ * grant_id they are not listed, is refused as NOT_ENTITLED.
2413
+ *
2414
+ * @generated from message kusinta.iot.webrtc.v1.EndCommissioningGrant
2415
+ */
2416
+ export declare type EndCommissioningGrant = Message<"kusinta.iot.webrtc.v1.EndCommissioningGrant"> & {
2417
+ /**
2418
+ * @generated from field: string grant_id = 1;
2419
+ */
2420
+ grantId: string;
2421
+ };
2422
+
2423
+ /**
2424
+ * Describes the message kusinta.iot.webrtc.v1.EndCommissioningGrant.
2425
+ * Use `create(EndCommissioningGrantSchema)` to create a new message.
2426
+ */
2427
+ export declare const EndCommissioningGrantSchema: GenMessage<EndCommissioningGrant>;
2428
+
2429
+ /**
2430
+ * Lists the commissioning grants that have not ended on a space and those below it, answered
2431
+ * with CommissioningGrants: a home's to its residents, and an empty home's (household.proto,
2432
+ * EMPTY HOME) to the property owner and the gateway administrators who reach it, as one on a
2433
+ * space outside homes is; to an installer, their own.
2434
+ * Unset root_space_id lists every one the caller may be listed. Anyone may ask; nobody is
2435
+ * refused, and a caller listed none gets none.
2436
+ *
2437
+ * @generated from message kusinta.iot.webrtc.v1.ListCommissioningGrants
2438
+ */
2439
+ export declare type ListCommissioningGrants = Message<"kusinta.iot.webrtc.v1.ListCommissioningGrants"> & {
2440
+ /**
2441
+ * @generated from field: kusinta.iot.identity.v1.SpaceId root_space_id = 1;
2442
+ */
2443
+ rootSpaceId?: SpaceId | undefined;
2444
+ };
2445
+
2446
+ /**
2447
+ * Describes the message kusinta.iot.webrtc.v1.ListCommissioningGrants.
2448
+ * Use `create(ListCommissioningGrantsSchema)` to create a new message.
2449
+ */
2450
+ export declare const ListCommissioningGrantsSchema: GenMessage<ListCommissioningGrants>;
2451
+
2452
+ /**
2453
+ * Sets who owns one of the building's own devices as an asset (common.v1.AssetOwner), and
2454
+ * with it whether a room's outer limits can bind the device (climate.v1.OuterRoomLimits), and
2455
+ * nobody's access. Answered with ManagementAck. From the property owner or a gateway
2456
+ * administrator who reaches the device; anyone else is refused as NOT_ENTITLED. Unset
2457
+ * asset_owner clears it, as does one with neither owner set.
2458
+ *
2459
+ * Refused as INVALID_REQUEST with metadata "reason":
2460
+ * "owned_by_resident" a device a person owns outright (common.v1.DeviceOwnershipType
2461
+ * RESIDENT), which has no asset owner.
2462
+ * "asset_owner" owner_organisation false, or a household_home_id that is not an
2463
+ * apartment.
2464
+ *
2465
+ * A household's asset keeps naming its home if the home's space is changed or deleted, until
2466
+ * it is set again: who owns what after a home is split or merged is decided here, not by the
2467
+ * change.
2468
+ *
2469
+ * @generated from message kusinta.iot.webrtc.v1.SetAssetOwner
2470
+ */
2471
+ export declare type SetAssetOwner = Message<"kusinta.iot.webrtc.v1.SetAssetOwner"> & {
2472
+ /**
2473
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
2474
+ */
2475
+ deviceId?: DeviceId | undefined;
2476
+
2477
+ /**
2478
+ * @generated from field: kusinta.iot.common.v1.AssetOwner asset_owner = 2;
2479
+ */
2480
+ assetOwner?: AssetOwner | undefined;
2481
+ };
2482
+
2483
+ /**
2484
+ * Describes the message kusinta.iot.webrtc.v1.SetAssetOwner.
2485
+ * Use `create(SetAssetOwnerSchema)` to create a new message.
2486
+ */
2487
+ export declare const SetAssetOwnerSchema: GenMessage<SetAssetOwner>;
2488
+
2489
+ /**
2490
+ * @generated from message kusinta.iot.webrtc.v1.ManagementRequest
2491
+ */
2492
+ export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.ManagementRequest"> & {
2493
+ /**
2494
+ * @generated from oneof kusinta.iot.webrtc.v1.ManagementRequest.request
2495
+ */
2496
+ request: {
2497
+ /**
2498
+ * @generated from field: kusinta.iot.webrtc.v1.CreateSpace create_space = 1;
2499
+ */
2500
+ value: CreateSpace;
2501
+ case: "createSpace";
2502
+ } | {
2503
+ /**
2504
+ * @generated from field: kusinta.iot.webrtc.v1.UpdateSpace update_space = 2;
2505
+ */
2506
+ value: UpdateSpace;
2507
+ case: "updateSpace";
2508
+ } | {
2509
+ /**
2510
+ * @generated from field: kusinta.iot.webrtc.v1.DeleteSpace delete_space = 3;
2511
+ */
2512
+ value: DeleteSpace;
2513
+ case: "deleteSpace";
2514
+ } | {
2515
+ /**
2516
+ * @generated from field: kusinta.iot.webrtc.v1.AssignUserToSpace assign_user_to_space = 4;
2517
+ */
2518
+ value: AssignUserToSpace;
2519
+ case: "assignUserToSpace";
2520
+ } | {
2521
+ /**
2522
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveUserFromSpace remove_user_from_space = 5;
2523
+ */
2524
+ value: RemoveUserFromSpace;
2525
+ case: "removeUserFromSpace";
2526
+ } | {
2527
+ /**
2528
+ * @generated from field: kusinta.iot.webrtc.v1.PlaceDeviceInSpace place_device_in_space = 6;
2529
+ */
2530
+ value: PlaceDeviceInSpace;
2531
+ case: "placeDeviceInSpace";
2532
+ } | {
2533
+ /**
2534
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveDeviceFromSpace remove_device_from_space = 7;
2535
+ */
2536
+ value: RemoveDeviceFromSpace;
2537
+ case: "removeDeviceFromSpace";
2538
+ } | {
2539
+ /**
2540
+ * @generated from field: kusinta.iot.webrtc.v1.ClaimDevice claim_device = 8;
2541
+ */
2542
+ value: ClaimDevice;
2543
+ case: "claimDevice";
2544
+ } | {
2545
+ /**
2546
+ * @generated from field: kusinta.iot.webrtc.v1.ReleaseDevice release_device = 9;
2547
+ */
2548
+ value: ReleaseDevice;
2549
+ case: "releaseDevice";
2550
+ } | {
2551
+ /**
2552
+ * @generated from field: kusinta.iot.webrtc.v1.ListSpaces list_spaces = 10;
2553
+ */
2554
+ value: ListSpaces;
2555
+ case: "listSpaces";
2556
+ } | {
2557
+ /**
2558
+ * @generated from field: kusinta.iot.webrtc.v1.CreateDeviceLink create_device_link = 11;
2559
+ */
2560
+ value: CreateDeviceLink;
2561
+ case: "createDeviceLink";
2562
+ } | {
2563
+ /**
2564
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveDeviceLink remove_device_link = 12;
2565
+ */
2566
+ value: RemoveDeviceLink;
2567
+ case: "removeDeviceLink";
2568
+ } | {
2569
+ /**
2570
+ * @generated from field: kusinta.iot.webrtc.v1.ListDeviceLinks list_device_links = 13;
2571
+ */
2572
+ value: ListDeviceLinks;
2573
+ case: "listDeviceLinks";
2574
+ } | {
2575
+ /**
2576
+ * @generated from field: kusinta.iot.webrtc.v1.UpdateDeviceLink update_device_link = 14;
2577
+ */
2578
+ value: UpdateDeviceLink;
2579
+ case: "updateDeviceLink";
2580
+ } | {
2581
+ /**
2582
+ * @generated from field: kusinta.iot.webrtc.v1.ProvisionDevice provision_device = 15;
2583
+ */
2584
+ value: ProvisionDevice;
2585
+ case: "provisionDevice";
2586
+ } | {
2587
+ /**
2588
+ * @generated from field: kusinta.iot.webrtc.v1.SetRoomTarget set_room_target = 16;
2589
+ */
2590
+ value: SetRoomTarget;
2591
+ case: "setRoomTarget";
2592
+ } | {
2593
+ /**
2594
+ * @generated from field: kusinta.iot.webrtc.v1.ConfigureRoomClimate configure_room_climate = 17;
2595
+ */
2596
+ value: ConfigureRoomClimate;
2597
+ case: "configureRoomClimate";
2598
+ } | {
2599
+ /**
2600
+ * @generated from field: kusinta.iot.webrtc.v1.SetClimateMode set_climate_mode = 18;
2601
+ */
2602
+ value: SetClimateMode;
2603
+ case: "setClimateMode";
2604
+ } | {
2605
+ /**
2606
+ * @generated from field: kusinta.iot.webrtc.v1.ListRoomClimates list_room_climates = 19;
2607
+ */
2608
+ value: ListRoomClimates;
2609
+ case: "listRoomClimates";
2610
+ } | {
2611
+ /**
2612
+ * @generated from field: kusinta.iot.webrtc.v1.GetRoomHistory get_room_history = 20;
2613
+ */
2614
+ value: GetRoomHistory;
2615
+ case: "getRoomHistory";
2616
+ } | {
2617
+ /**
2618
+ * @generated from field: kusinta.iot.webrtc.v1.GetPrivacyDisclosure get_privacy_disclosure = 21;
2619
+ */
2620
+ value: GetPrivacyDisclosure;
2621
+ case: "getPrivacyDisclosure";
2622
+ } | {
2623
+ /**
2624
+ * @generated from field: kusinta.iot.webrtc.v1.GetApartmentClimateSummary get_apartment_climate_summary = 22;
2625
+ */
2626
+ value: GetApartmentClimateSummary;
2627
+ case: "getApartmentClimateSummary";
2628
+ } | {
2629
+ /**
2630
+ * @generated from field: kusinta.iot.webrtc.v1.ReconnectConnector reconnect_connector = 23;
2631
+ */
2632
+ value: ReconnectConnector;
2633
+ case: "reconnectConnector";
2634
+ } | {
2635
+ /**
2636
+ * Invites; see invite.proto.
2637
+ *
2638
+ * @generated from field: kusinta.iot.webrtc.v1.CreateInvite create_invite = 24;
2639
+ */
2640
+ value: CreateInvite;
2641
+ case: "createInvite";
2642
+ } | {
2643
+ /**
2644
+ * @generated from field: kusinta.iot.webrtc.v1.ResendInvite resend_invite = 25;
2645
+ */
2646
+ value: ResendInvite;
2647
+ case: "resendInvite";
2648
+ } | {
2649
+ /**
2650
+ * @generated from field: kusinta.iot.webrtc.v1.RevokeInvite revoke_invite = 26;
2651
+ */
2652
+ value: RevokeInvite;
2653
+ case: "revokeInvite";
2654
+ } | {
2655
+ /**
2656
+ * @generated from field: kusinta.iot.webrtc.v1.MarkInviteEmailSent mark_invite_email_sent = 27;
2657
+ */
2658
+ value: MarkInviteEmailSent;
2659
+ case: "markInviteEmailSent";
2660
+ } | {
2661
+ /**
2662
+ * @generated from field: kusinta.iot.webrtc.v1.ListSpaceInvites list_space_invites = 28;
2663
+ */
2664
+ value: ListSpaceInvites;
2665
+ case: "listSpaceInvites";
2666
+ } | {
2667
+ /**
2668
+ * @generated from field: kusinta.iot.webrtc.v1.ApproveJoinRequest approve_join_request = 29;
2669
+ */
2670
+ value: ApproveJoinRequest;
2671
+ case: "approveJoinRequest";
2672
+ } | {
2673
+ /**
2674
+ * @generated from field: kusinta.iot.webrtc.v1.DenyJoinRequest deny_join_request = 30;
2675
+ */
2676
+ value: DenyJoinRequest;
2677
+ case: "denyJoinRequest";
2678
+ } | {
2679
+ /**
2680
+ * Members; see members.proto.
2681
+ *
2682
+ * @generated from field: kusinta.iot.webrtc.v1.ListGatewayMembers list_gateway_members = 31;
2683
+ */
2684
+ value: ListGatewayMembers;
2685
+ case: "listGatewayMembers";
2686
+ } | {
2687
+ /**
2688
+ * @generated from field: kusinta.iot.webrtc.v1.SetMemberRole set_member_role = 32;
2689
+ */
2690
+ value: SetMemberRole;
2691
+ case: "setMemberRole";
2692
+ } | {
2693
+ /**
2694
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveFromGateway remove_from_gateway = 33;
2695
+ */
2696
+ value: RemoveFromGateway;
2697
+ case: "removeFromGateway";
2698
+ } | {
2699
+ /**
2700
+ * @generated from field: kusinta.iot.webrtc.v1.SetAccessUntil set_access_until = 34;
2701
+ */
2702
+ value: SetAccessUntil;
2703
+ case: "setAccessUntil";
2704
+ } | {
2705
+ /**
2706
+ * Superseded, and refused as INVALID_REQUEST; see SetOwnerOrganisation.
2707
+ *
2708
+ * @generated from field: kusinta.iot.webrtc.v1.SetOwnerOrganisation set_owner_organisation = 35 [deprecated = true];
2709
+ * @deprecated
2710
+ */
2711
+ value: SetOwnerOrganisation;
2712
+ case: "setOwnerOrganisation";
2713
+ } | {
2714
+ /**
2715
+ * Promotion requests; see members.proto.
2716
+ *
2717
+ * @generated from field: kusinta.iot.webrtc.v1.RequestPromotion request_promotion = 36;
2718
+ */
2719
+ value: RequestPromotion;
2720
+ case: "requestPromotion";
2721
+ } | {
2722
+ /**
2723
+ * @generated from field: kusinta.iot.webrtc.v1.AnswerPromotion answer_promotion = 37;
2724
+ */
2725
+ value: AnswerPromotion;
2726
+ case: "answerPromotion";
2727
+ } | {
2728
+ /**
2729
+ * @generated from field: kusinta.iot.webrtc.v1.ListPromotionRequests list_promotion_requests = 38;
2730
+ */
2731
+ value: ListPromotionRequests;
2732
+ case: "listPromotionRequests";
2733
+ } | {
2734
+ /**
2735
+ * Heating records; see heating.v1.
2736
+ *
2737
+ * @generated from field: kusinta.iot.webrtc.v1.ListHeating list_heating = 39;
2738
+ */
2739
+ value: ListHeating;
2740
+ case: "listHeating";
2741
+ } | {
2742
+ /**
2743
+ * @generated from field: kusinta.iot.webrtc.v1.PutHeatingPlant put_heating_plant = 40;
2744
+ */
2745
+ value: PutHeatingPlant;
2746
+ case: "putHeatingPlant";
2747
+ } | {
2748
+ /**
2749
+ * @generated from field: kusinta.iot.webrtc.v1.PutHeatingCircuit put_heating_circuit = 41;
2750
+ */
2751
+ value: PutHeatingCircuit;
2752
+ case: "putHeatingCircuit";
2753
+ } | {
2754
+ /**
2755
+ * @generated from field: kusinta.iot.webrtc.v1.PutFloorZone put_floor_zone = 42;
2756
+ */
2757
+ value: PutFloorZone;
2758
+ case: "putFloorZone";
2759
+ } | {
2760
+ /**
2761
+ * @generated from field: kusinta.iot.webrtc.v1.PutComfortLoad put_comfort_load = 43;
2762
+ */
2763
+ value: PutComfortLoad;
2764
+ case: "putComfortLoad";
2765
+ } | {
2766
+ /**
2767
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveHeatingRecord remove_heating_record = 44;
2768
+ */
2769
+ value: RemoveHeatingRecord;
2770
+ case: "removeHeatingRecord";
2771
+ } | {
2772
+ /**
2773
+ * @generated from field: kusinta.iot.webrtc.v1.SetComfortWindows set_comfort_windows = 45;
2774
+ */
2775
+ value: SetComfortWindows;
2776
+ case: "setComfortWindows";
2777
+ } | {
2778
+ /**
2779
+ * @generated from field: kusinta.iot.webrtc.v1.RequestAccountLinkNonce request_account_link_nonce = 46;
2780
+ */
2781
+ value: RequestAccountLinkNonce;
2782
+ case: "requestAccountLinkNonce";
2783
+ } | {
2784
+ /**
2785
+ * @generated from field: kusinta.iot.webrtc.v1.ListAccountLinks list_account_links = 47;
2786
+ */
2787
+ value: ListAccountLinks;
2788
+ case: "listAccountLinks";
2789
+ } | {
2790
+ /**
2791
+ * @generated from field: kusinta.iot.webrtc.v1.UnlinkAccount unlink_account = 48;
2792
+ */
2793
+ value: UnlinkAccount;
2794
+ case: "unlinkAccount";
2795
+ } | {
2796
+ /**
2797
+ * Commissioning; see commissioning.v1.
2798
+ *
2799
+ * @generated from field: kusinta.iot.webrtc.v1.ListCommissioning list_commissioning = 49;
2800
+ */
2801
+ value: ListCommissioning;
2802
+ case: "listCommissioning";
2803
+ } | {
2804
+ /**
2805
+ * @generated from field: kusinta.iot.webrtc.v1.PutCommissioningFact put_commissioning_fact = 50;
2806
+ */
2807
+ value: PutCommissioningFact;
2808
+ case: "putCommissioningFact";
2809
+ } | {
2810
+ /**
2811
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveCommissioningFact remove_commissioning_fact = 51;
2812
+ */
2813
+ value: RemoveCommissioningFact;
2814
+ case: "removeCommissioningFact";
2815
+ } | {
2816
+ /**
2817
+ * @generated from field: kusinta.iot.webrtc.v1.PutHouseTemplate put_house_template = 52;
2818
+ */
2819
+ value: PutHouseTemplate;
2820
+ case: "putHouseTemplate";
2821
+ } | {
2822
+ /**
2823
+ * @generated from field: kusinta.iot.webrtc.v1.SetHomeTemplate set_home_template = 53;
2824
+ */
2825
+ value: SetHomeTemplate;
2826
+ case: "setHomeTemplate";
2827
+ } | {
2828
+ /**
2829
+ * @generated from field: kusinta.iot.webrtc.v1.RunCommissioningTest run_commissioning_test = 54;
2830
+ */
2831
+ value: RunCommissioningTest;
2832
+ case: "runCommissioningTest";
2833
+ } | {
2834
+ /**
2835
+ * @generated from field: kusinta.iot.webrtc.v1.ConcludeCommissioningTest conclude_commissioning_test = 55;
2836
+ */
2837
+ value: ConcludeCommissioningTest;
2838
+ case: "concludeCommissioningTest";
2839
+ } | {
2840
+ /**
2841
+ * @generated from field: kusinta.iot.webrtc.v1.ListHomeSetups list_home_setups = 56;
2842
+ */
2843
+ value: ListHomeSetups;
2844
+ case: "listHomeSetups";
2845
+ } | {
2846
+ /**
2847
+ * Commissioning grants; see commissioning.v1, GRANTS.
2848
+ *
2849
+ * @generated from field: kusinta.iot.webrtc.v1.RequestCommissioningGrant request_commissioning_grant = 57;
2850
+ */
2851
+ value: RequestCommissioningGrant;
2852
+ case: "requestCommissioningGrant";
2853
+ } | {
2854
+ /**
2855
+ * @generated from field: kusinta.iot.webrtc.v1.AnswerCommissioningGrant answer_commissioning_grant = 58;
2856
+ */
2857
+ value: AnswerCommissioningGrant;
2858
+ case: "answerCommissioningGrant";
2859
+ } | {
2860
+ /**
2861
+ * @generated from field: kusinta.iot.webrtc.v1.EndCommissioningGrant end_commissioning_grant = 59;
2862
+ */
2863
+ value: EndCommissioningGrant;
2864
+ case: "endCommissioningGrant";
2865
+ } | {
2866
+ /**
2867
+ * @generated from field: kusinta.iot.webrtc.v1.ListCommissioningGrants list_commissioning_grants = 60;
2868
+ */
2869
+ value: ListCommissioningGrants;
2870
+ case: "listCommissioningGrants";
2871
+ } | {
2872
+ /**
2873
+ * @generated from field: kusinta.iot.webrtc.v1.SetAssetOwner set_asset_owner = 61;
2874
+ */
2875
+ value: SetAssetOwner;
2876
+ case: "setAssetOwner";
2877
+ } | {
2878
+ /**
2879
+ * The household; see household.proto.
2880
+ *
2881
+ * @generated from field: kusinta.iot.webrtc.v1.DemoteHouseholdAdmin demote_household_admin = 62;
2882
+ */
2883
+ value: DemoteHouseholdAdmin;
2884
+ case: "demoteHouseholdAdmin";
2885
+ } | {
2886
+ /**
2887
+ * @generated from field: kusinta.iot.webrtc.v1.StartHouseholdHandover start_household_handover = 63;
2888
+ */
2889
+ value: StartHouseholdHandover;
2890
+ case: "startHouseholdHandover";
2891
+ } | {
2892
+ /**
2893
+ * @generated from field: kusinta.iot.webrtc.v1.ConfirmHouseholdHandover confirm_household_handover = 64;
2894
+ */
2895
+ value: ConfirmHouseholdHandover;
2896
+ case: "confirmHouseholdHandover";
2897
+ } | {
2898
+ /**
2899
+ * @generated from field: kusinta.iot.webrtc.v1.CancelHouseholdHandover cancel_household_handover = 65;
2900
+ */
2901
+ value: CancelHouseholdHandover;
2902
+ case: "cancelHouseholdHandover";
2903
+ } | {
2904
+ /**
2905
+ * @generated from field: kusinta.iot.webrtc.v1.ListHouseholdHandovers list_household_handovers = 66;
2906
+ */
2907
+ value: ListHouseholdHandovers;
2908
+ case: "listHouseholdHandovers";
2909
+ } | {
2910
+ /**
2911
+ * @generated from field: kusinta.iot.webrtc.v1.ExportHouseholdData export_household_data = 67;
2912
+ */
2913
+ value: ExportHouseholdData;
2914
+ case: "exportHouseholdData";
2915
+ } | {
2916
+ /**
2917
+ * @generated from field: kusinta.iot.webrtc.v1.SetHomeName set_home_name = 68;
2918
+ */
2919
+ value: SetHomeName;
2920
+ case: "setHomeName";
2921
+ } | {
2922
+ /**
2923
+ * @generated from field: kusinta.iot.webrtc.v1.ClearClimateHistory clear_climate_history = 69;
2924
+ */
2925
+ value: ClearClimateHistory;
2926
+ case: "clearClimateHistory";
2927
+ } | {
2928
+ /**
2929
+ * @generated from field: kusinta.iot.webrtc.v1.SetInnerRoomLimits set_inner_room_limits = 70;
2930
+ */
2931
+ value: SetInnerRoomLimits;
2932
+ case: "setInnerRoomLimits";
2933
+ } | {
2934
+ /**
2935
+ * @generated from field: kusinta.iot.webrtc.v1.GetPlantHistory get_plant_history = 71;
2936
+ */
2937
+ value: GetPlantHistory;
2938
+ case: "getPlantHistory";
2939
+ } | {
2940
+ /**
2941
+ * Building planning; see BUILDING PLANNING.
2942
+ *
2943
+ * @generated from field: kusinta.iot.webrtc.v1.GetBuildingPlanning get_building_planning = 72;
2944
+ */
2945
+ value: GetBuildingPlanning;
2946
+ case: "getBuildingPlanning";
2947
+ } | {
2948
+ /**
2949
+ * @generated from field: kusinta.iot.webrtc.v1.PutBuildingPlanning put_building_planning = 73;
2950
+ */
2951
+ value: PutBuildingPlanning;
2952
+ case: "putBuildingPlanning";
2953
+ } | {
2954
+ /**
2955
+ * @generated from field: kusinta.iot.webrtc.v1.GetDayAheadPrices get_day_ahead_prices = 74;
2956
+ */
2957
+ value: GetDayAheadPrices;
2958
+ case: "getDayAheadPrices";
2959
+ } | {
2960
+ /**
2961
+ * A building's or a home's street address; see SPACE ADDRESS.
2962
+ *
2963
+ * @generated from field: kusinta.iot.webrtc.v1.GetSpaceAddress get_space_address = 75;
2964
+ */
2965
+ value: GetSpaceAddress;
2966
+ case: "getSpaceAddress";
2967
+ } | {
2968
+ /**
2969
+ * @generated from field: kusinta.iot.webrtc.v1.PutSpaceAddress put_space_address = 76;
2970
+ */
2971
+ value: PutSpaceAddress;
2972
+ case: "putSpaceAddress";
453
2973
  } | { case: undefined; value?: undefined };
454
2974
  };
455
2975