@kusinta/iot-schema 0.2.0-beta.45 → 0.2.0-beta.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/kusinta/iot/access/v1/acl_pb.d.ts +4 -1
- package/src/kusinta/iot/access/v1/roles_pb.d.ts +3 -1
- package/src/kusinta/iot/access/v1/roles_pb.js +3 -1
- package/src/kusinta/iot/accountlink/v1/account_link_pb.d.ts +10 -2
- package/src/kusinta/iot/climate/v1/climate_pb.d.ts +490 -40
- package/src/kusinta/iot/climate/v1/climate_pb.js +86 -14
- package/src/kusinta/iot/commissioning/v1/commissioning_pb.d.ts +21 -5
- package/src/kusinta/iot/commissioning/v1/commissioning_pb.js +1 -1
- package/src/kusinta/iot/common/v1/types_pb.d.ts +3 -0
- package/src/kusinta/iot/device/v1/descriptor_pb.d.ts +3 -3
- package/src/kusinta/iot/device/v1/device_event_pb.d.ts +4 -2
- package/src/kusinta/iot/device/v1/property_update_pb.d.ts +13 -0
- package/src/kusinta/iot/device/v1/property_update_pb.js +1 -1
- package/src/kusinta/iot/space/v1/space_pb.d.ts +18 -1
- package/src/kusinta/iot/space/v1/space_pb.js +1 -1
- package/src/kusinta/iot/webrtc/v1/envelope_pb.d.ts +70 -2
- package/src/kusinta/iot/webrtc/v1/envelope_pb.js +16 -2
- package/src/kusinta/iot/webrtc/v1/household_pb.d.ts +104 -7
- package/src/kusinta/iot/webrtc/v1/household_pb.js +19 -5
- package/src/kusinta/iot/webrtc/v1/management_pb.d.ts +190 -45
- package/src/kusinta/iot/webrtc/v1/management_pb.js +48 -34
- package/src/kusinta/iot/webrtc/v1/members_pb.d.ts +4 -0
|
@@ -6,6 +6,7 @@ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"
|
|
|
6
6
|
import type { Message } from "@bufbuild/protobuf";
|
|
7
7
|
import type { Timestamp } from "@bufbuild/protobuf/wkt";
|
|
8
8
|
import type { DeviceId, SpaceId, UserId } from "../../identity/v1/identity_pb.js";
|
|
9
|
+
import type { Role } from "../../access/v1/roles_pb.js";
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Describes the file kusinta/iot/climate/v1/climate.proto.
|
|
@@ -49,6 +50,15 @@ export declare type TargetChange = Message<"kusinta.iot.climate.v1.TargetChange"
|
|
|
49
50
|
*/
|
|
50
51
|
value: DeviceId;
|
|
51
52
|
case: "device";
|
|
53
|
+
} | {
|
|
54
|
+
/**
|
|
55
|
+
* Set by the gateway when the home gained a resident, from the room's outer move-in target
|
|
56
|
+
* (OuterRoomLimits.move_in_target; webrtc.v1 household.proto, MOVE-IN). Only true is sent.
|
|
57
|
+
*
|
|
58
|
+
* @generated from field: bool move_in = 4;
|
|
59
|
+
*/
|
|
60
|
+
value: boolean;
|
|
61
|
+
case: "moveIn";
|
|
52
62
|
} | { case: undefined; value?: undefined };
|
|
53
63
|
};
|
|
54
64
|
|
|
@@ -76,7 +86,16 @@ export declare type RoomClimate = Message<"kusinta.iot.climate.v1.RoomClimate">
|
|
|
76
86
|
|
|
77
87
|
/**
|
|
78
88
|
* The temperature the room is to be held at, in centidegrees. Unset: nobody has set
|
|
79
|
-
* one. Always within
|
|
89
|
+
* one. Always within the inner limits where those are set (inner_limits), and bounded by
|
|
90
|
+
* nothing of the room where they are not. Never clamped by the outer ones, a change made by
|
|
91
|
+
* hand at a device they bind included: the target keeps the change, and that device's output
|
|
92
|
+
* is held within them (OuterRoomLimits, WHAT THEY BIND and DEVICE LIMITS).
|
|
93
|
+
*
|
|
94
|
+
* Rollout note: an app that predates outer_limits reads min_centidegrees and
|
|
95
|
+
* max_centidegrees as bounds on this field, and may be sent a target outside them; one that
|
|
96
|
+
* holds its control to them may, on any touch, send the outer bound as the target and so
|
|
97
|
+
* rewrite a household's target set beyond it. An app tells a gateway that predates outer
|
|
98
|
+
* limits by outer_limits unset, and offers it only min and max (ConfigureRoomClimate.limits).
|
|
80
99
|
*
|
|
81
100
|
* @generated from field: optional sint32 target_centidegrees = 2;
|
|
82
101
|
*/
|
|
@@ -84,7 +103,8 @@ export declare type RoomClimate = Message<"kusinta.iot.climate.v1.RoomClimate">
|
|
|
84
103
|
|
|
85
104
|
/**
|
|
86
105
|
* Who or what set target_centidegrees. Unset while the target is, and when it is withheld
|
|
87
|
-
* from the recipient: from service in a home
|
|
106
|
+
* from the recipient: from service in a home that is not empty (webrtc.v1 household.proto,
|
|
107
|
+
* EMPTY HOME), and from anyone when it dates from before
|
|
88
108
|
* their current residency in the home, or from a home they did not live in at the time
|
|
89
109
|
* (see access.v1.MembershipRelation).
|
|
90
110
|
*
|
|
@@ -96,7 +116,10 @@ export declare type RoomClimate = Message<"kusinta.iot.climate.v1.RoomClimate">
|
|
|
96
116
|
* What the valves are actually being held at, in centidegrees. Equal to the target
|
|
97
117
|
* unless a ClimateMode on an enclosing space sets the room back — and then the room's
|
|
98
118
|
* own target again if somebody changed this room during the mode (see
|
|
99
|
-
* overrides_mode)
|
|
119
|
+
* overrides_mode) — or the vacancy setback holds it (webrtc.v1 household.proto, VACANCY), or
|
|
120
|
+
* an outer bound clamps it (outer_limit_clamp). Where the outer limits bind some of the
|
|
121
|
+
* room's outputs and not others, what those they bind are held at (OuterRoomLimits, HELD).
|
|
122
|
+
* Unset while nothing is being held.
|
|
100
123
|
*
|
|
101
124
|
* @generated from field: optional sint32 effective_target_centidegrees = 4;
|
|
102
125
|
*/
|
|
@@ -119,17 +142,19 @@ export declare type RoomClimate = Message<"kusinta.iot.climate.v1.RoomClimate">
|
|
|
119
142
|
modeSpaceId?: SpaceId | undefined;
|
|
120
143
|
|
|
121
144
|
/**
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
145
|
+
* A copy of outer_limits.min and .max, in centidegrees, kept for apps that predate
|
|
146
|
+
* outer_limits: each set exactly when its outer bound is, and unset otherwise. Read
|
|
147
|
+
* outer_limits instead. What the gateway writes into a device's own setpoint limits is
|
|
148
|
+
* OuterRoomLimits' (DEVICE LIMITS).
|
|
126
149
|
*
|
|
127
|
-
* @generated from field: optional sint32 min_centidegrees = 6;
|
|
150
|
+
* @generated from field: optional sint32 min_centidegrees = 6 [deprecated = true];
|
|
151
|
+
* @deprecated
|
|
128
152
|
*/
|
|
129
153
|
minCentidegrees?: number | undefined;
|
|
130
154
|
|
|
131
155
|
/**
|
|
132
|
-
* @generated from field: optional sint32 max_centidegrees = 7;
|
|
156
|
+
* @generated from field: optional sint32 max_centidegrees = 7 [deprecated = true];
|
|
157
|
+
* @deprecated
|
|
133
158
|
*/
|
|
134
159
|
maxCentidegrees?: number | undefined;
|
|
135
160
|
|
|
@@ -186,8 +211,9 @@ export declare type RoomClimate = Message<"kusinta.iot.climate.v1.RoomClimate">
|
|
|
186
211
|
* Stated as the lock rather than as a permission so that the proto3 default — false,
|
|
187
212
|
* unlocked — is the intended default: a room nobody has configured takes changes at its
|
|
188
213
|
* devices, as a room in an apartment should until its residents decide otherwise; when a
|
|
189
|
-
* home loses its last resident, its rooms' locks are cleared
|
|
190
|
-
*
|
|
214
|
+
* home loses its last resident, its rooms' locks are cleared, and so are those set while it
|
|
215
|
+
* stood empty when it gains one (webrtc.v1 household.proto, MOVE-IN). Elsewhere locking is
|
|
216
|
+
* the owner's choice.
|
|
191
217
|
*
|
|
192
218
|
* @generated from field: bool lock_device_controls = 12;
|
|
193
219
|
*/
|
|
@@ -195,16 +221,19 @@ export declare type RoomClimate = Message<"kusinta.iot.climate.v1.RoomClimate">
|
|
|
195
221
|
|
|
196
222
|
/**
|
|
197
223
|
* Set when the recipient reaches this room only as service (see
|
|
198
|
-
* access.v1.MembershipRelation): the room is in someone's home, and what describes the
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
224
|
+
* access.v1.MembershipRelation): the room is in someone's home, and what describes the people
|
|
225
|
+
* in it is WITHHELD. Never set for the property owner or a gateway administrator while the
|
|
226
|
+
* home is empty (webrtc.v1 household.proto, EMPTY HOME): they are sent its rooms as rooms
|
|
227
|
+
* outside homes are, and at MOVE-IN sent them again with it set. When it is set,
|
|
228
|
+
* target_centidegrees, target_change, effective_target_centidegrees, overrides_mode,
|
|
229
|
+
* mode_space_id, measured_centidegrees, measured_by, condition, lock_device_controls,
|
|
230
|
+
* inner_limits, outer_limit_clamp, outer_limits_coverage and outer_bound_device_ids are all
|
|
231
|
+
* left unset, and sensor_ids leaves out sensors a resident owns.
|
|
203
232
|
*
|
|
204
233
|
* Unset because withheld, not because unknown: an app must not render them as NO_TARGET or
|
|
205
234
|
* a lost sensor. A withheld room is sent again only when something that IS sent changes,
|
|
206
|
-
* so that the timing of an update does not give away what was withheld. Its limits
|
|
207
|
-
* the sensors service may see are still sent, since setting a room up is service work.
|
|
235
|
+
* so that the timing of an update does not give away what was withheld. Its outer limits
|
|
236
|
+
* and the sensors service may see are still sent, since setting a room up is service work.
|
|
208
237
|
* Its climate over time is available to service only as an ApartmentClimateSummary.
|
|
209
238
|
*
|
|
210
239
|
* explanations, target_held_until, planning and the comfort band are withheld in the
|
|
@@ -253,8 +282,9 @@ export declare type RoomClimate = Message<"kusinta.iot.climate.v1.RoomClimate">
|
|
|
253
282
|
/**
|
|
254
283
|
* The comfort band in force, in centidegrees: the lowest and highest a plan may hold the
|
|
255
284
|
* room at while it heats ahead, coasts or saves on dear energy. Both set or neither, low
|
|
256
|
-
* no higher than high, and within
|
|
257
|
-
*
|
|
285
|
+
* no higher than high, and within the inner limits where those are set; at the outputs the
|
|
286
|
+
* outer limits bind, a plan holds within them too (OuterRoomLimits, HELD). Absent: no band,
|
|
287
|
+
* and a plan holds the room at its target — never 0 °C.
|
|
258
288
|
*
|
|
259
289
|
* @generated from field: optional sint32 comfort_band_low_centidegrees = 19;
|
|
260
290
|
*/
|
|
@@ -264,6 +294,61 @@ export declare type RoomClimate = Message<"kusinta.iot.climate.v1.RoomClimate">
|
|
|
264
294
|
* @generated from field: optional sint32 comfort_band_high_centidegrees = 20;
|
|
265
295
|
*/
|
|
266
296
|
comfortBandHighCentidegrees?: number | undefined;
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* The room's outer limits, each bound with who set it and when (OuterRoomLimits). Sent to
|
|
300
|
+
* whoever is sent the room, service included and with state_withheld too: they are the
|
|
301
|
+
* building's, and setting them is service work.
|
|
302
|
+
*
|
|
303
|
+
* Always set by a gateway that keeps outer limits: an empty OuterRoomLimits where the room
|
|
304
|
+
* has none. Unset only from a gateway that predates them, which keeps min and max alone: an
|
|
305
|
+
* app reads unset so, and offers only min and max, through ConfigureRoomClimate.limits,
|
|
306
|
+
* rather than an editor whose away minimum and move-in target that gateway would drop.
|
|
307
|
+
*
|
|
308
|
+
* @generated from field: kusinta.iot.climate.v1.OuterRoomLimits outer_limits = 21;
|
|
309
|
+
*/
|
|
310
|
+
outerLimits?: OuterRoomLimits | undefined;
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* The household's limits (InnerRoomLimits). Sent to the home's residents only, and never with
|
|
314
|
+
* state_withheld. Unset: none, or a room outside homes.
|
|
315
|
+
*
|
|
316
|
+
* @generated from field: kusinta.iot.climate.v1.InnerRoomLimits inner_limits = 22;
|
|
317
|
+
*/
|
|
318
|
+
innerLimits?: InnerRoomLimits | undefined;
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Set while an outer bound holds the outputs it binds away from where the room would be held
|
|
322
|
+
* without it — the household's target, its inner limits or its mode's setback — so the
|
|
323
|
+
* household is told which bound does it, and from outer_limits the role behind it and since
|
|
324
|
+
* when. Gone once nothing is clamped. Sent as outer_limits_coverage is.
|
|
325
|
+
*
|
|
326
|
+
* @generated from field: kusinta.iot.climate.v1.OuterLimitClamp outer_limit_clamp = 23;
|
|
327
|
+
*/
|
|
328
|
+
outerLimitClamp?: OuterLimitClamp | undefined;
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* How many of the room's heating outputs the outer limits bind, so that an app shows the
|
|
332
|
+
* building's bounds where they apply and not where they do not. In a home, sent to its
|
|
333
|
+
* residents only: to anyone else it would tell whether the room holds a device a resident
|
|
334
|
+
* owns. Outside homes, sent to whoever is sent the room, judged over the outputs of devices
|
|
335
|
+
* the recipient sees, so that a device hidden from them changes nothing they are sent.
|
|
336
|
+
*
|
|
337
|
+
* @generated from field: kusinta.iot.climate.v1.OuterLimitsCoverage outer_limits_coverage = 24;
|
|
338
|
+
*/
|
|
339
|
+
outerLimitsCoverage: OuterLimitsCoverage;
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* The devices in the room with a heating output the outer limits bind
|
|
343
|
+
* (OuterRoomLimits, WHAT THEY BIND), so that an app marks a device's own limit settings as
|
|
344
|
+
* governed by them only where they are. Sent as outer_limits_coverage is, and judged over the
|
|
345
|
+
* same devices: outside homes, only devices the recipient sees are listed. Empty under
|
|
346
|
+
* coverage NONE or UNSPECIFIED; under ALL, every heating device in the room the recipient
|
|
347
|
+
* sees is in it; under SOME, some are.
|
|
348
|
+
*
|
|
349
|
+
* @generated from field: repeated kusinta.iot.identity.v1.DeviceId outer_bound_device_ids = 25;
|
|
350
|
+
*/
|
|
351
|
+
outerBoundDeviceIds: DeviceId[];
|
|
267
352
|
};
|
|
268
353
|
|
|
269
354
|
/**
|
|
@@ -272,6 +357,198 @@ export declare type RoomClimate = Message<"kusinta.iot.climate.v1.RoomClimate">
|
|
|
272
357
|
*/
|
|
273
358
|
export declare const RoomClimateSchema: GenMessage<RoomClimate>;
|
|
274
359
|
|
|
360
|
+
/**
|
|
361
|
+
* One bound of a room's outer limits, with who set it and when. Shown to the household as the
|
|
362
|
+
* role and the time, never a name: "building administrator, since …".
|
|
363
|
+
*
|
|
364
|
+
* @generated from message kusinta.iot.climate.v1.OuterLimit
|
|
365
|
+
*/
|
|
366
|
+
export declare type OuterLimit = Message<"kusinta.iot.climate.v1.OuterLimit"> & {
|
|
367
|
+
/**
|
|
368
|
+
* @generated from field: sint32 centidegrees = 1;
|
|
369
|
+
*/
|
|
370
|
+
centidegrees: number;
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* The role its setter acted in (webrtc.v1.ConfigureRoomClimate): ROLE_PROPERTY_OWNER where
|
|
374
|
+
* they hold it, else ROLE_GATEWAY_ADMIN, else ROLE_TECHNICIAN. In a home, a bound an
|
|
375
|
+
* installer set under a commissioning grant has it unset to anyone but the home's residents:
|
|
376
|
+
* staff are shown its value and set_at alone, so the stamp tells them nothing of when the
|
|
377
|
+
* household let an installer in. An app shows an unset role as not stated.
|
|
378
|
+
*
|
|
379
|
+
* @generated from field: kusinta.iot.access.v1.Role set_by_role = 2;
|
|
380
|
+
*/
|
|
381
|
+
setByRole: Role;
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* When the bound was last given a new value. Always sent, also when it dates from before the
|
|
385
|
+
* recipient's residency: it records an act of the building's, and nothing of a household.
|
|
386
|
+
*
|
|
387
|
+
* @generated from field: google.protobuf.Timestamp set_at = 3;
|
|
388
|
+
*/
|
|
389
|
+
setAt?: Timestamp | undefined;
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* Describes the message kusinta.iot.climate.v1.OuterLimit.
|
|
394
|
+
* Use `create(OuterLimitSchema)` to create a new message.
|
|
395
|
+
*/
|
|
396
|
+
export declare const OuterLimitSchema: GenMessage<OuterLimit>;
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* A room's outer limits: the building's bounds on the heating it owns, set by the parties
|
|
400
|
+
* webrtc.v1.ConfigureRoomClimate names. Every bound is optional: a building where each home
|
|
401
|
+
* pays its own heating may set floors only.
|
|
402
|
+
*
|
|
403
|
+
* WHAT THEY BIND. The asset owner decides whether they can bind a device, and the
|
|
404
|
+
* organisation whether to use them. They bind an output only on one of the building's own
|
|
405
|
+
* devices (common.v1.DeviceOwnershipType COMPANY) whose asset owner is the organisation, or
|
|
406
|
+
* that has none recorded (common.v1.AssetOwner); never a household's asset, nor a device a
|
|
407
|
+
* person owns outright. The clamp is applied per output, by its device's owner: in a room with
|
|
408
|
+
* a valve the organisation owns and a heater a resident owns, the valve is held within the
|
|
409
|
+
* outer limits and the heater at the room's target. So they bind outputs, never the room: the
|
|
410
|
+
* room's target and its inner limits are the household's, are not rewritten when an outer bound
|
|
411
|
+
* moves, and hold again at those outputs once it moves back out.
|
|
412
|
+
*
|
|
413
|
+
* HELD. What an output is held at is worked out in this order, each step clamping the one
|
|
414
|
+
* before:
|
|
415
|
+
* 1. the room's target, or while a mode (ClimateMode) sets the room back its setback;
|
|
416
|
+
* 2. the inner limits (InnerRoomLimits): the maximum always, the minimum — the household's
|
|
417
|
+
* everyday floor — only while no mode sets the room back;
|
|
418
|
+
* 3. at an output the outer limits bind: [min, max] while no mode sets the room back, and
|
|
419
|
+
* [AWAY FLOOR, max] while one does; during the vacancy setback (webrtc.v1 household.proto,
|
|
420
|
+
* VACANCY), the AWAY FLOOR itself;
|
|
421
|
+
* 4. an installer's equipment-safety limits — a floor's surface maximum, a supply cap
|
|
422
|
+
* (commissioning.v1) — which neither tier of comfort limits widens.
|
|
423
|
+
* So where an inner bound and an outer bound disagree the outer one wins, and the household's
|
|
424
|
+
* range at those outputs is always inside the building's; outputs the outer limits do not bind
|
|
425
|
+
* stop at step 2. The AWAY FLOOR is away_min, or min where away_min is unset: kept apart from
|
|
426
|
+
* min so that a household going away may set back below its everyday floor but never below what
|
|
427
|
+
* the building needs — frost, damp, heat drawn from neighbours. With neither set, a room has no
|
|
428
|
+
* away floor, and no vacancy setback.
|
|
429
|
+
*
|
|
430
|
+
* DEVICE LIMITS. Where the gateway writes a room's outer limits into a device's own setpoint
|
|
431
|
+
* limits (Matter Min/MaxHeatSetpointLimit), so that a knob stops at them, it writes them only
|
|
432
|
+
* to devices they bind (WHAT THEY BIND), and writes the AWAY FLOOR as the minimum and max as
|
|
433
|
+
* the maximum, each only where set: a device holding min as its own minimum would refuse the
|
|
434
|
+
* setbacks of step 3. Outside a setback the gateway holds min itself: a change made by hand at
|
|
435
|
+
* such a device below min is adopted as the room's target as it was made, within the inner
|
|
436
|
+
* limits and never clamped by the outer ones, while the device's output is held at min and min
|
|
437
|
+
* is written back to it. Into a device the outer limits do not bind that holds room limits
|
|
438
|
+
* written before, it writes the device's defaults back, queued and retried as the wipe's device
|
|
439
|
+
* writes are (webrtc.v1 household.proto, WIPE).
|
|
440
|
+
*
|
|
441
|
+
* They stay with the home: a household handover wipes the inner limits, never these
|
|
442
|
+
* (webrtc.v1 household.proto, WIPE).
|
|
443
|
+
*
|
|
444
|
+
* @generated from message kusinta.iot.climate.v1.OuterRoomLimits
|
|
445
|
+
*/
|
|
446
|
+
export declare type OuterRoomLimits = Message<"kusinta.iot.climate.v1.OuterRoomLimits"> & {
|
|
447
|
+
/**
|
|
448
|
+
* The normal minimum and maximum.
|
|
449
|
+
*
|
|
450
|
+
* @generated from field: kusinta.iot.climate.v1.OuterLimit min = 1;
|
|
451
|
+
*/
|
|
452
|
+
min?: OuterLimit | undefined;
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* @generated from field: kusinta.iot.climate.v1.OuterLimit max = 2;
|
|
456
|
+
*/
|
|
457
|
+
max?: OuterLimit | undefined;
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* The floor under a setback; see AWAY FLOOR above.
|
|
461
|
+
*
|
|
462
|
+
* @generated from field: kusinta.iot.climate.v1.OuterLimit away_min = 3;
|
|
463
|
+
*/
|
|
464
|
+
awayMin?: OuterLimit | undefined;
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* The target the room starts at when an empty home gains a resident (webrtc.v1
|
|
468
|
+
* household.proto, MOVE-IN). A start, never a limit, and a target like any other. Always
|
|
469
|
+
* within [min, max] where those are set (webrtc.v1.ConfigureRoomClimate, "limits_order").
|
|
470
|
+
*
|
|
471
|
+
* @generated from field: kusinta.iot.climate.v1.OuterLimit move_in_target = 4;
|
|
472
|
+
*/
|
|
473
|
+
moveInTarget?: OuterLimit | undefined;
|
|
474
|
+
|
|
475
|
+
/**
|
|
476
|
+
* Set while min was set below the gateway's public-health threshold: the threshold in force
|
|
477
|
+
* then, which min's setter explicitly accepted going below (ConfigureRoomClimate
|
|
478
|
+
* .accept_below_threshold). The acceptance is recorded with min's set_by_role and set_at.
|
|
479
|
+
* Unset while min is unset or was set at or above the threshold. A threshold changed later
|
|
480
|
+
* re-judges nothing already set.
|
|
481
|
+
*
|
|
482
|
+
* @generated from field: optional sint32 min_accepted_threshold_centidegrees = 5;
|
|
483
|
+
*/
|
|
484
|
+
minAcceptedThresholdCentidegrees?: number | undefined;
|
|
485
|
+
};
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Describes the message kusinta.iot.climate.v1.OuterRoomLimits.
|
|
489
|
+
* Use `create(OuterRoomLimitsSchema)` to create a new message.
|
|
490
|
+
*/
|
|
491
|
+
export declare const OuterRoomLimitsSchema: GenMessage<OuterRoomLimits>;
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* A room's inner limits: the household's own minimum and maximum, set by the home's household
|
|
495
|
+
* admins (webrtc.v1.SetInnerRoomLimits). They clamp the room's target, from the app or a knob
|
|
496
|
+
* alike, and setting them clamps the target already set. They apply to every output in the
|
|
497
|
+
* room, a household's own devices included, as OuterRoomLimits (HELD) orders them. Household
|
|
498
|
+
* data: never told to anyone but the home's residents, and wiped at a handover (webrtc.v1
|
|
499
|
+
* household.proto, WIPE). They belong to the room while it is in the home: cleared when it
|
|
500
|
+
* leaves the home, or the space stops being an apartment, so an empty home's rooms hold none
|
|
501
|
+
* and a move-in target meets none.
|
|
502
|
+
*
|
|
503
|
+
* @generated from message kusinta.iot.climate.v1.InnerRoomLimits
|
|
504
|
+
*/
|
|
505
|
+
export declare type InnerRoomLimits = Message<"kusinta.iot.climate.v1.InnerRoomLimits"> & {
|
|
506
|
+
/**
|
|
507
|
+
* @generated from field: optional sint32 min_centidegrees = 1;
|
|
508
|
+
*/
|
|
509
|
+
minCentidegrees?: number | undefined;
|
|
510
|
+
|
|
511
|
+
/**
|
|
512
|
+
* @generated from field: optional sint32 max_centidegrees = 2;
|
|
513
|
+
*/
|
|
514
|
+
maxCentidegrees?: number | undefined;
|
|
515
|
+
};
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Describes the message kusinta.iot.climate.v1.InnerRoomLimits.
|
|
519
|
+
* Use `create(InnerRoomLimitsSchema)` to create a new message.
|
|
520
|
+
*/
|
|
521
|
+
export declare const InnerRoomLimitsSchema: GenMessage<InnerRoomLimits>;
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* An outer bound clamping a room (RoomClimate.outer_limit_clamp).
|
|
525
|
+
*
|
|
526
|
+
* @generated from message kusinta.iot.climate.v1.OuterLimitClamp
|
|
527
|
+
*/
|
|
528
|
+
export declare type OuterLimitClamp = Message<"kusinta.iot.climate.v1.OuterLimitClamp"> & {
|
|
529
|
+
/**
|
|
530
|
+
* Which bound. An app that does not know the value shows that the building's limits clamp the
|
|
531
|
+
* room, without naming one.
|
|
532
|
+
*
|
|
533
|
+
* @generated from field: kusinta.iot.climate.v1.OuterLimitKind limit = 1;
|
|
534
|
+
*/
|
|
535
|
+
limit: OuterLimitKind;
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Where the room would be held without it, in centidegrees: where outputs the outer limits do
|
|
539
|
+
* not bind are held. effective_target_centidegrees is where those they bind are.
|
|
540
|
+
*
|
|
541
|
+
* @generated from field: optional sint32 unclamped_centidegrees = 2;
|
|
542
|
+
*/
|
|
543
|
+
unclampedCentidegrees?: number | undefined;
|
|
544
|
+
};
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* Describes the message kusinta.iot.climate.v1.OuterLimitClamp.
|
|
548
|
+
* Use `create(OuterLimitClampSchema)` to create a new message.
|
|
549
|
+
*/
|
|
550
|
+
export declare const OuterLimitClampSchema: GenMessage<OuterLimitClamp>;
|
|
551
|
+
|
|
275
552
|
/**
|
|
276
553
|
* One reason a room, or a part of its heating, is where it is.
|
|
277
554
|
*
|
|
@@ -345,8 +622,8 @@ export declare type ClimateMode = Message<"kusinta.iot.climate.v1.ClimateMode">
|
|
|
345
622
|
|
|
346
623
|
/**
|
|
347
624
|
* The temperature every room is set back to, in centidegrees. Required while a mode is
|
|
348
|
-
* on — a mode with nothing to set back to is refused, not defaulted. Clamped
|
|
349
|
-
*
|
|
625
|
+
* on — a mode with nothing to set back to is refused, not defaulted. Clamped in each room as
|
|
626
|
+
* OuterRoomLimits (HELD) orders, the away floor being what the building needs.
|
|
350
627
|
*
|
|
351
628
|
* @generated from field: optional sint32 setback_centidegrees = 3;
|
|
352
629
|
*/
|
|
@@ -357,7 +634,8 @@ export declare type ClimateMode = Message<"kusinta.iot.climate.v1.ClimateMode">
|
|
|
357
634
|
* targets — warm by then, not starting to heat (see warm_from). AWAY: starts_at is when it
|
|
358
635
|
* was switched on; ends_at is unset. starts_at is unset when it dates from before the
|
|
359
636
|
* recipient's current residency in the home, or from a home they did not live in at the
|
|
360
|
-
* time
|
|
637
|
+
* time, save to the property owner and the gateway administrators for a mode on a home while
|
|
638
|
+
* it is empty (webrtc.v1 household.proto, EMPTY HOME); an ends_at ahead is always sent.
|
|
361
639
|
*
|
|
362
640
|
* @generated from field: google.protobuf.Timestamp starts_at = 4;
|
|
363
641
|
*/
|
|
@@ -371,7 +649,9 @@ export declare type ClimateMode = Message<"kusinta.iot.climate.v1.ClimateMode">
|
|
|
371
649
|
/**
|
|
372
650
|
* Who switched it on. Unset when it is withheld from the recipient: from service in a
|
|
373
651
|
* home, and from anyone when it dates from before their current residency in the home, or
|
|
374
|
-
* from a home they did not live in at the time (see access.v1.MembershipRelation).
|
|
652
|
+
* from a home they did not live in at the time (see access.v1.MembershipRelation). The
|
|
653
|
+
* property owner and the gateway administrators are given it for a mode on a home while it is
|
|
654
|
+
* empty, which only they can have switched on (webrtc.v1 household.proto, EMPTY HOME).
|
|
375
655
|
*
|
|
376
656
|
* @generated from field: kusinta.iot.identity.v1.UserId set_by = 6;
|
|
377
657
|
*/
|
|
@@ -417,22 +697,26 @@ export declare type RoomClimateList = Message<"kusinta.iot.climate.v1.RoomClimat
|
|
|
417
697
|
export declare const RoomClimateListSchema: GenMessage<RoomClimateList>;
|
|
418
698
|
|
|
419
699
|
/**
|
|
420
|
-
* One
|
|
421
|
-
* means nothing was known for that bucket, never zero.
|
|
700
|
+
* One bucket of a room's history, of the length RoomHistory.resolution names. Every reading
|
|
701
|
+
* is optional: absent means nothing was known for that bucket, never zero.
|
|
702
|
+
*
|
|
703
|
+
* An hour is made of its quarter hours, each reading as stated beside it. A reading none of
|
|
704
|
+
* the hour's quarter hours knew is absent in the hour too; a mean is taken over the quarter
|
|
705
|
+
* hours that knew one, and a sum likewise, so an hour partly unknown sums only what was known.
|
|
422
706
|
*
|
|
423
707
|
* @generated from message kusinta.iot.climate.v1.RoomHistorySample
|
|
424
708
|
*/
|
|
425
709
|
export declare type RoomHistorySample = Message<"kusinta.iot.climate.v1.RoomHistorySample"> & {
|
|
426
710
|
/**
|
|
427
|
-
* The start of the bucket.
|
|
428
|
-
* quarter hours (:00, :15, :30, :45).
|
|
711
|
+
* The start of the bucket.
|
|
429
712
|
*
|
|
430
713
|
* @generated from field: google.protobuf.Timestamp at = 1;
|
|
431
714
|
*/
|
|
432
715
|
at?: Timestamp | undefined;
|
|
433
716
|
|
|
434
717
|
/**
|
|
435
|
-
* The mean of the room's measured temperature over the bucket, in centidegrees.
|
|
718
|
+
* The mean of the room's measured temperature over the bucket, in centidegrees. An hour:
|
|
719
|
+
* the mean of its quarter hours' means.
|
|
436
720
|
*
|
|
437
721
|
* @generated from field: optional sint32 measured_centidegrees = 2;
|
|
438
722
|
*/
|
|
@@ -440,7 +724,8 @@ export declare type RoomHistorySample = Message<"kusinta.iot.climate.v1.RoomHist
|
|
|
440
724
|
|
|
441
725
|
/**
|
|
442
726
|
* RoomClimate.target_centidegrees and .effective_target_centidegrees as they were in
|
|
443
|
-
* force at the bucket's start, in centidegrees.
|
|
727
|
+
* force at the bucket's start, in centidegrees. An hour: its first quarter hour's, and so
|
|
728
|
+
* absent when that quarter hour did not know them, whatever the later ones knew.
|
|
444
729
|
*
|
|
445
730
|
* @generated from field: optional sint32 target_centidegrees = 3;
|
|
446
731
|
*/
|
|
@@ -453,14 +738,16 @@ export declare type RoomHistorySample = Message<"kusinta.iot.climate.v1.RoomHist
|
|
|
453
738
|
|
|
454
739
|
/**
|
|
455
740
|
* The mean opening over the bucket across the room's valves that report one, in
|
|
456
|
-
* thousandths of fully open. Absent if none of them does.
|
|
741
|
+
* thousandths of fully open. Absent if none of them does. An hour: the mean of its quarter
|
|
742
|
+
* hours' means.
|
|
457
743
|
*
|
|
458
744
|
* @generated from field: optional uint32 valve_open_permille = 5;
|
|
459
745
|
*/
|
|
460
746
|
valveOpenPermille?: number | undefined;
|
|
461
747
|
|
|
462
748
|
/**
|
|
463
|
-
* The seconds within the bucket during which any of the room's valves was open.
|
|
749
|
+
* The seconds within the bucket during which any of the room's valves was open. An hour:
|
|
750
|
+
* the sum of its quarter hours', so up to 3600.
|
|
464
751
|
*
|
|
465
752
|
* @generated from field: optional uint32 valve_open_seconds = 6;
|
|
466
753
|
*/
|
|
@@ -471,7 +758,8 @@ export declare type RoomHistorySample = Message<"kusinta.iot.climate.v1.RoomHist
|
|
|
471
758
|
* (heating.v1.FloorZone), counted from the contact state the zone's output reports, read
|
|
472
759
|
* through its closed_value, not from what was commanded. Kept apart from the valve
|
|
473
760
|
* fields: a zone's duty and a valve's opening are different controls with different time
|
|
474
|
-
* scales. Absent where no floor zone heats the room.
|
|
761
|
+
* scales. Absent where no floor zone heats the room. An hour: the sum of its quarter
|
|
762
|
+
* hours', as valve_open_seconds.
|
|
475
763
|
*
|
|
476
764
|
* @generated from field: optional uint32 floor_heating_seconds = 7;
|
|
477
765
|
*/
|
|
@@ -485,7 +773,13 @@ export declare type RoomHistorySample = Message<"kusinta.iot.climate.v1.RoomHist
|
|
|
485
773
|
export declare const RoomHistorySampleSchema: GenMessage<RoomHistorySample>;
|
|
486
774
|
|
|
487
775
|
/**
|
|
488
|
-
* A room's history, in reply to GetRoomHistory.
|
|
776
|
+
* A room's history at one resolution, in reply to GetRoomHistory.
|
|
777
|
+
*
|
|
778
|
+
* A bucket is given only once the gateway has made it, never before it ends, and only where
|
|
779
|
+
* all of it lies within what the recipient may read. The covered range is over bucket starts,
|
|
780
|
+
* as the request's range is: a bucket is within it when covered_from <= at < covered_to. A
|
|
781
|
+
* bucket within it that is not among the samples is one for which nothing is known; of any
|
|
782
|
+
* other bucket this answer says nothing, and an app MUST NOT show it as empty on its account.
|
|
489
783
|
*
|
|
490
784
|
* @generated from message kusinta.iot.climate.v1.RoomHistory
|
|
491
785
|
*/
|
|
@@ -496,22 +790,60 @@ export declare type RoomHistory = Message<"kusinta.iot.climate.v1.RoomHistory">
|
|
|
496
790
|
roomId?: SpaceId | undefined;
|
|
497
791
|
|
|
498
792
|
/**
|
|
499
|
-
* The earliest
|
|
500
|
-
*
|
|
501
|
-
*
|
|
502
|
-
*
|
|
503
|
-
* room, no earlier than when it last
|
|
793
|
+
* The start of the earliest bucket the gateway still holds for this room at this resolution
|
|
794
|
+
* that the recipient may read. The request's from_time and to_time are clamped to
|
|
795
|
+
* [kept_from, now], so nothing before kept_from is ever returned. For a room in the
|
|
796
|
+
* recipient's own home it is no earlier than the start of their current residency, nor than
|
|
797
|
+
* when the room last joined their home; for any other room, no earlier than when it last
|
|
798
|
+
* left a home. How far back the room's history reaches for the recipient, whether or not
|
|
799
|
+
* this answer reaches that far. Always set: where nothing is held for the recipient at this
|
|
800
|
+
* resolution, it is no earlier than covered_to.
|
|
504
801
|
*
|
|
505
802
|
* @generated from field: google.protobuf.Timestamp kept_from = 2;
|
|
506
803
|
*/
|
|
507
804
|
keptFrom?: Timestamp | undefined;
|
|
508
805
|
|
|
509
806
|
/**
|
|
510
|
-
* The buckets within
|
|
807
|
+
* The buckets within [covered_from, covered_to), in order of `at`.
|
|
511
808
|
*
|
|
512
809
|
* @generated from field: repeated kusinta.iot.climate.v1.RoomHistorySample samples = 3;
|
|
513
810
|
*/
|
|
514
811
|
samples: RoomHistorySample[];
|
|
812
|
+
|
|
813
|
+
/**
|
|
814
|
+
* The length of the samples' buckets. An app labels and plots them by this, never by the
|
|
815
|
+
* resolution it asked for.
|
|
816
|
+
*
|
|
817
|
+
* @generated from field: kusinta.iot.climate.v1.RoomHistoryResolution resolution = 4;
|
|
818
|
+
*/
|
|
819
|
+
resolution: RoomHistoryResolution;
|
|
820
|
+
|
|
821
|
+
/**
|
|
822
|
+
* The range this answer covers, [covered_from, covered_to). Both unset only in an answer
|
|
823
|
+
* from a gateway that predates them, which caps nothing: it covers the range asked, clamped.
|
|
824
|
+
*
|
|
825
|
+
* covered_to is the request's to_time as clamped, but never later than the start of the
|
|
826
|
+
* oldest bucket at this resolution the gateway has still to make — for an hour, possibly
|
|
827
|
+
* days after it ends — so no bucket within the range is made later. The time after it may be
|
|
828
|
+
* held at a finer resolution, and an app asks for it there.
|
|
829
|
+
*
|
|
830
|
+
* covered_from is the request's from_time as clamped, unless more than 768 samples fall
|
|
831
|
+
* between it and covered_to: then the answer is capped, keeping the newest 768, and
|
|
832
|
+
* covered_from is samples[0].at. Either way it is never later than covered_to, and an answer
|
|
833
|
+
* that covers nothing has the two equal.
|
|
834
|
+
*
|
|
835
|
+
* An answer is capped exactly when covered_from is later than kept_from and than the
|
|
836
|
+
* from_time asked for, if one was. The app asks for the next page with the same from_time,
|
|
837
|
+
* this answer's resolution, and to_time = covered_from, until an answer is not capped.
|
|
838
|
+
*
|
|
839
|
+
* @generated from field: google.protobuf.Timestamp covered_from = 5;
|
|
840
|
+
*/
|
|
841
|
+
coveredFrom?: Timestamp | undefined;
|
|
842
|
+
|
|
843
|
+
/**
|
|
844
|
+
* @generated from field: google.protobuf.Timestamp covered_to = 6;
|
|
845
|
+
*/
|
|
846
|
+
coveredTo?: Timestamp | undefined;
|
|
515
847
|
};
|
|
516
848
|
|
|
517
849
|
/**
|
|
@@ -723,6 +1055,81 @@ export enum RoomClimateCondition {
|
|
|
723
1055
|
*/
|
|
724
1056
|
export declare const RoomClimateConditionSchema: GenEnum<RoomClimateCondition>;
|
|
725
1057
|
|
|
1058
|
+
/**
|
|
1059
|
+
* Which bound of a room's outer limits clamps the outputs it binds.
|
|
1060
|
+
*
|
|
1061
|
+
* @generated from enum kusinta.iot.climate.v1.OuterLimitKind
|
|
1062
|
+
*/
|
|
1063
|
+
export enum OuterLimitKind {
|
|
1064
|
+
/**
|
|
1065
|
+
* @generated from enum value: OUTER_LIMIT_KIND_UNSPECIFIED = 0;
|
|
1066
|
+
*/
|
|
1067
|
+
UNSPECIFIED = 0,
|
|
1068
|
+
|
|
1069
|
+
/**
|
|
1070
|
+
* Also when min stands in as the AWAY FLOOR for an unset away_min.
|
|
1071
|
+
*
|
|
1072
|
+
* @generated from enum value: OUTER_LIMIT_KIND_MIN = 1;
|
|
1073
|
+
*/
|
|
1074
|
+
MIN = 1,
|
|
1075
|
+
|
|
1076
|
+
/**
|
|
1077
|
+
* @generated from enum value: OUTER_LIMIT_KIND_MAX = 2;
|
|
1078
|
+
*/
|
|
1079
|
+
MAX = 2,
|
|
1080
|
+
|
|
1081
|
+
/**
|
|
1082
|
+
* @generated from enum value: OUTER_LIMIT_KIND_AWAY_MIN = 3;
|
|
1083
|
+
*/
|
|
1084
|
+
AWAY_MIN = 3,
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
/**
|
|
1088
|
+
* Describes the enum kusinta.iot.climate.v1.OuterLimitKind.
|
|
1089
|
+
*/
|
|
1090
|
+
export declare const OuterLimitKindSchema: GenEnum<OuterLimitKind>;
|
|
1091
|
+
|
|
1092
|
+
/**
|
|
1093
|
+
* How many of a room's heating outputs its outer limits bind (OuterRoomLimits, WHAT THEY BIND).
|
|
1094
|
+
*
|
|
1095
|
+
* @generated from enum kusinta.iot.climate.v1.OuterLimitsCoverage
|
|
1096
|
+
*/
|
|
1097
|
+
export enum OuterLimitsCoverage {
|
|
1098
|
+
/**
|
|
1099
|
+
* Not stated: withheld, or the room has no outer limits.
|
|
1100
|
+
*
|
|
1101
|
+
* @generated from enum value: OUTER_LIMITS_COVERAGE_UNSPECIFIED = 0;
|
|
1102
|
+
*/
|
|
1103
|
+
UNSPECIFIED = 0,
|
|
1104
|
+
|
|
1105
|
+
/**
|
|
1106
|
+
* The room has outer limits and they bind none of its heating outputs: it heats only with a
|
|
1107
|
+
* household's own devices, or with nothing.
|
|
1108
|
+
*
|
|
1109
|
+
* @generated from enum value: OUTER_LIMITS_COVERAGE_NONE = 1;
|
|
1110
|
+
*/
|
|
1111
|
+
NONE = 1,
|
|
1112
|
+
|
|
1113
|
+
/**
|
|
1114
|
+
* Some of its heating outputs and not others.
|
|
1115
|
+
*
|
|
1116
|
+
* @generated from enum value: OUTER_LIMITS_COVERAGE_SOME = 2;
|
|
1117
|
+
*/
|
|
1118
|
+
SOME = 2,
|
|
1119
|
+
|
|
1120
|
+
/**
|
|
1121
|
+
* Every heating output in it.
|
|
1122
|
+
*
|
|
1123
|
+
* @generated from enum value: OUTER_LIMITS_COVERAGE_ALL = 3;
|
|
1124
|
+
*/
|
|
1125
|
+
ALL = 3,
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
/**
|
|
1129
|
+
* Describes the enum kusinta.iot.climate.v1.OuterLimitsCoverage.
|
|
1130
|
+
*/
|
|
1131
|
+
export declare const OuterLimitsCoverageSchema: GenEnum<OuterLimitsCoverage>;
|
|
1132
|
+
|
|
726
1133
|
/**
|
|
727
1134
|
* Whether a plan steers a room: one that looks ahead at prices, weather and the heat
|
|
728
1135
|
* source and moves the room within its comfort band. A standing state of the room, not a
|
|
@@ -968,6 +1375,49 @@ export enum ClimateModeKind {
|
|
|
968
1375
|
*/
|
|
969
1376
|
export declare const ClimateModeKindSchema: GenEnum<ClimateModeKind>;
|
|
970
1377
|
|
|
1378
|
+
/**
|
|
1379
|
+
* The length of the buckets a room's history is given in. Buckets are fixed and aligned to
|
|
1380
|
+
* UTC, whatever the building's time zone.
|
|
1381
|
+
*
|
|
1382
|
+
* @generated from enum kusinta.iot.climate.v1.RoomHistoryResolution
|
|
1383
|
+
*/
|
|
1384
|
+
export enum RoomHistoryResolution {
|
|
1385
|
+
/**
|
|
1386
|
+
* In a request: the gateway chooses (webrtc.v1.GetRoomHistory). In an answer: quarter hours,
|
|
1387
|
+
* from a gateway that predates this field.
|
|
1388
|
+
*
|
|
1389
|
+
* Rollout note: an app that predates this field asks with it unset and reads every sample as
|
|
1390
|
+
* a quarter hour and every answer as whole. A gateway may therefore give hours, or cap an
|
|
1391
|
+
* answer, only to apps that read RoomHistory.resolution and its covered range: app handling
|
|
1392
|
+
* ships before or with the gateway that does.
|
|
1393
|
+
*
|
|
1394
|
+
* @generated from enum value: ROOM_HISTORY_RESOLUTION_UNSPECIFIED = 0;
|
|
1395
|
+
*/
|
|
1396
|
+
UNSPECIFIED = 0,
|
|
1397
|
+
|
|
1398
|
+
/**
|
|
1399
|
+
* 15-minute buckets (:00, :15, :30, :45).
|
|
1400
|
+
*
|
|
1401
|
+
* @generated from enum value: ROOM_HISTORY_RESOLUTION_QUARTER_HOUR = 1;
|
|
1402
|
+
*/
|
|
1403
|
+
QUARTER_HOUR = 1,
|
|
1404
|
+
|
|
1405
|
+
/**
|
|
1406
|
+
* Hour buckets, each made of its four quarter hours as RoomHistorySample says. An hour is
|
|
1407
|
+
* given only where all of it lies within what the recipient may read (RoomHistory): one
|
|
1408
|
+
* that straddles the start of their residency, or the room joining their home, is left out,
|
|
1409
|
+
* never trimmed or averaged again from its readable part.
|
|
1410
|
+
*
|
|
1411
|
+
* @generated from enum value: ROOM_HISTORY_RESOLUTION_HOUR = 2;
|
|
1412
|
+
*/
|
|
1413
|
+
HOUR = 2,
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
/**
|
|
1417
|
+
* Describes the enum kusinta.iot.climate.v1.RoomHistoryResolution.
|
|
1418
|
+
*/
|
|
1419
|
+
export declare const RoomHistoryResolutionSchema: GenEnum<RoomHistoryResolution>;
|
|
1420
|
+
|
|
971
1421
|
/**
|
|
972
1422
|
* The length of the periods an ApartmentClimateSummary is given in. Each period runs from
|
|
973
1423
|
* the start of one local date to the start of another in the building's time zone
|