@kusinta/iot-schema 0.2.0-beta.36 → 0.2.0-beta.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kusinta/iot-schema",
3
- "version": "0.2.0-beta.36",
3
+ "version": "0.2.0-beta.37",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "files": ["src"],
@@ -27,6 +27,7 @@
27
27
  "./access/roles": "./src/kusinta/iot/access/v1/roles_pb.js",
28
28
  "./link": "./src/kusinta/iot/link/v1/link_pb.js",
29
29
  "./climate": "./src/kusinta/iot/climate/v1/climate_pb.js",
30
+ "./heating": "./src/kusinta/iot/heating/v1/heating_pb.js",
30
31
  "./connector": "./src/kusinta/iot/connector/v1/connector_pb.js",
31
32
  "./connector/service": "./src/kusinta/iot/connector/v1/connector_service_pb.js",
32
33
  "./webrtc": "./src/kusinta/iot/webrtc/v1/envelope_pb.js",
@@ -465,6 +465,17 @@ export declare type RoomHistorySample = Message<"kusinta.iot.climate.v1.RoomHist
465
465
  * @generated from field: optional uint32 valve_open_seconds = 6;
466
466
  */
467
467
  valveOpenSeconds?: number | undefined;
468
+
469
+ /**
470
+ * The seconds within the bucket during which any floor zone heating the room was heating
471
+ * (heating.v1.FloorZone), counted from the contact state the zone's output reports, read
472
+ * through its closed_value, not from what was commanded. Kept apart from the valve
473
+ * 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.
475
+ *
476
+ * @generated from field: optional uint32 floor_heating_seconds = 7;
477
+ */
478
+ floorHeatingSeconds?: number | undefined;
468
479
  };
469
480
 
470
481
  /**
@@ -10,7 +10,7 @@ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identit
10
10
  * Describes the file kusinta/iot/climate/v1/climate.proto.
11
11
  */
12
12
  export const file_kusinta_iot_climate_v1_climate = /*@__PURE__*/
13
- fileDesc("CiRrdXNpbnRhL2lvdC9jbGltYXRlL3YxL2NsaW1hdGUucHJvdG8SFmt1c2ludGEuaW90LmNsaW1hdGUudjEiogEKDFRhcmdldENoYW5nZRImCgJhdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoEdXNlchgCIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZEgAEjMKBmRldmljZRgDIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkSABCBAoCYnkizggKC1Jvb21DbGltYXRlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIgChN0YXJnZXRfY2VudGlkZWdyZWVzGAIgASgRSACIAQESOwoNdGFyZ2V0X2NoYW5nZRgDIAEoCzIkLmt1c2ludGEuaW90LmNsaW1hdGUudjEuVGFyZ2V0Q2hhbmdlEioKHWVmZmVjdGl2ZV90YXJnZXRfY2VudGlkZWdyZWVzGAQgASgRSAGIAQESFgoOb3ZlcnJpZGVzX21vZGUYBSABKAgSNwoNbW9kZV9zcGFjZV9pZBgNIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSHQoQbWluX2NlbnRpZGVncmVlcxgGIAEoEUgCiAEBEh0KEG1heF9jZW50aWRlZ3JlZXMYByABKBFIA4gBARI1CgpzZW5zb3JfaWRzGAggAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSGgoSc2Vuc29yc19jb25maWd1cmVkGA4gASgIEiIKFW1lYXN1cmVkX2NlbnRpZGVncmVlcxgJIAEoEUgEiAEBEjYKC21lYXN1cmVkX2J5GAogASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSPwoJY29uZGl0aW9uGAsgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tQ2xpbWF0ZUNvbmRpdGlvbhIcChRsb2NrX2RldmljZV9jb250cm9scxgMIAEoCBIWCg5zdGF0ZV93aXRoaGVsZBgPIAEoCBJACgxleHBsYW5hdGlvbnMYECADKAsyKi5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkNsaW1hdGVFeHBsYW5hdGlvbhI1ChF0YXJnZXRfaGVsZF91bnRpbBgRIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNgoIcGxhbm5pbmcYEiABKA4yJC5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLlJvb21QbGFubmluZxIqCh1jb21mb3J0X2JhbmRfbG93X2NlbnRpZGVncmVlcxgTIAEoEUgFiAEBEisKHmNvbWZvcnRfYmFuZF9oaWdoX2NlbnRpZGVncmVlcxgUIAEoEUgGiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzQiAKHl9lZmZlY3RpdmVfdGFyZ2V0X2NlbnRpZGVncmVlc0ITChFfbWluX2NlbnRpZGVncmVlc0ITChFfbWF4X2NlbnRpZGVncmVlc0IYChZfbWVhc3VyZWRfY2VudGlkZWdyZWVzQiAKHl9jb21mb3J0X2JhbmRfbG93X2NlbnRpZGVncmVlc0IhCh9fY29tZm9ydF9iYW5kX2hpZ2hfY2VudGlkZWdyZWVzIsMBChJDbGltYXRlRXhwbGFuYXRpb24SPAoEa2luZBgBIAEoDjIuLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZUV4cGxhbmF0aW9uS2luZBJCCgdzdWJqZWN0GAIgASgOMjEua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlRXhwbGFuYXRpb25TdWJqZWN0EisKB2VuZHNfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIoMDCgtDbGltYXRlTW9kZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNQoEa2luZBgCIAEoDjInLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZU1vZGVLaW5kEiEKFHNldGJhY2tfY2VudGlkZWdyZWVzGAMgASgRSACIAQESLQoJc3RhcnRzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgdlbmRzX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgZzZXRfYnkYBiABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSMgoJd2FybV9mcm9tGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlc0IMCgpfd2FybV9mcm9tInkKD1Jvb21DbGltYXRlTGlzdBIyCgVyb29tcxgBIAMoCzIjLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUNsaW1hdGUSMgoFbW9kZXMYAiADKAsyIy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkNsaW1hdGVNb2RlIvMCChFSb29tSGlzdG9yeVNhbXBsZRImCgJhdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASIgoVbWVhc3VyZWRfY2VudGlkZWdyZWVzGAIgASgRSACIAQESIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgDIAEoEUgBiAEBEioKHWVmZmVjdGl2ZV90YXJnZXRfY2VudGlkZWdyZWVzGAQgASgRSAKIAQESIAoTdmFsdmVfb3Blbl9wZXJtaWxsZRgFIAEoDUgDiAEBEh8KEnZhbHZlX29wZW5fc2Vjb25kcxgGIAEoDUgEiAEBQhgKFl9tZWFzdXJlZF9jZW50aWRlZ3JlZXNCFgoUX3RhcmdldF9jZW50aWRlZ3JlZXNCIAoeX2VmZmVjdGl2ZV90YXJnZXRfY2VudGlkZWdyZWVzQhYKFF92YWx2ZV9vcGVuX3Blcm1pbGxlQhUKE192YWx2ZV9vcGVuX3NlY29uZHMiqwEKC1Jvb21IaXN0b3J5EjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEi0KCWtlcHRfZnJvbRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOgoHc2FtcGxlcxgDIAMoCzIpLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUhpc3RvcnlTYW1wbGUi1AIKEUNsaW1hdGVQZXJpb2RNZWFuEi0KCXN0YXJ0c19hdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKwoHZW5kc19hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASIgoVbWVhc3VyZWRfY2VudGlkZWdyZWVzGAMgASgRSACIAQESIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgEIAEoEUgBiAEBEiIKGm1lYXN1cmVkX2NvdmVyYWdlX3Blcm1pbGxlGAUgASgNEiAKGHRhcmdldF9jb3ZlcmFnZV9wZXJtaWxsZRgGIAEoDRIWCg5yb29tc19tZWFzdXJlZBgHIAEoDRINCgVyb29tcxgIIAEoDUIYChZfbWVhc3VyZWRfY2VudGlkZWdyZWVzQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzIr4CChdBcGFydG1lbnRDbGltYXRlU3VtbWFyeRI2CgxhcGFydG1lbnRfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjwKBnBlcmlvZBgCIAEoDjIsLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZVN1bW1hcnlQZXJpb2QSQgoJd2VpZ2h0aW5nGAMgASgOMi8ua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVdlaWdodGluZxItCglrZXB0X2Zyb20YBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjoKB3BlcmlvZHMYBSADKAsyKS5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkNsaW1hdGVQZXJpb2RNZWFuKtUCChRSb29tQ2xpbWF0ZUNvbmRpdGlvbhImCiJST09NX0NMSU1BVEVfQ09ORElUSU9OX1VOU1BFQ0lGSUVEEAASIgoeUk9PTV9DTElNQVRFX0NPTkRJVElPTl9IT0xESU5HEAESJAogUk9PTV9DTElNQVRFX0NPTkRJVElPTl9OT19UQVJHRVQQAhImCiJST09NX0NMSU1BVEVfQ09ORElUSU9OX1NFTlNPUl9MT1NUEAMSJgoiUk9PTV9DTElNQVRFX0NPTkRJVElPTl9XSU5ET1dfT1BFThAEEiUKIVJPT01fQ0xJTUFURV9DT05ESVRJT05fTk9fSEVBVElORxAFEi4KKlJPT01fQ0xJTUFURV9DT05ESVRJT05fSEVBVElOR19VTlJFQUNIQUJMRRAGEiQKIFJPT01fQ0xJTUFURV9DT05ESVRJT05fTk9fU0VOU09SEAcqhgEKDFJvb21QbGFubmluZxIdChlST09NX1BMQU5OSU5HX1VOU1BFQ0lGSUVEEAASGQoVUk9PTV9QTEFOTklOR19QTEFOTkVEEAESHQoZUk9PTV9QTEFOTklOR19OT1RfUExBTk5FRBACEh0KGVJPT01fUExBTk5JTkdfVU5BVkFJTEFCTEUQAyqABAoWQ2xpbWF0ZUV4cGxhbmF0aW9uS2luZBIoCiRDTElNQVRFX0VYUExBTkFUSU9OX0tJTkRfVU5TUEVDSUZJRUQQABIlCiFDTElNQVRFX0VYUExBTkFUSU9OX0tJTkRfUFJFX0hFQVQQARIlCiFDTElNQVRFX0VYUExBTkFUSU9OX0tJTkRfQ09BU1RJTkcQAhInCiNDTElNQVRFX0VYUExBTkFUSU9OX0tJTkRfUFJJQ0VfSElHSBADEicKI0NMSU1BVEVfRVhQTEFOQVRJT05fS0lORF9QRUFLX0dVQVJEEAQSLworQ0xJTUFURV9FWFBMQU5BVElPTl9LSU5EX0hPVF9XQVRFUl9QUklPUklUWRAFEjAKLENMSU1BVEVfRVhQTEFOQVRJT05fS0lORF9TSEFSRURfUE9XRVJfQlVER0VUEAYSMgouQ0xJTUFURV9FWFBMQU5BVElPTl9LSU5EX0RJU1RSSUNUX0hFQVRJTkdfUEVBSxAHEi8KK0NMSU1BVEVfRVhQTEFOQVRJT05fS0lORF9BVF9DT01GT1JUX0NFSUxJTkcQCBInCiNDTElNQVRFX0VYUExBTkFUSU9OX0tJTkRfTk9fUkVBRElORxAJEisKJ0NMSU1BVEVfRVhQTEFOQVRJT05fS0lORF9PVVRTSURFX1dJTkRPVxAKKvcBChlDbGltYXRlRXhwbGFuYXRpb25TdWJqZWN0EisKJ0NMSU1BVEVfRVhQTEFOQVRJT05fU1VCSkVDVF9VTlNQRUNJRklFRBAAEiQKIENMSU1BVEVfRVhQTEFOQVRJT05fU1VCSkVDVF9ST09NEAESKgomQ0xJTUFURV9FWFBMQU5BVElPTl9TVUJKRUNUX0ZMT09SX1pPTkUQAhIsCihDTElNQVRFX0VYUExBTkFUSU9OX1NVQkpFQ1RfQ09NRk9SVF9MT0FEEAMSLQopQ0xJTUFURV9FWFBMQU5BVElPTl9TVUJKRUNUX0FERF9PTl9IRUFURVIQBCpvCg9DbGltYXRlTW9kZUtpbmQSIQodQ0xJTUFURV9NT0RFX0tJTkRfVU5TUEVDSUZJRUQQABIaChZDTElNQVRFX01PREVfS0lORF9BV0FZEAESHQoZQ0xJTUFURV9NT0RFX0tJTkRfSE9MSURBWRACKqEBChRDbGltYXRlU3VtbWFyeVBlcmlvZBImCiJDTElNQVRFX1NVTU1BUllfUEVSSU9EX1VOU1BFQ0lGSUVEEAASHgoaQ0xJTUFURV9TVU1NQVJZX1BFUklPRF9EQVkQARIfChtDTElNQVRFX1NVTU1BUllfUEVSSU9EX1dFRUsQAhIgChxDTElNQVRFX1NVTU1BUllfUEVSSU9EX01PTlRIEAMqbwoXQ2xpbWF0ZVN1bW1hcnlXZWlnaHRpbmcSKQolQ0xJTUFURV9TVU1NQVJZX1dFSUdIVElOR19VTlNQRUNJRklFRBAAEikKJUNMSU1BVEVfU1VNTUFSWV9XRUlHSFRJTkdfUk9PTVNfRVFVQUwQAUICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_identity_v1_identity]);
13
+ fileDesc("CiRrdXNpbnRhL2lvdC9jbGltYXRlL3YxL2NsaW1hdGUucHJvdG8SFmt1c2ludGEuaW90LmNsaW1hdGUudjEiogEKDFRhcmdldENoYW5nZRImCgJhdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoEdXNlchgCIAEoCzIfLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlVzZXJJZEgAEjMKBmRldmljZRgDIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkSABCBAoCYnkizggKC1Jvb21DbGltYXRlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIgChN0YXJnZXRfY2VudGlkZWdyZWVzGAIgASgRSACIAQESOwoNdGFyZ2V0X2NoYW5nZRgDIAEoCzIkLmt1c2ludGEuaW90LmNsaW1hdGUudjEuVGFyZ2V0Q2hhbmdlEioKHWVmZmVjdGl2ZV90YXJnZXRfY2VudGlkZWdyZWVzGAQgASgRSAGIAQESFgoOb3ZlcnJpZGVzX21vZGUYBSABKAgSNwoNbW9kZV9zcGFjZV9pZBgNIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSHQoQbWluX2NlbnRpZGVncmVlcxgGIAEoEUgCiAEBEh0KEG1heF9jZW50aWRlZ3JlZXMYByABKBFIA4gBARI1CgpzZW5zb3JfaWRzGAggAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSGgoSc2Vuc29yc19jb25maWd1cmVkGA4gASgIEiIKFW1lYXN1cmVkX2NlbnRpZGVncmVlcxgJIAEoEUgEiAEBEjYKC21lYXN1cmVkX2J5GAogASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSPwoJY29uZGl0aW9uGAsgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tQ2xpbWF0ZUNvbmRpdGlvbhIcChRsb2NrX2RldmljZV9jb250cm9scxgMIAEoCBIWCg5zdGF0ZV93aXRoaGVsZBgPIAEoCBJACgxleHBsYW5hdGlvbnMYECADKAsyKi5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkNsaW1hdGVFeHBsYW5hdGlvbhI1ChF0YXJnZXRfaGVsZF91bnRpbBgRIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNgoIcGxhbm5pbmcYEiABKA4yJC5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLlJvb21QbGFubmluZxIqCh1jb21mb3J0X2JhbmRfbG93X2NlbnRpZGVncmVlcxgTIAEoEUgFiAEBEisKHmNvbWZvcnRfYmFuZF9oaWdoX2NlbnRpZGVncmVlcxgUIAEoEUgGiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzQiAKHl9lZmZlY3RpdmVfdGFyZ2V0X2NlbnRpZGVncmVlc0ITChFfbWluX2NlbnRpZGVncmVlc0ITChFfbWF4X2NlbnRpZGVncmVlc0IYChZfbWVhc3VyZWRfY2VudGlkZWdyZWVzQiAKHl9jb21mb3J0X2JhbmRfbG93X2NlbnRpZGVncmVlc0IhCh9fY29tZm9ydF9iYW5kX2hpZ2hfY2VudGlkZWdyZWVzIsMBChJDbGltYXRlRXhwbGFuYXRpb24SPAoEa2luZBgBIAEoDjIuLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZUV4cGxhbmF0aW9uS2luZBJCCgdzdWJqZWN0GAIgASgOMjEua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlRXhwbGFuYXRpb25TdWJqZWN0EisKB2VuZHNfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIoMDCgtDbGltYXRlTW9kZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSNQoEa2luZBgCIAEoDjInLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZU1vZGVLaW5kEiEKFHNldGJhY2tfY2VudGlkZWdyZWVzGAMgASgRSACIAQESLQoJc3RhcnRzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgdlbmRzX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgZzZXRfYnkYBiABKAsyHy5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Vc2VySWQSMgoJd2FybV9mcm9tGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlc0IMCgpfd2FybV9mcm9tInkKD1Jvb21DbGltYXRlTGlzdBIyCgVyb29tcxgBIAMoCzIjLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUNsaW1hdGUSMgoFbW9kZXMYAiADKAsyIy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkNsaW1hdGVNb2RlIrEDChFSb29tSGlzdG9yeVNhbXBsZRImCgJhdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASIgoVbWVhc3VyZWRfY2VudGlkZWdyZWVzGAIgASgRSACIAQESIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgDIAEoEUgBiAEBEioKHWVmZmVjdGl2ZV90YXJnZXRfY2VudGlkZWdyZWVzGAQgASgRSAKIAQESIAoTdmFsdmVfb3Blbl9wZXJtaWxsZRgFIAEoDUgDiAEBEh8KEnZhbHZlX29wZW5fc2Vjb25kcxgGIAEoDUgEiAEBEiIKFWZsb29yX2hlYXRpbmdfc2Vjb25kcxgHIAEoDUgFiAEBQhgKFl9tZWFzdXJlZF9jZW50aWRlZ3JlZXNCFgoUX3RhcmdldF9jZW50aWRlZ3JlZXNCIAoeX2VmZmVjdGl2ZV90YXJnZXRfY2VudGlkZWdyZWVzQhYKFF92YWx2ZV9vcGVuX3Blcm1pbGxlQhUKE192YWx2ZV9vcGVuX3NlY29uZHNCGAoWX2Zsb29yX2hlYXRpbmdfc2Vjb25kcyKrAQoLUm9vbUhpc3RvcnkSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSLQoJa2VwdF9mcm9tGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI6CgdzYW1wbGVzGAMgAygLMikua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tSGlzdG9yeVNhbXBsZSLUAgoRQ2xpbWF0ZVBlcmlvZE1lYW4SLQoJc3RhcnRzX2F0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIrCgdlbmRzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIiChVtZWFzdXJlZF9jZW50aWRlZ3JlZXMYAyABKBFIAIgBARIgChN0YXJnZXRfY2VudGlkZWdyZWVzGAQgASgRSAGIAQESIgoabWVhc3VyZWRfY292ZXJhZ2VfcGVybWlsbGUYBSABKA0SIAoYdGFyZ2V0X2NvdmVyYWdlX3Blcm1pbGxlGAYgASgNEhYKDnJvb21zX21lYXN1cmVkGAcgASgNEg0KBXJvb21zGAggASgNQhgKFl9tZWFzdXJlZF9jZW50aWRlZ3JlZXNCFgoUX3RhcmdldF9jZW50aWRlZ3JlZXMivgIKF0FwYXJ0bWVudENsaW1hdGVTdW1tYXJ5EjYKDGFwYXJ0bWVudF9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoGcGVyaW9kGAIgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBJCCgl3ZWlnaHRpbmcYAyABKA4yLy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkNsaW1hdGVTdW1tYXJ5V2VpZ2h0aW5nEi0KCWtlcHRfZnJvbRgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOgoHcGVyaW9kcxgFIAMoCzIpLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZVBlcmlvZE1lYW4q1QIKFFJvb21DbGltYXRlQ29uZGl0aW9uEiYKIlJPT01fQ0xJTUFURV9DT05ESVRJT05fVU5TUEVDSUZJRUQQABIiCh5ST09NX0NMSU1BVEVfQ09ORElUSU9OX0hPTERJTkcQARIkCiBST09NX0NMSU1BVEVfQ09ORElUSU9OX05PX1RBUkdFVBACEiYKIlJPT01fQ0xJTUFURV9DT05ESVRJT05fU0VOU09SX0xPU1QQAxImCiJST09NX0NMSU1BVEVfQ09ORElUSU9OX1dJTkRPV19PUEVOEAQSJQohUk9PTV9DTElNQVRFX0NPTkRJVElPTl9OT19IRUFUSU5HEAUSLgoqUk9PTV9DTElNQVRFX0NPTkRJVElPTl9IRUFUSU5HX1VOUkVBQ0hBQkxFEAYSJAogUk9PTV9DTElNQVRFX0NPTkRJVElPTl9OT19TRU5TT1IQByqGAQoMUm9vbVBsYW5uaW5nEh0KGVJPT01fUExBTk5JTkdfVU5TUEVDSUZJRUQQABIZChVST09NX1BMQU5OSU5HX1BMQU5ORUQQARIdChlST09NX1BMQU5OSU5HX05PVF9QTEFOTkVEEAISHQoZUk9PTV9QTEFOTklOR19VTkFWQUlMQUJMRRADKoAEChZDbGltYXRlRXhwbGFuYXRpb25LaW5kEigKJENMSU1BVEVfRVhQTEFOQVRJT05fS0lORF9VTlNQRUNJRklFRBAAEiUKIUNMSU1BVEVfRVhQTEFOQVRJT05fS0lORF9QUkVfSEVBVBABEiUKIUNMSU1BVEVfRVhQTEFOQVRJT05fS0lORF9DT0FTVElORxACEicKI0NMSU1BVEVfRVhQTEFOQVRJT05fS0lORF9QUklDRV9ISUdIEAMSJwojQ0xJTUFURV9FWFBMQU5BVElPTl9LSU5EX1BFQUtfR1VBUkQQBBIvCitDTElNQVRFX0VYUExBTkFUSU9OX0tJTkRfSE9UX1dBVEVSX1BSSU9SSVRZEAUSMAosQ0xJTUFURV9FWFBMQU5BVElPTl9LSU5EX1NIQVJFRF9QT1dFUl9CVURHRVQQBhIyCi5DTElNQVRFX0VYUExBTkFUSU9OX0tJTkRfRElTVFJJQ1RfSEVBVElOR19QRUFLEAcSLworQ0xJTUFURV9FWFBMQU5BVElPTl9LSU5EX0FUX0NPTUZPUlRfQ0VJTElORxAIEicKI0NMSU1BVEVfRVhQTEFOQVRJT05fS0lORF9OT19SRUFESU5HEAkSKwonQ0xJTUFURV9FWFBMQU5BVElPTl9LSU5EX09VVFNJREVfV0lORE9XEAoq9wEKGUNsaW1hdGVFeHBsYW5hdGlvblN1YmplY3QSKwonQ0xJTUFURV9FWFBMQU5BVElPTl9TVUJKRUNUX1VOU1BFQ0lGSUVEEAASJAogQ0xJTUFURV9FWFBMQU5BVElPTl9TVUJKRUNUX1JPT00QARIqCiZDTElNQVRFX0VYUExBTkFUSU9OX1NVQkpFQ1RfRkxPT1JfWk9ORRACEiwKKENMSU1BVEVfRVhQTEFOQVRJT05fU1VCSkVDVF9DT01GT1JUX0xPQUQQAxItCilDTElNQVRFX0VYUExBTkFUSU9OX1NVQkpFQ1RfQUREX09OX0hFQVRFUhAEKm8KD0NsaW1hdGVNb2RlS2luZBIhCh1DTElNQVRFX01PREVfS0lORF9VTlNQRUNJRklFRBAAEhoKFkNMSU1BVEVfTU9ERV9LSU5EX0FXQVkQARIdChlDTElNQVRFX01PREVfS0lORF9IT0xJREFZEAIqoQEKFENsaW1hdGVTdW1tYXJ5UGVyaW9kEiYKIkNMSU1BVEVfU1VNTUFSWV9QRVJJT0RfVU5TUEVDSUZJRUQQABIeChpDTElNQVRFX1NVTU1BUllfUEVSSU9EX0RBWRABEh8KG0NMSU1BVEVfU1VNTUFSWV9QRVJJT0RfV0VFSxACEiAKHENMSU1BVEVfU1VNTUFSWV9QRVJJT0RfTU9OVEgQAypvChdDbGltYXRlU3VtbWFyeVdlaWdodGluZxIpCiVDTElNQVRFX1NVTU1BUllfV0VJR0hUSU5HX1VOU1BFQ0lGSUVEEAASKQolQ0xJTUFURV9TVU1NQVJZX1dFSUdIVElOR19ST09NU19FUVVBTBABQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_identity_v1_identity]);
14
14
 
15
15
  /**
16
16
  * Describes the message kusinta.iot.climate.v1.TargetChange.
@@ -304,12 +304,12 @@ export declare const ClusterStateSchema: GenMessage<ClusterState>;
304
304
  * case: a write whose kind is not stated is held as if sticky, and a reading whose latency
305
305
  * is not stated is never treated as real-time.
306
306
  *
307
- * A gateway MUST NOT drive a heat source, a heating circuit or a floor zone through an
308
- * attribute whose write kind is not stated here: it refuses the write. This is the
309
- * opposite default to attribute_ids or a connector's known_links, where not stated only
310
- * means not known; for an output that heats a home, not stated means no. Rollout order: a
311
- * producer that carries such outputs states their behaviour before a gateway that drives
312
- * them takes the release that enforces this.
307
+ * A consumer that drives an output while it may itself go quiet states its own rule for
308
+ * an output whose behaviour is not stated, and the rule is a refusal — the opposite default
309
+ * to attribute_ids or a connector's known_links, where not stated only means not known.
310
+ * heating.v1 is one: it binds no output whose write is not stated as leased. Rollout order:
311
+ * a producer states the behaviour of such outputs before a consumer that drives them takes
312
+ * the release that enforces its rule.
313
313
  *
314
314
  * @generated from message kusinta.iot.device.v1.AttributeBehaviour
315
315
  */
@@ -0,0 +1,622 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/heating/v1/heating.proto (package kusinta.iot.heating.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
+ import type { Message } from "@bufbuild/protobuf";
7
+ import type { DeviceId, SpaceId } from "../../identity/v1/identity_pb.js";
8
+ import type { AttributeRef } from "../../access/v1/acl_pb.js";
9
+ import type { AttributeValue } from "../../device/v1/cluster_state_pb.js";
10
+
11
+ /**
12
+ * Describes the file kusinta/iot/heating/v1/heating.proto.
13
+ */
14
+ export declare const file_kusinta_iot_heating_v1_heating: GenFile;
15
+
16
+ /**
17
+ * One attribute of one device: what a role reads or writes. Endpoint_id is required on the
18
+ * Matter branch of the attribute here — an absent endpoint is refused, never read as the
19
+ * root node.
20
+ *
21
+ * @generated from message kusinta.iot.heating.v1.DeviceAttribute
22
+ */
23
+ export declare type DeviceAttribute = Message<"kusinta.iot.heating.v1.DeviceAttribute"> & {
24
+ /**
25
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
26
+ */
27
+ deviceId?: DeviceId | undefined;
28
+
29
+ /**
30
+ * @generated from field: kusinta.iot.access.v1.AttributeRef attribute = 2;
31
+ */
32
+ attribute?: AttributeRef | undefined;
33
+ };
34
+
35
+ /**
36
+ * Describes the message kusinta.iot.heating.v1.DeviceAttribute.
37
+ * Use `create(DeviceAttributeSchema)` to create a new message.
38
+ */
39
+ export declare const DeviceAttributeSchema: GenMessage<DeviceAttribute>;
40
+
41
+ /**
42
+ * One device output switching one contact on the heating side: a floor zone's thermostat
43
+ * input, a heat-source input, a comfort load's supply.
44
+ *
45
+ * @generated from message kusinta.iot.heating.v1.ContactBinding
46
+ */
47
+ export declare type ContactBinding = Message<"kusinta.iot.heating.v1.ContactBinding"> & {
48
+ /**
49
+ * OnOff on a relay channel, or a vendor parameter.
50
+ *
51
+ * @generated from field: kusinta.iot.heating.v1.DeviceAttribute output = 1;
52
+ */
53
+ output?: DeviceAttribute | undefined;
54
+
55
+ /**
56
+ * The value of the output with which the contact is closed. A wiring fact, not a device
57
+ * fact: a changeover relay wired through its normally closed contact closes it with the
58
+ * channel off, so OnOff false. The producer cannot know it; whoever wires the relay
59
+ * states it, and the gateway reads every state of the role through it — never from the
60
+ * output's value alone.
61
+ *
62
+ * Each role has a fixed rest state (see the role), and the output's lapse value
63
+ * (device.v1.LeasedWrite.lapse_value), read through this value, must leave the contact
64
+ * where the role rests. Every comparison with this value matches type as well as value:
65
+ * an int 0 is not a bool false.
66
+ *
67
+ * @generated from field: kusinta.iot.device.v1.AttributeValue closed_value = 2;
68
+ */
69
+ closedValue?: AttributeValue | undefined;
70
+ };
71
+
72
+ /**
73
+ * Describes the message kusinta.iot.heating.v1.ContactBinding.
74
+ * Use `create(ContactBindingSchema)` to create a new message.
75
+ */
76
+ export declare const ContactBindingSchema: GenMessage<ContactBinding>;
77
+
78
+ /**
79
+ * One heat source.
80
+ *
81
+ * @generated from message kusinta.iot.heating.v1.HeatingPlant
82
+ */
83
+ export declare type HeatingPlant = Message<"kusinta.iot.heating.v1.HeatingPlant"> & {
84
+ /**
85
+ * Assigned by the gateway, unique among heating records; empty when creating.
86
+ *
87
+ * @generated from field: string plant_id = 1;
88
+ */
89
+ plantId: string;
90
+
91
+ /**
92
+ * The space the plant serves: a home, or a space outside homes for a central plant.
93
+ *
94
+ * @generated from field: kusinta.iot.identity.v1.SpaceId space_id = 2;
95
+ */
96
+ spaceId?: SpaceId | undefined;
97
+
98
+ /**
99
+ * @generated from field: string name = 3;
100
+ */
101
+ name: string;
102
+
103
+ /**
104
+ * @generated from field: kusinta.iot.heating.v1.HeatSourceKind source = 4;
105
+ */
106
+ source: HeatSourceKind;
107
+
108
+ /**
109
+ * The device the heat source's own readings come from — its temperatures, compressor and
110
+ * hot-water state — when it has one. Read only: the gateway drives a heat source through
111
+ * the plant's control, never through this device.
112
+ *
113
+ * @generated from field: kusinta.iot.identity.v1.DeviceId readings_device_id = 5;
114
+ */
115
+ readingsDeviceId?: DeviceId | undefined;
116
+
117
+ /**
118
+ * How the gateway steers the heat source. Unset: it does not; the plant is read only. A
119
+ * control set binds at least one input.
120
+ *
121
+ * @generated from oneof kusinta.iot.heating.v1.HeatingPlant.control
122
+ */
123
+ control: {
124
+ /**
125
+ * @generated from field: kusinta.iot.heating.v1.HeatPumpControl heat_pump = 6;
126
+ */
127
+ value: HeatPumpControl;
128
+ case: "heatPump";
129
+ } | { case: undefined; value?: undefined };
130
+
131
+ /**
132
+ * The electricity or heat meter the plant is measured by.
133
+ *
134
+ * @generated from field: kusinta.iot.heating.v1.DeviceAttribute meter = 7;
135
+ */
136
+ meter?: DeviceAttribute | undefined;
137
+
138
+ /**
139
+ * See the file comment.
140
+ *
141
+ * @generated from field: uint64 revision = 8;
142
+ */
143
+ revision: bigint;
144
+ };
145
+
146
+ /**
147
+ * Describes the message kusinta.iot.heating.v1.HeatingPlant.
148
+ * Use `create(HeatingPlantSchema)` to create a new message.
149
+ */
150
+ export declare const HeatingPlantSchema: GenMessage<HeatingPlant>;
151
+
152
+ /**
153
+ * A heat pump's control inputs.
154
+ *
155
+ * @generated from message kusinta.iot.heating.v1.HeatPumpControl
156
+ */
157
+ export declare type HeatPumpControl = Message<"kusinta.iot.heating.v1.HeatPumpControl"> & {
158
+ /**
159
+ * The SG Ready inputs, by what each means closed alone: sg_ready_block closed alone
160
+ * blocks the heat pump, sg_ready_boost closed alone recommends running harder, both
161
+ * closed commands it to, and both open is normal operation. Both rest open, so a lapsed
162
+ * lease or a stopped gateway leaves the heat pump running normally. Bound together or not
163
+ * at all.
164
+ *
165
+ * They lapse separately, so their leases are ordered: while both are closed, the gateway
166
+ * gives sg_ready_block no longer a lease than sg_ready_boost, so the heat pump never passes
167
+ * through "blocked" on its way back to normal. In general, of two bound inputs, the one
168
+ * whose half-state blocks heat never lapses last.
169
+ *
170
+ * @generated from field: kusinta.iot.heating.v1.ContactBinding sg_ready_block = 1;
171
+ */
172
+ sgReadyBlock?: ContactBinding | undefined;
173
+
174
+ /**
175
+ * @generated from field: kusinta.iot.heating.v1.ContactBinding sg_ready_boost = 2;
176
+ */
177
+ sgReadyBoost?: ContactBinding | undefined;
178
+
179
+ /**
180
+ * The input that blocks the heat pump's add-on (electric) heater while closed. Rests
181
+ * open: the add-on heater is allowed.
182
+ *
183
+ * @generated from field: kusinta.iot.heating.v1.ContactBinding add_on_heater_block = 3;
184
+ */
185
+ addOnHeaterBlock?: ContactBinding | undefined;
186
+ };
187
+
188
+ /**
189
+ * Describes the message kusinta.iot.heating.v1.HeatPumpControl.
190
+ * Use `create(HeatPumpControlSchema)` to create a new message.
191
+ */
192
+ export declare const HeatPumpControlSchema: GenMessage<HeatPumpControl>;
193
+
194
+ /**
195
+ * One heating circuit of a plant. Supply temperature and its cap are per circuit.
196
+ *
197
+ * @generated from message kusinta.iot.heating.v1.HeatingCircuit
198
+ */
199
+ export declare type HeatingCircuit = Message<"kusinta.iot.heating.v1.HeatingCircuit"> & {
200
+ /**
201
+ * Assigned by the gateway, unique among heating records; empty when creating.
202
+ *
203
+ * @generated from field: string circuit_id = 1;
204
+ */
205
+ circuitId: string;
206
+
207
+ /**
208
+ * @generated from field: string plant_id = 2;
209
+ */
210
+ plantId: string;
211
+
212
+ /**
213
+ * @generated from field: string name = 3;
214
+ */
215
+ name: string;
216
+
217
+ /**
218
+ * @generated from oneof kusinta.iot.heating.v1.HeatingCircuit.distribution
219
+ */
220
+ distribution: {
221
+ /**
222
+ * @generated from field: kusinta.iot.heating.v1.RadiatorCircuit radiator = 4;
223
+ */
224
+ value: RadiatorCircuit;
225
+ case: "radiator";
226
+ } | {
227
+ /**
228
+ * @generated from field: kusinta.iot.heating.v1.FloorCircuit floor = 5;
229
+ */
230
+ value: FloorCircuit;
231
+ case: "floor";
232
+ } | { case: undefined; value?: undefined };
233
+
234
+ /**
235
+ * See the file comment.
236
+ *
237
+ * @generated from field: uint64 revision = 6;
238
+ */
239
+ revision: bigint;
240
+ };
241
+
242
+ /**
243
+ * Describes the message kusinta.iot.heating.v1.HeatingCircuit.
244
+ * Use `create(HeatingCircuitSchema)` to create a new message.
245
+ */
246
+ export declare const HeatingCircuitSchema: GenMessage<HeatingCircuit>;
247
+
248
+ /**
249
+ * A radiator circuit. Its valves belong to the rooms (climate.v1.RoomClimate).
250
+ *
251
+ * @generated from message kusinta.iot.heating.v1.RadiatorCircuit
252
+ */
253
+ export declare type RadiatorCircuit = Message<"kusinta.iot.heating.v1.RadiatorCircuit"> & {
254
+ };
255
+
256
+ /**
257
+ * Describes the message kusinta.iot.heating.v1.RadiatorCircuit.
258
+ * Use `create(RadiatorCircuitSchema)` to create a new message.
259
+ */
260
+ export declare const RadiatorCircuitSchema: GenMessage<RadiatorCircuit>;
261
+
262
+ /**
263
+ * Hydronic floor heating: its own pump, mixing and supply cap, and the floor zones on its
264
+ * manifold.
265
+ *
266
+ * @generated from message kusinta.iot.heating.v1.FloorCircuit
267
+ */
268
+ export declare type FloorCircuit = Message<"kusinta.iot.heating.v1.FloorCircuit"> & {
269
+ /**
270
+ * Whether a mixing valve feeds the circuit.
271
+ *
272
+ * @generated from field: bool mixing_valve = 1;
273
+ */
274
+ mixingValve: boolean;
275
+
276
+ /**
277
+ * The supply temperature its self-acting limiter caps it at, in centidegrees. Absent: not
278
+ * known, never 0 °C.
279
+ *
280
+ * @generated from field: optional sint32 supply_cap_centidegrees = 2;
281
+ */
282
+ supplyCapCentidegrees?: number | undefined;
283
+
284
+ /**
285
+ * Probes on the supply (after mixing) and the return.
286
+ *
287
+ * @generated from field: kusinta.iot.heating.v1.DeviceAttribute supply_probe = 3;
288
+ */
289
+ supplyProbe?: DeviceAttribute | undefined;
290
+
291
+ /**
292
+ * @generated from field: kusinta.iot.heating.v1.DeviceAttribute return_probe = 4;
293
+ */
294
+ returnProbe?: DeviceAttribute | undefined;
295
+ };
296
+
297
+ /**
298
+ * Describes the message kusinta.iot.heating.v1.FloorCircuit.
299
+ * Use `create(FloorCircuitSchema)` to create a new message.
300
+ */
301
+ export declare const FloorCircuitSchema: GenMessage<FloorCircuit>;
302
+
303
+ /**
304
+ * One loop or group of loops on a floor circuit's manifold, switched by one output on its
305
+ * wiring centre's thermostat input. The output's contact closed means the zone heats, and it
306
+ * rests closed: when the gateway is gone the zone heats, capped only by the circuit's supply
307
+ * limiter.
308
+ *
309
+ * @generated from message kusinta.iot.heating.v1.FloorZone
310
+ */
311
+ export declare type FloorZone = Message<"kusinta.iot.heating.v1.FloorZone"> & {
312
+ /**
313
+ * Assigned by the gateway, unique among heating records; empty when creating.
314
+ *
315
+ * @generated from field: string zone_id = 1;
316
+ */
317
+ zoneId: string;
318
+
319
+ /**
320
+ * A FLOOR circuit.
321
+ *
322
+ * @generated from field: string circuit_id = 2;
323
+ */
324
+ circuitId: string;
325
+
326
+ /**
327
+ * As marked on the manifold or the drawing ("SL 2").
328
+ *
329
+ * @generated from field: string name = 3;
330
+ */
331
+ name: string;
332
+
333
+ /**
334
+ * Where several zones share one device whose timer is device-wide (one delay for all its
335
+ * channels), the gateway renews the leases of all those zones in one go.
336
+ *
337
+ * @generated from field: kusinta.iot.heating.v1.ContactBinding output = 4;
338
+ */
339
+ output?: ContactBinding | undefined;
340
+
341
+ /**
342
+ * The rooms the zone heats, each a room within its plant's space, listed once, with a
343
+ * share above 0 and shares summing to 1000. A zone may heat several rooms and a room may
344
+ * be heated by several zones.
345
+ *
346
+ * @generated from field: repeated kusinta.iot.heating.v1.FloorZoneRoom rooms = 5;
347
+ */
348
+ rooms: FloorZoneRoom[];
349
+
350
+ /**
351
+ * One of rooms. Only its error, its sensor and its open window steer the zone.
352
+ *
353
+ * @generated from field: kusinta.iot.identity.v1.SpaceId control_room_id = 6;
354
+ */
355
+ controlRoomId?: SpaceId | undefined;
356
+
357
+ /**
358
+ * See the file comment.
359
+ *
360
+ * @generated from field: uint64 revision = 7;
361
+ */
362
+ revision: bigint;
363
+ };
364
+
365
+ /**
366
+ * Describes the message kusinta.iot.heating.v1.FloorZone.
367
+ * Use `create(FloorZoneSchema)` to create a new message.
368
+ */
369
+ export declare const FloorZoneSchema: GenMessage<FloorZone>;
370
+
371
+ /**
372
+ * @generated from message kusinta.iot.heating.v1.FloorZoneRoom
373
+ */
374
+ export declare type FloorZoneRoom = Message<"kusinta.iot.heating.v1.FloorZoneRoom"> & {
375
+ /**
376
+ * @generated from field: kusinta.iot.identity.v1.SpaceId room_id = 1;
377
+ */
378
+ roomId?: SpaceId | undefined;
379
+
380
+ /**
381
+ * This room's share of the zone's loop area, in thousandths.
382
+ *
383
+ * @generated from field: uint32 area_share_permille = 2;
384
+ */
385
+ areaSharePermille: number;
386
+ };
387
+
388
+ /**
389
+ * Describes the message kusinta.iot.heating.v1.FloorZoneRoom.
390
+ * Use `create(FloorZoneRoomSchema)` to create a new message.
391
+ */
392
+ export declare const FloorZoneRoomSchema: GenMessage<FloorZoneRoom>;
393
+
394
+ /**
395
+ * An electric load kept warm for comfort rather than heating a room to a target — a heated
396
+ * bathroom floor, a towel heater — run inside its time windows. Its output's contact closed
397
+ * means the load may heat under its own thermostat, and it rests closed: when the gateway is
398
+ * gone the load works as it did before.
399
+ *
400
+ * @generated from message kusinta.iot.heating.v1.ComfortLoad
401
+ */
402
+ export declare type ComfortLoad = Message<"kusinta.iot.heating.v1.ComfortLoad"> & {
403
+ /**
404
+ * Assigned by the gateway, unique among heating records; empty when creating.
405
+ *
406
+ * @generated from field: string comfort_load_id = 1;
407
+ */
408
+ comfortLoadId: string;
409
+
410
+ /**
411
+ * @generated from field: kusinta.iot.identity.v1.SpaceId room_id = 2;
412
+ */
413
+ roomId?: SpaceId | undefined;
414
+
415
+ /**
416
+ * @generated from field: string name = 3;
417
+ */
418
+ name: string;
419
+
420
+ /**
421
+ * @generated from field: kusinta.iot.heating.v1.ContactBinding output = 4;
422
+ */
423
+ output?: ContactBinding | undefined;
424
+
425
+ /**
426
+ * When the load may heat: the union of its windows, at most 16. Empty: only when the
427
+ * plan allows it for price. Set with SetComfortWindows, never in a put, which keeps them.
428
+ * While the building's time zone is not known (space.v1.Space.time_zone unset) no window
429
+ * applies and the load is left at rest, heating under its own thermostat.
430
+ *
431
+ * @generated from field: repeated kusinta.iot.heating.v1.ComfortWindow windows = 5;
432
+ */
433
+ windows: ComfortWindow[];
434
+
435
+ /**
436
+ * See the file comment.
437
+ *
438
+ * @generated from field: uint64 revision = 6;
439
+ */
440
+ revision: bigint;
441
+
442
+ /**
443
+ * Set by the gateway and bumped by every SetComfortWindows; see SetComfortWindows.
444
+ *
445
+ * @generated from field: uint64 windows_revision = 7;
446
+ */
447
+ windowsRevision: bigint;
448
+
449
+ /**
450
+ * Set when windows is left out for the recipient — an installer under a commissioning
451
+ * grant — so that an empty list is not read as "only when the plan allows it for price".
452
+ *
453
+ * @generated from field: bool windows_withheld = 8;
454
+ */
455
+ windowsWithheld: boolean;
456
+ };
457
+
458
+ /**
459
+ * Describes the message kusinta.iot.heating.v1.ComfortLoad.
460
+ * Use `create(ComfortLoadSchema)` to create a new message.
461
+ */
462
+ export declare const ComfortLoadSchema: GenMessage<ComfortLoad>;
463
+
464
+ /**
465
+ * A recurring stretch of the building's local day (space.v1.Space.time_zone).
466
+ *
467
+ * @generated from message kusinta.iot.heating.v1.ComfortWindow
468
+ */
469
+ export declare type ComfortWindow = Message<"kusinta.iot.heating.v1.ComfortWindow"> & {
470
+ /**
471
+ * The days it starts on: bit 0 Monday through bit 6 Sunday, at least one, no higher bit.
472
+ * Not Matter's day bitmap, which starts on Sunday.
473
+ *
474
+ * @generated from field: uint32 weekdays = 1;
475
+ */
476
+ weekdays: number;
477
+
478
+ /**
479
+ * Minutes after local midnight: start 0–1439, end 1–1440 and exclusive, never equal, so 0
480
+ * to 1440 is a whole day. A window whose end is before its start runs past midnight into
481
+ * the next day.
482
+ *
483
+ * On a day that changes to or from daylight saving, minutes are local wall-clock time: a
484
+ * start or end in the skipped hour falls at the first minute after it, and a repeated
485
+ * hour counts once, at its first occurrence.
486
+ *
487
+ * @generated from field: uint32 start_minute = 2;
488
+ */
489
+ startMinute: number;
490
+
491
+ /**
492
+ * @generated from field: uint32 end_minute = 3;
493
+ */
494
+ endMinute: number;
495
+ };
496
+
497
+ /**
498
+ * Describes the message kusinta.iot.heating.v1.ComfortWindow.
499
+ * Use `create(ComfortWindowSchema)` to create a new message.
500
+ */
501
+ export declare const ComfortWindowSchema: GenMessage<ComfortWindow>;
502
+
503
+ /**
504
+ * The heating records a caller may see under a space, in reply to ListHeating.
505
+ *
506
+ * @generated from message kusinta.iot.heating.v1.HeatingLayout
507
+ */
508
+ export declare type HeatingLayout = Message<"kusinta.iot.heating.v1.HeatingLayout"> & {
509
+ /**
510
+ * @generated from field: repeated kusinta.iot.heating.v1.HeatingPlant plants = 1;
511
+ */
512
+ plants: HeatingPlant[];
513
+
514
+ /**
515
+ * @generated from field: repeated kusinta.iot.heating.v1.HeatingCircuit circuits = 2;
516
+ */
517
+ circuits: HeatingCircuit[];
518
+
519
+ /**
520
+ * @generated from field: repeated kusinta.iot.heating.v1.FloorZone floor_zones = 3;
521
+ */
522
+ floorZones: FloorZone[];
523
+
524
+ /**
525
+ * @generated from field: repeated kusinta.iot.heating.v1.ComfortLoad comfort_loads = 4;
526
+ */
527
+ comfortLoads: ComfortLoad[];
528
+ };
529
+
530
+ /**
531
+ * Describes the message kusinta.iot.heating.v1.HeatingLayout.
532
+ * Use `create(HeatingLayoutSchema)` to create a new message.
533
+ */
534
+ export declare const HeatingLayoutSchema: GenMessage<HeatingLayout>;
535
+
536
+ /**
537
+ * One heating record as stored, in reply to a put.
538
+ *
539
+ * @generated from message kusinta.iot.heating.v1.HeatingRecord
540
+ */
541
+ export declare type HeatingRecord = Message<"kusinta.iot.heating.v1.HeatingRecord"> & {
542
+ /**
543
+ * @generated from oneof kusinta.iot.heating.v1.HeatingRecord.record
544
+ */
545
+ record: {
546
+ /**
547
+ * @generated from field: kusinta.iot.heating.v1.HeatingPlant plant = 1;
548
+ */
549
+ value: HeatingPlant;
550
+ case: "plant";
551
+ } | {
552
+ /**
553
+ * @generated from field: kusinta.iot.heating.v1.HeatingCircuit circuit = 2;
554
+ */
555
+ value: HeatingCircuit;
556
+ case: "circuit";
557
+ } | {
558
+ /**
559
+ * @generated from field: kusinta.iot.heating.v1.FloorZone floor_zone = 3;
560
+ */
561
+ value: FloorZone;
562
+ case: "floorZone";
563
+ } | {
564
+ /**
565
+ * @generated from field: kusinta.iot.heating.v1.ComfortLoad comfort_load = 4;
566
+ */
567
+ value: ComfortLoad;
568
+ case: "comfortLoad";
569
+ } | { case: undefined; value?: undefined };
570
+ };
571
+
572
+ /**
573
+ * Describes the message kusinta.iot.heating.v1.HeatingRecord.
574
+ * Use `create(HeatingRecordSchema)` to create a new message.
575
+ */
576
+ export declare const HeatingRecordSchema: GenMessage<HeatingRecord>;
577
+
578
+ /**
579
+ * @generated from enum kusinta.iot.heating.v1.HeatSourceKind
580
+ */
581
+ export enum HeatSourceKind {
582
+ /**
583
+ * @generated from enum value: HEAT_SOURCE_KIND_UNSPECIFIED = 0;
584
+ */
585
+ UNSPECIFIED = 0,
586
+
587
+ /**
588
+ * @generated from enum value: HEAT_SOURCE_KIND_EXHAUST_AIR_HEAT_PUMP = 1;
589
+ */
590
+ EXHAUST_AIR_HEAT_PUMP = 1,
591
+
592
+ /**
593
+ * @generated from enum value: HEAT_SOURCE_KIND_GROUND_SOURCE_HEAT_PUMP = 2;
594
+ */
595
+ GROUND_SOURCE_HEAT_PUMP = 2,
596
+
597
+ /**
598
+ * @generated from enum value: HEAT_SOURCE_KIND_AIR_WATER_HEAT_PUMP = 3;
599
+ */
600
+ AIR_WATER_HEAT_PUMP = 3,
601
+
602
+ /**
603
+ * @generated from enum value: HEAT_SOURCE_KIND_DISTRICT_HEATING = 4;
604
+ */
605
+ DISTRICT_HEATING = 4,
606
+
607
+ /**
608
+ * @generated from enum value: HEAT_SOURCE_KIND_ELECTRIC_BOILER = 5;
609
+ */
610
+ ELECTRIC_BOILER = 5,
611
+
612
+ /**
613
+ * @generated from enum value: HEAT_SOURCE_KIND_FUEL_BOILER = 6;
614
+ */
615
+ FUEL_BOILER = 6,
616
+ }
617
+
618
+ /**
619
+ * Describes the enum kusinta.iot.heating.v1.HeatSourceKind.
620
+ */
621
+ export declare const HeatSourceKindSchema: GenEnum<HeatSourceKind>;
622
+
@@ -0,0 +1,118 @@
1
+ // @generated by protoc-gen-es v2.12.0 with parameter "target=js+dts,import_extension=js"
2
+ // @generated from file kusinta/iot/heating/v1/heating.proto (package kusinta.iot.heating.v1, syntax proto3)
3
+ /* eslint-disable */
4
+
5
+ import { enumDesc, fileDesc, messageDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
6
+ import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
7
+ import { file_kusinta_iot_device_v1_cluster_state } from "../../device/v1/cluster_state_pb.js";
8
+ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
9
+
10
+ /**
11
+ * Describes the file kusinta/iot/heating/v1/heating.proto.
12
+ */
13
+ export const file_kusinta_iot_heating_v1_heating = /*@__PURE__*/
14
+ fileDesc("CiRrdXNpbnRhL2lvdC9oZWF0aW5nL3YxL2hlYXRpbmcucHJvdG8SFmt1c2ludGEuaW90LmhlYXRpbmcudjEifwoPRGV2aWNlQXR0cmlidXRlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjYKCWF0dHJpYnV0ZRgCIAEoCzIjLmt1c2ludGEuaW90LmFjY2Vzcy52MS5BdHRyaWJ1dGVSZWYihgEKDkNvbnRhY3RCaW5kaW5nEjcKBm91dHB1dBgBIAEoCzInLmt1c2ludGEuaW90LmhlYXRpbmcudjEuRGV2aWNlQXR0cmlidXRlEjsKDGNsb3NlZF92YWx1ZRgCIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5BdHRyaWJ1dGVWYWx1ZSLsAgoMSGVhdGluZ1BsYW50EhAKCHBsYW50X2lkGAEgASgJEjIKCHNwYWNlX2lkGAIgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIMCgRuYW1lGAMgASgJEjYKBnNvdXJjZRgEIAEoDjImLmt1c2ludGEuaW90LmhlYXRpbmcudjEuSGVhdFNvdXJjZUtpbmQSPQoScmVhZGluZ3NfZGV2aWNlX2lkGAUgASgLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSPAoJaGVhdF9wdW1wGAYgASgLMicua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0UHVtcENvbnRyb2xIABI2CgVtZXRlchgHIAEoCzInLmt1c2ludGEuaW90LmhlYXRpbmcudjEuRGV2aWNlQXR0cmlidXRlEhAKCHJldmlzaW9uGAggASgEQgkKB2NvbnRyb2wi1gEKD0hlYXRQdW1wQ29udHJvbBI+Cg5zZ19yZWFkeV9ibG9jaxgBIAEoCzImLmt1c2ludGEuaW90LmhlYXRpbmcudjEuQ29udGFjdEJpbmRpbmcSPgoOc2dfcmVhZHlfYm9vc3QYAiABKAsyJi5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkNvbnRhY3RCaW5kaW5nEkMKE2FkZF9vbl9oZWF0ZXJfYmxvY2sYAyABKAsyJi5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkNvbnRhY3RCaW5kaW5nItoBCg5IZWF0aW5nQ2lyY3VpdBISCgpjaXJjdWl0X2lkGAEgASgJEhAKCHBsYW50X2lkGAIgASgJEgwKBG5hbWUYAyABKAkSOwoIcmFkaWF0b3IYBCABKAsyJy5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLlJhZGlhdG9yQ2lyY3VpdEgAEjUKBWZsb29yGAUgASgLMiQua3VzaW50YS5pb3QuaGVhdGluZy52MS5GbG9vckNpcmN1aXRIABIQCghyZXZpc2lvbhgGIAEoBEIOCgxkaXN0cmlidXRpb24iEQoPUmFkaWF0b3JDaXJjdWl0IuQBCgxGbG9vckNpcmN1aXQSFAoMbWl4aW5nX3ZhbHZlGAEgASgIEiQKF3N1cHBseV9jYXBfY2VudGlkZWdyZWVzGAIgASgRSACIAQESPQoMc3VwcGx5X3Byb2JlGAMgASgLMicua3VzaW50YS5pb3QuaGVhdGluZy52MS5EZXZpY2VBdHRyaWJ1dGUSPQoMcmV0dXJuX3Byb2JlGAQgASgLMicua3VzaW50YS5pb3QuaGVhdGluZy52MS5EZXZpY2VBdHRyaWJ1dGVCGgoYX3N1cHBseV9jYXBfY2VudGlkZWdyZWVzIvkBCglGbG9vclpvbmUSDwoHem9uZV9pZBgBIAEoCRISCgpjaXJjdWl0X2lkGAIgASgJEgwKBG5hbWUYAyABKAkSNgoGb3V0cHV0GAQgASgLMiYua3VzaW50YS5pb3QuaGVhdGluZy52MS5Db250YWN0QmluZGluZxI0CgVyb29tcxgFIAMoCzIlLmt1c2ludGEuaW90LmhlYXRpbmcudjEuRmxvb3Jab25lUm9vbRI5Cg9jb250cm9sX3Jvb21faWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhAKCHJldmlzaW9uGAcgASgEIl8KDUZsb29yWm9uZVJvb20SMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSGwoTYXJlYV9zaGFyZV9wZXJtaWxsZRgCIAEoDSKdAgoLQ29tZm9ydExvYWQSFwoPY29tZm9ydF9sb2FkX2lkGAEgASgJEjEKB3Jvb21faWQYAiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEgwKBG5hbWUYAyABKAkSNgoGb3V0cHV0GAQgASgLMiYua3VzaW50YS5pb3QuaGVhdGluZy52MS5Db250YWN0QmluZGluZxI2Cgd3aW5kb3dzGAUgAygLMiUua3VzaW50YS5pb3QuaGVhdGluZy52MS5Db21mb3J0V2luZG93EhAKCHJldmlzaW9uGAYgASgEEhgKEHdpbmRvd3NfcmV2aXNpb24YByABKAQSGAoQd2luZG93c193aXRoaGVsZBgIIAEoCCJLCg1Db21mb3J0V2luZG93EhAKCHdlZWtkYXlzGAEgASgNEhQKDHN0YXJ0X21pbnV0ZRgCIAEoDRISCgplbmRfbWludXRlGAMgASgNIvMBCg1IZWF0aW5nTGF5b3V0EjQKBnBsYW50cxgBIAMoCzIkLmt1c2ludGEuaW90LmhlYXRpbmcudjEuSGVhdGluZ1BsYW50EjgKCGNpcmN1aXRzGAIgAygLMiYua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nQ2lyY3VpdBI2CgtmbG9vcl96b25lcxgDIAMoCzIhLmt1c2ludGEuaW90LmhlYXRpbmcudjEuRmxvb3Jab25lEjoKDWNvbWZvcnRfbG9hZHMYBCADKAsyIy5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkNvbWZvcnRMb2FkIoECCg1IZWF0aW5nUmVjb3JkEjUKBXBsYW50GAEgASgLMiQua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nUGxhbnRIABI5CgdjaXJjdWl0GAIgASgLMiYua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nQ2lyY3VpdEgAEjcKCmZsb29yX3pvbmUYAyABKAsyIS5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkZsb29yWm9uZUgAEjsKDGNvbWZvcnRfbG9hZBgEIAEoCzIjLmt1c2ludGEuaW90LmhlYXRpbmcudjEuQ29tZm9ydExvYWRIAEIICgZyZWNvcmQqpQIKDkhlYXRTb3VyY2VLaW5kEiAKHEhFQVRfU09VUkNFX0tJTkRfVU5TUEVDSUZJRUQQABIqCiZIRUFUX1NPVVJDRV9LSU5EX0VYSEFVU1RfQUlSX0hFQVRfUFVNUBABEiwKKEhFQVRfU09VUkNFX0tJTkRfR1JPVU5EX1NPVVJDRV9IRUFUX1BVTVAQAhIoCiRIRUFUX1NPVVJDRV9LSU5EX0FJUl9XQVRFUl9IRUFUX1BVTVAQAxIlCiFIRUFUX1NPVVJDRV9LSU5EX0RJU1RSSUNUX0hFQVRJTkcQBBIkCiBIRUFUX1NPVVJDRV9LSU5EX0VMRUNUUklDX0JPSUxFUhAFEiAKHEhFQVRfU09VUkNFX0tJTkRfRlVFTF9CT0lMRVIQBkICSAFiBnByb3RvMw", [file_kusinta_iot_access_v1_acl, file_kusinta_iot_device_v1_cluster_state, file_kusinta_iot_identity_v1_identity]);
15
+
16
+ /**
17
+ * Describes the message kusinta.iot.heating.v1.DeviceAttribute.
18
+ * Use `create(DeviceAttributeSchema)` to create a new message.
19
+ */
20
+ export const DeviceAttributeSchema = /*@__PURE__*/
21
+ messageDesc(file_kusinta_iot_heating_v1_heating, 0);
22
+
23
+ /**
24
+ * Describes the message kusinta.iot.heating.v1.ContactBinding.
25
+ * Use `create(ContactBindingSchema)` to create a new message.
26
+ */
27
+ export const ContactBindingSchema = /*@__PURE__*/
28
+ messageDesc(file_kusinta_iot_heating_v1_heating, 1);
29
+
30
+ /**
31
+ * Describes the message kusinta.iot.heating.v1.HeatingPlant.
32
+ * Use `create(HeatingPlantSchema)` to create a new message.
33
+ */
34
+ export const HeatingPlantSchema = /*@__PURE__*/
35
+ messageDesc(file_kusinta_iot_heating_v1_heating, 2);
36
+
37
+ /**
38
+ * Describes the message kusinta.iot.heating.v1.HeatPumpControl.
39
+ * Use `create(HeatPumpControlSchema)` to create a new message.
40
+ */
41
+ export const HeatPumpControlSchema = /*@__PURE__*/
42
+ messageDesc(file_kusinta_iot_heating_v1_heating, 3);
43
+
44
+ /**
45
+ * Describes the message kusinta.iot.heating.v1.HeatingCircuit.
46
+ * Use `create(HeatingCircuitSchema)` to create a new message.
47
+ */
48
+ export const HeatingCircuitSchema = /*@__PURE__*/
49
+ messageDesc(file_kusinta_iot_heating_v1_heating, 4);
50
+
51
+ /**
52
+ * Describes the message kusinta.iot.heating.v1.RadiatorCircuit.
53
+ * Use `create(RadiatorCircuitSchema)` to create a new message.
54
+ */
55
+ export const RadiatorCircuitSchema = /*@__PURE__*/
56
+ messageDesc(file_kusinta_iot_heating_v1_heating, 5);
57
+
58
+ /**
59
+ * Describes the message kusinta.iot.heating.v1.FloorCircuit.
60
+ * Use `create(FloorCircuitSchema)` to create a new message.
61
+ */
62
+ export const FloorCircuitSchema = /*@__PURE__*/
63
+ messageDesc(file_kusinta_iot_heating_v1_heating, 6);
64
+
65
+ /**
66
+ * Describes the message kusinta.iot.heating.v1.FloorZone.
67
+ * Use `create(FloorZoneSchema)` to create a new message.
68
+ */
69
+ export const FloorZoneSchema = /*@__PURE__*/
70
+ messageDesc(file_kusinta_iot_heating_v1_heating, 7);
71
+
72
+ /**
73
+ * Describes the message kusinta.iot.heating.v1.FloorZoneRoom.
74
+ * Use `create(FloorZoneRoomSchema)` to create a new message.
75
+ */
76
+ export const FloorZoneRoomSchema = /*@__PURE__*/
77
+ messageDesc(file_kusinta_iot_heating_v1_heating, 8);
78
+
79
+ /**
80
+ * Describes the message kusinta.iot.heating.v1.ComfortLoad.
81
+ * Use `create(ComfortLoadSchema)` to create a new message.
82
+ */
83
+ export const ComfortLoadSchema = /*@__PURE__*/
84
+ messageDesc(file_kusinta_iot_heating_v1_heating, 9);
85
+
86
+ /**
87
+ * Describes the message kusinta.iot.heating.v1.ComfortWindow.
88
+ * Use `create(ComfortWindowSchema)` to create a new message.
89
+ */
90
+ export const ComfortWindowSchema = /*@__PURE__*/
91
+ messageDesc(file_kusinta_iot_heating_v1_heating, 10);
92
+
93
+ /**
94
+ * Describes the message kusinta.iot.heating.v1.HeatingLayout.
95
+ * Use `create(HeatingLayoutSchema)` to create a new message.
96
+ */
97
+ export const HeatingLayoutSchema = /*@__PURE__*/
98
+ messageDesc(file_kusinta_iot_heating_v1_heating, 11);
99
+
100
+ /**
101
+ * Describes the message kusinta.iot.heating.v1.HeatingRecord.
102
+ * Use `create(HeatingRecordSchema)` to create a new message.
103
+ */
104
+ export const HeatingRecordSchema = /*@__PURE__*/
105
+ messageDesc(file_kusinta_iot_heating_v1_heating, 12);
106
+
107
+ /**
108
+ * Describes the enum kusinta.iot.heating.v1.HeatSourceKind.
109
+ */
110
+ export const HeatSourceKindSchema = /*@__PURE__*/
111
+ enumDesc(file_kusinta_iot_heating_v1_heating, 0);
112
+
113
+ /**
114
+ * @generated from enum kusinta.iot.heating.v1.HeatSourceKind
115
+ */
116
+ export const HeatSourceKind = /*@__PURE__*/
117
+ tsEnum(HeatSourceKindSchema);
118
+
@@ -12,6 +12,7 @@ import type { DeviceLink, DeviceLinkList } from "../../link/v1/link_pb.js";
12
12
  import type { ApartmentClimateSummary, ClimateMode, RoomClimate, RoomClimateList, RoomHistory } from "../../climate/v1/climate_pb.js";
13
13
  import type { IssuedInvite, SpaceInvites } from "./invite_pb.js";
14
14
  import type { GatewayMembers, PromotionRequests } from "./members_pb.js";
15
+ import type { HeatingLayout, HeatingRecord } from "../../heating/v1/heating_pb.js";
15
16
  import type { PairingErrorDetail, PairingWindow } from "../../common/v1/pairing_pb.js";
16
17
  import type { BackendHealth, ConnectorKind, DeviceOwnershipType } from "../../common/v1/types_pb.js";
17
18
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
@@ -394,6 +395,23 @@ export declare type ManagementResult = Message<"kusinta.iot.webrtc.v1.Management
394
395
  */
395
396
  value: PromotionRequests;
396
397
  case: "promotionRequests";
398
+ } | {
399
+ /**
400
+ * list_heating
401
+ *
402
+ * @generated from field: kusinta.iot.heating.v1.HeatingLayout heating_layout = 15;
403
+ */
404
+ value: HeatingLayout;
405
+ case: "heatingLayout";
406
+ } | {
407
+ /**
408
+ * put_heating_plant, put_heating_circuit, put_floor_zone, put_comfort_load,
409
+ * set_comfort_windows
410
+ *
411
+ * @generated from field: kusinta.iot.heating.v1.HeatingRecord heating_record = 16;
412
+ */
413
+ value: HeatingRecord;
414
+ case: "heatingRecord";
397
415
  } | { case: undefined; value?: undefined };
398
416
  };
399
417
 
@@ -9,6 +9,7 @@ import { file_kusinta_iot_climate_v1_climate } from "../../climate/v1/climate_pb
9
9
  import { file_kusinta_iot_common_v1_pairing } from "../../common/v1/pairing_pb.js";
10
10
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
11
11
  import { file_kusinta_iot_device_v1_device_event } from "../../device/v1/device_event_pb.js";
12
+ import { file_kusinta_iot_heating_v1_heating } from "../../heating/v1/heating_pb.js";
12
13
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
13
14
  import { file_kusinta_iot_link_v1_link } from "../../link/v1/link_pb.js";
14
15
  import { file_kusinta_iot_space_v1_space } from "../../space/v1/space_pb.js";
@@ -23,7 +24,7 @@ import { file_kusinta_iot_webrtc_v1_permission_push } from "./permission_push_pb
23
24
  * Describes the file kusinta/iot/webrtc/v1/envelope.proto.
24
25
  */
25
26
  export const file_kusinta_iot_webrtc_v1_envelope = /*@__PURE__*/
26
- fileDesc("CiRrdXNpbnRhL2lvdC93ZWJydGMvdjEvZW52ZWxvcGUucHJvdG8SFWt1c2ludGEuaW90LndlYnJ0Yy52MSIGCgRQaW5nIgYKBFBvbmciIwoRSGFuZHNoYWtlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlwKDEFwcEhhbmRzaGFrZRILCgNqd3QYASABKAkSPwoUc3Vic2NyaWJlX2RldmljZV9pZHMYAiADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJJChBTdWJzY3JpYmVEZXZpY2VzEjUKCmRldmljZV9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJLChJVbnN1YnNjcmliZURldmljZXMSNQoKZGV2aWNlX2lkcxgBIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIpMBChNSZWZ1c2VkU3Vic2NyaXB0aW9uEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjUKBGNvZGUYAiABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yQ29kZRIPCgdtZXNzYWdlGAMgASgJIpoBCg9TdWJzY3JpcHRpb25BY2sSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKc3Vic2NyaWJlZBgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjsKB3JlZnVzZWQYAyADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVmdXNlZFN1YnNjcmlwdGlvbiLRAQoTUHJvcGVydHlSZWFkUmVxdWVzdBI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCgZ0YXJnZXQYByABKAsyIy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuQXR0cmlidXRlUmVmSgQIAhAHUg5hdHRyaWJ1dGVfbmFtZVIOY2x1c3Rlcl9pZF9oZXhSCmNsdXN0ZXJfaWRSC2VuZHBvaW50X2lkUhB2ZW5kb3JfZXh0ZW5zaW9uIswBCgxHYXRld2F5RXJyb3ISNQoEY29kZRgBIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JDb2RlEg8KB21lc3NhZ2UYAiABKAkSQwoIbWV0YWRhdGEYAyADKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBItsGChBNYW5hZ2VtZW50UmVzdWx0EhMKC2luX3JlcGx5X3RvGAEgASgJEjQKBWVycm9yGAIgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkdhdGV3YXlFcnJvckgAEiwKBXNwYWNlGAMgASgLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2VIABI2CgpzcGFjZV90cmVlGAQgASgLMiAua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlVHJlZUgAEjMKA2FjaxgFIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50QWNrSAASNAoFbGlua3MYBiABKAsyIy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmtMaXN0SAASQAoNcm9vbV9jbGltYXRlcxgHIAEoCzInLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUNsaW1hdGVMaXN0SAASOwoMcm9vbV9oaXN0b3J5GAggASgLMiMua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tSGlzdG9yeUgAEkYKEnByaXZhY3lfZGlzY2xvc3VyZRgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcml2YWN5RGlzY2xvc3VyZUgAElQKGWFwYXJ0bWVudF9jbGltYXRlX3N1bW1hcnkYCiABKAsyLy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5SAASPAoNaXNzdWVkX2ludml0ZRgLIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Jc3N1ZWRJbnZpdGVIABI8Cg1zcGFjZV9pbnZpdGVzGAwgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlSW52aXRlc0gAEkAKD2dhdGV3YXlfbWVtYmVycxgNIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5TWVtYmVyc0gAEkYKEnByb21vdGlvbl9yZXF1ZXN0cxgOIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm9tb3Rpb25SZXF1ZXN0c0gAQggKBnJlc3VsdCL7AQoMU3RhcnRQYWlyaW5nEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEjQKBndpbmRvdxgCIAEoCzIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5QYWlyaW5nV2luZG93EjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEj0KCW93bmVyc2hpcBgEIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlIo8BCg5QYWlyaW5nU3RhcnRlZBITCgtpbl9yZXBseV90bxgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI4CgVlcnJvchgDIAEoCzIpLmt1c2ludGEuaW90LmNvbW1vbi52MS5QYWlyaW5nRXJyb3JEZXRhaWwilwEKD1BhaXJpbmdGaW5pc2hlZBITCgtpbl9yZXBseV90bxgBIAEoCRI1CgpkZXZpY2VfaWRzGAIgAygLMiEua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuRGV2aWNlSWQSOAoFZXJyb3IYAyABKAsyKS5rdXNpbnRhLmlvdC5jb21tb24udjEuUGFpcmluZ0Vycm9yRGV0YWlsIk0KC0xpbmtDaGFuZ2VkEi0KBGxpbmsYASABKAsyHy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmsSDwoHcmVtb3ZlZBgCIAEoCCKIAwoTQ29ubmVjdG9yRGVzY3JpcHRvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZBIUCgxkaXNwbGF5X25hbWUYAiABKAkSIQoZc3VwcG9ydGVkX2RldmljZV90eXBlX2lkcxgDIAMoDRIYChBzdXBwb3J0c19wYWlyaW5nGAQgASgIEh0KFXN1cHBvcnRzX3Byb3Zpc2lvbmluZxgFIAEoCBIVCg1icm9rZXJzX2xpbmtzGAYgASgIEjIKBGtpbmQYByABKA4yJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQ29ubmVjdG9yS2luZBITCgtkZXNjcmlwdGlvbhgIIAEoCRI8Cg5iYWNrZW5kX2hlYWx0aBgJIAEoCzIkLmt1c2ludGEuaW90LmNvbW1vbi52MS5CYWNrZW5kSGVhbHRoEiUKHXN1cHBvcnRzX2JhY2tlbmRfcmVpbml0aWFsaXplGAogASgIIlUKE0Nvbm5lY3RvcnNBbm5vdW5jZWQSPgoKY29ubmVjdG9ycxgBIAMoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25uZWN0b3JEZXNjcmlwdG9yIkcKElJvb21DbGltYXRlQ2hhbmdlZBIxCgRyb29tGAEgASgLMiMua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tQ2xpbWF0ZSJWChJDbGltYXRlTW9kZUNoYW5nZWQSMQoEbW9kZRgBIAEoCzIjLmt1c2ludGEuaW90LmNsaW1hdGUudjEuQ2xpbWF0ZU1vZGUSDQoFZW5kZWQYAiABKAgijgwKDkdhdGV3YXlNZXNzYWdlEhIKCm1lc3NhZ2VfaWQYASABKAkSKwoHc2VudF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASRAoOc3RhdGVfc25hcHNob3QYAyABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlU3RhdGVTbmFwc2hvdEgAEkAKD3Byb3BlcnR5X3JlcG9ydBgEIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm9wZXJ0eVJlcG9ydEgAEkgKEXBlcm1pc3Npb25fdXBkYXRlGAUgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpdmVQZXJtaXNzaW9uVXBkYXRlSAASPgoOY29tbWFuZF9yZXN1bHQYBiABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29tbWFuZFJlc3VsdEgAEisKBHBvbmcYCCABKAsyGy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUG9uZ0gAEkYKEmhhbmRzaGFrZV9yZWplY3RlZBgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5IYW5kc2hha2VSZWplY3RlZEgAEjQKBWVycm9yGAogASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkdhdGV3YXlFcnJvckgAEkIKEHN1YnNjcmlwdGlvbl9hY2sYCyABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuU3Vic2NyaXB0aW9uQWNrSAASOgoMZGV2aWNlX2FkZGVkGAwgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUFkZGVkSAASPgoOZGV2aWNlX3JlbW92ZWQYDSABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlUmVtb3ZlZEgAEkQKEW1hbmFnZW1lbnRfcmVzdWx0GA4gASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLk1hbmFnZW1lbnRSZXN1bHRIABJACg1kZXZpY2VfZXZlbnRzGBAgASgLMicua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZUV2ZW50QmF0Y2hIABJACg9wYWlyaW5nX3N0YXJ0ZWQYESABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGFpcmluZ1N0YXJ0ZWRIABJCChBwYWlyaW5nX2ZpbmlzaGVkGBIgASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlBhaXJpbmdGaW5pc2hlZEgAEjoKDGxpbmtfY2hhbmdlZBgTIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaW5rQ2hhbmdlZEgAEkoKFGNvbm5lY3RvcnNfYW5ub3VuY2VkGBQgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLkNvbm5lY3RvcnNBbm5vdW5jZWRIABJJChRyb29tX2NsaW1hdGVfY2hhbmdlZBgVIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tQ2xpbWF0ZUNoYW5nZWRIABJJChRjbGltYXRlX21vZGVfY2hhbmdlZBgWIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DbGltYXRlTW9kZUNoYW5nZWRIABJNChZzZXJ2aWNlX3N0YXR1c19jaGFuZ2VkGBcgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VTdGF0dXNDaGFuZ2VkSAASPAoNc3BhY2VfaW52aXRlcxgYIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TcGFjZUludml0ZXNIABJGChJwcm9tb3Rpb25fcmVxdWVzdHMYGSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvbW90aW9uUmVxdWVzdHNIAEIJCgdwYXlsb2FkSgQIDxAQSgQIBxAIUhZhdHRyaWJ1dGVfd3JpdGVfcmVzdWx0Ug5wcm9wZXJ0eV9ldmVudCKDBQoKQXBwTWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjgKCWhhbmRzaGFrZRgDIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BcHBIYW5kc2hha2VIABI3Cgdjb21tYW5kGAQgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUNvbW1hbmRIABJCCgxyZWFkX3JlcXVlc3QYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvcGVydHlSZWFkUmVxdWVzdEgAEisKBHBpbmcYBiABKAsyGy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGluZ0gAEjwKCXN1YnNjcmliZRgHIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdWJzY3JpYmVEZXZpY2VzSAASQAoLdW5zdWJzY3JpYmUYCCABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuVW5zdWJzY3JpYmVEZXZpY2VzSAASPgoKbWFuYWdlbWVudBgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50UmVxdWVzdEgAEkcKD2F0dHJpYnV0ZV93cml0ZRgKIAEoCzIsLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BdHRyaWJ1dGVXcml0ZVJlcXVlc3RIABI8Cg1zdGFydF9wYWlyaW5nGAsgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlN0YXJ0UGFpcmluZ0gAQgkKB3BheWxvYWQqogIKEEdhdGV3YXlFcnJvckNvZGUSIgoeR0FURVdBWV9FUlJPUl9DT0RFX1VOU1BFQ0lGSUVEEAASIwofR0FURVdBWV9FUlJPUl9DT0RFX05PVF9FTlRJVExFRBABEiYKIkdBVEVXQVlfRVJST1JfQ09ERV9JTlZBTElEX1JFUVVFU1QQAhIiCh5HQVRFV0FZX0VSUk9SX0NPREVfVU5BVkFJTEFCTEUQAxIfChtHQVRFV0FZX0VSUk9SX0NPREVfSU5URVJOQUwQBBIsCihHQVRFV0FZX0VSUk9SX0NPREVfU0VTU0lPTl9MSU1JVF9SRUFDSEVEEAUSKgomR0FURVdBWV9FUlJPUl9DT0RFX0ZBSUxFRF9QUkVDT05ESVRJT04QBkICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_pairing, file_kusinta_iot_common_v1_types, file_kusinta_iot_device_v1_device_event, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_webrtc_v1_command, file_kusinta_iot_webrtc_v1_device_state, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_management, file_kusinta_iot_webrtc_v1_members, file_kusinta_iot_webrtc_v1_permission_push]);
27
+ fileDesc("CiRrdXNpbnRhL2lvdC93ZWJydGMvdjEvZW52ZWxvcGUucHJvdG8SFWt1c2ludGEuaW90LndlYnJ0Yy52MSIGCgRQaW5nIgYKBFBvbmciIwoRSGFuZHNoYWtlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlwKDEFwcEhhbmRzaGFrZRILCgNqd3QYASABKAkSPwoUc3Vic2NyaWJlX2RldmljZV9pZHMYAiADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJJChBTdWJzY3JpYmVEZXZpY2VzEjUKCmRldmljZV9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJLChJVbnN1YnNjcmliZURldmljZXMSNQoKZGV2aWNlX2lkcxgBIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIpMBChNSZWZ1c2VkU3Vic2NyaXB0aW9uEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjUKBGNvZGUYAiABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yQ29kZRIPCgdtZXNzYWdlGAMgASgJIpoBCg9TdWJzY3JpcHRpb25BY2sSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKc3Vic2NyaWJlZBgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjsKB3JlZnVzZWQYAyADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVmdXNlZFN1YnNjcmlwdGlvbiLRAQoTUHJvcGVydHlSZWFkUmVxdWVzdBI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCgZ0YXJnZXQYByABKAsyIy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuQXR0cmlidXRlUmVmSgQIAhAHUg5hdHRyaWJ1dGVfbmFtZVIOY2x1c3Rlcl9pZF9oZXhSCmNsdXN0ZXJfaWRSC2VuZHBvaW50X2lkUhB2ZW5kb3JfZXh0ZW5zaW9uIswBCgxHYXRld2F5RXJyb3ISNQoEY29kZRgBIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JDb2RlEg8KB21lc3NhZ2UYAiABKAkSQwoIbWV0YWRhdGEYAyADKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIt0HChBNYW5hZ2VtZW50UmVzdWx0EhMKC2luX3JlcGx5X3RvGAEgASgJEjQKBWVycm9yGAIgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkdhdGV3YXlFcnJvckgAEiwKBXNwYWNlGAMgASgLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2VIABI2CgpzcGFjZV90cmVlGAQgASgLMiAua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlVHJlZUgAEjMKA2FjaxgFIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50QWNrSAASNAoFbGlua3MYBiABKAsyIy5rdXNpbnRhLmlvdC5saW5rLnYxLkRldmljZUxpbmtMaXN0SAASQAoNcm9vbV9jbGltYXRlcxgHIAEoCzInLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUNsaW1hdGVMaXN0SAASOwoMcm9vbV9oaXN0b3J5GAggASgLMiMua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5Sb29tSGlzdG9yeUgAEkYKEnByaXZhY3lfZGlzY2xvc3VyZRgJIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcml2YWN5RGlzY2xvc3VyZUgAElQKGWFwYXJ0bWVudF9jbGltYXRlX3N1bW1hcnkYCiABKAsyLy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5SAASPAoNaXNzdWVkX2ludml0ZRgLIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Jc3N1ZWRJbnZpdGVIABI8Cg1zcGFjZV9pbnZpdGVzGAwgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNwYWNlSW52aXRlc0gAEkAKD2dhdGV3YXlfbWVtYmVycxgNIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5TWVtYmVyc0gAEkYKEnByb21vdGlvbl9yZXF1ZXN0cxgOIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm9tb3Rpb25SZXF1ZXN0c0gAEj8KDmhlYXRpbmdfbGF5b3V0GA8gASgLMiUua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nTGF5b3V0SAASPwoOaGVhdGluZ19yZWNvcmQYECABKAsyJS5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkhlYXRpbmdSZWNvcmRIAEIICgZyZXN1bHQi+wEKDFN0YXJ0UGFpcmluZxI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZBI0CgZ3aW5kb3cYAiABKAsyJC5rdXNpbnRhLmlvdC5jb21tb24udjEuUGFpcmluZ1dpbmRvdxI6ChBpbml0aWFsX3NwYWNlX2lkGAMgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI9Cglvd25lcnNoaXAYBCABKA4yKi5rdXNpbnRhLmlvdC5jb21tb24udjEuRGV2aWNlT3duZXJzaGlwVHlwZSKPAQoOUGFpcmluZ1N0YXJ0ZWQSEwoLaW5fcmVwbHlfdG8YASABKAkSLgoKZXhwaXJlc19hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOAoFZXJyb3IYAyABKAsyKS5rdXNpbnRhLmlvdC5jb21tb24udjEuUGFpcmluZ0Vycm9yRGV0YWlsIpcBCg9QYWlyaW5nRmluaXNoZWQSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKZGV2aWNlX2lkcxgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjgKBWVycm9yGAMgASgLMikua3VzaW50YS5pb3QuY29tbW9uLnYxLlBhaXJpbmdFcnJvckRldGFpbCJNCgtMaW5rQ2hhbmdlZBItCgRsaW5rGAEgASgLMh8ua3VzaW50YS5pb3QubGluay52MS5EZXZpY2VMaW5rEg8KB3JlbW92ZWQYAiABKAgiiAMKE0Nvbm5lY3RvckRlc2NyaXB0b3ISOgoMY29ubmVjdG9yX2lkGAEgASgLMiQua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuQ29ubmVjdG9ySWQSFAoMZGlzcGxheV9uYW1lGAIgASgJEiEKGXN1cHBvcnRlZF9kZXZpY2VfdHlwZV9pZHMYAyADKA0SGAoQc3VwcG9ydHNfcGFpcmluZxgEIAEoCBIdChVzdXBwb3J0c19wcm92aXNpb25pbmcYBSABKAgSFQoNYnJva2Vyc19saW5rcxgGIAEoCBIyCgRraW5kGAcgASgOMiQua3VzaW50YS5pb3QuY29tbW9uLnYxLkNvbm5lY3RvcktpbmQSEwoLZGVzY3JpcHRpb24YCCABKAkSPAoOYmFja2VuZF9oZWFsdGgYCSABKAsyJC5rdXNpbnRhLmlvdC5jb21tb24udjEuQmFja2VuZEhlYWx0aBIlCh1zdXBwb3J0c19iYWNrZW5kX3JlaW5pdGlhbGl6ZRgKIAEoCCJVChNDb25uZWN0b3JzQW5ub3VuY2VkEj4KCmNvbm5lY3RvcnMYASADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29ubmVjdG9yRGVzY3JpcHRvciJHChJSb29tQ2xpbWF0ZUNoYW5nZWQSMQoEcm9vbRgBIAEoCzIjLmt1c2ludGEuaW90LmNsaW1hdGUudjEuUm9vbUNsaW1hdGUiVgoSQ2xpbWF0ZU1vZGVDaGFuZ2VkEjEKBG1vZGUYASABKAsyIy5rdXNpbnRhLmlvdC5jbGltYXRlLnYxLkNsaW1hdGVNb2RlEg0KBWVuZGVkGAIgASgIIo4MCg5HYXRld2F5TWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkQKDnN0YXRlX3NuYXBzaG90GAMgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZVN0YXRlU25hcHNob3RIABJACg9wcm9wZXJ0eV9yZXBvcnQYBCABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvcGVydHlSZXBvcnRIABJIChFwZXJtaXNzaW9uX3VwZGF0ZRgFIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXZlUGVybWlzc2lvblVwZGF0ZUgAEj4KDmNvbW1hbmRfcmVzdWx0GAYgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkNvbW1hbmRSZXN1bHRIABIrCgRwb25nGAggASgLMhsua3VzaW50YS5pb3Qud2VicnRjLnYxLlBvbmdIABJGChJoYW5kc2hha2VfcmVqZWN0ZWQYCSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuSGFuZHNoYWtlUmVqZWN0ZWRIABI0CgVlcnJvchgKIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JIABJCChBzdWJzY3JpcHRpb25fYWNrGAsgASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlN1YnNjcmlwdGlvbkFja0gAEjoKDGRldmljZV9hZGRlZBgMIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VBZGRlZEgAEj4KDmRldmljZV9yZW1vdmVkGA0gASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZVJlbW92ZWRIABJEChFtYW5hZ2VtZW50X3Jlc3VsdBgOIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5NYW5hZ2VtZW50UmVzdWx0SAASQAoNZGV2aWNlX2V2ZW50cxgQIAEoCzInLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2VFdmVudEJhdGNoSAASQAoPcGFpcmluZ19zdGFydGVkGBEgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLlBhaXJpbmdTdGFydGVkSAASQgoQcGFpcmluZ19maW5pc2hlZBgSIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QYWlyaW5nRmluaXNoZWRIABI6CgxsaW5rX2NoYW5nZWQYEyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlua0NoYW5nZWRIABJKChRjb25uZWN0b3JzX2Fubm91bmNlZBgUIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25uZWN0b3JzQW5ub3VuY2VkSAASSQoUcm9vbV9jbGltYXRlX2NoYW5nZWQYFSABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbUNsaW1hdGVDaGFuZ2VkSAASSQoUY2xpbWF0ZV9tb2RlX2NoYW5nZWQYFiABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ2xpbWF0ZU1vZGVDaGFuZ2VkSAASTQoWc2VydmljZV9zdGF0dXNfY2hhbmdlZBgXIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXJ2aWNlU3RhdHVzQ2hhbmdlZEgAEjwKDXNwYWNlX2ludml0ZXMYGCABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuU3BhY2VJbnZpdGVzSAASRgoScHJvbW90aW9uX3JlcXVlc3RzGBkgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLlByb21vdGlvblJlcXVlc3RzSABCCQoHcGF5bG9hZEoECA8QEEoECAcQCFIWYXR0cmlidXRlX3dyaXRlX3Jlc3VsdFIOcHJvcGVydHlfZXZlbnQigwUKCkFwcE1lc3NhZ2USEgoKbWVzc2FnZV9pZBgBIAEoCRIrCgdzZW50X2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI4CgloYW5kc2hha2UYAyABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXBwSGFuZHNoYWtlSAASNwoHY29tbWFuZBgEIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VDb21tYW5kSAASQgoMcmVhZF9yZXF1ZXN0GAUgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLlByb3BlcnR5UmVhZFJlcXVlc3RIABIrCgRwaW5nGAYgASgLMhsua3VzaW50YS5pb3Qud2VicnRjLnYxLlBpbmdIABI8CglzdWJzY3JpYmUYByABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuU3Vic2NyaWJlRGV2aWNlc0gAEkAKC3Vuc3Vic2NyaWJlGAggASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLlVuc3Vic2NyaWJlRGV2aWNlc0gAEj4KCm1hbmFnZW1lbnQYCSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuTWFuYWdlbWVudFJlcXVlc3RIABJHCg9hdHRyaWJ1dGVfd3JpdGUYCiABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXR0cmlidXRlV3JpdGVSZXF1ZXN0SAASPAoNc3RhcnRfcGFpcmluZxgLIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdGFydFBhaXJpbmdIAEIJCgdwYXlsb2FkKqICChBHYXRld2F5RXJyb3JDb2RlEiIKHkdBVEVXQVlfRVJST1JfQ09ERV9VTlNQRUNJRklFRBAAEiMKH0dBVEVXQVlfRVJST1JfQ09ERV9OT1RfRU5USVRMRUQQARImCiJHQVRFV0FZX0VSUk9SX0NPREVfSU5WQUxJRF9SRVFVRVNUEAISIgoeR0FURVdBWV9FUlJPUl9DT0RFX1VOQVZBSUxBQkxFEAMSHwobR0FURVdBWV9FUlJPUl9DT0RFX0lOVEVSTkFMEAQSLAooR0FURVdBWV9FUlJPUl9DT0RFX1NFU1NJT05fTElNSVRfUkVBQ0hFRBAFEioKJkdBVEVXQVlfRVJST1JfQ09ERV9GQUlMRURfUFJFQ09ORElUSU9OEAZCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_pairing, file_kusinta_iot_common_v1_types, file_kusinta_iot_device_v1_device_event, file_kusinta_iot_heating_v1_heating, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_webrtc_v1_command, file_kusinta_iot_webrtc_v1_device_state, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_management, file_kusinta_iot_webrtc_v1_members, file_kusinta_iot_webrtc_v1_permission_push]);
27
28
 
28
29
  /**
29
30
  * Describes the message kusinta.iot.webrtc.v1.Ping.
@@ -13,6 +13,7 @@ import type { LinkFunction, LinkMode, LinkSettings } from "../../link/v1/link_pb
13
13
  import type { ClimateModeKind, ClimateSummaryPeriod } from "../../climate/v1/climate_pb.js";
14
14
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
15
15
  import type { ServiceSignal } from "../../access/v1/acl_pb.js";
16
+ import type { ComfortLoad, ComfortWindow, FloorZone, HeatingCircuit, HeatingPlant } from "../../heating/v1/heating_pb.js";
16
17
  import type { ApproveJoinRequest, CreateInvite, DenyJoinRequest, ListSpaceInvites, MarkInviteEmailSent, ResendInvite, RevokeInvite } from "./invite_pb.js";
17
18
  import type { AnswerPromotion, ListGatewayMembers, ListPromotionRequests, RemoveFromGateway, RequestPromotion, SetAccessUntil, SetMemberRole, SetOwnerOrganisation } from "./members_pb.js";
18
19
 
@@ -1198,6 +1199,194 @@ export declare type ReconnectConnector = Message<"kusinta.iot.webrtc.v1.Reconnec
1198
1199
  */
1199
1200
  export declare const ReconnectConnectorSchema: GenMessage<ReconnectConnector>;
1200
1201
 
1202
+ /**
1203
+ * Lists the heating records (heating.v1) a caller may see under a space: unset
1204
+ * root_space_id lists every one the caller can reach. Answered with a HeatingLayout.
1205
+ *
1206
+ * @generated from message kusinta.iot.webrtc.v1.ListHeating
1207
+ */
1208
+ export declare type ListHeating = Message<"kusinta.iot.webrtc.v1.ListHeating"> & {
1209
+ /**
1210
+ * @generated from field: kusinta.iot.identity.v1.SpaceId root_space_id = 1;
1211
+ */
1212
+ rootSpaceId?: SpaceId | undefined;
1213
+ };
1214
+
1215
+ /**
1216
+ * Describes the message kusinta.iot.webrtc.v1.ListHeating.
1217
+ * Use `create(ListHeatingSchema)` to create a new message.
1218
+ */
1219
+ export declare const ListHeatingSchema: GenMessage<ListHeating>;
1220
+
1221
+ /**
1222
+ * Creates a plant (empty plant_id) or replaces one. Answered with the HeatingRecord as
1223
+ * stored. The puts of heating records refuse, with metadata "reason":
1224
+ *
1225
+ * INVALID_REQUEST
1226
+ * "ZONE_CONTROL_ROOM" a floor zone whose control room is unset or not one of its rooms.
1227
+ * "ZONE_ROOMS_ACROSS_HOMES" a floor zone with rooms in two homes, or in a home and outside
1228
+ * homes.
1229
+ * "ZONE_AREA_SHARES" a floor zone with a room listed twice, a share of 0, or shares
1230
+ * that do not sum to 1000.
1231
+ * "ROOM_OUTSIDE_PLANT" a zone room outside its plant's space; metadata "room_id" names it.
1232
+ * "ZONE_NOT_ON_FLOOR" a floor zone on a circuit that is not a floor circuit.
1233
+ * "SG_READY_HALF_BOUND" one SG Ready input bound without the other.
1234
+ * "CONTROL_EMPTY" a plant control that binds no input.
1235
+ * "NO_ENDPOINT" an attribute on the Matter branch with no endpoint_id.
1236
+ * "WINDOWS_IN_PUT" a comfort load put with windows (see SetComfortWindows).
1237
+ *
1238
+ * FAILED_PRECONDITION
1239
+ * "STALE_REVISION" the record changed since the revision the request names.
1240
+ * "CHILDREN_INVALID" a plant or circuit put that would leave a record under it
1241
+ * invalid: a circuit with zones no longer a floor circuit, or a
1242
+ * space or plant change leaving a zone's room outside its plant.
1243
+ * "OUTPUT_BOUND_TWICE" an output already bound in another role or record.
1244
+ * "OUTPUT_NOT_LEASED" an output whose write its producer does not state as leased.
1245
+ * "REST_STATE" an output whose lapse value, read through closed_value, does not
1246
+ * leave the contact where its role rests.
1247
+ *
1248
+ * A refusal about one binding names it in metadata "field", by its proto field name:
1249
+ * "sg_ready_block", "sg_ready_boost", "add_on_heater_block", "meter", "output",
1250
+ * "supply_probe", "return_probe".
1251
+ *
1252
+ * A device or room the caller cannot reach, a parent it may not use (see heating.v1) and an
1253
+ * id that does not exist are all refused as NOT_ENTITLED with the same metadata, so no answer
1254
+ * tells one from another. HAS_CHILDREN, CHILDREN_INVALID and OUTPUT_BOUND_TWICE may count
1255
+ * records the caller cannot see — a zone in a home under a circuit outside it. That one bit
1256
+ * is accepted, as it is for the members listing; their metadata never names or counts such
1257
+ * a record.
1258
+ *
1259
+ * @generated from message kusinta.iot.webrtc.v1.PutHeatingPlant
1260
+ */
1261
+ export declare type PutHeatingPlant = Message<"kusinta.iot.webrtc.v1.PutHeatingPlant"> & {
1262
+ /**
1263
+ * @generated from field: kusinta.iot.heating.v1.HeatingPlant plant = 1;
1264
+ */
1265
+ plant?: HeatingPlant | undefined;
1266
+ };
1267
+
1268
+ /**
1269
+ * Describes the message kusinta.iot.webrtc.v1.PutHeatingPlant.
1270
+ * Use `create(PutHeatingPlantSchema)` to create a new message.
1271
+ */
1272
+ export declare const PutHeatingPlantSchema: GenMessage<PutHeatingPlant>;
1273
+
1274
+ /**
1275
+ * Creates or replaces a circuit of a plant; as PutHeatingPlant.
1276
+ *
1277
+ * @generated from message kusinta.iot.webrtc.v1.PutHeatingCircuit
1278
+ */
1279
+ export declare type PutHeatingCircuit = Message<"kusinta.iot.webrtc.v1.PutHeatingCircuit"> & {
1280
+ /**
1281
+ * @generated from field: kusinta.iot.heating.v1.HeatingCircuit circuit = 1;
1282
+ */
1283
+ circuit?: HeatingCircuit | undefined;
1284
+ };
1285
+
1286
+ /**
1287
+ * Describes the message kusinta.iot.webrtc.v1.PutHeatingCircuit.
1288
+ * Use `create(PutHeatingCircuitSchema)` to create a new message.
1289
+ */
1290
+ export declare const PutHeatingCircuitSchema: GenMessage<PutHeatingCircuit>;
1291
+
1292
+ /**
1293
+ * Creates or replaces a floor zone of a floor circuit; as PutHeatingPlant.
1294
+ *
1295
+ * @generated from message kusinta.iot.webrtc.v1.PutFloorZone
1296
+ */
1297
+ export declare type PutFloorZone = Message<"kusinta.iot.webrtc.v1.PutFloorZone"> & {
1298
+ /**
1299
+ * @generated from field: kusinta.iot.heating.v1.FloorZone zone = 1;
1300
+ */
1301
+ zone?: FloorZone | undefined;
1302
+ };
1303
+
1304
+ /**
1305
+ * Describes the message kusinta.iot.webrtc.v1.PutFloorZone.
1306
+ * Use `create(PutFloorZoneSchema)` to create a new message.
1307
+ */
1308
+ export declare const PutFloorZoneSchema: GenMessage<PutFloorZone>;
1309
+
1310
+ /**
1311
+ * Creates or replaces a comfort load's room, name and output, keeping its windows; as
1312
+ * PutHeatingPlant.
1313
+ *
1314
+ * @generated from message kusinta.iot.webrtc.v1.PutComfortLoad
1315
+ */
1316
+ export declare type PutComfortLoad = Message<"kusinta.iot.webrtc.v1.PutComfortLoad"> & {
1317
+ /**
1318
+ * @generated from field: kusinta.iot.heating.v1.ComfortLoad comfort_load = 1;
1319
+ */
1320
+ comfortLoad?: ComfortLoad | undefined;
1321
+ };
1322
+
1323
+ /**
1324
+ * Describes the message kusinta.iot.webrtc.v1.PutComfortLoad.
1325
+ * Use `create(PutComfortLoadSchema)` to create a new message.
1326
+ */
1327
+ export declare const PutComfortLoadSchema: GenMessage<PutComfortLoad>;
1328
+
1329
+ /**
1330
+ * Removes a heating record by its id, naming the revision it removes. Refused as
1331
+ * FAILED_PRECONDITION with metadata "reason" "STALE_REVISION" when it changed since, and
1332
+ * "HAS_CHILDREN" while records lie under it — a plant's circuits, a circuit's zones — so
1333
+ * nothing is removed that the caller did not name. Its outputs are returned to rest at once
1334
+ * (see heating.v1). Acked.
1335
+ *
1336
+ * @generated from message kusinta.iot.webrtc.v1.RemoveHeatingRecord
1337
+ */
1338
+ export declare type RemoveHeatingRecord = Message<"kusinta.iot.webrtc.v1.RemoveHeatingRecord"> & {
1339
+ /**
1340
+ * @generated from field: string id = 1;
1341
+ */
1342
+ id: string;
1343
+
1344
+ /**
1345
+ * @generated from field: uint64 revision = 2;
1346
+ */
1347
+ revision: bigint;
1348
+ };
1349
+
1350
+ /**
1351
+ * Describes the message kusinta.iot.webrtc.v1.RemoveHeatingRecord.
1352
+ * Use `create(RemoveHeatingRecordSchema)` to create a new message.
1353
+ */
1354
+ export declare const RemoveHeatingRecordSchema: GenMessage<RemoveHeatingRecord>;
1355
+
1356
+ /**
1357
+ * Replaces a comfort load's windows: a resident's setting, apart from the binding and its
1358
+ * revision. Answered with the HeatingRecord as stored. Refused as FAILED_PRECONDITION
1359
+ * "STALE_REVISION" when windows_revision is set and the windows changed since, and as
1360
+ * INVALID_REQUEST "WINDOW" for a window that ComfortWindow does not allow or more than 16.
1361
+ * From an installer under a commissioning grant, NOT_ENTITLED.
1362
+ *
1363
+ * @generated from message kusinta.iot.webrtc.v1.SetComfortWindows
1364
+ */
1365
+ export declare type SetComfortWindows = Message<"kusinta.iot.webrtc.v1.SetComfortWindows"> & {
1366
+ /**
1367
+ * @generated from field: string comfort_load_id = 1;
1368
+ */
1369
+ comfortLoadId: string;
1370
+
1371
+ /**
1372
+ * @generated from field: repeated kusinta.iot.heating.v1.ComfortWindow windows = 2;
1373
+ */
1374
+ windows: ComfortWindow[];
1375
+
1376
+ /**
1377
+ * The ComfortLoad.windows_revision these windows replace. Unset: whatever is stored.
1378
+ *
1379
+ * @generated from field: optional uint64 windows_revision = 3;
1380
+ */
1381
+ windowsRevision?: bigint | undefined;
1382
+ };
1383
+
1384
+ /**
1385
+ * Describes the message kusinta.iot.webrtc.v1.SetComfortWindows.
1386
+ * Use `create(SetComfortWindowsSchema)` to create a new message.
1387
+ */
1388
+ export declare const SetComfortWindowsSchema: GenMessage<SetComfortWindows>;
1389
+
1201
1390
  /**
1202
1391
  * @generated from message kusinta.iot.webrtc.v1.ManagementRequest
1203
1392
  */
@@ -1442,6 +1631,50 @@ export declare type ManagementRequest = Message<"kusinta.iot.webrtc.v1.Managemen
1442
1631
  */
1443
1632
  value: ListPromotionRequests;
1444
1633
  case: "listPromotionRequests";
1634
+ } | {
1635
+ /**
1636
+ * Heating records; see heating.v1.
1637
+ *
1638
+ * @generated from field: kusinta.iot.webrtc.v1.ListHeating list_heating = 39;
1639
+ */
1640
+ value: ListHeating;
1641
+ case: "listHeating";
1642
+ } | {
1643
+ /**
1644
+ * @generated from field: kusinta.iot.webrtc.v1.PutHeatingPlant put_heating_plant = 40;
1645
+ */
1646
+ value: PutHeatingPlant;
1647
+ case: "putHeatingPlant";
1648
+ } | {
1649
+ /**
1650
+ * @generated from field: kusinta.iot.webrtc.v1.PutHeatingCircuit put_heating_circuit = 41;
1651
+ */
1652
+ value: PutHeatingCircuit;
1653
+ case: "putHeatingCircuit";
1654
+ } | {
1655
+ /**
1656
+ * @generated from field: kusinta.iot.webrtc.v1.PutFloorZone put_floor_zone = 42;
1657
+ */
1658
+ value: PutFloorZone;
1659
+ case: "putFloorZone";
1660
+ } | {
1661
+ /**
1662
+ * @generated from field: kusinta.iot.webrtc.v1.PutComfortLoad put_comfort_load = 43;
1663
+ */
1664
+ value: PutComfortLoad;
1665
+ case: "putComfortLoad";
1666
+ } | {
1667
+ /**
1668
+ * @generated from field: kusinta.iot.webrtc.v1.RemoveHeatingRecord remove_heating_record = 44;
1669
+ */
1670
+ value: RemoveHeatingRecord;
1671
+ case: "removeHeatingRecord";
1672
+ } | {
1673
+ /**
1674
+ * @generated from field: kusinta.iot.webrtc.v1.SetComfortWindows set_comfort_windows = 45;
1675
+ */
1676
+ value: SetComfortWindows;
1677
+ case: "setComfortWindows";
1445
1678
  } | { case: undefined; value?: undefined };
1446
1679
  };
1447
1680
 
@@ -8,6 +8,7 @@ import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
8
8
  import { file_kusinta_iot_access_v1_roles } from "../../access/v1/roles_pb.js";
9
9
  import { file_kusinta_iot_climate_v1_climate } from "../../climate/v1/climate_pb.js";
10
10
  import { file_kusinta_iot_common_v1_types } from "../../common/v1/types_pb.js";
11
+ import { file_kusinta_iot_heating_v1_heating } from "../../heating/v1/heating_pb.js";
11
12
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
12
13
  import { file_kusinta_iot_link_v1_link } from "../../link/v1/link_pb.js";
13
14
  import { file_kusinta_iot_space_v1_space } from "../../space/v1/space_pb.js";
@@ -19,7 +20,7 @@ import { file_kusinta_iot_webrtc_v1_members } from "./members_pb.js";
19
20
  * Describes the file kusinta/iot/webrtc/v1/management.proto.
20
21
  */
21
22
  export const file_kusinta_iot_webrtc_v1_management = /*@__PURE__*/
22
- fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxItYBCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSFgoJdGltZV96b25lGAYgASgJSACIAQFCDAoKX3RpbWVfem9uZSL1AgoLVXBkYXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjkKCnNwYWNlX3R5cGUYAiABKA4yIC5rdXNpbnRhLmlvdC5jb21tb24udjEuU3BhY2VUeXBlSAGIAQESEQoEbmFtZRgDIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAOIAQESEgoFZmxvb3IYBSABKAVIBIgBARI7Cg9wYXJlbnRfc3BhY2VfaWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkSAASEAoGZGV0YWNoGAcgASgISAASFgoJdGltZV96b25lGAggASgJSAWIAQFCDwoNcGFyZW50X2NoYW5nZUINCgtfc3BhY2VfdHlwZUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX2Zsb29yQgwKCl90aW1lX3pvbmUiUgoLRGVsZXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg8KB2Nhc2NhZGUYAiABKAgivAEKEUFzc2lnblVzZXJUb1NwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjsKCHJlbGF0aW9uGAQgASgOMikua3VzaW50YS5pb3QuYWNjZXNzLnYxLk1lbWJlcnNoaXBSZWxhdGlvbkoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCKjAQoPUHJvdmlzaW9uRGV2aWNlEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEkUKB2xvcmF3YW4YAiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IubG9yYXdhbi52MS5Mb3Jhd2FuUHJvdmlzaW9uaW5nSABCDQoLY3JlZGVudGlhbHMiRQoKTGlzdFNwYWNlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCI4CglTcGFjZVRyZWUSKwoGc3BhY2VzGAEgAygLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2UiDwoNTWFuYWdlbWVudEFjayKRAgoQQ3JlYXRlRGV2aWNlTGluaxIxCgZzZW5kZXIYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAMgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24SKwoEbW9kZRgEIAEoDjIdLmt1c2ludGEuaW90LmxpbmsudjEuTGlua01vZGUSMwoIc2V0dGluZ3MYBSABKAsyIS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtTZXR0aW5ncyIjChBSZW1vdmVEZXZpY2VMaW5rEg8KB2xpbmtfaWQYASABKAkiWAoQVXBkYXRlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJEjMKCHNldHRpbmdzGAIgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiRwoPTGlzdERldmljZUxpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkInwKDVNldFJvb21UYXJnZXQSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgCIAEoEUgAiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzIkQKC1Jvb21TZW5zb3JzEjUKCnNlbnNvcl9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ0CgpSb29tTGltaXRzEh0KEG1pbl9jZW50aWRlZ3JlZXMYASABKBFIAIgBARIdChBtYXhfY2VudGlkZWdyZWVzGAIgASgRSAGIAQFCEwoRX21pbl9jZW50aWRlZ3JlZXNCEwoRX21heF9jZW50aWRlZ3JlZXMi7QEKFENvbmZpZ3VyZVJvb21DbGltYXRlEjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjEKBmxpbWl0cxgCIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tTGltaXRzEjMKB3NlbnNvcnMYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbVNlbnNvcnMSIQoUbG9ja19kZXZpY2VfY29udHJvbHMYBCABKAhIAIgBAUIXChVfbG9ja19kZXZpY2VfY29udHJvbHMikwIKDlNldENsaW1hdGVNb2RlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI1CgRraW5kGAIgASgOMicua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlTW9kZUtpbmQSIQoUc2V0YmFja19jZW50aWRlZ3JlZXMYAyABKBFIAIgBARItCglzdGFydHNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlcyJLChBMaXN0Um9vbUNsaW1hdGVzEjcKDXJvb3Rfc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIp8BCg5HZXRSb29tSGlzdG9yeRIxCgdyb29tX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBItCglmcm9tX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIpgCChFQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoPc2VydmljZV9wYXJ0aWVzGAUgAygLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VQYXJ0eRJMChZjbGltYXRlX3N1bW1hcnlfcGVyaW9kGAQgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBIfChdvd25lcl9vcmdhbmlzYXRpb25fbmFtZRgGIAEoCRIWCg5uYW1lc193aXRoaGVsZBgHIAEoCEoECAIQA0oECAMQBCJ/CgxTZXJ2aWNlUGFydHkSKQoEcm9sZRgBIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjUKB3NpZ25hbHMYAiADKA4yJC5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuU2VydmljZVNpZ25hbBINCgVuYW1lcxgDIAMoCSJKChRHZXRQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi7gEKGkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5EjYKDGFwYXJ0bWVudF9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoGcGVyaW9kGAIgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBItCglmcm9tX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKElJlY29ubmVjdENvbm5lY3RvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZCKTFQoRTWFuYWdlbWVudFJlcXVlc3QSOgoMY3JlYXRlX3NwYWNlGAEgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZVNwYWNlSAASOgoMdXBkYXRlX3NwYWNlGAIgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLlVwZGF0ZVNwYWNlSAASOgoMZGVsZXRlX3NwYWNlGAMgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkRlbGV0ZVNwYWNlSAASSAoUYXNzaWduX3VzZXJfdG9fc3BhY2UYBCABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXNzaWduVXNlclRvU3BhY2VIABJMChZyZW1vdmVfdXNlcl9mcm9tX3NwYWNlGAUgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZVVzZXJGcm9tU3BhY2VIABJKChVwbGFjZV9kZXZpY2VfaW5fc3BhY2UYBiABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGxhY2VEZXZpY2VJblNwYWNlSAASUAoYcmVtb3ZlX2RldmljZV9mcm9tX3NwYWNlGAcgASgLMiwua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZURldmljZUZyb21TcGFjZUgAEjoKDGNsYWltX2RldmljZRgIIAEoCzIiLmt1c2ludGEuaW90LndlYnJ0Yy52MS5DbGFpbURldmljZUgAEj4KDnJlbGVhc2VfZGV2aWNlGAkgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbGVhc2VEZXZpY2VIABI4CgtsaXN0X3NwYWNlcxgKIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0U3BhY2VzSAASRQoSY3JlYXRlX2RldmljZV9saW5rGAsgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZURldmljZUxpbmtIABJFChJyZW1vdmVfZGV2aWNlX2xpbmsYDCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRGV2aWNlTGlua0gAEkMKEWxpc3RfZGV2aWNlX2xpbmtzGA0gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3REZXZpY2VMaW5rc0gAEkUKEnVwZGF0ZV9kZXZpY2VfbGluaxgOIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5VcGRhdGVEZXZpY2VMaW5rSAASQgoQcHJvdmlzaW9uX2RldmljZRgPIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm92aXNpb25EZXZpY2VIABI/Cg9zZXRfcm9vbV90YXJnZXQYECABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0Um9vbVRhcmdldEgAEk0KFmNvbmZpZ3VyZV9yb29tX2NsaW1hdGUYESABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ29uZmlndXJlUm9vbUNsaW1hdGVIABJBChBzZXRfY2xpbWF0ZV9tb2RlGBIgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldENsaW1hdGVNb2RlSAASRQoSbGlzdF9yb29tX2NsaW1hdGVzGBMgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RSb29tQ2xpbWF0ZXNIABJBChBnZXRfcm9vbV9oaXN0b3J5GBQgASgLMiUua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldFJvb21IaXN0b3J5SAASTQoWZ2V0X3ByaXZhY3lfZGlzY2xvc3VyZRgVIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HZXRQcml2YWN5RGlzY2xvc3VyZUgAEloKHWdldF9hcGFydG1lbnRfY2xpbWF0ZV9zdW1tYXJ5GBYgASgLMjEua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5SAASSAoTcmVjb25uZWN0X2Nvbm5lY3RvchgXIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZWNvbm5lY3RDb25uZWN0b3JIABI8Cg1jcmVhdGVfaW52aXRlGBggASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkNyZWF0ZUludml0ZUgAEjwKDXJlc2VuZF9pbnZpdGUYGSABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVzZW5kSW52aXRlSAASPAoNcmV2b2tlX2ludml0ZRgaIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZXZva2VJbnZpdGVIABJMChZtYXJrX2ludml0ZV9lbWFpbF9zZW50GBsgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLk1hcmtJbnZpdGVFbWFpbFNlbnRIABJFChJsaXN0X3NwYWNlX2ludml0ZXMYHCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFNwYWNlSW52aXRlc0gAEkkKFGFwcHJvdmVfam9pbl9yZXF1ZXN0GB0gASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLkFwcHJvdmVKb2luUmVxdWVzdEgAEkMKEWRlbnlfam9pbl9yZXF1ZXN0GB4gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkRlbnlKb2luUmVxdWVzdEgAEkkKFGxpc3RfZ2F0ZXdheV9tZW1iZXJzGB8gASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RHYXRld2F5TWVtYmVyc0gAEj8KD3NldF9tZW1iZXJfcm9sZRggIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRNZW1iZXJSb2xlSAASRwoTcmVtb3ZlX2Zyb21fZ2F0ZXdheRghIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVGcm9tR2F0ZXdheUgAEkEKEHNldF9hY2Nlc3NfdW50aWwYIiABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0QWNjZXNzVW50aWxIABJRChZzZXRfb3duZXJfb3JnYW5pc2F0aW9uGCMgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldE93bmVyT3JnYW5pc2F0aW9uQgIYAUgAEkQKEXJlcXVlc3RfcHJvbW90aW9uGCQgASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlcXVlc3RQcm9tb3Rpb25IABJCChBhbnN3ZXJfcHJvbW90aW9uGCUgASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLkFuc3dlclByb21vdGlvbkgAEk8KF2xpc3RfcHJvbW90aW9uX3JlcXVlc3RzGCYgASgLMiwua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RQcm9tb3Rpb25SZXF1ZXN0c0gAQgkKB3JlcXVlc3RCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_access_v1_roles, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_types, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_members]);
23
+ fileDesc("CiZrdXNpbnRhL2lvdC93ZWJydGMvdjEvbWFuYWdlbWVudC5wcm90bxIVa3VzaW50YS5pb3Qud2VicnRjLnYxItYBCgtDcmVhdGVTcGFjZRI0CgpzcGFjZV90eXBlGAEgASgOMiAua3VzaW50YS5pb3QuY29tbW9uLnYxLlNwYWNlVHlwZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg0KBWZsb29yGAQgASgFEjkKD3BhcmVudF9zcGFjZV9pZBgFIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSFgoJdGltZV96b25lGAYgASgJSACIAQFCDAoKX3RpbWVfem9uZSL1AgoLVXBkYXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjkKCnNwYWNlX3R5cGUYAiABKA4yIC5rdXNpbnRhLmlvdC5jb21tb24udjEuU3BhY2VUeXBlSAGIAQESEQoEbmFtZRgDIAEoCUgCiAEBEhgKC2Rlc2NyaXB0aW9uGAQgASgJSAOIAQESEgoFZmxvb3IYBSABKAVIBIgBARI7Cg9wYXJlbnRfc3BhY2VfaWQYBiABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkSAASEAoGZGV0YWNoGAcgASgISAASFgoJdGltZV96b25lGAggASgJSAWIAQFCDwoNcGFyZW50X2NoYW5nZUINCgtfc3BhY2VfdHlwZUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CCAoGX2Zsb29yQgwKCl90aW1lX3pvbmUiUgoLRGVsZXRlU3BhY2USMgoIc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEg8KB2Nhc2NhZGUYAiABKAgivAEKEUFzc2lnblVzZXJUb1NwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkEjsKCHJlbGF0aW9uGAQgASgOMikua3VzaW50YS5pb3QuYWNjZXNzLnYxLk1lbWJlcnNoaXBSZWxhdGlvbkoECAMQBCJ7ChNSZW1vdmVVc2VyRnJvbVNwYWNlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBIwCgd1c2VyX2lkGAIgASgLMh8ua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuVXNlcklkIn4KElBsYWNlRGV2aWNlSW5TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQigQEKFVJlbW92ZURldmljZUZyb21TcGFjZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIyCghzcGFjZV9pZBgCIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi2AEKC0NsYWltRGV2aWNlEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEj0KCW93bmVyc2hpcBgCIAEoDjIqLmt1c2ludGEuaW90LmNvbW1vbi52MS5EZXZpY2VPd25lcnNoaXBUeXBlEjoKEGluaXRpYWxfc3BhY2VfaWQYAyABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEhgKEHBvc3Nlc3Npb25fcHJvb2YYBCABKAkiRQoNUmVsZWFzZURldmljZRI0CglkZXZpY2VfaWQYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCKjAQoPUHJvdmlzaW9uRGV2aWNlEjoKDGNvbm5lY3Rvcl9pZBgBIAEoCzIkLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkNvbm5lY3RvcklkEkUKB2xvcmF3YW4YAiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IubG9yYXdhbi52MS5Mb3Jhd2FuUHJvdmlzaW9uaW5nSABCDQoLY3JlZGVudGlhbHMiRQoKTGlzdFNwYWNlcxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCI4CglTcGFjZVRyZWUSKwoGc3BhY2VzGAEgAygLMhsua3VzaW50YS5pb3Quc3BhY2UudjEuU3BhY2UiDwoNTWFuYWdlbWVudEFjayKRAgoQQ3JlYXRlRGV2aWNlTGluaxIxCgZzZW5kZXIYASABKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZBIzCghyZWNlaXZlchgCIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjMKCGZ1bmN0aW9uGAMgASgOMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rRnVuY3Rpb24SKwoEbW9kZRgEIAEoDjIdLmt1c2ludGEuaW90LmxpbmsudjEuTGlua01vZGUSMwoIc2V0dGluZ3MYBSABKAsyIS5rdXNpbnRhLmlvdC5saW5rLnYxLkxpbmtTZXR0aW5ncyIjChBSZW1vdmVEZXZpY2VMaW5rEg8KB2xpbmtfaWQYASABKAkiWAoQVXBkYXRlRGV2aWNlTGluaxIPCgdsaW5rX2lkGAEgASgJEjMKCHNldHRpbmdzGAIgASgLMiEua3VzaW50YS5pb3QubGluay52MS5MaW5rU2V0dGluZ3MiRwoPTGlzdERldmljZUxpbmtzEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkInwKDVNldFJvb21UYXJnZXQSMQoHcm9vbV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSIAoTdGFyZ2V0X2NlbnRpZGVncmVlcxgCIAEoEUgAiAEBQhYKFF90YXJnZXRfY2VudGlkZWdyZWVzIkQKC1Jvb21TZW5zb3JzEjUKCnNlbnNvcl9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ0CgpSb29tTGltaXRzEh0KEG1pbl9jZW50aWRlZ3JlZXMYASABKBFIAIgBARIdChBtYXhfY2VudGlkZWdyZWVzGAIgASgRSAGIAQFCEwoRX21pbl9jZW50aWRlZ3JlZXNCEwoRX21heF9jZW50aWRlZ3JlZXMi7QEKFENvbmZpZ3VyZVJvb21DbGltYXRlEjEKB3Jvb21faWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkEjEKBmxpbWl0cxgCIAEoCzIhLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Sb29tTGltaXRzEjMKB3NlbnNvcnMYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUm9vbVNlbnNvcnMSIQoUbG9ja19kZXZpY2VfY29udHJvbHMYBCABKAhIAIgBAUIXChVfbG9ja19kZXZpY2VfY29udHJvbHMikwIKDlNldENsaW1hdGVNb2RlEjIKCHNwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBI1CgRraW5kGAIgASgOMicua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlTW9kZUtpbmQSIQoUc2V0YmFja19jZW50aWRlZ3JlZXMYAyABKBFIAIgBARItCglzdGFydHNfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB2VuZHNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9zZXRiYWNrX2NlbnRpZGVncmVlcyJLChBMaXN0Um9vbUNsaW1hdGVzEjcKDXJvb3Rfc3BhY2VfaWQYASABKAsyIC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5TcGFjZUlkIp8BCg5HZXRSb29tSGlzdG9yeRIxCgdyb29tX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZBItCglmcm9tX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIpgCChFQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoPc2VydmljZV9wYXJ0aWVzGAUgAygLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlNlcnZpY2VQYXJ0eRJMChZjbGltYXRlX3N1bW1hcnlfcGVyaW9kGAQgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBIfChdvd25lcl9vcmdhbmlzYXRpb25fbmFtZRgGIAEoCRIWCg5uYW1lc193aXRoaGVsZBgHIAEoCEoECAIQA0oECAMQBCJ/CgxTZXJ2aWNlUGFydHkSKQoEcm9sZRgBIAEoDjIbLmt1c2ludGEuaW90LmFjY2Vzcy52MS5Sb2xlEjUKB3NpZ25hbHMYAiADKA4yJC5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuU2VydmljZVNpZ25hbBINCgVuYW1lcxgDIAMoCSJKChRHZXRQcml2YWN5RGlzY2xvc3VyZRIyCghzcGFjZV9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQi7gEKGkdldEFwYXJ0bWVudENsaW1hdGVTdW1tYXJ5EjYKDGFwYXJ0bWVudF9pZBgBIAEoCzIgLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLlNwYWNlSWQSPAoGcGVyaW9kGAIgASgOMiwua3VzaW50YS5pb3QuY2xpbWF0ZS52MS5DbGltYXRlU3VtbWFyeVBlcmlvZBItCglmcm9tX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEisKB3RvX3RpbWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIlAKElJlY29ubmVjdENvbm5lY3RvchI6Cgxjb25uZWN0b3JfaWQYASABKAsyJC5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5Db25uZWN0b3JJZCJGCgtMaXN0SGVhdGluZxI3Cg1yb290X3NwYWNlX2lkGAEgASgLMiAua3VzaW50YS5pb3QuaWRlbnRpdHkudjEuU3BhY2VJZCJGCg9QdXRIZWF0aW5nUGxhbnQSMwoFcGxhbnQYASABKAsyJC5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkhlYXRpbmdQbGFudCJMChFQdXRIZWF0aW5nQ2lyY3VpdBI3CgdjaXJjdWl0GAEgASgLMiYua3VzaW50YS5pb3QuaGVhdGluZy52MS5IZWF0aW5nQ2lyY3VpdCI/CgxQdXRGbG9vclpvbmUSLwoEem9uZRgBIAEoCzIhLmt1c2ludGEuaW90LmhlYXRpbmcudjEuRmxvb3Jab25lIksKDlB1dENvbWZvcnRMb2FkEjkKDGNvbWZvcnRfbG9hZBgBIAEoCzIjLmt1c2ludGEuaW90LmhlYXRpbmcudjEuQ29tZm9ydExvYWQiMwoTUmVtb3ZlSGVhdGluZ1JlY29yZBIKCgJpZBgBIAEoCRIQCghyZXZpc2lvbhgCIAEoBCKYAQoRU2V0Q29tZm9ydFdpbmRvd3MSFwoPY29tZm9ydF9sb2FkX2lkGAEgASgJEjYKB3dpbmRvd3MYAiADKAsyJS5rdXNpbnRhLmlvdC5oZWF0aW5nLnYxLkNvbWZvcnRXaW5kb3cSHQoQd2luZG93c19yZXZpc2lvbhgDIAEoBEgAiAEBQhMKEV93aW5kb3dzX3JldmlzaW9uIvUYChFNYW5hZ2VtZW50UmVxdWVzdBI6CgxjcmVhdGVfc3BhY2UYASABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlU3BhY2VIABI6Cgx1cGRhdGVfc3BhY2UYAiABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuVXBkYXRlU3BhY2VIABI6CgxkZWxldGVfc3BhY2UYAyABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGVsZXRlU3BhY2VIABJIChRhc3NpZ25fdXNlcl90b19zcGFjZRgEIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Bc3NpZ25Vc2VyVG9TcGFjZUgAEkwKFnJlbW92ZV91c2VyX2Zyb21fc3BhY2UYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlVXNlckZyb21TcGFjZUgAEkoKFXBsYWNlX2RldmljZV9pbl9zcGFjZRgGIAEoCzIpLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QbGFjZURldmljZUluU3BhY2VIABJQChhyZW1vdmVfZGV2aWNlX2Zyb21fc3BhY2UYByABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlRGV2aWNlRnJvbVNwYWNlSAASOgoMY2xhaW1fZGV2aWNlGAggASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkNsYWltRGV2aWNlSAASPgoOcmVsZWFzZV9kZXZpY2UYCSABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVsZWFzZURldmljZUgAEjgKC2xpc3Rfc3BhY2VzGAogASgLMiEua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RTcGFjZXNIABJFChJjcmVhdGVfZGV2aWNlX2xpbmsYCyABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlRGV2aWNlTGlua0gAEkUKEnJlbW92ZV9kZXZpY2VfbGluaxgMIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZW1vdmVEZXZpY2VMaW5rSAASQwoRbGlzdF9kZXZpY2VfbGlua3MYDSABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdERldmljZUxpbmtzSAASRQoSdXBkYXRlX2RldmljZV9saW5rGA4gASgLMicua3VzaW50YS5pb3Qud2VicnRjLnYxLlVwZGF0ZURldmljZUxpbmtIABJCChBwcm92aXNpb25fZGV2aWNlGA8gASgLMiYua3VzaW50YS5pb3Qud2VicnRjLnYxLlByb3Zpc2lvbkRldmljZUgAEj8KD3NldF9yb29tX3RhcmdldBgQIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRSb29tVGFyZ2V0SAASTQoWY29uZmlndXJlX3Jvb21fY2xpbWF0ZRgRIAEoCzIrLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db25maWd1cmVSb29tQ2xpbWF0ZUgAEkEKEHNldF9jbGltYXRlX21vZGUYEiABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0Q2xpbWF0ZU1vZGVIABJFChJsaXN0X3Jvb21fY2xpbWF0ZXMYEyABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFJvb21DbGltYXRlc0gAEkEKEGdldF9yb29tX2hpc3RvcnkYFCABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2V0Um9vbUhpc3RvcnlIABJNChZnZXRfcHJpdmFjeV9kaXNjbG9zdXJlGBUgASgLMisua3VzaW50YS5pb3Qud2VicnRjLnYxLkdldFByaXZhY3lEaXNjbG9zdXJlSAASWgodZ2V0X2FwYXJ0bWVudF9jbGltYXRlX3N1bW1hcnkYFiABKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2V0QXBhcnRtZW50Q2xpbWF0ZVN1bW1hcnlIABJIChNyZWNvbm5lY3RfY29ubmVjdG9yGBcgASgLMikua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlY29ubmVjdENvbm5lY3RvckgAEjwKDWNyZWF0ZV9pbnZpdGUYGCABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuQ3JlYXRlSW52aXRlSAASPAoNcmVzZW5kX2ludml0ZRgZIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5SZXNlbmRJbnZpdGVIABI8Cg1yZXZva2VfaW52aXRlGBogASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlJldm9rZUludml0ZUgAEkwKFm1hcmtfaW52aXRlX2VtYWlsX3NlbnQYGyABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuTWFya0ludml0ZUVtYWlsU2VudEgAEkUKEmxpc3Rfc3BhY2VfaW52aXRlcxgcIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5MaXN0U3BhY2VJbnZpdGVzSAASSQoUYXBwcm92ZV9qb2luX3JlcXVlc3QYHSABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuQXBwcm92ZUpvaW5SZXF1ZXN0SAASQwoRZGVueV9qb2luX3JlcXVlc3QYHiABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGVueUpvaW5SZXF1ZXN0SAASSQoUbGlzdF9nYXRld2F5X21lbWJlcnMYHyABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdEdhdGV3YXlNZW1iZXJzSAASPwoPc2V0X21lbWJlcl9yb2xlGCAgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLlNldE1lbWJlclJvbGVIABJHChNyZW1vdmVfZnJvbV9nYXRld2F5GCEgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLlJlbW92ZUZyb21HYXRld2F5SAASQQoQc2V0X2FjY2Vzc191bnRpbBgiIAEoCzIlLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TZXRBY2Nlc3NVbnRpbEgAElEKFnNldF9vd25lcl9vcmdhbmlzYXRpb24YIyABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0T3duZXJPcmdhbmlzYXRpb25CAhgBSAASRAoRcmVxdWVzdF9wcm9tb3Rpb24YJCABKAsyJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVxdWVzdFByb21vdGlvbkgAEkIKEGFuc3dlcl9wcm9tb3Rpb24YJSABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuQW5zd2VyUHJvbW90aW9uSAASTwoXbGlzdF9wcm9tb3Rpb25fcmVxdWVzdHMYJiABKAsyLC5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGlzdFByb21vdGlvblJlcXVlc3RzSAASOgoMbGlzdF9oZWF0aW5nGCcgASgLMiIua3VzaW50YS5pb3Qud2VicnRjLnYxLkxpc3RIZWF0aW5nSAASQwoRcHV0X2hlYXRpbmdfcGxhbnQYKCABKAsyJi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHV0SGVhdGluZ1BsYW50SAASRwoTcHV0X2hlYXRpbmdfY2lyY3VpdBgpIAEoCzIoLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QdXRIZWF0aW5nQ2lyY3VpdEgAEj0KDnB1dF9mbG9vcl96b25lGCogASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLlB1dEZsb29yWm9uZUgAEkEKEHB1dF9jb21mb3J0X2xvYWQYKyABKAsyJS5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHV0Q29tZm9ydExvYWRIABJLChVyZW1vdmVfaGVhdGluZ19yZWNvcmQYLCABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVtb3ZlSGVhdGluZ1JlY29yZEgAEkcKE3NldF9jb21mb3J0X3dpbmRvd3MYLSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuU2V0Q29tZm9ydFdpbmRvd3NIAEIJCgdyZXF1ZXN0QgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_access_v1_acl, file_kusinta_iot_access_v1_roles, file_kusinta_iot_climate_v1_climate, file_kusinta_iot_common_v1_types, file_kusinta_iot_heating_v1_heating, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_link_v1_link, file_kusinta_iot_space_v1_space, file_kusinta_iot_vendor_lorawan_v1_lorawan, file_kusinta_iot_webrtc_v1_invite, file_kusinta_iot_webrtc_v1_members]);
23
24
 
24
25
  /**
25
26
  * Describes the message kusinta.iot.webrtc.v1.CreateSpace.
@@ -224,10 +225,59 @@ export const GetApartmentClimateSummarySchema = /*@__PURE__*/
224
225
  export const ReconnectConnectorSchema = /*@__PURE__*/
225
226
  messageDesc(file_kusinta_iot_webrtc_v1_management, 28);
226
227
 
228
+ /**
229
+ * Describes the message kusinta.iot.webrtc.v1.ListHeating.
230
+ * Use `create(ListHeatingSchema)` to create a new message.
231
+ */
232
+ export const ListHeatingSchema = /*@__PURE__*/
233
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 29);
234
+
235
+ /**
236
+ * Describes the message kusinta.iot.webrtc.v1.PutHeatingPlant.
237
+ * Use `create(PutHeatingPlantSchema)` to create a new message.
238
+ */
239
+ export const PutHeatingPlantSchema = /*@__PURE__*/
240
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 30);
241
+
242
+ /**
243
+ * Describes the message kusinta.iot.webrtc.v1.PutHeatingCircuit.
244
+ * Use `create(PutHeatingCircuitSchema)` to create a new message.
245
+ */
246
+ export const PutHeatingCircuitSchema = /*@__PURE__*/
247
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 31);
248
+
249
+ /**
250
+ * Describes the message kusinta.iot.webrtc.v1.PutFloorZone.
251
+ * Use `create(PutFloorZoneSchema)` to create a new message.
252
+ */
253
+ export const PutFloorZoneSchema = /*@__PURE__*/
254
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 32);
255
+
256
+ /**
257
+ * Describes the message kusinta.iot.webrtc.v1.PutComfortLoad.
258
+ * Use `create(PutComfortLoadSchema)` to create a new message.
259
+ */
260
+ export const PutComfortLoadSchema = /*@__PURE__*/
261
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 33);
262
+
263
+ /**
264
+ * Describes the message kusinta.iot.webrtc.v1.RemoveHeatingRecord.
265
+ * Use `create(RemoveHeatingRecordSchema)` to create a new message.
266
+ */
267
+ export const RemoveHeatingRecordSchema = /*@__PURE__*/
268
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 34);
269
+
270
+ /**
271
+ * Describes the message kusinta.iot.webrtc.v1.SetComfortWindows.
272
+ * Use `create(SetComfortWindowsSchema)` to create a new message.
273
+ */
274
+ export const SetComfortWindowsSchema = /*@__PURE__*/
275
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 35);
276
+
227
277
  /**
228
278
  * Describes the message kusinta.iot.webrtc.v1.ManagementRequest.
229
279
  * Use `create(ManagementRequestSchema)` to create a new message.
230
280
  */
231
281
  export const ManagementRequestSchema = /*@__PURE__*/
232
- messageDesc(file_kusinta_iot_webrtc_v1_management, 29);
282
+ messageDesc(file_kusinta_iot_webrtc_v1_management, 36);
233
283